XLOAD: con 16r1 << 0; XSTORE: con 16r1 << 1; javatbl := array [MAXJAVA] of { byte 0, # Jnop byte XLOAD, # Jaconst_null byte XLOAD, # Jiconst_m1 byte XLOAD, # Jiconst_0 byte XLOAD, # Jiconst_1 byte XLOAD, # Jiconst_2 byte XLOAD, # Jiconst_3 byte XLOAD, # Jiconst_4 byte XLOAD, # Jiconst_5 byte XLOAD, # Jlconst_0 byte XLOAD, # Jlconst_1 byte XLOAD, # Jfconst_0 byte XLOAD, # Jfconst_1 byte XLOAD, # Jfconst_2 byte XLOAD, # Jdconst_0 byte XLOAD, # Jdconst_1 byte XLOAD, # Jbipush byte XLOAD, # Jsipush byte XLOAD, # Jldc byte XLOAD, # Jldc_w byte XLOAD, # Jldc2_w byte XLOAD, # Jiload byte XLOAD, # Jlload byte XLOAD, # Jfload byte XLOAD, # Jdload byte XLOAD, # Jaload byte XLOAD, # Jiload_0 byte XLOAD, # Jiload_1 byte XLOAD, # Jiload_2 byte XLOAD, # Jiload_3 byte XLOAD, # Jlload_0 byte XLOAD, # Jlload_1 byte XLOAD, # Jlload_2 byte XLOAD, # Jlload_3 byte XLOAD, # Jfload_0 byte XLOAD, # Jfload_1 byte XLOAD, # Jfload_2 byte XLOAD, # Jfload_3 byte XLOAD, # Jdload_0 byte XLOAD, # Jdload_1 byte XLOAD, # Jdload_2 byte XLOAD, # Jdload_3 byte XLOAD, # Jaload_0 byte XLOAD, # Jaload_1 byte XLOAD, # Jaload_2 byte XLOAD, # Jaload_3 byte 0, # Jiaload byte 0, # Jlaload byte 0, # Jfaload byte 0, # Jdaload byte 0, # Jaaload byte 0, # Jbaload byte 0, # Jcaload byte 0, # Jsaload byte XSTORE, # Jistore byte XSTORE, # Jlstore byte XSTORE, # Jfstore byte XSTORE, # Jdstore byte XSTORE, # Jastore byte XSTORE, # Jistore_0 byte XSTORE, # Jistore_1 byte XSTORE, # Jistore_2 byte XSTORE, # Jistore_3 byte XSTORE, # Jlstore_0 byte XSTORE, # Jlstore_1 byte XSTORE, # Jlstore_2 byte XSTORE, # Jlstore_3 byte XSTORE, # Jfstore_0 byte XSTORE, # Jfstore_1 byte XSTORE, # Jfstore_2 byte XSTORE, # Jfstore_3 byte XSTORE, # Jdstore_0 byte XSTORE, # Jdstore_1 byte XSTORE, # Jdstore_2 byte XSTORE, # Jdstore_3 byte XSTORE, # Jastore_0 byte XSTORE, # Jastore_1 byte XSTORE, # Jastore_2 byte XSTORE, # Jastore_3 byte 0, # Jiastore byte 0, # Jlastore byte 0, # Jfastore byte 0, # Jdastore byte 0, # Jaastore byte 0, # Jbastore byte 0, # Jcastore byte 0, # Jsastore byte 0, # Jpop byte 0, # Jpop2 byte 0, # Jdup byte 0, # Jdup_x1 byte 0, # Jdup_x2 byte 0, # Jdup2 byte 0, # Jdup2_x1 byte 0, # Jdup2_x2 byte 0, # Jswap byte 0, # Jiadd byte 0, # Jladd byte 0, # Jfadd byte 0, # Jdadd byte 0, # Jisub byte 0, # Jlsub byte 0, # Jfsub byte 0, # Jdsub byte 0, # Jimul byte 0, # Jlmul byte 0, # Jfmul byte 0, # Jdmul byte 0, # Jidiv byte 0, # Jldiv byte 0, # Jfdiv byte 0, # Jddiv byte 0, # Jirem byte 0, # Jlrem byte 0, # Jfrem byte 0, # Jdrem byte 0, # Jineg byte 0, # Jlneg byte 0, # Jfneg byte 0, # Jdneg byte 0, # Jishl byte 0, # Jlshl byte 0, # Jishr byte 0, # Jlshr byte 0, # Jiushr byte 0, # Jlushr byte 0, # Jiand byte 0, # Jland byte 0, # Jior byte 0, # Jlor byte 0, # Jixor byte 0, # Jlxor byte 0, # Jiinc byte 0, # Ji2l byte 0, # Ji2f byte 0, # Ji2d byte 0, # Jl2i byte 0, # Jl2f byte 0, # Jl2d byte 0, # Jf2i byte 0, # Jf2l byte 0, # Jf2d byte 0, # Jd2i byte 0, # Jd2l byte 0, # Jd2f byte 0, # Ji2b byte 0, # Ji2c byte 0, # Ji2s byte 0, # Jlcmp byte 0, # Jfcmpl byte 0, # Jfcmpg byte 0, # Jdcmpl byte 0, # Jdcmpg byte 0, # Jifeq byte 0, # Jifne byte 0, # Jiflt byte 0, # Jifge byte 0, # Jifgt byte 0, # Jifle byte 0, # Jif_icmpeq byte 0, # Jif_icmpne byte 0, # Jif_icmplt byte 0, # Jif_icmpge byte 0, # Jif_icmpgt byte 0, # Jif_icmple byte 0, # Jif_acmpeq byte 0, # Jif_acmpne byte 0, # Jgoto byte 0, # Jjsr byte 0, # Jret byte 0, # Jtableswitch byte 0, # Jlookupswitch byte 0, # Jireturn byte 0, # Jlreturn byte 0, # Jfreturn byte 0, # Jdreturn byte 0, # Jareturn byte 0, # Jreturn byte 0, # Jgetstatic byte 0, # Jputstatic byte 0, # Jgetfield byte 0, # Jputfield byte 0, # Jinvokevirtual byte 0, # Jinvokespecial byte 0, # Jinvokestatic byte 0, # Jinvokeinterface byte 0, # Jxxxunusedxxx byte 0, # Jnew byte 0, # Jnewarray byte 0, # Janewarray byte 0, # Jarraylength byte 0, # Jathrow byte 0, # Jcheckcast byte 0, # Jinstanceof byte 0, # Jmonitorenter byte 0, # Jmonitorexit byte 0, # Jwide byte 0, # Jmultianewarray byte 0, # Jifnull byte 0, # Jifnonnull byte 0, # Jgoto_w byte 0, # Jjsr_w }; opcode(j: ref Jinst): int { ret: byte; if(j.op == byte Jwide) { pick jp := j { Pw => ret = jp.w.op; * => badpick("opcode"); } } else ret = j.op; return int ret; } isload(j: ref Jinst): int { return int javatbl[opcode(j)] & XLOAD; } isstore(j: ref Jinst): int { return int javatbl[opcode(j)] & XSTORE; }