Java-machine opcodes as data types(JAVA_COD.rfi):
Class: Machine OpCodes representation, Status: Complete, Last change: 18.05.2023 21:12:40

type

TOpKind enum u1 of (
  aaload = 0x32,
  aastore = 0x53,
  aconst_null = 0x01,
  aload = 0x19,
  aload_0 = 0x2a, aload_1 = 0x2b, aload_2 = 0x2c, aload_3 = 0x2d,
  anewarray = 0xbd,
  areturn = 0xb0,
  arraylength = 0xbe,
  astore = 0x3a,
  astore_0 = 0x4b, astore_1 = 0x4c, astore_2 = 0x4d, astore_3 = 0x4e,
  athrow = 0xbf,
  baload = 0x33,
  bastore = 0x54,
  bipush = 0x10,
  caload = 0x34,
  castore = 0x55,
  checkcast = 0xc0,
  d2f = 0x90, d2i = 0x8e, d2l = 0x8f,
  dadd = 0x63,
  daload = 0x31, dastore = 0x52,
  dcmpg = 0x98, dcmpl = 0x97,
  dconst_0 = 0xe, dconst_1 = 0xf,
  ddiv = 0x6f,
  dload = 0x18,
  dload_0 = 0x26, dload_1 = 0x27, dload_2 = 0x28, dload_3 = 0x29,
  dmul = 0x6b,
  dneg = 0x77,
  drem = 0x73,
  dreturn = 0xaf,
  dstore = 0x39,
  dstore_0 = 0x47, dstore_1 = 0x48, dstore_2 = 0x49, dstore_3 = 0x4a,
  dsub = 0x67,
  dup = 0x59, dup_x1 = 0x5a, dup_x2 = 0x5b,
  dup2 = 0x5c, dup2_x1 = 0x5d, dup2_x2 = 0x5e,
  f2d = 0x8d, f2i = 0x8b, f2l = 0x8c,
  fadd = 0x62,
  faload = 0x30,
  fastore = 0x51,
  fcmpg = 0x96, fcmpl = 0x95,
  fconst_0 = 0xb, fconst_1 = 0xc, fconst_2 = 0xd,
  fdiv = 0x6e,
  fload = 0x17,
  fload_0 = 0x22, fload_1 = 0x23, fload_2 = 0x24, fload_3 = 0x25,
  fmul = 0x6a,
  fneg = 0x76,
  frem = 0x72,
  freturn = 0xae,
  fstore = 0x38,
  fstore_0 = 0x43, fstore_1 = 0x44, fstore_2 = 0x45, fstore_3 = 0x46,
  fsub = 0x66,
  getfield = 0xb4,
  getstatic = 0xb2,
  goto = 0xa7, goto_w = 0xc8,
  i2b = 0x91, i2c = 0x92, i2d = 0x87, i2f = 0x86,
  i2l = 0x85, i2s = 0x93,
  iadd = 0x60, iaload = 0x2e, iand = 0x7e, iastore = 0x4f,
  iconst_m1 = 0x2, iconst_0 = 0x3, iconst_1 = 0x4,
  iconst_2 = 0x5, iconst_3 = 0x6, iconst_4 = 0x7, iconst_5 = 0x8,
  idiv = 0x6c,
  if_acmpeq = 0xa5, if_acmpne = 0xa6,
  if_icmpeq = 0x9f, if_icmpne = 0xa0, if_icmplt = 0xa1,
  if_icmpge = 0xa2, if_icmpgt = 0xa3, if_icmple = 0xa4,
  ifeq = 0x99, ifne = 0x9a, iflt = 0x9b,
  ifge = 0x9c, ifgt = 0x9d, ifle = 0x9e,
  ifnonnull = 0xc7, ifnull = 0xc6,
  iinc = 0x84,
  iload = 0x15,
  iload_0 = 0x1a, iload_1 = 0x1b, iload_2 = 0x1c, iload_3 = 0x1d,
  imul = 0x68,
  ineg = 0x74,
  instanceof = 0xc1,
  invokedynamic = 0xba,
  invokeinterface = 0xb9,
  invokespecial = 0xb7,
  invokestatic = 0xb8,
  invokevirtual = 0xb6,
  ior = 0x80,
  irem = 0x70,
  ireturn = 0xac,
  ishl = 0x78, ishr = 0x7a,
  istore = 0x36,
  istore_0 = 0x3b, istore_1 = 0x3c, istore_2 = 0x3d, istore_3 = 0x3e,
  isub = 0x64,
  iushr = 0x7c,
  ixor = 0x82,
  jsr = 0xa8, jsr_w = 0xc9,
  l2d = 0x8a, l2f = 0x89, l2i = 0x88,
  ladd = 0x61,
  laload = 0x2f,
  land = 0x7f,
  lastore = 0x50,
  lcmp = 0x94,
  lconst_0 = 0x9, lconst_1 = 0xa,
  ldc = 0x12, ldc_w = 0x13,
  ldc2_w = 0x14,
  ldiv = 0x6d,
  lload = 0x16,
  lload_0 = 0x1e, lload_1 = 0x1f, lload_2 = 0x20, lload_3 = 0x21,
  lmul = 0x69, lneg = 0x75,
  lookupswitch = 0xab,
  lor = 0x81,
  lrem = 0x71,
  lreturn = 0xad,
  lshl = 0x79,
  lshr = 0x7b,
  lstore = 0x37,
  lstore_0 = 0x3f, lstore_1 = 0x40, lstore_2 = 0x41, lstore_3 = 0x42,
  lsub = 0x65,
  lushr = 0x7d,
  lxor = 0x83,
  monitorenter = 0xc2,
  monitorexit = 0xc3,
  multianewarray = 0xc5,
  new = 0xbb,
  newarray = 0xbc,
  nop = 0x0,
  pop = 0x57,
  pop2 = 0x58,
  putfield = 0xb5,
  putstatic = 0xb3,
  ret = 0xa9,
  return = 0xb1,
  saload = 0x35,
  sastore = 0x56,
  sipush = 0x11,
  swap = 0x5f,
  tableswitch = 0xaa,
  wide = 0xc4
)

