1 /*
  2  * Copyright (c) 1999, 2012, Oracle and/or its affiliates. All rights reserved.
  3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
  4  *
  5  * This code is free software; you can redistribute it and/or modify it
  6  * under the terms of the GNU General Public License version 2 only, as
  7  * published by the Free Software Foundation.  Oracle designates this
  8  * particular file as subject to the "Classpath" exception as provided
  9  * by Oracle in the LICENSE file that accompanied this code.
 10  *
 11  * This code is distributed in the hope that it will be useful, but WITHOUT
 12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 14  * version 2 for more details (a copy is included in the LICENSE file that
 15  * accompanied this code).
 16  *
 17  * You should have received a copy of the GNU General Public License version
 18  * 2 along with this work; if not, write to the Free Software Foundation,
 19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
 20  *
 21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
 22  * or visit www.oracle.com if you need additional information or have any
 23  * questions.
 24  */
 25 
 26 package com.sun.tools.javac.jvm;
 27 
 28 
 29 /** Bytecode instruction codes, as well as typecodes used as
 30  *  instruction modifiers.
 31  *
 32  *  <p><b>This is NOT part of any supported API.
 33  *  If you write code that depends on this, you do so at your own risk.
 34  *  This code and its internal interfaces are subject to change or
 35  *  deletion without notice.</b>
 36  */
 37 public interface ByteCodes {
 38 
 39     /** Byte code instruction codes.
 40      */
 41     int illegal         = -1,
 42         nop             = 0,
 43         aconst_null     = 1,
 44         iconst_m1       = 2,
 45         iconst_0        = 3,
 46         iconst_1        = 4,
 47         iconst_2        = 5,
 48         iconst_3        = 6,
 49         iconst_4        = 7,
 50         iconst_5        = 8,
 51         lconst_0        = 9,
 52         lconst_1        = 10,
 53         fconst_0        = 11,
 54         fconst_1        = 12,
 55         fconst_2        = 13,
 56         dconst_0        = 14,
 57         dconst_1        = 15,
 58         bipush          = 16,
 59         sipush          = 17,
 60         ldc1            = 18,
 61         ldc2            = 19,
 62         ldc2w           = 20,
 63         iload           = 21,
 64         lload           = 22,
 65         fload           = 23,
 66         dload           = 24,
 67         aload           = 25,
 68         iload_0         = 26,
 69         iload_1         = 27,
 70         iload_2         = 28,
 71         iload_3         = 29,
 72         lload_0         = 30,
 73         lload_1         = 31,
 74         lload_2         = 32,
 75         lload_3         = 33,
 76         fload_0         = 34,
 77         fload_1         = 35,
 78         fload_2         = 36,
 79         fload_3         = 37,
 80         dload_0         = 38,
 81         dload_1         = 39,
 82         dload_2         = 40,
 83         dload_3         = 41,
 84         aload_0         = 42,
 85         aload_1         = 43,
 86         aload_2         = 44,
 87         aload_3         = 45,
 88         iaload          = 46,
 89         laload          = 47,
 90         faload          = 48,
 91         daload          = 49,
 92         aaload          = 50,
 93         baload          = 51,
 94         caload          = 52,
 95         saload          = 53,
 96         istore          = 54,
 97         lstore          = 55,
 98         fstore          = 56,
 99         dstore          = 57,
100         astore          = 58,
101         istore_0        = 59,
102         istore_1        = 60,
103         istore_2        = 61,
104         istore_3        = 62,
105         lstore_0        = 63,
106         lstore_1        = 64,
107         lstore_2        = 65,
108         lstore_3        = 66,
109         fstore_0        = 67,
110         fstore_1        = 68,
111         fstore_2        = 69,
112         fstore_3        = 70,
113         dstore_0        = 71,
114         dstore_1        = 72,
115         dstore_2        = 73,
116         dstore_3        = 74,
117         astore_0        = 75,
118         astore_1        = 76,
119         astore_2        = 77,
120         astore_3        = 78,
121         iastore         = 79,
122         lastore         = 80,
123         fastore         = 81,
124         dastore         = 82,
125         aastore         = 83,
126         bastore         = 84,
127         castore         = 85,
128         sastore         = 86,
129         pop             = 87,
130         pop2            = 88,
131         dup             = 89,
132         dup_x1          = 90,
133         dup_x2          = 91,
134         dup2            = 92,
135         dup2_x1         = 93,
136         dup2_x2         = 94,
137         swap            = 95,
138         iadd            = 96,
139         ladd            = 97,
140         fadd            = 98,
141         dadd            = 99,
142         isub            = 100,
143         lsub            = 101,
144         fsub            = 102,
145         dsub            = 103,
146         imul            = 104,
147         lmul            = 105,
148         fmul            = 106,
149         dmul            = 107,
150         idiv            = 108,
151         ldiv            = 109,
152         fdiv            = 110,
153         ddiv            = 111,
154         imod            = 112,
155         lmod            = 113,
156         fmod            = 114,
157         dmod            = 115,
158         ineg            = 116,
159         lneg            = 117,
160         fneg            = 118,
161         dneg            = 119,
162         ishl            = 120,
163         lshl            = 121,
164         ishr            = 122,
165         lshr            = 123,
166         iushr           = 124,
167         lushr           = 125,
168         iand            = 126,
169         land            = 127,
170         ior             = 128,
171         lor             = 129,
172         ixor            = 130,
173         lxor            = 131,
174         iinc            = 132,
175         i2l             = 133,
176         i2f             = 134,
177         i2d             = 135,
178         l2i             = 136,
179         l2f             = 137,
180         l2d             = 138,
181         f2i             = 139,
182         f2l             = 140,
183         f2d             = 141,
184         d2i             = 142,
185         d2l             = 143,
186         d2f             = 144,
187         int2byte        = 145,
188         int2char        = 146,
189         int2short       = 147,
190         lcmp            = 148,
191         fcmpl           = 149,
192         fcmpg           = 150,
193         dcmpl           = 151,
194         dcmpg           = 152,
195         ifeq            = 153,
196         ifne            = 154,
197         iflt            = 155,
198         ifge            = 156,
199         ifgt            = 157,
200         ifle            = 158,
201         if_icmpeq       = 159,
202         if_icmpne       = 160,
203         if_icmplt       = 161,
204         if_icmpge       = 162,
205         if_icmpgt       = 163,
206         if_icmple       = 164,
207         if_acmpeq       = 165,
208         if_acmpne       = 166,
209         goto_           = 167,
210         jsr             = 168,
211         ret             = 169,
212         tableswitch     = 170,
213         lookupswitch    = 171,
214         ireturn         = 172,
215         lreturn         = 173,
216         freturn         = 174,
217         dreturn         = 175,
218         areturn         = 176,
219         return_         = 177,
220         getstatic       = 178,
221         putstatic       = 179,
222         getfield        = 180,
223         putfield        = 181,
224         invokevirtual   = 182,
225         invokespecial   = 183,
226         invokestatic    = 184,
227         invokeinterface = 185,
228         invokedynamic   = 186,
229         new_            = 187,
230         newarray        = 188,
231         anewarray       = 189,
232         arraylength     = 190,
233         athrow          = 191,
234         checkcast       = 192,
235         instanceof_     = 193,
236         monitorenter    = 194,
237         monitorexit     = 195,
238         wide            = 196,
239         multianewarray  = 197,
240         if_acmp_null    = 198,
241         if_acmp_nonnull = 199,
242         goto_w          = 200,
243         jsr_w           = 201,
244         breakpoint      = 202,
245         ByteCodeCount   = 203;
246 
247     /** Virtual instruction codes; used for constant folding.
248      */
249     int string_add      = 256,  // string +
250         bool_not        = 257,  // boolean !
251         bool_and        = 258,  // boolean &&
252         bool_or         = 259;  // boolean ||
253 
254     /** Virtual opcodes; used for shifts with long shiftcount
255      */
256     int ishll           = 270,  // int shift left with long count
257         lshll           = 271,  // long shift left with long count
258         ishrl           = 272,  // int shift right with long count
259         lshrl           = 273,  // long shift right with long count
260         iushrl          = 274,  // int unsigned shift right with long count
261         lushrl          = 275;  // long unsigned shift right with long count
262 
263     /** Virtual opcode for null reference checks
264      */
265     int nullchk         = 276;  // return operand if non-null,
266                                 // otherwise throw NullPointerException.
267 
268     /** Virtual opcode for disallowed operations.
269      */
270     int error           = 277;
271 
272     /** All conditional jumps come in pairs. To streamline the
273      *  treatment of jumps, we also introduce a negation of an
274      *  unconditional jump. That opcode happens to be jsr.
275      */
276     int dontgoto        = jsr;
277 
278     /** Shift and mask constants for shifting prefix instructions.
279      *  a pair of instruction codes such as LCMP ; IFEQ is encoded
280      *  in Symtab as {@literal (LCMP << preShift) + IFEQ }.
281      */
282     int preShift        = 9;
283     int preMask         = (1 << preShift) - 1;
284 
285     /** Type codes.
286      */
287     int INTcode         = 0,
288         LONGcode        = 1,
289         FLOATcode       = 2,
290         DOUBLEcode      = 3,
291         OBJECTcode      = 4,
292         BYTEcode        = 5,
293         CHARcode        = 6,
294         SHORTcode       = 7,
295         VOIDcode        = 8,
296         TypeCodeCount   = 9;
297 
298     static final String[] typecodeNames = {
299         "int",
300         "long",
301         "float",
302         "double",
303         "object",
304         "byte",
305         "char",
306         "short",
307         "void",
308         "oops"
309     };
310 }