/*
* Copyright (c) 2013-2015 Chris Newland.
* Licensed under https://github.com/AdoptOpenJDK/jitwatch/blob/master/LICENSE-BSD
* Instructions: https://github.com/AdoptOpenJDK/jitwatch/wiki
*/
package org.adoptopenjdk.jitwatch.model.bytecode;
import java.util.HashMap;
import java.util.Map;
public enum Opcode implements Comparable<Opcode>
{
NOP(0, "nop"), ACONST_NULL(1, "aconst_null"), ICONST_M1(2, "iconst_m1"), ICONST_0(3, "iconst_0"), ICONST_1(4,
"iconst_1"), ICONST_2(5, "iconst_2"), ICONST_3(6, "iconst_3"), ICONST_4(7, "iconst_4"), ICONST_5(8,
"iconst_5"), LCONST_0(9, "lconst_0"), LCONST_1(10, "lconst_1"), FCONST_0(11, "fconst_0"), FCONST_1(12,
"fconst_1"), FCONST_2(13, "fconst_2"), DCONST_0(14, "dconst_0"), DCONST_1(15, "dconst_1"), BIPUSH(16,
"bipush"), SIPUSH(17, "sipush"), LDC(18, "ldc"), LDC_W(19, "ldc_w"), LDC2_W(20,
"ldc2_w"), ILOAD(21, "iload"), LLOAD(22, "lload"), FLOAD(23, "fload"), DLOAD(24,
"dload"), ALOAD(25, "aload"), ILOAD_0(26, "iload_0"), ILOAD_1(27,
"iload_1"), ILOAD_2(28, "iload_2"), ILOAD_3(29, "iload_3"), LLOAD_0(30,
"lload_0"), LLOAD_1(31, "lload_1"), LLOAD_2(32,
"lload_2"), LLOAD_3(33, "lload_3"), FLOAD_0(34,
"fload_0"), FLOAD_1(35, "fload_1"), FLOAD_2(36,
"fload_2"), FLOAD_3(37,
"fload_3"), DLOAD_0(38,
"dload_0"), DLOAD_1(39,
"dload_1"), DLOAD_2(
40,
"dload_2"), DLOAD_3(
41,
"dload_3"), ALOAD_0(
42,
"aload_0"), ALOAD_1(
43,
"aload_1"), ALOAD_2(
44,
"aload_2"), ALOAD_3(
45,
"aload_3"), IALOAD(
46,
"iaload"), LALOAD(
47,
"laload"), FALOAD(
48,
"faload"), DALOAD(
49,
"daload"), AALOAD(
50,
"aaload"), BALOAD(
51,
"baload"), CALOAD(
52,
"caload"), SALOAD(
53,
"saload"), ISTORE(
54,
"istore"), LSTORE(
55,
"lstore"), FSTORE(
56,
"fstore"), DSTORE(
57,
"dstore"), ASTORE(
58,
"astore"), ISTORE_0(
59,
"istore_0"), ISTORE_1(
60,
"istore_1"), ISTORE_2(
61,
"istore_2"), ISTORE_3(
62,
"istore_3"), LSTORE_0(
63,
"lstore_0"), LSTORE_1(
64,
"lstore_1"), LSTORE_2(
65,
"lstore_2"), LSTORE_3(
66,
"lstore_3"), FSTORE_0(
67,
"fstore_0"), FSTORE_1(
68,
"fstore_1"), FSTORE_2(
69,
"fstore_2"), FSTORE_3(
70,
"fstore_3"), DSTORE_0(
71,
"dstore_0"), DSTORE_1(
72,
"dstore_1"), DSTORE_2(
73,
"dstore_2"), DSTORE_3(
74,
"dstore_3"), ASTORE_0(
75,
"astore_0"), ASTORE_1(
76,
"astore_1"), ASTORE_2(
77,
"astore_2"), ASTORE_3(
78,
"astore_3"), IASTORE(
79,
"iastore"), LASTORE(
80,
"lastore"), FASTORE(
81,
"fastore"), DASTORE(
82,
"dastore"), AASTORE(
83,
"aastore"), BASTORE(
84,
"bastore"), CASTORE(
85,
"castore"), SASTORE(
86,
"sastore"), POP(
87,
"pop"), POP2(
88,
"pop2"), DUP(
89,
"dup"), DUP_X1(
90,
"dup_x1"), DUP_X2(
91,
"dup_x2"), DUP2(
92,
"dup2"), DUP2_X1(
93,
"dup2_x1"), DUP2_X2(
94,
"dup2_x2"), SWAP(
95,
"swap"), IADD(
96,
"iadd"), LADD(
97,
"ladd"), FADD(
98,
"fadd"), DADD(
99,
"dadd"), ISUB(
100,
"isub"), LSUB(
101,
"lsub"), FSUB(
102,
"fsub"), DSUB(
103,
"dsub"), IMUL(
104,
"imul"), LMUL(
105,
"lmul"), FMUL(
106,
"fmul"), DMUL(
107,
"dmul"), IDIV(
108,
"idiv"), LDIV(
109,
"ldiv"), FDIV(
110,
"fdiv"), DDIV(
111,
"ddiv"), IREM(
112,
"irem"), LREM(
113,
"lrem"), FREM(
114,
"frem"), DREM(
115,
"drem"), INEG(
116,
"ineg"), LNEG(
117,
"lneg"), FNEG(
118,
"fneg"), DNEG(
119,
"dneg"), ISHL(
120,
"ishl"), LSHL(
121,
"lshl"), ISHR(
122,
"ishr"), LSHR(
123,
"lshr"), IUSHR(
124,
"iushr"), LUSHR(
125,
"lushr"), IAND(
126,
"iand"), LAND(
127,
"land"), IOR(
128,
"ior"), LOR(
129,
"lor"), IXOR(
130,
"ixor"), LXOR(
131,
"lxor"), IINC(
132,
"iinc"), I2L(
133,
"i2l"), I2F(
134,
"i2f"), I2D(
135,
"i2d"), L2I(
136,
"l2i"), L2F(
137,
"l2f"), L2D(
138,
"l2d"), F2I(
139,
"f2i"), F2L(
140,
"f2l"), F2D(
141,
"f2d"), D2I(
142,
"d2i"), D2L(
143,
"d2l"), D2F(
144,
"d2f"), I2B(
145,
"i2b"), I2C(
146,
"i2c"), I2S(
147,
"i2s"), LCMP(
148,
"lcmp"), FCMPL(
149,
"fcmpl"), FCMPG(
150,
"fcmpg"), DCMPL(
151,
"dcmpl"), DCMPG(
152,
"dcmpg"), IFEQ(
153,
"ifeq"), IFNE(
154,
"ifne"), IFLT(
155,
"iflt"), IFGE(
156,
"ifge"), IFGT(
157,
"ifgt"), IFLE(
158,
"ifle"), IF_ICMPEQ(
159,
"if_icmpeq"), IF_ICMPNE(
160,
"if_icmpne"), IF_ICMPLT(
161,
"if_icmplt"), IF_ICMPGE(
162,
"if_icmpge"), IF_ICMPGT(
163,
"if_icmpgt"), IF_ICMPLE(
164,
"if_icmple"), IF_ACMPEQ(
165,
"if_acmpeq"), IF_ACMPNE(
166,
"if_acmpne"), GOTO(
167,
"goto"), JSR(
168,
"jsr"), RET(
169,
"ret"), TABLESWITCH(
170,
"tableswitch"), LOOKUPSWITCH(
171,
"lookupswitch"), IRETURN(
172,
"ireturn"), LRETURN(
173,
"lreturn"), FRETURN(
174,
"freturn"), DRETURN(
175,
"dreturn"), ARETURN(
176,
"areturn"), RETURN(
177,
"return"), GETSTATIC(
178,
"getstatic"), PUTSTATIC(
179,
"putstatic"), GETFIELD(
180,
"getfield"), PUTFIELD(
181,
"putfield"), INVOKEVIRTUAL(
182,
"invokevirtual"), INVOKESPECIAL(
183,
"invokespecial"), INVOKESTATIC(
184,
"invokestatic"), INVOKEINTERFACE(
185,
"invokeinterface"), INVOKEDYNAMIC(
186,
"invokedynamic"), NEW(
187,
"new"), NEWARRAY(
188,
"newarray"), ANEWARRAY(
189,
"anewarray"), ARRAYLENGTH(
190,
"arraylength"), ATHROW(
191,
"athrow"), CHECKCAST(
192,
"checkcast"), INSTANCEOF(
193,
"instanceof"), MONITORENTER(
194,
"monitorenter"), MONITOREXIT(
195,
"monitorexit"), WIDE(
196,
"wide"), MULTIANEWARRAY(
197,
"multianewarray"), IFNULL(
198,
"ifnull"), IFNONNULL(
199,
"ifnonnull"), GOTO_W(
200,
"goto_w"), JSR_W(
201,
"jsr_w"), BREAKPOINT(
202,
"breakpoint"), IMPDEP1(
254,
"impdep1"), IMPDEP2(
255,
"impdep2");
Opcode(int code, String text)
{
this.code = code;
this.mnemonic = text;
}
private final int code;
private final String mnemonic;
public int getCode()
{
return code;
}
public String getMnemonic()
{
return mnemonic;
}
static final Map<String, Opcode> mnemonicMap = new HashMap<>();
static final Map<Integer, Opcode> opcodeMap = new HashMap<>();
static
{
for (Opcode oc : Opcode.values())
{
mnemonicMap.put(oc.getMnemonic(), oc);
opcodeMap.put(oc.getCode(), oc);
}
}
public boolean isInvoke()
{
return this == Opcode.INVOKEVIRTUAL || this == Opcode.INVOKESPECIAL || this == Opcode.INVOKESTATIC
|| this == Opcode.INVOKEINTERFACE || this == Opcode.INVOKEDYNAMIC;
}
public boolean isLock()
{
return this == Opcode.MONITORENTER;
}
public boolean isSwitch()
{
return this == Opcode.TABLESWITCH || this == Opcode.LOOKUPSWITCH;
}
public boolean isAllocation()
{
return this == NEW || this == Opcode.NEWARRAY || this == ANEWARRAY || this == MULTIANEWARRAY;
}
public static Opcode getByMnemonic(String mnemonic)
{
return mnemonicMap.get(mnemonic);
}
public static Opcode getByCode(int code)
{
return opcodeMap.get(code);
}
public boolean equals(String mnemonic)
{
return this.mnemonic.equals(mnemonic);
}
}