311 lines
9.7 KiB
Java
311 lines
9.7 KiB
Java
/*
|
|
* Copyright (c) 1999, 2012, Oracle and/or its affiliates. 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. Oracle designates this
|
|
* particular file as subject to the "Classpath" exception as provided
|
|
* by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.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.
|
|
*
|
|
* <p><b>This is NOT part of any supported API.
|
|
* 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.</b>
|
|
*/
|
|
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,
|
|
invokedynamic = 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 {@literal (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"
|
|
};
|
|
}
|