TIntSIRec struc
  u1 locndx
  sint c
ends

TIntIRec struc
  u2 locndx
  int c
ends

TInterfaceCallRec struc
  TIMethRefNdx hMethod
  u1 nargs
  u1 O
ends

TDynamicCallRec  struc
  TDMethRefNdx hMethod
  u2 O //Zero bytes
ends

TPadZeroes(BaseA) align 4 at @:BaseA;

jmpofs2(OpcOfs) num-(2):displ=(HEX(@+@:OpcOfs,4))
jmpofs4(OpcOfs) num-(4):displ=(HEX(@+@:OpcOfs,8))


TLookupRec(OpcOfs) struc
  u4 val
  jmpofs4(@:OpcOfs) ofs
ends

TLookupSwitchRec(BaseA) struc
  TPadZeroes(@:BaseA) Pad
  jmpofs4(&@-1-@:BaseA) Deft
  u4 npairs
  array[@.npairs]of TLookupRec(&@@-1-@@:BaseA) pair
ends

TMultiANewArrayRec struc
  TClassNDX ArrayClass
  u1 Dim
ends

TArrayKind enum u1 of (T_BOOLEAN = 4,  T_CHAR = 5,  T_FLOAT = 6,
  T_DOUBLE = 7,  T_BYTE = 8,  T_SHORT = 9,  T_INT = 10,  T_LONG = 11)

TTableSwitchRec(BaseA) struc
  TPadZeroes(@:BaseA) Pad
  jmpofs4(&@-1-@:BaseA) Deft
  u4 low
  u4 high
  array[@.high-@.low+1]of jmpofs4(&@@-1-@@:BaseA) JmpTbl
ends

TWideOp struc %modifies index
  TOpKind K
  case @.K of
    iload, fload, aload, lload, dload,
    istore, fstore, astore, lstore, dstore,
    ret: u2
    iinc: TIntIRec
  endc Op
ends

TOp struc
  TOpKind K
  case @.K of
    aload,astore,
    bipush,dload,dstore,fload,fstore,
    iload,istore,lload,lstore,ret: u1
    anewarray,checkcast,instanceof: TClassNDX
    getfield,getstatic,putfield,putstatic: TFldRefNdx
    invokespecial,invokestatic,invokevirtual: TMethRefNdx
    ldc: TConstNDX1
    ldc_w,ldc2_w: TConstNDX
    new: TClassNDX
    goto,if_acmpeq,if_acmpne,
    if_icmpeq, if_icmpne, if_icmplt,
    if_icmpge, if_icmpgt, if_icmple,
    ifeq, ifne, iflt, ifge, ifgt, ifle,
    ifnonnull, ifnull,
    jsr: jmpofs2(&@@-&@@:@)
    goto_w,jsr_w: jmpofs4(&@@-&@@:@)
    iinc: TIntSIRec
    invokeinterface: TInterfaceCallRec
    invokedynamic: TDynamicCallRec
    lookupswitch: TLookupSwitchRec(&@@:@)
    tableswitch: TTableSwitchRec(&@@:@)
    multianewarray: TMultiANewArrayRec
    newarray: TArrayKind
    sipush: int
    wide: TWideOp
  endc Arg
ends: displ=(@.K,' ',@.Arg)

TOpSeries(Sz) array of TOp:[@:Size=@:Sz]: displ=('(',
  ShowArray(@,(NL,HEX(&@-&@:@,4),': ',valname(@.K),' ',@.Arg)),NL,')')


Other specifications.


FlexT home page, Author`s home page.