opu.lljvm-python.0.2.0-EXPERIMENTAL.source-code.InsnInfo Maven / Gradle / Ivy
The newest version!
/* --- Copyright Jonathan Meyer 1997. All rights reserved. -----------------
> File: jasmin/src/jasmin/InsnInfo.java
> Purpose: Information about instructions (opcode, type of args, etc)
> Author: Jonathan Meyer, 8 Feb 1996
*/
//
// InsnInfo is used to hold info about the opcode and parameters needed
// by an instruction. Instances of InsnInfo are created by a static
// initializer and stored in a table.
//
package jasmin;
import jas.RuntimeConstants;
import java.util.Hashtable;
class InsnInfo {
// maps instruction name -> InsnInfo object
private static Hashtable infoTable;
// information maintained about each instruction:
public String name; // instruction name
public int opcode; // its opcode
public String args; // the argument code
public static InsnInfo get(String name) {
return (InsnInfo)infoTable.get(name);
}
public static boolean contains(String name) {
return infoTable.get(name) != null;
}
//
// used to initialize the infoTable table (see below)
//
static private void addInfo(String name, int opcode, String args) {
InsnInfo info = new InsnInfo();
info.name = name;
info.opcode = opcode;
info.args = args;
infoTable.put(name, info);
}
//
// initializes the infoTable table
//
static {
infoTable = new Hashtable();
addInfo("aaload", RuntimeConstants.opc_aaload, "");
addInfo("aastore", RuntimeConstants.opc_aastore, "");
addInfo("aconst_null", RuntimeConstants.opc_aconst_null, "");
addInfo("aload", RuntimeConstants.opc_aload, "i");
addInfo("aload_w", RuntimeConstants.opc_aload, "I");
addInfo("aload_0", RuntimeConstants.opc_aload_0, "");
addInfo("aload_1", RuntimeConstants.opc_aload_1, "");
addInfo("aload_2", RuntimeConstants.opc_aload_2, "");
addInfo("aload_3", RuntimeConstants.opc_aload_3, "");
addInfo("anewarray", RuntimeConstants.opc_anewarray, "class");
addInfo("areturn", RuntimeConstants.opc_areturn, "");
addInfo("arraylength", RuntimeConstants.opc_arraylength, "");
addInfo("astore", RuntimeConstants.opc_astore, "i");
addInfo("astore_w", RuntimeConstants.opc_astore, "I");
addInfo("astore_0", RuntimeConstants.opc_astore_0, "");
addInfo("astore_1", RuntimeConstants.opc_astore_1, "");
addInfo("astore_2", RuntimeConstants.opc_astore_2, "");
addInfo("astore_3", RuntimeConstants.opc_astore_3, "");
addInfo("athrow", RuntimeConstants.opc_athrow, "");
addInfo("baload", RuntimeConstants.opc_baload, "");
addInfo("bastore", RuntimeConstants.opc_bastore, "");
addInfo("bipush", RuntimeConstants.opc_bipush, "i");
addInfo("breakpoint", RuntimeConstants.opc_breakpoint, "");
addInfo("caload", RuntimeConstants.opc_caload, "");
addInfo("castore", RuntimeConstants.opc_castore, "");
addInfo("checkcast", RuntimeConstants.opc_checkcast, "class");
addInfo("d2f", RuntimeConstants.opc_d2f, "");
addInfo("d2i", RuntimeConstants.opc_d2i, "");
addInfo("d2l", RuntimeConstants.opc_d2l, "");
addInfo("dadd", RuntimeConstants.opc_dadd, "");
addInfo("daload", RuntimeConstants.opc_daload, "");
addInfo("dastore", RuntimeConstants.opc_dastore, "");
addInfo("dcmpg", RuntimeConstants.opc_dcmpg, "");
addInfo("dcmpl", RuntimeConstants.opc_dcmpl, "");
addInfo("dconst_0", RuntimeConstants.opc_dconst_0, "");
addInfo("dconst_1", RuntimeConstants.opc_dconst_1, "");
addInfo("ddiv", RuntimeConstants.opc_ddiv, "");
addInfo("dload", RuntimeConstants.opc_dload, "i");
addInfo("dload_w", RuntimeConstants.opc_dload, "I");
addInfo("dload_0", RuntimeConstants.opc_dload_0, "");
addInfo("dload_1", RuntimeConstants.opc_dload_1, "");
addInfo("dload_2", RuntimeConstants.opc_dload_2, "");
addInfo("dload_3", RuntimeConstants.opc_dload_3, "");
addInfo("dmul", RuntimeConstants.opc_dmul, "");
addInfo("dneg", RuntimeConstants.opc_dneg, "");
addInfo("drem", RuntimeConstants.opc_drem, "");
addInfo("dreturn", RuntimeConstants.opc_dreturn, "");
addInfo("dstore", RuntimeConstants.opc_dstore, "i");
addInfo("dstore_w", RuntimeConstants.opc_dstore, "I");
addInfo("dstore_0", RuntimeConstants.opc_dstore_0, "");
addInfo("dstore_1", RuntimeConstants.opc_dstore_1, "");
addInfo("dstore_2", RuntimeConstants.opc_dstore_2, "");
addInfo("dstore_3", RuntimeConstants.opc_dstore_3, "");
addInfo("dsub", RuntimeConstants.opc_dsub, "");
addInfo("dup", RuntimeConstants.opc_dup, "");
addInfo("dup2", RuntimeConstants.opc_dup2, "");
addInfo("dup2_x1", RuntimeConstants.opc_dup2_x1, "");
addInfo("dup2_x2", RuntimeConstants.opc_dup2_x2, "");
addInfo("dup_x1", RuntimeConstants.opc_dup_x1, "");
addInfo("dup_x2", RuntimeConstants.opc_dup_x2, "");
addInfo("f2d", RuntimeConstants.opc_f2d, "");
addInfo("f2i", RuntimeConstants.opc_f2i, "");
addInfo("f2l", RuntimeConstants.opc_f2l, "");
addInfo("fadd", RuntimeConstants.opc_fadd, "");
addInfo("faload", RuntimeConstants.opc_faload, "");
addInfo("fastore", RuntimeConstants.opc_fastore, "");
addInfo("fcmpg", RuntimeConstants.opc_fcmpg, "");
addInfo("fcmpl", RuntimeConstants.opc_fcmpl, "");
addInfo("fconst_0", RuntimeConstants.opc_fconst_0, "");
addInfo("fconst_1", RuntimeConstants.opc_fconst_1, "");
addInfo("fconst_2", RuntimeConstants.opc_fconst_2, "");
addInfo("fdiv", RuntimeConstants.opc_fdiv, "");
addInfo("fload", RuntimeConstants.opc_fload, "i");
addInfo("fload_w", RuntimeConstants.opc_fload, "I");
addInfo("fload_0", RuntimeConstants.opc_fload_0, "");
addInfo("fload_1", RuntimeConstants.opc_fload_1, "");
addInfo("fload_2", RuntimeConstants.opc_fload_2, "");
addInfo("fload_3", RuntimeConstants.opc_fload_3, "");
addInfo("fmul", RuntimeConstants.opc_fmul, "");
addInfo("fneg", RuntimeConstants.opc_fneg, "");
addInfo("frem", RuntimeConstants.opc_frem, "");
addInfo("freturn", RuntimeConstants.opc_freturn, "");
addInfo("fstore", RuntimeConstants.opc_fstore, "i");
addInfo("fstore_w", RuntimeConstants.opc_fstore, "I");
addInfo("fstore_0", RuntimeConstants.opc_fstore_0, "");
addInfo("fstore_1", RuntimeConstants.opc_fstore_1, "");
addInfo("fstore_2", RuntimeConstants.opc_fstore_2, "");
addInfo("fstore_3", RuntimeConstants.opc_fstore_3, "");
addInfo("fsub", RuntimeConstants.opc_fsub, "");
addInfo("getfield", RuntimeConstants.opc_getfield, "field");
addInfo("getstatic", RuntimeConstants.opc_getstatic, "field");
addInfo("goto", RuntimeConstants.opc_goto, "label");
addInfo("goto_w", RuntimeConstants.opc_goto_w, "label");
addInfo("i2d", RuntimeConstants.opc_i2d, "");
addInfo("i2f", RuntimeConstants.opc_i2f, "");
addInfo("i2l", RuntimeConstants.opc_i2l, "");
addInfo("iadd", RuntimeConstants.opc_iadd, "");
addInfo("iaload", RuntimeConstants.opc_iaload, "");
addInfo("iand", RuntimeConstants.opc_iand, "");
addInfo("iastore", RuntimeConstants.opc_iastore, "");
addInfo("iconst_0", RuntimeConstants.opc_iconst_0, "");
addInfo("iconst_1", RuntimeConstants.opc_iconst_1, "");
addInfo("iconst_2", RuntimeConstants.opc_iconst_2, "");
addInfo("iconst_3", RuntimeConstants.opc_iconst_3, "");
addInfo("iconst_4", RuntimeConstants.opc_iconst_4, "");
addInfo("iconst_5", RuntimeConstants.opc_iconst_5, "");
addInfo("iconst_m1", RuntimeConstants.opc_iconst_m1, "");
addInfo("idiv", RuntimeConstants.opc_idiv, "");
addInfo("if_acmpeq", RuntimeConstants.opc_if_acmpeq, "label");
addInfo("if_acmpne", RuntimeConstants.opc_if_acmpne, "label");
addInfo("if_icmpeq", RuntimeConstants.opc_if_icmpeq, "label");
addInfo("if_icmpge", RuntimeConstants.opc_if_icmpge, "label");
addInfo("if_icmpgt", RuntimeConstants.opc_if_icmpgt, "label");
addInfo("if_icmple", RuntimeConstants.opc_if_icmple, "label");
addInfo("if_icmplt", RuntimeConstants.opc_if_icmplt, "label");
addInfo("if_icmpne", RuntimeConstants.opc_if_icmpne, "label");
addInfo("ifeq", RuntimeConstants.opc_ifeq, "label");
addInfo("ifge", RuntimeConstants.opc_ifge, "label");
addInfo("ifgt", RuntimeConstants.opc_ifgt, "label");
addInfo("ifle", RuntimeConstants.opc_ifle, "label");
addInfo("iflt", RuntimeConstants.opc_iflt, "label");
addInfo("ifne", RuntimeConstants.opc_ifne, "label");
addInfo("ifnonnull", RuntimeConstants.opc_ifnonnull, "label");
addInfo("ifnull", RuntimeConstants.opc_ifnull, "label");
addInfo("iinc", RuntimeConstants.opc_iinc, "ii");
addInfo("iinc_w", RuntimeConstants.opc_iinc, "Ii");
addInfo("iload", RuntimeConstants.opc_iload, "i");
addInfo("iload_w", RuntimeConstants.opc_iload, "I");
addInfo("iload_0", RuntimeConstants.opc_iload_0, "");
addInfo("iload_1", RuntimeConstants.opc_iload_1, "");
addInfo("iload_2", RuntimeConstants.opc_iload_2, "");
addInfo("iload_3", RuntimeConstants.opc_iload_3, "");
addInfo("imul", RuntimeConstants.opc_imul, "");
addInfo("ineg", RuntimeConstants.opc_ineg, "");
addInfo("instanceof", RuntimeConstants.opc_instanceof, "class");
addInfo("int2byte", RuntimeConstants.opc_int2byte, "");
addInfo("int2char", RuntimeConstants.opc_int2char, "");
addInfo("int2short", RuntimeConstants.opc_int2short, "");
// added this synonym
addInfo("i2b", RuntimeConstants.opc_int2byte, "");
// added this synonym
addInfo("i2c", RuntimeConstants.opc_int2char, "");
// added this synonym
addInfo("i2s", RuntimeConstants.opc_int2short, "");
addInfo("invokedynamic", RuntimeConstants.opc_invokedynamic, "method");
addInfo("invokeinterface", RuntimeConstants.opc_invokeinterface, "interface");
addInfo("invokenonvirtual", RuntimeConstants.opc_invokenonvirtual, "method");
// added this synonym
addInfo("invokespecial", RuntimeConstants.opc_invokenonvirtual, "method");
addInfo("invokestatic", RuntimeConstants.opc_invokestatic, "method");
addInfo("invokevirtual", RuntimeConstants.opc_invokevirtual, "method");
addInfo("ior", RuntimeConstants.opc_ior, "");
addInfo("irem", RuntimeConstants.opc_irem, "");
addInfo("ireturn", RuntimeConstants.opc_ireturn, "");
addInfo("ishl", RuntimeConstants.opc_ishl, "");
addInfo("ishr", RuntimeConstants.opc_ishr, "");
addInfo("istore", RuntimeConstants.opc_istore, "i");
addInfo("istore_w", RuntimeConstants.opc_istore, "I");
addInfo("istore_0", RuntimeConstants.opc_istore_0, "");
addInfo("istore_1", RuntimeConstants.opc_istore_1, "");
addInfo("istore_2", RuntimeConstants.opc_istore_2, "");
addInfo("istore_3", RuntimeConstants.opc_istore_3, "");
addInfo("isub", RuntimeConstants.opc_isub, "");
addInfo("iushr", RuntimeConstants.opc_iushr, "");
addInfo("ixor", RuntimeConstants.opc_ixor, "");
addInfo("jsr", RuntimeConstants.opc_jsr, "label");
addInfo("jsr_w", RuntimeConstants.opc_jsr_w, "label");
addInfo("l2d", RuntimeConstants.opc_l2d, "");
addInfo("l2f", RuntimeConstants.opc_l2f, "");
addInfo("l2i", RuntimeConstants.opc_l2i, "");
addInfo("ladd", RuntimeConstants.opc_ladd, "");
addInfo("laload", RuntimeConstants.opc_laload, "");
addInfo("land", RuntimeConstants.opc_land, "");
addInfo("lastore", RuntimeConstants.opc_lastore, "");
addInfo("lcmp", RuntimeConstants.opc_lcmp, "");
addInfo("lconst_0", RuntimeConstants.opc_lconst_0, "");
addInfo("lconst_1", RuntimeConstants.opc_lconst_1, "");
addInfo("ldc", RuntimeConstants.opc_ldc, "constant");
addInfo("ldc_w", RuntimeConstants.opc_ldc_w, "constant");
addInfo("ldc2_w", RuntimeConstants.opc_ldc2_w, "bigconstant");
addInfo("ldiv", RuntimeConstants.opc_ldiv, "");
addInfo("lload", RuntimeConstants.opc_lload, "i");
addInfo("lload_w", RuntimeConstants.opc_lload, "I");
addInfo("lload_0", RuntimeConstants.opc_lload_0, "");
addInfo("lload_1", RuntimeConstants.opc_lload_1, "");
addInfo("lload_2", RuntimeConstants.opc_lload_2, "");
addInfo("lload_3", RuntimeConstants.opc_lload_3, "");
addInfo("lmul", RuntimeConstants.opc_lmul, "");
addInfo("lneg", RuntimeConstants.opc_lneg, "");
addInfo("lookupswitch", RuntimeConstants.opc_lookupswitch, "switch");
addInfo("lor", RuntimeConstants.opc_lor, "");
addInfo("lrem", RuntimeConstants.opc_lrem, "");
addInfo("lreturn", RuntimeConstants.opc_lreturn, "");
addInfo("lshl", RuntimeConstants.opc_lshl, "");
addInfo("lshr", RuntimeConstants.opc_lshr, "");
addInfo("lstore", RuntimeConstants.opc_lstore, "i");
addInfo("lstore_w", RuntimeConstants.opc_lstore, "I");
addInfo("lstore_0", RuntimeConstants.opc_lstore_0, "");
addInfo("lstore_1", RuntimeConstants.opc_lstore_1, "");
addInfo("lstore_2", RuntimeConstants.opc_lstore_2, "");
addInfo("lstore_3", RuntimeConstants.opc_lstore_3, "");
addInfo("lsub", RuntimeConstants.opc_lsub, "");
addInfo("lushr", RuntimeConstants.opc_lushr, "");
addInfo("lxor", RuntimeConstants.opc_lxor, "");
addInfo("monitorenter", RuntimeConstants.opc_monitorenter, "");
addInfo("monitorexit", RuntimeConstants.opc_monitorexit, "");
addInfo("multianewarray", RuntimeConstants.opc_multianewarray, "marray");
addInfo("new", RuntimeConstants.opc_new, "class");
addInfo("newarray", RuntimeConstants.opc_newarray, "atype");
addInfo("nop", RuntimeConstants.opc_nop, "");
addInfo("pop", RuntimeConstants.opc_pop, "");
addInfo("pop2", RuntimeConstants.opc_pop2, "");
addInfo("putfield", RuntimeConstants.opc_putfield, "field");
addInfo("putstatic", RuntimeConstants.opc_putstatic, "field");
addInfo("ret", RuntimeConstants.opc_ret, "i");
addInfo("ret_w", RuntimeConstants.opc_ret, "I");
addInfo("return", RuntimeConstants.opc_return, "");
addInfo("saload", RuntimeConstants.opc_saload, "");
addInfo("sastore", RuntimeConstants.opc_sastore, "");
addInfo("sipush", RuntimeConstants.opc_sipush, "i");
addInfo("swap", RuntimeConstants.opc_swap, "");
addInfo("tableswitch", RuntimeConstants.opc_tableswitch, "switch");
}
};
/* --- Revision History ---------------------------------------------------
--- Iouri Kharon, Aug 10 2006
Removed 'wide' as 'ignored' instruction
Added definition for '_w' aliases for some instructions
--- Iouri Kharon, Mar 14 2006
Change: 'ldc_w' is NOT synonym for 'ldc'
--- Iouri Kharon, Dec 23 2005
Added invokedynamic
Change: 'jsr_w' is NOT synonym for 'jsr'
--- Jonathan Meyer, Feb 8 1997
Added invokespecial as a synonym for invokenonvirtual
*/