1 /* Table of opcodes for byte codes defined by the Java(TM) virtual
3 Copyright (C) 1998-2014 Free Software Foundation, Inc.
5 This file is part of GCC.
7 GCC is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 3, or (at your option)
12 GCC is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GCC; see the file COPYING3. If not see
19 <http://www.gnu.org/licenses/>.
21 Java and all Java-based marks are trademarks or registered trademarks
22 of Sun Microsystems, Inc. in the United States and other countries.
23 The Free Software Foundation is independent of Sun Microsystems, Inc.
25 Written by Per Bothner <bothner@cygnus.com>, February 1996.
28 /* JAVAOP (OPNAME, OPCODE, OPKIND, OPERAND_TYPE, OPERAND_VALUE), where:
29 OPNAME is the name of the opcode.
30 OPCODE is the 1-byte opcode value.
31 OPKIND is the kind of operation.
32 OPERAND_TYPE is the type operands affected.
33 OPERAND_VALUE tells where to get the value. (Its meaning
34 depends on OPKIND.) */
36 /* Various macro used in OPERAND_VALUE:
37 IMMEDIATE_s1: An immediate signed 1-byte value in the byte-code stream.
38 IMMEDIATE_s2: An immediate signed 2-byte value in the byte-code stream.
39 IMMEDIATE_u1: An immediate unsigned 1-byte value in the byte-code stream.
40 IMMEDIATE_u2: An immediate unsigned 2-byte value in the byte-code stream.
42 CONST_INDEX_1: An immediate unsigned 1-byte index into the constant pool.
43 CONST_INDEX_2: An immediate unsigned 2-byte index into the constant pool.
46 /* More specifically, this is the meaning of the various OPKINDs:
48 BINOP: binary operation
49 OPERAND_TYPE is the argument type.
50 OPERAND_VALUE is PLUS, MINUS, MULT, TRUNC_DIV, RDIV, REM,
51 LSHIFT, RSHIFT, URSHIFT, BIT_AND, BIT_IOR, BIT_XOR,
52 COMPARE, COMPARE_L, or COMPARE_G.
55 OPERAND_TYPE is the argument type.
58 INVOKE: invoke operations
59 OPERAND_TYPE is VIRTUAL, SPECIAL, STATIC, or INTERFACE.
60 OPERAND_VALUE is 1 if interface, 0 otherwise.
62 OBJECT: new, checkcast, instanceof
64 OPERAND_VALUE is NEW, CHECKCAST, or INSTANCEOF.
66 BRANCH: branch operations
67 OPERAND_TYPE is GOTO, CALL, or RETURN.
68 OPERAND_VALUE is IMMEDIATE_s2, VAR_INDEX_1, IMMEDIATE_s4,
71 STACK: Various stack operations.
73 PUSHC: Push a constant onto the operand stack.
74 OPERAND_VALUE maybe be the value to push,
75 or IMMEDIATE_s1 or IMMEDIATE_s2 if the constant is immediate,
76 or CONST_INDEX_1 or CONST_INDEX_2 for a constant pool index.
78 LOAD: Push a value from a local variable onto the operand stack.
79 OPERAND_VALUE is the index of the local variable in the current
80 Java frame. It can be a literal, or IMMEDIATE_i2.
82 CONVERT: Convert top of stack value from one type to another.
83 OPERAND_TYPE is the argument type.
84 OPERAND_VALUE is the result type.
86 TEST: Compares an integer (popped from the stack) against zero.
87 If the test (in OPERAND_VALUE) is true, goto a relative
88 offset given by the next two bytes.
90 COND: Compares two values (popped from the stack) against each other.
91 If the test (in OPERAND_VALUE) is true, goto a relative
92 offset given by the next two bytes.
95 OPERAND_VALUE is either TABLE or LOOKUP.
98 OPERAND_VALUE is LOAD, STORE, LENGTH, or NEW.
100 FIELD: Extracts from or stores into a field.
101 OPERAND_TYPE is 1 for a static field, 0 for a regular field.
102 OPERAND_VALUE is 1 for a put operation, 0 for a get operation.
105 Random bunch of opcodes.
109 JAVAOP (nop, 0, STACK, POP, 0)
110 JAVAOP (aconst_null, 1, PUSHC, PTR, 0)
111 JAVAOP (iconst_m1, 2, PUSHC, INT, -1)
112 JAVAOP (iconst_0, 3, PUSHC, INT, 0)
113 JAVAOP (iconst_1, 4, PUSHC, INT, 1)
114 JAVAOP (iconst_2, 5, PUSHC, INT, 2)
115 JAVAOP (iconst_3, 6, PUSHC, INT, 3)
116 JAVAOP (iconst_4, 7, PUSHC, INT, 4)
117 JAVAOP (iconst_5, 8, PUSHC, INT, 5)
118 JAVAOP (lconst_0, 9, PUSHC, LONG, 0)
119 JAVAOP (lconst_1, 10, PUSHC, LONG, 1)
120 JAVAOP (fconst_0, 11, PUSHC, FLOAT, 0)
121 JAVAOP (fconst_1, 12, PUSHC, FLOAT, 1)
122 JAVAOP (fconst_2, 13, PUSHC, FLOAT, 2)
123 JAVAOP (dconst_0, 14, PUSHC, DOUBLE, 0)
124 JAVAOP (dconst_1, 15, PUSHC, DOUBLE, 1)
125 JAVAOP (bipush, 16, PUSHC, INT, IMMEDIATE_s1)
126 JAVAOP (sipush, 17, PUSHC, INT, IMMEDIATE_s2)
127 JAVAOP (ldc, 18, PUSHC, INT, CONST_INDEX_1)
128 JAVAOP (ldc_w, 19, PUSHC, INT, CONST_INDEX_2)
129 JAVAOP (ldc2_w, 20, PUSHC, LONG, CONST_INDEX_2)
130 JAVAOP (iload, 21, LOAD, INT, IMMEDIATE_u1)
131 JAVAOP (lload, 22, LOAD, LONG, IMMEDIATE_u1)
132 JAVAOP (fload, 23, LOAD, FLOAT, IMMEDIATE_u1)
133 JAVAOP (dload, 24, LOAD, DOUBLE, IMMEDIATE_u1)
134 JAVAOP (aload, 25, LOAD, PTR, IMMEDIATE_u1)
135 JAVAOP (iload_0, 26, LOAD, INT, 0)
136 JAVAOP (iload_1, 27, LOAD, INT, 1)
137 JAVAOP (iload_2, 28, LOAD, INT, 2)
138 JAVAOP (iload_3, 29, LOAD, INT, 3)
139 JAVAOP (lload_0, 30, LOAD, LONG, 0)
140 JAVAOP (lload_1, 31, LOAD, LONG, 1)
141 JAVAOP (lload_2, 32, LOAD, LONG, 2)
142 JAVAOP (lload_3, 33, LOAD, LONG, 3)
143 JAVAOP (fload_0, 34, LOAD, FLOAT, 0)
144 JAVAOP (fload_1, 35, LOAD, FLOAT, 1)
145 JAVAOP (fload_2, 36, LOAD, FLOAT, 2)
146 JAVAOP (fload_3, 37, LOAD, FLOAT, 3)
147 JAVAOP (dload_0, 38, LOAD, DOUBLE, 0)
148 JAVAOP (dload_1, 39, LOAD, DOUBLE, 1)
149 JAVAOP (dload_2, 40, LOAD, DOUBLE, 2)
150 JAVAOP (dload_3, 41, LOAD, DOUBLE, 3)
151 JAVAOP (aload_0, 42, LOAD, PTR, 0)
152 JAVAOP (aload_1, 43, LOAD, PTR, 1)
153 JAVAOP (aload_2, 44, LOAD, PTR, 2)
154 JAVAOP (aload_3, 45, LOAD, PTR, 3)
155 JAVAOP (iaload, 46, ARRAY, INT, LOAD)
156 JAVAOP (laload, 47, ARRAY, LONG, LOAD)
157 JAVAOP (faload, 48, ARRAY, FLOAT, LOAD)
158 JAVAOP (daload, 49, ARRAY, DOUBLE, LOAD)
159 JAVAOP (aaload, 50, ARRAY, PTR, LOAD)
160 JAVAOP (baload, 51, ARRAY, BYTE, LOAD)
161 JAVAOP (caload, 52, ARRAY, CHAR, LOAD)
162 JAVAOP (saload, 53, ARRAY, SHORT, LOAD)
163 JAVAOP (istore, 54, STORE, INT, IMMEDIATE_u1)
164 JAVAOP (lstore, 55, STORE, LONG, IMMEDIATE_u1)
165 JAVAOP (fstore, 56, STORE, FLOAT, IMMEDIATE_u1)
166 JAVAOP (dstore, 57, STORE, DOUBLE, IMMEDIATE_u1)
167 JAVAOP (astore, 58, STORE, PTR, IMMEDIATE_u1)
168 JAVAOP (istore_0, 59, STORE, INT, 0)
169 JAVAOP (istore_1, 60, STORE, INT, 1)
170 JAVAOP (istore_2, 61, STORE, INT, 2)
171 JAVAOP (istore_3, 62, STORE, INT, 3)
172 JAVAOP (lstore_0, 63, STORE, LONG, 0)
173 JAVAOP (lstore_1, 64, STORE, LONG, 1)
174 JAVAOP (lstore_2, 65, STORE, LONG, 2)
175 JAVAOP (lstore_3, 66, STORE, LONG, 3)
176 JAVAOP (fstore_0, 67, STORE, FLOAT, 0)
177 JAVAOP (fstore_1, 68, STORE, FLOAT, 1)
178 JAVAOP (fstore_2, 69, STORE, FLOAT, 2)
179 JAVAOP (fstore_3, 70, STORE, FLOAT, 3)
180 JAVAOP (dstore_0, 71, STORE, DOUBLE, 0)
181 JAVAOP (dstore_1, 72, STORE, DOUBLE, 1)
182 JAVAOP (dstore_2, 73, STORE, DOUBLE, 2)
183 JAVAOP (dstore_3, 74, STORE, DOUBLE, 3)
184 JAVAOP (astore_0, 75, STORE, PTR, 0)
185 JAVAOP (astore_1, 76, STORE, PTR, 1)
186 JAVAOP (astore_2, 77, STORE, PTR, 2)
187 JAVAOP (astore_3, 78, STORE, PTR, 3)
188 JAVAOP (iastore, 79, ARRAY, INT, STORE)
189 JAVAOP (lastore, 80, ARRAY, LONG, STORE)
190 JAVAOP (fastore, 81, ARRAY, FLOAT, STORE)
191 JAVAOP (dastore, 82, ARRAY, DOUBLE, STORE)
192 JAVAOP (aastore, 83, ARRAY, PTR, STORE)
193 JAVAOP (bastore, 84, ARRAY, BYTE, STORE)
194 JAVAOP (castore, 85, ARRAY, CHAR, STORE)
195 JAVAOP (sastore, 86, ARRAY, SHORT, STORE)
196 JAVAOP (pop, 87, STACK, POP, 1)
197 JAVAOP (pop2, 88, STACK, POP, 2)
198 JAVAOP (dup, 89, STACK, DUP, 1)
199 JAVAOP (dup_x1, 90, STACK, DUPx1, 1)
200 JAVAOP (dup_x2, 91, STACK, DUPx2, 1)
201 JAVAOP (dup2, 92, STACK, DUP, 2)
202 JAVAOP (dup2_x1, 93, STACK, DUPx1, 2)
203 JAVAOP (dup2_x2, 94, STACK, DUPx2, 2)
204 JAVAOP (swap, 95, STACK, SWAP, 0)
205 JAVAOP (iadd, 96, BINOP, INT, PLUS)
206 JAVAOP (ladd, 97, BINOP, LONG, PLUS)
207 JAVAOP (fadd, 98, BINOP, FLOAT, PLUS)
208 JAVAOP (dadd, 99, BINOP, DOUBLE, PLUS)
209 JAVAOP (isub, 100, BINOP, INT, MINUS)
210 JAVAOP (lsub, 101, BINOP, LONG, MINUS)
211 JAVAOP (fsub, 102, BINOP, FLOAT, MINUS)
212 JAVAOP (dsub, 103, BINOP, DOUBLE, MINUS)
213 JAVAOP (imul, 104, BINOP, INT, MULT)
214 JAVAOP (lmul, 105, BINOP, LONG, MULT)
215 JAVAOP (fmul, 106, BINOP, FLOAT, MULT)
216 JAVAOP (dmul, 107, BINOP, DOUBLE, MULT)
217 JAVAOP (idiv, 108, BINOP, INT, TRUNC_DIV)
218 JAVAOP (ldiv, 109, BINOP, LONG, TRUNC_DIV)
219 JAVAOP (fdiv, 110, BINOP, FLOAT, RDIV)
220 JAVAOP (ddiv, 111, BINOP, DOUBLE, RDIV)
221 JAVAOP (irem, 112, BINOP, INT, REM)
222 JAVAOP (lrem, 113, BINOP, LONG, REM)
223 JAVAOP (frem, 114, BINOP, FLOAT, REM)
224 JAVAOP (drem, 115, BINOP, DOUBLE, REM)
225 JAVAOP (ineg, 116, UNOP, INT, NEG)
226 JAVAOP (lneg, 117, UNOP, LONG, NEG)
227 JAVAOP (fneg, 118, UNOP, FLOAT, NEG)
228 JAVAOP (dneg, 119, UNOP, DOUBLE, NEG)
229 JAVAOP (ishl, 120, BINOP, INT, LSHIFT)
230 JAVAOP (lshl, 121, BINOP, LONG, LSHIFT)
231 JAVAOP (ishr, 122, BINOP, INT, RSHIFT)
232 JAVAOP (lshr, 123, BINOP, LONG, RSHIFT)
233 JAVAOP (iushr, 124, BINOP, INT, URSHIFT)
234 JAVAOP (lushr, 125, BINOP, LONG, URSHIFT)
235 JAVAOP (iand, 126, BINOP, INT, BIT_AND)
236 JAVAOP (land, 127, BINOP, LONG, BIT_AND)
237 JAVAOP (ior, 128, BINOP, INT, BIT_IOR)
238 JAVAOP (lor, 129, BINOP, LONG, BIT_IOR)
239 JAVAOP (ixor, 130, BINOP, INT, BIT_XOR)
240 JAVAOP (lxor, 131, BINOP, LONG, BIT_XOR)
241 JAVAOP (iinc, 132, SPECIAL, INT, IINC)
242 JAVAOP (i2l, 133, CONVERT, INT, LONG)
243 JAVAOP (i2f, 134, CONVERT, INT, FLOAT)
244 JAVAOP (i2d, 135, CONVERT, INT, DOUBLE)
245 JAVAOP (l2i, 136, CONVERT, LONG, INT)
246 JAVAOP (l2f, 137, CONVERT, LONG, FLOAT)
247 JAVAOP (l2d, 138, CONVERT, LONG, DOUBLE)
248 JAVAOP (f2i, 139, CONVERT, FLOAT, INT)
249 JAVAOP (f2l, 140, CONVERT, FLOAT, LONG)
250 JAVAOP (f2d, 141, CONVERT, FLOAT, DOUBLE)
251 JAVAOP (d2i, 142, CONVERT, DOUBLE, INT)
252 JAVAOP (d2l, 143, CONVERT, DOUBLE, LONG)
253 JAVAOP (d2f, 144, CONVERT, DOUBLE, FLOAT)
254 JAVAOP (i2b, 145, CONVERT2, INT, BYTE)
255 JAVAOP (i2c, 146, CONVERT2, INT, CHAR)
256 JAVAOP (i2s, 147, CONVERT2, INT, SHORT)
257 JAVAOP (lcmp, 148, BINOP, LONG, COMPARE)
258 JAVAOP (fcmpl, 149, BINOP, FLOAT, COMPARE_L)
259 JAVAOP (fcmpg, 150, BINOP, FLOAT, COMPARE_G)
260 JAVAOP (dcmpl, 151, BINOP, DOUBLE, COMPARE_L)
261 JAVAOP (dcmpg, 152, BINOP, DOUBLE, COMPARE_G)
262 JAVAOP (ifeq, 153, TEST, INT, EQ)
263 JAVAOP (ifne, 154, TEST, INT, NE)
264 JAVAOP (iflt, 155, TEST, INT, LT)
265 JAVAOP (ifge, 156, TEST, INT, GE)
266 JAVAOP (ifgt, 157, TEST, INT, GT)
267 JAVAOP (ifle, 158, TEST, INT, LE)
268 JAVAOP (if_icmpeq, 159, COND, INT, EQ)
269 JAVAOP (if_icmpne, 160, COND, INT, NE)
270 JAVAOP (if_icmplt, 161, COND, INT, LT)
271 JAVAOP (if_icmpge, 162, COND, INT, GE)
272 JAVAOP (if_icmpgt, 163, COND, INT, GT)
273 JAVAOP (if_icmple, 164, COND, INT, LE)
274 JAVAOP (if_acmpeq, 165, COND, PTR, EQ)
275 JAVAOP (if_acmpne, 166, COND, PTR, NE)
276 JAVAOP (goto, 167, BRANCH, GOTO, IMMEDIATE_s2)
277 JAVAOP (jsr, 168, JSR, CALL, IMMEDIATE_s2)
278 JAVAOP (ret, 169, RET, RETURN, VAR_INDEX_1)
279 JAVAOP (tableswitch, 170, SWITCH, INT, TABLE)
280 JAVAOP (lookupswitch, 171, SWITCH, INT, LOOKUP)
281 JAVAOP (ireturn, 172, RETURN, INT, 0)
282 JAVAOP (lreturn, 173, RETURN, LONG, 0)
283 JAVAOP (freturn, 174, RETURN, FLOAT, 0)
284 JAVAOP (dreturn, 175, RETURN, DOUBLE, 0)
285 JAVAOP (areturn, 176, RETURN, PTR, 0)
286 JAVAOP (return, 177, RETURN, VOID, 0)
287 JAVAOP (getstatic, 178, FIELD, 1, 0)
288 JAVAOP (putstatic, 179, FIELD, 1, 1)
289 JAVAOP (getfield, 180, FIELD, 0, 0)
290 JAVAOP (putfield, 181, FIELD, 0, 1)
291 JAVAOP (invokevirtual, 182, INVOKE, VIRTUAL,0)
292 JAVAOP (invokespecial, 183, INVOKE, SPECIAL, 0)
293 JAVAOP (invokestatic, 184, INVOKE, STATIC, 0)
294 JAVAOP (invokeinterface,185, INVOKE, INTERFACE, 1)
295 JAVAOP (invokedynamic, 186, INVOKE, DYNAMIC, 1)
296 JAVAOP (new, 187, OBJECT, PTR, NEW)
297 JAVAOP (newarray, 188, ARRAY, NUM, NEW)
298 JAVAOP (anewarray, 189, ARRAY, PTR, NEW)
299 JAVAOP (arraylength, 190, ARRAY, INT, LENGTH)
300 JAVAOP (athrow, 191, SPECIAL, ANY, THROW)
301 JAVAOP (checkcast, 192, OBJECT, PTR, CHECKCAST)
302 JAVAOP (instanceof, 193, OBJECT, PTR, INSTANCEOF)
303 JAVAOP (monitorenter, 194, SPECIAL, MONITOR, ENTER)
304 JAVAOP (monitorexit, 195, SPECIAL, MONITOR, EXIT)
305 JAVAOP (wide, 196, SPECIAL, ANY, WIDE)
306 JAVAOP (multianewarray,197, ARRAY, MULTI, NEW)
307 JAVAOP (ifnull, 198, TEST, PTR, EQ)
308 JAVAOP (ifnonnull, 199, TEST, PTR, NE)
309 JAVAOP (goto_w, 200, BRANCH, GOTO, IMMEDIATE_s4)
310 JAVAOP (jsr_w, 201, JSR, CALL, IMMEDIATE_s4)
311 JAVAOP (breakpoint, 202, SPECIAL, ANY, BREAK)
312 JAVAOP (ret_w, 209, RET, RETURN, VAR_INDEX_2)
313 JAVAOP (impdep1, 254, IMPL, ANY, 1)
314 JAVAOP (impdep2, 255, IMPL, ANY, 2)