8339260: Move rarely used constants out of ClassFile

Reviewed-by: asotona
This commit is contained in:
Chen Liang 2024-09-26 06:34:18 +00:00
parent 47c10694c6
commit 8c8f0d85ce
37 changed files with 1545 additions and 1916 deletions

View file

@ -24,6 +24,7 @@
*/
package java.lang.classfile;
import jdk.internal.classfile.impl.RawBytecodeHelper;
import jdk.internal.javac.PreviewFeature;
/**
@ -40,658 +41,658 @@ import jdk.internal.javac.PreviewFeature;
public enum Opcode {
/** Do nothing */
NOP(ClassFile.NOP, 1, Kind.NOP),
NOP(RawBytecodeHelper.NOP, 1, Kind.NOP),
/** Push null */
ACONST_NULL(ClassFile.ACONST_NULL, 1, Kind.CONSTANT),
ACONST_NULL(RawBytecodeHelper.ACONST_NULL, 1, Kind.CONSTANT),
/** Push int constant -1 */
ICONST_M1(ClassFile.ICONST_M1, 1, Kind.CONSTANT),
ICONST_M1(RawBytecodeHelper.ICONST_M1, 1, Kind.CONSTANT),
/** Push int constant 0 */
ICONST_0(ClassFile.ICONST_0, 1, Kind.CONSTANT),
ICONST_0(RawBytecodeHelper.ICONST_0, 1, Kind.CONSTANT),
/** Push int constant 1 */
ICONST_1(ClassFile.ICONST_1, 1, Kind.CONSTANT),
ICONST_1(RawBytecodeHelper.ICONST_1, 1, Kind.CONSTANT),
/** Push int constant 2 */
ICONST_2(ClassFile.ICONST_2, 1, Kind.CONSTANT),
ICONST_2(RawBytecodeHelper.ICONST_2, 1, Kind.CONSTANT),
/** Push int constant 3 */
ICONST_3(ClassFile.ICONST_3, 1, Kind.CONSTANT),
ICONST_3(RawBytecodeHelper.ICONST_3, 1, Kind.CONSTANT),
/** Push int constant 4 */
ICONST_4(ClassFile.ICONST_4, 1, Kind.CONSTANT),
ICONST_4(RawBytecodeHelper.ICONST_4, 1, Kind.CONSTANT),
/** Push int constant 5 */
ICONST_5(ClassFile.ICONST_5, 1, Kind.CONSTANT),
ICONST_5(RawBytecodeHelper.ICONST_5, 1, Kind.CONSTANT),
/** Push long constant 0 */
LCONST_0(ClassFile.LCONST_0, 1, Kind.CONSTANT),
LCONST_0(RawBytecodeHelper.LCONST_0, 1, Kind.CONSTANT),
/** Push long constant 1 */
LCONST_1(ClassFile.LCONST_1, 1, Kind.CONSTANT),
LCONST_1(RawBytecodeHelper.LCONST_1, 1, Kind.CONSTANT),
/** Push float constant 0 */
FCONST_0(ClassFile.FCONST_0, 1, Kind.CONSTANT),
FCONST_0(RawBytecodeHelper.FCONST_0, 1, Kind.CONSTANT),
/** Push float constant 1 */
FCONST_1(ClassFile.FCONST_1, 1, Kind.CONSTANT),
FCONST_1(RawBytecodeHelper.FCONST_1, 1, Kind.CONSTANT),
/** Push float constant 2 */
FCONST_2(ClassFile.FCONST_2, 1, Kind.CONSTANT),
FCONST_2(RawBytecodeHelper.FCONST_2, 1, Kind.CONSTANT),
/** Push double constant 0 */
DCONST_0(ClassFile.DCONST_0, 1, Kind.CONSTANT),
DCONST_0(RawBytecodeHelper.DCONST_0, 1, Kind.CONSTANT),
/** Push double constant 1 */
DCONST_1(ClassFile.DCONST_1, 1, Kind.CONSTANT),
DCONST_1(RawBytecodeHelper.DCONST_1, 1, Kind.CONSTANT),
/** Push byte */
BIPUSH(ClassFile.BIPUSH, 2, Kind.CONSTANT),
BIPUSH(RawBytecodeHelper.BIPUSH, 2, Kind.CONSTANT),
/** Push short */
SIPUSH(ClassFile.SIPUSH, 3, Kind.CONSTANT),
SIPUSH(RawBytecodeHelper.SIPUSH, 3, Kind.CONSTANT),
/** Push item from run-time constant pool */
LDC(ClassFile.LDC, 2, Kind.CONSTANT),
LDC(RawBytecodeHelper.LDC, 2, Kind.CONSTANT),
/** Push item from run-time constant pool (wide index) */
LDC_W(ClassFile.LDC_W, 3, Kind.CONSTANT),
LDC_W(RawBytecodeHelper.LDC_W, 3, Kind.CONSTANT),
/** Push long or double from run-time constant pool (wide index) */
LDC2_W(ClassFile.LDC2_W, 3, Kind.CONSTANT),
LDC2_W(RawBytecodeHelper.LDC2_W, 3, Kind.CONSTANT),
/** Load int from local variable */
ILOAD(ClassFile.ILOAD, 2, Kind.LOAD),
ILOAD(RawBytecodeHelper.ILOAD, 2, Kind.LOAD),
/** Load long from local variable */
LLOAD(ClassFile.LLOAD, 2, Kind.LOAD),
LLOAD(RawBytecodeHelper.LLOAD, 2, Kind.LOAD),
/** Load float from local variable */
FLOAD(ClassFile.FLOAD, 2, Kind.LOAD),
FLOAD(RawBytecodeHelper.FLOAD, 2, Kind.LOAD),
/** Load double from local variable */
DLOAD(ClassFile.DLOAD, 2, Kind.LOAD),
DLOAD(RawBytecodeHelper.DLOAD, 2, Kind.LOAD),
/** Load reference from local variable */
ALOAD(ClassFile.ALOAD, 2, Kind.LOAD),
ALOAD(RawBytecodeHelper.ALOAD, 2, Kind.LOAD),
/** Load int from local variable 0 */
ILOAD_0(ClassFile.ILOAD_0, 1, Kind.LOAD),
ILOAD_0(RawBytecodeHelper.ILOAD_0, 1, Kind.LOAD),
/** Load int from local variable 1 */
ILOAD_1(ClassFile.ILOAD_1, 1, Kind.LOAD),
ILOAD_1(RawBytecodeHelper.ILOAD_1, 1, Kind.LOAD),
/** Load int from local variable 2 */
ILOAD_2(ClassFile.ILOAD_2, 1, Kind.LOAD),
ILOAD_2(RawBytecodeHelper.ILOAD_2, 1, Kind.LOAD),
/** Load int from local variable3 */
ILOAD_3(ClassFile.ILOAD_3, 1, Kind.LOAD),
ILOAD_3(RawBytecodeHelper.ILOAD_3, 1, Kind.LOAD),
/** Load long from local variable 0 */
LLOAD_0(ClassFile.LLOAD_0, 1, Kind.LOAD),
LLOAD_0(RawBytecodeHelper.LLOAD_0, 1, Kind.LOAD),
/** Load long from local variable 1 */
LLOAD_1(ClassFile.LLOAD_1, 1, Kind.LOAD),
LLOAD_1(RawBytecodeHelper.LLOAD_1, 1, Kind.LOAD),
/** Load long from local variable 2 */
LLOAD_2(ClassFile.LLOAD_2, 1, Kind.LOAD),
LLOAD_2(RawBytecodeHelper.LLOAD_2, 1, Kind.LOAD),
/** Load long from local variable 3 */
LLOAD_3(ClassFile.LLOAD_3, 1, Kind.LOAD),
LLOAD_3(RawBytecodeHelper.LLOAD_3, 1, Kind.LOAD),
/** Load float from local variable 0 */
FLOAD_0(ClassFile.FLOAD_0, 1, Kind.LOAD),
FLOAD_0(RawBytecodeHelper.FLOAD_0, 1, Kind.LOAD),
/** Load float from local variable 1 */
FLOAD_1(ClassFile.FLOAD_1, 1, Kind.LOAD),
FLOAD_1(RawBytecodeHelper.FLOAD_1, 1, Kind.LOAD),
/** Load float from local variable 2 */
FLOAD_2(ClassFile.FLOAD_2, 1, Kind.LOAD),
FLOAD_2(RawBytecodeHelper.FLOAD_2, 1, Kind.LOAD),
/** Load float from local variable 3 */
FLOAD_3(ClassFile.FLOAD_3, 1, Kind.LOAD),
FLOAD_3(RawBytecodeHelper.FLOAD_3, 1, Kind.LOAD),
/** Load double from local variable 0 */
DLOAD_0(ClassFile.DLOAD_0, 1, Kind.LOAD),
DLOAD_0(RawBytecodeHelper.DLOAD_0, 1, Kind.LOAD),
/** Load double from local variable 1 */
DLOAD_1(ClassFile.DLOAD_1, 1, Kind.LOAD),
DLOAD_1(RawBytecodeHelper.DLOAD_1, 1, Kind.LOAD),
/** Load double from local variable 2 */
DLOAD_2(ClassFile.DLOAD_2, 1, Kind.LOAD),
DLOAD_2(RawBytecodeHelper.DLOAD_2, 1, Kind.LOAD),
/** Load double from local variable 3 */
DLOAD_3(ClassFile.DLOAD_3, 1, Kind.LOAD),
DLOAD_3(RawBytecodeHelper.DLOAD_3, 1, Kind.LOAD),
/** Load reference from local variable 0 */
ALOAD_0(ClassFile.ALOAD_0, 1, Kind.LOAD),
ALOAD_0(RawBytecodeHelper.ALOAD_0, 1, Kind.LOAD),
/** Load reference from local variable 1 */
ALOAD_1(ClassFile.ALOAD_1, 1, Kind.LOAD),
ALOAD_1(RawBytecodeHelper.ALOAD_1, 1, Kind.LOAD),
/** Load reference from local variable 2 */
ALOAD_2(ClassFile.ALOAD_2, 1, Kind.LOAD),
ALOAD_2(RawBytecodeHelper.ALOAD_2, 1, Kind.LOAD),
/** Load reference from local variable 3 */
ALOAD_3(ClassFile.ALOAD_3, 1, Kind.LOAD),
ALOAD_3(RawBytecodeHelper.ALOAD_3, 1, Kind.LOAD),
/** Load int from array */
IALOAD(ClassFile.IALOAD, 1, Kind.ARRAY_LOAD),
IALOAD(RawBytecodeHelper.IALOAD, 1, Kind.ARRAY_LOAD),
/** Load long from array */
LALOAD(ClassFile.LALOAD, 1, Kind.ARRAY_LOAD),
LALOAD(RawBytecodeHelper.LALOAD, 1, Kind.ARRAY_LOAD),
/** Load float from array */
FALOAD(ClassFile.FALOAD, 1, Kind.ARRAY_LOAD),
FALOAD(RawBytecodeHelper.FALOAD, 1, Kind.ARRAY_LOAD),
/** Load double from array */
DALOAD(ClassFile.DALOAD, 1, Kind.ARRAY_LOAD),
DALOAD(RawBytecodeHelper.DALOAD, 1, Kind.ARRAY_LOAD),
/** Load reference from array */
AALOAD(ClassFile.AALOAD, 1, Kind.ARRAY_LOAD),
AALOAD(RawBytecodeHelper.AALOAD, 1, Kind.ARRAY_LOAD),
/** Load byte from array */
BALOAD(ClassFile.BALOAD, 1, Kind.ARRAY_LOAD),
BALOAD(RawBytecodeHelper.BALOAD, 1, Kind.ARRAY_LOAD),
/** Load char from array */
CALOAD(ClassFile.CALOAD, 1, Kind.ARRAY_LOAD),
CALOAD(RawBytecodeHelper.CALOAD, 1, Kind.ARRAY_LOAD),
/** Load short from array */
SALOAD(ClassFile.SALOAD, 1, Kind.ARRAY_LOAD),
SALOAD(RawBytecodeHelper.SALOAD, 1, Kind.ARRAY_LOAD),
/** Store int into local variable */
ISTORE(ClassFile.ISTORE, 2, Kind.STORE),
ISTORE(RawBytecodeHelper.ISTORE, 2, Kind.STORE),
/** Store long into local variable */
LSTORE(ClassFile.LSTORE, 2, Kind.STORE),
LSTORE(RawBytecodeHelper.LSTORE, 2, Kind.STORE),
/** Store float into local variable */
FSTORE(ClassFile.FSTORE, 2, Kind.STORE),
FSTORE(RawBytecodeHelper.FSTORE, 2, Kind.STORE),
/** Store double into local variable */
DSTORE(ClassFile.DSTORE, 2, Kind.STORE),
DSTORE(RawBytecodeHelper.DSTORE, 2, Kind.STORE),
/** Store reference into local variable */
ASTORE(ClassFile.ASTORE, 2, Kind.STORE),
ASTORE(RawBytecodeHelper.ASTORE, 2, Kind.STORE),
/** Store int into local variable 0 */
ISTORE_0(ClassFile.ISTORE_0, 1, Kind.STORE),
ISTORE_0(RawBytecodeHelper.ISTORE_0, 1, Kind.STORE),
/** Store int into local variable 1 */
ISTORE_1(ClassFile.ISTORE_1, 1, Kind.STORE),
ISTORE_1(RawBytecodeHelper.ISTORE_1, 1, Kind.STORE),
/** Store int into local variable 2 */
ISTORE_2(ClassFile.ISTORE_2, 1, Kind.STORE),
ISTORE_2(RawBytecodeHelper.ISTORE_2, 1, Kind.STORE),
/** Store int into local variable 3 */
ISTORE_3(ClassFile.ISTORE_3, 1, Kind.STORE),
ISTORE_3(RawBytecodeHelper.ISTORE_3, 1, Kind.STORE),
/** Store long into local variable 0 */
LSTORE_0(ClassFile.LSTORE_0, 1, Kind.STORE),
LSTORE_0(RawBytecodeHelper.LSTORE_0, 1, Kind.STORE),
/** Store long into local variable 1 */
LSTORE_1(ClassFile.LSTORE_1, 1, Kind.STORE),
LSTORE_1(RawBytecodeHelper.LSTORE_1, 1, Kind.STORE),
/** Store long into local variable 2 */
LSTORE_2(ClassFile.LSTORE_2, 1, Kind.STORE),
LSTORE_2(RawBytecodeHelper.LSTORE_2, 1, Kind.STORE),
/** Store long into local variable 3 */
LSTORE_3(ClassFile.LSTORE_3, 1, Kind.STORE),
LSTORE_3(RawBytecodeHelper.LSTORE_3, 1, Kind.STORE),
/** Store float into local variable 0 */
FSTORE_0(ClassFile.FSTORE_0, 1, Kind.STORE),
FSTORE_0(RawBytecodeHelper.FSTORE_0, 1, Kind.STORE),
/** Store float into local variable 1 */
FSTORE_1(ClassFile.FSTORE_1, 1, Kind.STORE),
FSTORE_1(RawBytecodeHelper.FSTORE_1, 1, Kind.STORE),
/** Store float into local variable 2 */
FSTORE_2(ClassFile.FSTORE_2, 1, Kind.STORE),
FSTORE_2(RawBytecodeHelper.FSTORE_2, 1, Kind.STORE),
/** Store float into local variable 3 */
FSTORE_3(ClassFile.FSTORE_3, 1, Kind.STORE),
FSTORE_3(RawBytecodeHelper.FSTORE_3, 1, Kind.STORE),
/** Store double into local variable 0 */
DSTORE_0(ClassFile.DSTORE_0, 1, Kind.STORE),
DSTORE_0(RawBytecodeHelper.DSTORE_0, 1, Kind.STORE),
/** Store double into local variable 1 */
DSTORE_1(ClassFile.DSTORE_1, 1, Kind.STORE),
DSTORE_1(RawBytecodeHelper.DSTORE_1, 1, Kind.STORE),
/** Store double into local variable 2 */
DSTORE_2(ClassFile.DSTORE_2, 1, Kind.STORE),
DSTORE_2(RawBytecodeHelper.DSTORE_2, 1, Kind.STORE),
/** Store double into local variable 3 */
DSTORE_3(ClassFile.DSTORE_3, 1, Kind.STORE),
DSTORE_3(RawBytecodeHelper.DSTORE_3, 1, Kind.STORE),
/** Store reference into local variable 0 */
ASTORE_0(ClassFile.ASTORE_0, 1, Kind.STORE),
ASTORE_0(RawBytecodeHelper.ASTORE_0, 1, Kind.STORE),
/** Store reference into local variable 1 */
ASTORE_1(ClassFile.ASTORE_1, 1, Kind.STORE),
ASTORE_1(RawBytecodeHelper.ASTORE_1, 1, Kind.STORE),
/** Store reference into local variable 2 */
ASTORE_2(ClassFile.ASTORE_2, 1, Kind.STORE),
ASTORE_2(RawBytecodeHelper.ASTORE_2, 1, Kind.STORE),
/** Store reference into local variable 3 */
ASTORE_3(ClassFile.ASTORE_3, 1, Kind.STORE),
ASTORE_3(RawBytecodeHelper.ASTORE_3, 1, Kind.STORE),
/** Store into int array */
IASTORE(ClassFile.IASTORE, 1, Kind.ARRAY_STORE),
IASTORE(RawBytecodeHelper.IASTORE, 1, Kind.ARRAY_STORE),
/** Store into long array */
LASTORE(ClassFile.LASTORE, 1, Kind.ARRAY_STORE),
LASTORE(RawBytecodeHelper.LASTORE, 1, Kind.ARRAY_STORE),
/** Store into float array */
FASTORE(ClassFile.FASTORE, 1, Kind.ARRAY_STORE),
FASTORE(RawBytecodeHelper.FASTORE, 1, Kind.ARRAY_STORE),
/** Store into double array */
DASTORE(ClassFile.DASTORE, 1, Kind.ARRAY_STORE),
DASTORE(RawBytecodeHelper.DASTORE, 1, Kind.ARRAY_STORE),
/** Store into reference array */
AASTORE(ClassFile.AASTORE, 1, Kind.ARRAY_STORE),
AASTORE(RawBytecodeHelper.AASTORE, 1, Kind.ARRAY_STORE),
/** Store into byte array */
BASTORE(ClassFile.BASTORE, 1, Kind.ARRAY_STORE),
BASTORE(RawBytecodeHelper.BASTORE, 1, Kind.ARRAY_STORE),
/** Store into char array */
CASTORE(ClassFile.CASTORE, 1, Kind.ARRAY_STORE),
CASTORE(RawBytecodeHelper.CASTORE, 1, Kind.ARRAY_STORE),
/** Store into short array */
SASTORE(ClassFile.SASTORE, 1, Kind.ARRAY_STORE),
SASTORE(RawBytecodeHelper.SASTORE, 1, Kind.ARRAY_STORE),
/** Pop the top operand stack value */
POP(ClassFile.POP, 1, Kind.STACK),
POP(RawBytecodeHelper.POP, 1, Kind.STACK),
/** Pop the top one or two operand stack values */
POP2(ClassFile.POP2, 1, Kind.STACK),
POP2(RawBytecodeHelper.POP2, 1, Kind.STACK),
/** Duplicate the top operand stack value */
DUP(ClassFile.DUP, 1, Kind.STACK),
DUP(RawBytecodeHelper.DUP, 1, Kind.STACK),
/** Duplicate the top operand stack value and insert two values down */
DUP_X1(ClassFile.DUP_X1, 1, Kind.STACK),
DUP_X1(RawBytecodeHelper.DUP_X1, 1, Kind.STACK),
/** Duplicate the top operand stack value and insert two or three values down */
DUP_X2(ClassFile.DUP_X2, 1, Kind.STACK),
DUP_X2(RawBytecodeHelper.DUP_X2, 1, Kind.STACK),
/** Duplicate the top one or two operand stack values */
DUP2(ClassFile.DUP2, 1, Kind.STACK),
DUP2(RawBytecodeHelper.DUP2, 1, Kind.STACK),
/** Duplicate the top one or two operand stack values and insert two or three values down */
DUP2_X1(ClassFile.DUP2_X1, 1, Kind.STACK),
DUP2_X1(RawBytecodeHelper.DUP2_X1, 1, Kind.STACK),
/** Duplicate the top one or two operand stack values and insert two, three, or four values down */
DUP2_X2(ClassFile.DUP2_X2, 1, Kind.STACK),
DUP2_X2(RawBytecodeHelper.DUP2_X2, 1, Kind.STACK),
/** Swap the top two operand stack values */
SWAP(ClassFile.SWAP, 1, Kind.STACK),
SWAP(RawBytecodeHelper.SWAP, 1, Kind.STACK),
/** Add int */
IADD(ClassFile.IADD, 1, Kind.OPERATOR),
IADD(RawBytecodeHelper.IADD, 1, Kind.OPERATOR),
/** Add long */
LADD(ClassFile.LADD, 1, Kind.OPERATOR),
LADD(RawBytecodeHelper.LADD, 1, Kind.OPERATOR),
/** Add float */
FADD(ClassFile.FADD, 1, Kind.OPERATOR),
FADD(RawBytecodeHelper.FADD, 1, Kind.OPERATOR),
/** Add double */
DADD(ClassFile.DADD, 1, Kind.OPERATOR),
DADD(RawBytecodeHelper.DADD, 1, Kind.OPERATOR),
/** Subtract int */
ISUB(ClassFile.ISUB, 1, Kind.OPERATOR),
ISUB(RawBytecodeHelper.ISUB, 1, Kind.OPERATOR),
/** Subtract long */
LSUB(ClassFile.LSUB, 1, Kind.OPERATOR),
LSUB(RawBytecodeHelper.LSUB, 1, Kind.OPERATOR),
/** Subtract float */
FSUB(ClassFile.FSUB, 1, Kind.OPERATOR),
FSUB(RawBytecodeHelper.FSUB, 1, Kind.OPERATOR),
/** Subtract double */
DSUB(ClassFile.DSUB, 1, Kind.OPERATOR),
DSUB(RawBytecodeHelper.DSUB, 1, Kind.OPERATOR),
/** Multiply int */
IMUL(ClassFile.IMUL, 1, Kind.OPERATOR),
IMUL(RawBytecodeHelper.IMUL, 1, Kind.OPERATOR),
/** Multiply long */
LMUL(ClassFile.LMUL, 1, Kind.OPERATOR),
LMUL(RawBytecodeHelper.LMUL, 1, Kind.OPERATOR),
/** Multiply float */
FMUL(ClassFile.FMUL, 1, Kind.OPERATOR),
FMUL(RawBytecodeHelper.FMUL, 1, Kind.OPERATOR),
/** Multiply double */
DMUL(ClassFile.DMUL, 1, Kind.OPERATOR),
DMUL(RawBytecodeHelper.DMUL, 1, Kind.OPERATOR),
/** Divide int */
IDIV(ClassFile.IDIV, 1, Kind.OPERATOR),
IDIV(RawBytecodeHelper.IDIV, 1, Kind.OPERATOR),
/** Divide long */
LDIV(ClassFile.LDIV, 1, Kind.OPERATOR),
LDIV(RawBytecodeHelper.LDIV, 1, Kind.OPERATOR),
/** Divide float */
FDIV(ClassFile.FDIV, 1, Kind.OPERATOR),
FDIV(RawBytecodeHelper.FDIV, 1, Kind.OPERATOR),
/** Divide double */
DDIV(ClassFile.DDIV, 1, Kind.OPERATOR),
DDIV(RawBytecodeHelper.DDIV, 1, Kind.OPERATOR),
/** Remainder int */
IREM(ClassFile.IREM, 1, Kind.OPERATOR),
IREM(RawBytecodeHelper.IREM, 1, Kind.OPERATOR),
/** Remainder long */
LREM(ClassFile.LREM, 1, Kind.OPERATOR),
LREM(RawBytecodeHelper.LREM, 1, Kind.OPERATOR),
/** Remainder float */
FREM(ClassFile.FREM, 1, Kind.OPERATOR),
FREM(RawBytecodeHelper.FREM, 1, Kind.OPERATOR),
/** Remainder double */
DREM(ClassFile.DREM, 1, Kind.OPERATOR),
DREM(RawBytecodeHelper.DREM, 1, Kind.OPERATOR),
/** Negate int */
INEG(ClassFile.INEG, 1, Kind.OPERATOR),
INEG(RawBytecodeHelper.INEG, 1, Kind.OPERATOR),
/** Negate long */
LNEG(ClassFile.LNEG, 1, Kind.OPERATOR),
LNEG(RawBytecodeHelper.LNEG, 1, Kind.OPERATOR),
/** Negate float */
FNEG(ClassFile.FNEG, 1, Kind.OPERATOR),
FNEG(RawBytecodeHelper.FNEG, 1, Kind.OPERATOR),
/** Negate double */
DNEG(ClassFile.DNEG, 1, Kind.OPERATOR),
DNEG(RawBytecodeHelper.DNEG, 1, Kind.OPERATOR),
/** Shift left int */
ISHL(ClassFile.ISHL, 1, Kind.OPERATOR),
ISHL(RawBytecodeHelper.ISHL, 1, Kind.OPERATOR),
/** Shift left long */
LSHL(ClassFile.LSHL, 1, Kind.OPERATOR),
LSHL(RawBytecodeHelper.LSHL, 1, Kind.OPERATOR),
/** Shift right int */
ISHR(ClassFile.ISHR, 1, Kind.OPERATOR),
ISHR(RawBytecodeHelper.ISHR, 1, Kind.OPERATOR),
/** Shift right long */
LSHR(ClassFile.LSHR, 1, Kind.OPERATOR),
LSHR(RawBytecodeHelper.LSHR, 1, Kind.OPERATOR),
/** Logical shift right int */
IUSHR(ClassFile.IUSHR, 1, Kind.OPERATOR),
IUSHR(RawBytecodeHelper.IUSHR, 1, Kind.OPERATOR),
/** Logical shift right long */
LUSHR(ClassFile.LUSHR, 1, Kind.OPERATOR),
LUSHR(RawBytecodeHelper.LUSHR, 1, Kind.OPERATOR),
/** Boolean AND int */
IAND(ClassFile.IAND, 1, Kind.OPERATOR),
IAND(RawBytecodeHelper.IAND, 1, Kind.OPERATOR),
/** Boolean AND long */
LAND(ClassFile.LAND, 1, Kind.OPERATOR),
LAND(RawBytecodeHelper.LAND, 1, Kind.OPERATOR),
/** Boolean OR int */
IOR(ClassFile.IOR, 1, Kind.OPERATOR),
IOR(RawBytecodeHelper.IOR, 1, Kind.OPERATOR),
/** Boolean OR long */
LOR(ClassFile.LOR, 1, Kind.OPERATOR),
LOR(RawBytecodeHelper.LOR, 1, Kind.OPERATOR),
/** Boolean XOR int */
IXOR(ClassFile.IXOR, 1, Kind.OPERATOR),
IXOR(RawBytecodeHelper.IXOR, 1, Kind.OPERATOR),
/** Boolean XOR long */
LXOR(ClassFile.LXOR, 1, Kind.OPERATOR),
LXOR(RawBytecodeHelper.LXOR, 1, Kind.OPERATOR),
/** Increment local variable by constant */
IINC(ClassFile.IINC, 3, Kind.INCREMENT),
IINC(RawBytecodeHelper.IINC, 3, Kind.INCREMENT),
/** Convert int to long */
I2L(ClassFile.I2L, 1, Kind.CONVERT),
I2L(RawBytecodeHelper.I2L, 1, Kind.CONVERT),
/** Convert int to float */
I2F(ClassFile.I2F, 1, Kind.CONVERT),
I2F(RawBytecodeHelper.I2F, 1, Kind.CONVERT),
/** Convert int to double */
I2D(ClassFile.I2D, 1, Kind.CONVERT),
I2D(RawBytecodeHelper.I2D, 1, Kind.CONVERT),
/** Convert long to int */
L2I(ClassFile.L2I, 1, Kind.CONVERT),
L2I(RawBytecodeHelper.L2I, 1, Kind.CONVERT),
/** Convert long to float */
L2F(ClassFile.L2F, 1, Kind.CONVERT),
L2F(RawBytecodeHelper.L2F, 1, Kind.CONVERT),
/** Convert long to double */
L2D(ClassFile.L2D, 1, Kind.CONVERT),
L2D(RawBytecodeHelper.L2D, 1, Kind.CONVERT),
/** Convert float to int */
F2I(ClassFile.F2I, 1, Kind.CONVERT),
F2I(RawBytecodeHelper.F2I, 1, Kind.CONVERT),
/** Convert float to long */
F2L(ClassFile.F2L, 1, Kind.CONVERT),
F2L(RawBytecodeHelper.F2L, 1, Kind.CONVERT),
/** Convert float to double */
F2D(ClassFile.F2D, 1, Kind.CONVERT),
F2D(RawBytecodeHelper.F2D, 1, Kind.CONVERT),
/** Convert double to int */
D2I(ClassFile.D2I, 1, Kind.CONVERT),
D2I(RawBytecodeHelper.D2I, 1, Kind.CONVERT),
/** Convert double to long */
D2L(ClassFile.D2L, 1, Kind.CONVERT),
D2L(RawBytecodeHelper.D2L, 1, Kind.CONVERT),
/** Convert double to float */
D2F(ClassFile.D2F, 1, Kind.CONVERT),
D2F(RawBytecodeHelper.D2F, 1, Kind.CONVERT),
/** Convert int to byte */
I2B(ClassFile.I2B, 1, Kind.CONVERT),
I2B(RawBytecodeHelper.I2B, 1, Kind.CONVERT),
/** Convert int to char */
I2C(ClassFile.I2C, 1, Kind.CONVERT),
I2C(RawBytecodeHelper.I2C, 1, Kind.CONVERT),
/** Convert int to short */
I2S(ClassFile.I2S, 1, Kind.CONVERT),
I2S(RawBytecodeHelper.I2S, 1, Kind.CONVERT),
/** Compare long */
LCMP(ClassFile.LCMP, 1, Kind.OPERATOR),
LCMP(RawBytecodeHelper.LCMP, 1, Kind.OPERATOR),
/** Compare float */
FCMPL(ClassFile.FCMPL, 1, Kind.OPERATOR),
FCMPL(RawBytecodeHelper.FCMPL, 1, Kind.OPERATOR),
/** Compare float */
FCMPG(ClassFile.FCMPG, 1, Kind.OPERATOR),
FCMPG(RawBytecodeHelper.FCMPG, 1, Kind.OPERATOR),
/** Compare double */
DCMPL(ClassFile.DCMPL, 1, Kind.OPERATOR),
DCMPL(RawBytecodeHelper.DCMPL, 1, Kind.OPERATOR),
/** Compare double */
DCMPG(ClassFile.DCMPG, 1, Kind.OPERATOR),
DCMPG(RawBytecodeHelper.DCMPG, 1, Kind.OPERATOR),
/** Branch if int comparison with zero succeeds */
IFEQ(ClassFile.IFEQ, 3, Kind.BRANCH),
IFEQ(RawBytecodeHelper.IFEQ, 3, Kind.BRANCH),
/** Branch if int comparison with zero succeeds */
IFNE(ClassFile.IFNE, 3, Kind.BRANCH),
IFNE(RawBytecodeHelper.IFNE, 3, Kind.BRANCH),
/** Branch if int comparison with zero succeeds */
IFLT(ClassFile.IFLT, 3, Kind.BRANCH),
IFLT(RawBytecodeHelper.IFLT, 3, Kind.BRANCH),
/** Branch if int comparison with zero succeeds */
IFGE(ClassFile.IFGE, 3, Kind.BRANCH),
IFGE(RawBytecodeHelper.IFGE, 3, Kind.BRANCH),
/** Branch if int comparison with zero succeeds */
IFGT(ClassFile.IFGT, 3, Kind.BRANCH),
IFGT(RawBytecodeHelper.IFGT, 3, Kind.BRANCH),
/** Branch if int comparison with zero succeeds */
IFLE(ClassFile.IFLE, 3, Kind.BRANCH),
IFLE(RawBytecodeHelper.IFLE, 3, Kind.BRANCH),
/** Branch if int comparison succeeds */
IF_ICMPEQ(ClassFile.IF_ICMPEQ, 3, Kind.BRANCH),
IF_ICMPEQ(RawBytecodeHelper.IF_ICMPEQ, 3, Kind.BRANCH),
/** Branch if int comparison succeeds */
IF_ICMPNE(ClassFile.IF_ICMPNE, 3, Kind.BRANCH),
IF_ICMPNE(RawBytecodeHelper.IF_ICMPNE, 3, Kind.BRANCH),
/** Branch if int comparison succeeds */
IF_ICMPLT(ClassFile.IF_ICMPLT, 3, Kind.BRANCH),
IF_ICMPLT(RawBytecodeHelper.IF_ICMPLT, 3, Kind.BRANCH),
/** Branch if int comparison succeeds */
IF_ICMPGE(ClassFile.IF_ICMPGE, 3, Kind.BRANCH),
IF_ICMPGE(RawBytecodeHelper.IF_ICMPGE, 3, Kind.BRANCH),
/** Branch if int comparison succeeds */
IF_ICMPGT(ClassFile.IF_ICMPGT, 3, Kind.BRANCH),
IF_ICMPGT(RawBytecodeHelper.IF_ICMPGT, 3, Kind.BRANCH),
/** Branch if int comparison succeeds */
IF_ICMPLE(ClassFile.IF_ICMPLE, 3, Kind.BRANCH),
IF_ICMPLE(RawBytecodeHelper.IF_ICMPLE, 3, Kind.BRANCH),
/** Branch if reference comparison succeeds */
IF_ACMPEQ(ClassFile.IF_ACMPEQ, 3, Kind.BRANCH),
IF_ACMPEQ(RawBytecodeHelper.IF_ACMPEQ, 3, Kind.BRANCH),
/** Branch if reference comparison succeeds */
IF_ACMPNE(ClassFile.IF_ACMPNE, 3, Kind.BRANCH),
IF_ACMPNE(RawBytecodeHelper.IF_ACMPNE, 3, Kind.BRANCH),
/** Branch always */
GOTO(ClassFile.GOTO, 3, Kind.BRANCH),
GOTO(RawBytecodeHelper.GOTO, 3, Kind.BRANCH),
/**
* Jump subroutine is discontinued opcode
* @see java.lang.classfile.instruction.DiscontinuedInstruction
*/
JSR(ClassFile.JSR, 3, Kind.DISCONTINUED_JSR),
JSR(RawBytecodeHelper.JSR, 3, Kind.DISCONTINUED_JSR),
/**
* Return from subroutine is discontinued opcode
* @see java.lang.classfile.instruction.DiscontinuedInstruction
*/
RET(ClassFile.RET, 2, Kind.DISCONTINUED_RET),
RET(RawBytecodeHelper.RET, 2, Kind.DISCONTINUED_RET),
/** Access jump table by index and jump */
TABLESWITCH(ClassFile.TABLESWITCH, -1, Kind.TABLE_SWITCH),
TABLESWITCH(RawBytecodeHelper.TABLESWITCH, -1, Kind.TABLE_SWITCH),
/** Access jump table by key match and jump */
LOOKUPSWITCH(ClassFile.LOOKUPSWITCH, -1, Kind.LOOKUP_SWITCH),
LOOKUPSWITCH(RawBytecodeHelper.LOOKUPSWITCH, -1, Kind.LOOKUP_SWITCH),
/** Return int from method */
IRETURN(ClassFile.IRETURN, 1, Kind.RETURN),
IRETURN(RawBytecodeHelper.IRETURN, 1, Kind.RETURN),
/** Return long from method */
LRETURN(ClassFile.LRETURN, 1, Kind.RETURN),
LRETURN(RawBytecodeHelper.LRETURN, 1, Kind.RETURN),
/** Return float from method */
FRETURN(ClassFile.FRETURN, 1, Kind.RETURN),
FRETURN(RawBytecodeHelper.FRETURN, 1, Kind.RETURN),
/** Return double from method */
DRETURN(ClassFile.DRETURN, 1, Kind.RETURN),
DRETURN(RawBytecodeHelper.DRETURN, 1, Kind.RETURN),
/** Return reference from method */
ARETURN(ClassFile.ARETURN, 1, Kind.RETURN),
ARETURN(RawBytecodeHelper.ARETURN, 1, Kind.RETURN),
/** Return void from method */
RETURN(ClassFile.RETURN, 1, Kind.RETURN),
RETURN(RawBytecodeHelper.RETURN, 1, Kind.RETURN),
/** Get static field from class */
GETSTATIC(ClassFile.GETSTATIC, 3, Kind.FIELD_ACCESS),
GETSTATIC(RawBytecodeHelper.GETSTATIC, 3, Kind.FIELD_ACCESS),
/** Set static field in class */
PUTSTATIC(ClassFile.PUTSTATIC, 3, Kind.FIELD_ACCESS),
PUTSTATIC(RawBytecodeHelper.PUTSTATIC, 3, Kind.FIELD_ACCESS),
/** Fetch field from object */
GETFIELD(ClassFile.GETFIELD, 3, Kind.FIELD_ACCESS),
GETFIELD(RawBytecodeHelper.GETFIELD, 3, Kind.FIELD_ACCESS),
/** Set field in object */
PUTFIELD(ClassFile.PUTFIELD, 3, Kind.FIELD_ACCESS),
PUTFIELD(RawBytecodeHelper.PUTFIELD, 3, Kind.FIELD_ACCESS),
/** Invoke instance method; dispatch based on class */
INVOKEVIRTUAL(ClassFile.INVOKEVIRTUAL, 3, Kind.INVOKE),
INVOKEVIRTUAL(RawBytecodeHelper.INVOKEVIRTUAL, 3, Kind.INVOKE),
/**
* Invoke instance method; direct invocation of instance initialization
* methods and methods of the current class and its supertypes
*/
INVOKESPECIAL(ClassFile.INVOKESPECIAL, 3, Kind.INVOKE),
INVOKESPECIAL(RawBytecodeHelper.INVOKESPECIAL, 3, Kind.INVOKE),
/** Invoke a class (static) method */
INVOKESTATIC(ClassFile.INVOKESTATIC, 3, Kind.INVOKE),
INVOKESTATIC(RawBytecodeHelper.INVOKESTATIC, 3, Kind.INVOKE),
/** Invoke interface method */
INVOKEINTERFACE(ClassFile.INVOKEINTERFACE, 5, Kind.INVOKE),
INVOKEINTERFACE(RawBytecodeHelper.INVOKEINTERFACE, 5, Kind.INVOKE),
/** Invoke a dynamically-computed call site */
INVOKEDYNAMIC(ClassFile.INVOKEDYNAMIC, 5, Kind.INVOKE_DYNAMIC),
INVOKEDYNAMIC(RawBytecodeHelper.INVOKEDYNAMIC, 5, Kind.INVOKE_DYNAMIC),
/** Create new object */
NEW(ClassFile.NEW, 3, Kind.NEW_OBJECT),
NEW(RawBytecodeHelper.NEW, 3, Kind.NEW_OBJECT),
/** Create new array */
NEWARRAY(ClassFile.NEWARRAY, 2, Kind.NEW_PRIMITIVE_ARRAY),
NEWARRAY(RawBytecodeHelper.NEWARRAY, 2, Kind.NEW_PRIMITIVE_ARRAY),
/** Create new array of reference */
ANEWARRAY(ClassFile.ANEWARRAY, 3, Kind.NEW_REF_ARRAY),
ANEWARRAY(RawBytecodeHelper.ANEWARRAY, 3, Kind.NEW_REF_ARRAY),
/** Get length of array */
ARRAYLENGTH(ClassFile.ARRAYLENGTH, 1, Kind.OPERATOR),
ARRAYLENGTH(RawBytecodeHelper.ARRAYLENGTH, 1, Kind.OPERATOR),
/** Throw exception or error */
ATHROW(ClassFile.ATHROW, 1, Kind.THROW_EXCEPTION),
ATHROW(RawBytecodeHelper.ATHROW, 1, Kind.THROW_EXCEPTION),
/** Check whether object is of given type */
CHECKCAST(ClassFile.CHECKCAST, 3, Kind.TYPE_CHECK),
CHECKCAST(RawBytecodeHelper.CHECKCAST, 3, Kind.TYPE_CHECK),
/** Determine if object is of given type */
INSTANCEOF(ClassFile.INSTANCEOF, 3, Kind.TYPE_CHECK),
INSTANCEOF(RawBytecodeHelper.INSTANCEOF, 3, Kind.TYPE_CHECK),
/** Enter monitor for object */
MONITORENTER(ClassFile.MONITORENTER, 1, Kind.MONITOR),
MONITORENTER(RawBytecodeHelper.MONITORENTER, 1, Kind.MONITOR),
/** Exit monitor for object */
MONITOREXIT(ClassFile.MONITOREXIT, 1, Kind.MONITOR),
MONITOREXIT(RawBytecodeHelper.MONITOREXIT, 1, Kind.MONITOR),
/** Create new multidimensional array */
MULTIANEWARRAY(ClassFile.MULTIANEWARRAY, 4, Kind.NEW_MULTI_ARRAY),
MULTIANEWARRAY(RawBytecodeHelper.MULTIANEWARRAY, 4, Kind.NEW_MULTI_ARRAY),
/** Branch if reference is null */
IFNULL(ClassFile.IFNULL, 3, Kind.BRANCH),
IFNULL(RawBytecodeHelper.IFNULL, 3, Kind.BRANCH),
/** Branch if reference not null */
IFNONNULL(ClassFile.IFNONNULL, 3, Kind.BRANCH),
IFNONNULL(RawBytecodeHelper.IFNONNULL, 3, Kind.BRANCH),
/** Branch always (wide index) */
GOTO_W(ClassFile.GOTO_W, 5, Kind.BRANCH),
GOTO_W(RawBytecodeHelper.GOTO_W, 5, Kind.BRANCH),
/**
* Jump subroutine (wide index) is discontinued opcode
* @see java.lang.classfile.instruction.DiscontinuedInstruction
*/
JSR_W(ClassFile.JSR_W, 5, Kind.DISCONTINUED_JSR),
JSR_W(RawBytecodeHelper.JSR_W, 5, Kind.DISCONTINUED_JSR),
/** Load int from local variable (wide index) */
ILOAD_W((ClassFile.WIDE << 8) | ClassFile.ILOAD, 4, Kind.LOAD),
ILOAD_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.ILOAD, 4, Kind.LOAD),
/** Load long from local variable (wide index) */
LLOAD_W((ClassFile.WIDE << 8) | ClassFile.LLOAD, 4, Kind.LOAD),
LLOAD_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.LLOAD, 4, Kind.LOAD),
/** Load float from local variable (wide index) */
FLOAD_W((ClassFile.WIDE << 8) | ClassFile.FLOAD, 4, Kind.LOAD),
FLOAD_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.FLOAD, 4, Kind.LOAD),
/** Load double from local variable (wide index) */
DLOAD_W((ClassFile.WIDE << 8) | ClassFile.DLOAD, 4, Kind.LOAD),
DLOAD_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.DLOAD, 4, Kind.LOAD),
/** Load reference from local variable (wide index) */
ALOAD_W((ClassFile.WIDE << 8) | ClassFile.ALOAD, 4, Kind.LOAD),
ALOAD_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.ALOAD, 4, Kind.LOAD),
/** Store int into local variable (wide index) */
ISTORE_W((ClassFile.WIDE << 8) | ClassFile.ISTORE, 4, Kind.STORE),
ISTORE_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.ISTORE, 4, Kind.STORE),
/** Store long into local variable (wide index) */
LSTORE_W((ClassFile.WIDE << 8) | ClassFile.LSTORE, 4, Kind.STORE),
LSTORE_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.LSTORE, 4, Kind.STORE),
/** Store float into local variable (wide index) */
FSTORE_W((ClassFile.WIDE << 8) | ClassFile.FSTORE, 4, Kind.STORE),
FSTORE_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.FSTORE, 4, Kind.STORE),
/** Store double into local variable (wide index) */
DSTORE_W((ClassFile.WIDE << 8) | ClassFile.DSTORE, 4, Kind.STORE),
DSTORE_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.DSTORE, 4, Kind.STORE),
/** Store reference into local variable (wide index) */
ASTORE_W((ClassFile.WIDE << 8) | ClassFile.ASTORE, 4, Kind.STORE),
ASTORE_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.ASTORE, 4, Kind.STORE),
/**
* Return from subroutine (wide index) is discontinued opcode
* @see java.lang.classfile.instruction.DiscontinuedInstruction
*/
RET_W((ClassFile.WIDE << 8) | ClassFile.RET, 4, Kind.DISCONTINUED_RET),
RET_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.RET, 4, Kind.DISCONTINUED_RET),
/** Increment local variable by constant (wide index) */
IINC_W((ClassFile.WIDE << 8) | ClassFile.IINC, 6, Kind.INCREMENT);
IINC_W((RawBytecodeHelper.WIDE << 8) | RawBytecodeHelper.IINC, 6, Kind.INCREMENT);
/**
* Kinds of opcodes.
@ -1085,13 +1086,13 @@ public enum Opcode {
/**
* {@return the opcode value} For {@linkplain #isWide() wide} pseudo-opcodes, returns the
* first 2 bytes of the instruction, which are the {@code wide} opcode and the functional
* local variable opcode, as a U2 value.
* first 2 bytes of the instruction, which are the wide opcode {@code 196} ({@code 0xC4})
* and the functional opcode, as a U2 value.
*/
public int bytecode() { return bytecode; }
/**
* {@return true if this is a pseudo-opcode modified by {@code wide}}
* {@return true if this is a pseudo-opcode modified by wide opcode}
*
* @see #ILOAD_W
* @see #LLOAD_W