diff -r 000000000000 -r 9a66ca7c79fa src/share/classes/com/sun/tools/javac/jvm/ByteCodes.java --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/share/classes/com/sun/tools/javac/jvm/ByteCodes.java Sat Dec 01 00:00:00 2007 +0000 @@ -0,0 +1,310 @@ +/* + * Copyright 1999-2005 Sun Microsystems, Inc. All Rights Reserved. + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * This code is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License version 2 only, as + * published by the Free Software Foundation. Sun designates this + * particular file as subject to the "Classpath" exception as provided + * by Sun in the LICENSE file that accompanied this code. + * + * This code is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License + * version 2 for more details (a copy is included in the LICENSE file that + * accompanied this code). + * + * You should have received a copy of the GNU General Public License version + * 2 along with this work; if not, write to the Free Software Foundation, + * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, + * CA 95054 USA or visit www.sun.com if you need additional information or + * have any questions. + */ + +package com.sun.tools.javac.jvm; + + +/** Bytecode instruction codes, as well as typecodes used as + * instruction modifiers. + * + *

This is NOT part of any API supported by Sun Microsystems. If + * you write code that depends on this, you do so at your own risk. + * This code and its internal interfaces are subject to change or + * deletion without notice. + */ +public interface ByteCodes { + + /** Byte code instruction codes. + */ + int illegal = -1, + nop = 0, + aconst_null = 1, + iconst_m1 = 2, + iconst_0 = 3, + iconst_1 = 4, + iconst_2 = 5, + iconst_3 = 6, + iconst_4 = 7, + iconst_5 = 8, + lconst_0 = 9, + lconst_1 = 10, + fconst_0 = 11, + fconst_1 = 12, + fconst_2 = 13, + dconst_0 = 14, + dconst_1 = 15, + bipush = 16, + sipush = 17, + ldc1 = 18, + ldc2 = 19, + ldc2w = 20, + iload = 21, + lload = 22, + fload = 23, + dload = 24, + aload = 25, + iload_0 = 26, + iload_1 = 27, + iload_2 = 28, + iload_3 = 29, + lload_0 = 30, + lload_1 = 31, + lload_2 = 32, + lload_3 = 33, + fload_0 = 34, + fload_1 = 35, + fload_2 = 36, + fload_3 = 37, + dload_0 = 38, + dload_1 = 39, + dload_2 = 40, + dload_3 = 41, + aload_0 = 42, + aload_1 = 43, + aload_2 = 44, + aload_3 = 45, + iaload = 46, + laload = 47, + faload = 48, + daload = 49, + aaload = 50, + baload = 51, + caload = 52, + saload = 53, + istore = 54, + lstore = 55, + fstore = 56, + dstore = 57, + astore = 58, + istore_0 = 59, + istore_1 = 60, + istore_2 = 61, + istore_3 = 62, + lstore_0 = 63, + lstore_1 = 64, + lstore_2 = 65, + lstore_3 = 66, + fstore_0 = 67, + fstore_1 = 68, + fstore_2 = 69, + fstore_3 = 70, + dstore_0 = 71, + dstore_1 = 72, + dstore_2 = 73, + dstore_3 = 74, + astore_0 = 75, + astore_1 = 76, + astore_2 = 77, + astore_3 = 78, + iastore = 79, + lastore = 80, + fastore = 81, + dastore = 82, + aastore = 83, + bastore = 84, + castore = 85, + sastore = 86, + pop = 87, + pop2 = 88, + dup = 89, + dup_x1 = 90, + dup_x2 = 91, + dup2 = 92, + dup2_x1 = 93, + dup2_x2 = 94, + swap = 95, + iadd = 96, + ladd = 97, + fadd = 98, + dadd = 99, + isub = 100, + lsub = 101, + fsub = 102, + dsub = 103, + imul = 104, + lmul = 105, + fmul = 106, + dmul = 107, + idiv = 108, + ldiv = 109, + fdiv = 110, + ddiv = 111, + imod = 112, + lmod = 113, + fmod = 114, + dmod = 115, + ineg = 116, + lneg = 117, + fneg = 118, + dneg = 119, + ishl = 120, + lshl = 121, + ishr = 122, + lshr = 123, + iushr = 124, + lushr = 125, + iand = 126, + land = 127, + ior = 128, + lor = 129, + ixor = 130, + lxor = 131, + iinc = 132, + i2l = 133, + i2f = 134, + i2d = 135, + l2i = 136, + l2f = 137, + l2d = 138, + f2i = 139, + f2l = 140, + f2d = 141, + d2i = 142, + d2l = 143, + d2f = 144, + int2byte = 145, + int2char = 146, + int2short = 147, + lcmp = 148, + fcmpl = 149, + fcmpg = 150, + dcmpl = 151, + dcmpg = 152, + ifeq = 153, + ifne = 154, + iflt = 155, + ifge = 156, + ifgt = 157, + ifle = 158, + if_icmpeq = 159, + if_icmpne = 160, + if_icmplt = 161, + if_icmpge = 162, + if_icmpgt = 163, + if_icmple = 164, + if_acmpeq = 165, + if_acmpne = 166, + goto_ = 167, + jsr = 168, + ret = 169, + tableswitch = 170, + lookupswitch = 171, + ireturn = 172, + lreturn = 173, + freturn = 174, + dreturn = 175, + areturn = 176, + return_ = 177, + getstatic = 178, + putstatic = 179, + getfield = 180, + putfield = 181, + invokevirtual = 182, + invokespecial = 183, + invokestatic = 184, + invokeinterface = 185, + // ___unused___ = 186, + new_ = 187, + newarray = 188, + anewarray = 189, + arraylength = 190, + athrow = 191, + checkcast = 192, + instanceof_ = 193, + monitorenter = 194, + monitorexit = 195, + wide = 196, + multianewarray = 197, + if_acmp_null = 198, + if_acmp_nonnull = 199, + goto_w = 200, + jsr_w = 201, + breakpoint = 202, + ByteCodeCount = 203; + + /** Virtual instruction codes; used for constant folding. + */ + int string_add = 256, // string + + bool_not = 257, // boolean ! + bool_and = 258, // boolean && + bool_or = 259; // boolean || + + /** Virtual opcodes; used for shifts with long shiftcount + */ + int ishll = 270, // int shift left with long count + lshll = 271, // long shift left with long count + ishrl = 272, // int shift right with long count + lshrl = 273, // long shift right with long count + iushrl = 274, // int unsigned shift right with long count + lushrl = 275; // long unsigned shift right with long count + + /** Virtual opcode for null reference checks + */ + int nullchk = 276; // return operand if non-null, + // otherwise throw NullPointerException. + + /** Virtual opcode for disallowed operations. + */ + int error = 277; + + /** All conditional jumps come in pairs. To streamline the + * treatment of jumps, we also introduce a negation of an + * unconditional jump. That opcode happens to be jsr. + */ + int dontgoto = jsr; + + /** Shift and mask constants for shifting prefix instructions. + * a pair of instruction codes such as LCMP ; IFEQ is encoded + * in Symtab as (LCMP << preShift) + IFEQ. + */ + int preShift = 9; + int preMask = (1 << preShift) - 1; + + /** Type codes. + */ + int INTcode = 0, + LONGcode = 1, + FLOATcode = 2, + DOUBLEcode = 3, + OBJECTcode = 4, + BYTEcode = 5, + CHARcode = 6, + SHORTcode = 7, + VOIDcode = 8, + TypeCodeCount = 9; + + static final String[] typecodeNames = { + "int", + "long", + "float", + "double", + "object", + "byte", + "char", + "short", + "void", + "oops" + }; +}