1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package dexfuzz.rawdex;
18
19public enum Opcode {
20  NOP,
21  MOVE,
22  MOVE_FROM16,
23  MOVE_16,
24  MOVE_WIDE,
25  MOVE_WIDE_FROM16,
26  MOVE_WIDE_16,
27  MOVE_OBJECT,
28  MOVE_OBJECT_FROM16,
29  MOVE_OBJECT_16,
30  MOVE_RESULT,
31  MOVE_RESULT_WIDE,
32  MOVE_RESULT_OBJECT,
33  MOVE_EXCEPTION,
34  RETURN_VOID,
35  RETURN,
36  RETURN_WIDE,
37  RETURN_OBJECT,
38  CONST_4,
39  CONST_16,
40  CONST,
41  CONST_HIGH16,
42  CONST_WIDE_16,
43  CONST_WIDE_32,
44  CONST_WIDE,
45  CONST_WIDE_HIGH16,
46  CONST_STRING,
47  CONST_STRING_JUMBO,
48  CONST_CLASS,
49  MONITOR_ENTER,
50  MONITOR_EXIT,
51  CHECK_CAST,
52  INSTANCE_OF,
53  ARRAY_LENGTH,
54  NEW_INSTANCE,
55  NEW_ARRAY,
56  FILLED_NEW_ARRAY,
57  FILLED_NEW_ARRAY_RANGE,
58  FILL_ARRAY_DATA,
59  THROW,
60  GOTO,
61  GOTO_16,
62  GOTO_32,
63  PACKED_SWITCH,
64  SPARSE_SWITCH,
65  CMPL_FLOAT,
66  CMPG_FLOAT,
67  CMPL_DOUBLE,
68  CMPG_DOUBLE,
69  CMP_LONG,
70  IF_EQ,
71  IF_NE,
72  IF_LT,
73  IF_GE,
74  IF_GT,
75  IF_LE,
76  IF_EQZ,
77  IF_NEZ,
78  IF_LTZ,
79  IF_GEZ,
80  IF_GTZ,
81  IF_LEZ,
82  UNUSED_3E,
83  UNUSED_3F,
84  UNUSED_40,
85  UNUSED_41,
86  UNUSED_42,
87  UNUSED_43,
88  AGET,
89  AGET_WIDE,
90  AGET_OBJECT,
91  AGET_BOOLEAN,
92  AGET_BYTE,
93  AGET_CHAR,
94  AGET_SHORT,
95  APUT,
96  APUT_WIDE,
97  APUT_OBJECT,
98  APUT_BOOLEAN,
99  APUT_BYTE,
100  APUT_CHAR,
101  APUT_SHORT,
102  IGET,
103  IGET_WIDE,
104  IGET_OBJECT,
105  IGET_BOOLEAN,
106  IGET_BYTE,
107  IGET_CHAR,
108  IGET_SHORT,
109  IPUT,
110  IPUT_WIDE,
111  IPUT_OBJECT,
112  IPUT_BOOLEAN,
113  IPUT_BYTE,
114  IPUT_CHAR,
115  IPUT_SHORT,
116  SGET,
117  SGET_WIDE,
118  SGET_OBJECT,
119  SGET_BOOLEAN,
120  SGET_BYTE,
121  SGET_CHAR,
122  SGET_SHORT,
123  SPUT,
124  SPUT_WIDE,
125  SPUT_OBJECT,
126  SPUT_BOOLEAN,
127  SPUT_BYTE,
128  SPUT_CHAR,
129  SPUT_SHORT,
130  INVOKE_VIRTUAL,
131  INVOKE_SUPER,
132  INVOKE_DIRECT,
133  INVOKE_STATIC,
134  INVOKE_INTERFACE,
135  RETURN_VOID_NO_BARRIER,
136  INVOKE_VIRTUAL_RANGE,
137  INVOKE_SUPER_RANGE,
138  INVOKE_DIRECT_RANGE,
139  INVOKE_STATIC_RANGE,
140  INVOKE_INTERFACE_RANGE,
141  UNUSED_79,
142  UNUSED_7A,
143  NEG_INT,
144  NOT_INT,
145  NEG_LONG,
146  NOT_LONG,
147  NEG_FLOAT,
148  NEG_DOUBLE,
149  INT_TO_LONG,
150  INT_TO_FLOAT,
151  INT_TO_DOUBLE,
152  LONG_TO_INT,
153  LONG_TO_FLOAT,
154  LONG_TO_DOUBLE,
155  FLOAT_TO_INT,
156  FLOAT_TO_LONG,
157  FLOAT_TO_DOUBLE,
158  DOUBLE_TO_INT,
159  DOUBLE_TO_LONG,
160  DOUBLE_TO_FLOAT,
161  INT_TO_BYTE,
162  INT_TO_CHAR,
163  INT_TO_SHORT,
164  ADD_INT,
165  SUB_INT,
166  MUL_INT,
167  DIV_INT,
168  REM_INT,
169  AND_INT,
170  OR_INT,
171  XOR_INT,
172  SHL_INT,
173  SHR_INT,
174  USHR_INT,
175  ADD_LONG,
176  SUB_LONG,
177  MUL_LONG,
178  DIV_LONG,
179  REM_LONG,
180  AND_LONG,
181  OR_LONG,
182  XOR_LONG,
183  SHL_LONG,
184  SHR_LONG,
185  USHR_LONG,
186  ADD_FLOAT,
187  SUB_FLOAT,
188  MUL_FLOAT,
189  DIV_FLOAT,
190  REM_FLOAT,
191  ADD_DOUBLE,
192  SUB_DOUBLE,
193  MUL_DOUBLE,
194  DIV_DOUBLE,
195  REM_DOUBLE,
196  ADD_INT_2ADDR,
197  SUB_INT_2ADDR,
198  MUL_INT_2ADDR,
199  DIV_INT_2ADDR,
200  REM_INT_2ADDR,
201  AND_INT_2ADDR,
202  OR_INT_2ADDR,
203  XOR_INT_2ADDR,
204  SHL_INT_2ADDR,
205  SHR_INT_2ADDR,
206  USHR_INT_2ADDR,
207  ADD_LONG_2ADDR,
208  SUB_LONG_2ADDR,
209  MUL_LONG_2ADDR,
210  DIV_LONG_2ADDR,
211  REM_LONG_2ADDR,
212  AND_LONG_2ADDR,
213  OR_LONG_2ADDR,
214  XOR_LONG_2ADDR,
215  SHL_LONG_2ADDR,
216  SHR_LONG_2ADDR,
217  USHR_LONG_2ADDR,
218  ADD_FLOAT_2ADDR,
219  SUB_FLOAT_2ADDR,
220  MUL_FLOAT_2ADDR,
221  DIV_FLOAT_2ADDR,
222  REM_FLOAT_2ADDR,
223  ADD_DOUBLE_2ADDR,
224  SUB_DOUBLE_2ADDR,
225  MUL_DOUBLE_2ADDR,
226  DIV_DOUBLE_2ADDR,
227  REM_DOUBLE_2ADDR,
228  ADD_INT_LIT16,
229  RSUB_INT,
230  MUL_INT_LIT16,
231  DIV_INT_LIT16,
232  REM_INT_LIT16,
233  AND_INT_LIT16,
234  OR_INT_LIT16,
235  XOR_INT_LIT16,
236  ADD_INT_LIT8,
237  RSUB_INT_LIT8,
238  MUL_INT_LIT8,
239  DIV_INT_LIT8,
240  REM_INT_LIT8,
241  AND_INT_LIT8,
242  OR_INT_LIT8,
243  XOR_INT_LIT8,
244  SHL_INT_LIT8,
245  SHR_INT_LIT8,
246  USHR_INT_LIT8,
247  IGET_QUICK,
248  IGET_WIDE_QUICK,
249  IGET_OBJECT_QUICK,
250  IPUT_QUICK,
251  IPUT_WIDE_QUICK,
252  IPUT_OBJECT_QUICK,
253  INVOKE_VIRTUAL_QUICK,
254  INVOKE_VIRTUAL_QUICK_RANGE,
255  IPUT_BOOLEAN_QUICK,
256  IPUT_BYTE_QUICK,
257  IPUT_CHAR_QUICK,
258  IPUT_SHORT_QUICK,
259  UNUSED_EF,
260  UNUSED_F0,
261  UNUSED_F1,
262  UNUSED_F2,
263  UNUSED_F3,
264  UNUSED_F4,
265  UNUSED_F5,
266  UNUSED_F6,
267  UNUSED_F7,
268  UNUSED_F8,
269  UNUSED_F9,
270  UNUSED_FA,
271  UNUSED_FB,
272  UNUSED_FC,
273  UNUSED_FD,
274  UNUSED_FE,
275  UNUSED_FF;
276
277  public static boolean isBetween(Opcode opcode, Opcode opcode1, Opcode opcode2) {
278    return (opcode.ordinal() >= opcode1.ordinal() && opcode.ordinal() <= opcode2.ordinal());
279  }
280}
281