// SPDX-License-Identifier: LGPL-3.0-only

#include <stdio.h>
#include "code.h"
#include "ops.h"

RZ_API struct java_op JAVA_OPS[JAVA_OPS_COUNT] = {
	{ "nop", 0x00, 1, RZ_ANALYSIS_JAVA_NOP },
	{ "aconst_null", 0x01, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_REF_TO_STACK },
	{ "iconst_m1", 0x02, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "iconst_0", 0x03, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "iconst_1", 0x04, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "iconst_2", 0x05, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "iconst_3", 0x06, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "iconst_4", 0x07, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "iconst_5", 0x08, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "lconst_0", 0x09, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "lconst_1", 0x0a, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "fconst_0", 0x0b, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "fconst_1", 0x0c, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "fconst_2", 0x0d, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "dconst_0", 0x0e, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },
	{ "dconst_1", 0x0f, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_TO_STACK },

	{ "bipush", 0x10, 2, RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_PUSH },
	{ "sipush", 0x11, 3, RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_PUSH },

	{ "ldc", 0x12, 2, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_INDIRECT_TO_STACK },
	{ "ldc_w", 0x13, 3, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_INDIRECT_TO_STACK },
	{ "ldc2_w", 0x14, 3, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_CONST_INDIRECT_TO_STACK },

	{ "iload", 0x15, 2, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_INDIRECT_TO_STACK },
	{ "lload", 0x16, 2, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_INDIRECT_TO_STACK },
	{ "fload", 0x17, 2, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_INDIRECT_TO_STACK },
	{ "dload", 0x18, 2, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_INDIRECT_TO_STACK },
	{ "aload", 0x19, 2, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_INDIRECT_TO_STACK_REF },

	{ "iload_0", 0x1a, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "iload_1", 0x1b, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "iload_2", 0x1c, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "iload_3", 0x1d, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },

	{ "lload_0", 0x1e, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "lload_1", 0x1f, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "lload_2", 0x20, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "lload_3", 0x21, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },

	{ "fload_0", 0x22, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "fload_1", 0x23, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "fload_2", 0x24, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "fload_3", 0x25, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },

	{ "dload_0", 0x26, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "dload_1", 0x27, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "dload_2", 0x28, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },
	{ "dload_3", 0x29, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK },

	{ "aload_0", 0x2a, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK_REF },
	{ "aload_1", 0x2b, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK_REF },
	{ "aload_2", 0x2c, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK_REF },
	{ "aload_3", 0x2d, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_VAR_TO_STACK_REF },

	{ "iaload", 0x2e, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_REF_INDIRECT_TO_STACK },
	{ "laload", 0x2f, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_REF_INDIRECT_TO_STACK },
	{ "faload", 0x30, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_REF_INDIRECT_TO_STACK },
	{ "daload", 0x31, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_REF_INDIRECT_TO_STACK },
	{ "aaload", 0x32, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_REF_INDIRECT_TO_STACK_REF },
	{ "baload", 0x33, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_REF_INDIRECT_TO_STACK },
	{ "caload", 0x34, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_REF_INDIRECT_TO_STACK },
	{ "saload", 0x35, 1, RZ_ANALYSIS_JAVA_LDST_LOAD_FROM_REF_INDIRECT_TO_STACK },

	{ "istore", 0x36, 2, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_VAR },
	{ "lstore", 0x37, 2, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_VAR },
	{ "fstore", 0x38, 2, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_VAR },
	{ "dstore", 0x39, 2, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_VAR },
	{ "astore", 0x3a, 2, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_VAR_REF },

	{ "istore_0", 0x3b, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "istore_1", 0x3c, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "istore_2", 0x3d, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "istore_3", 0x3e, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },

	{ "lstore_0", 0x3f, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "lstore_1", 0x40, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "lstore_2", 0x41, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "lstore_3", 0x42, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },

	{ "fstore_0", 0x43, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "fstore_1", 0x44, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "fstore_2", 0x45, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "fstore_3", 0x46, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },

	{ "dstore_0", 0x47, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "dstore_1", 0x48, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "dstore_2", 0x49, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },
	{ "dstore_3", 0x4a, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR },

	{ "astore_0", 0x4b, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR_REF },
	{ "astore_1", 0x4c, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR_REF },
	{ "astore_2", 0x4d, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR_REF },
	{ "astore_3", 0x4e, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_TO_VAR_REF },

	{ "iastore", 0x4f, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_REF },
	{ "lastore", 0x50, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_REF },
	{ "fastore", 0x51, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_REF },
	{ "dastore", 0x52, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_REF },
	{ "aastore", 0x53, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_REF_REF },
	{ "bastore", 0x54, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_REF },
	{ "castore", 0x55, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_REF },
	{ "sastore", 0x56, 1, RZ_ANALYSIS_JAVA_LDST_STORE_FROM_STACK_INDIRECT_TO_REF },

	{ "pop", 0x57, 1, RZ_ANALYSIS_JAVA_STORE_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_POP },
	{ "pop2", 0x58, 1, RZ_ANALYSIS_JAVA_STORE_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_POP | RZ_ANALYSIS_JAVA_REP_OP },
	{ "dup", 0x59, 1, RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_PUSH | RZ_ANALYSIS_JAVA_REP_OP },
	{ "dup_x1", 0x5a, 1, RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_PUSH | RZ_ANALYSIS_JAVA_REP_OP },
	{ "dup_x2", 0x5b, 1, RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_PUSH | RZ_ANALYSIS_JAVA_REP_OP },
	{ "dup2", 0x5c, 1, RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_PUSH | RZ_ANALYSIS_JAVA_REP_OP },
	{ "dup2_x1", 0x5d, 1, RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_PUSH | RZ_ANALYSIS_JAVA_REP_OP },
	{ "dup2_x2", 0x5e, 1, RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_STACK_OP | RZ_ANALYSIS_JAVA_LDST_OP_PUSH | RZ_ANALYSIS_JAVA_REP_OP },

	{ "swap", 0x5f, 1, RZ_ANALYSIS_JAVA_BINOP_XCHG },

	{ "iadd", 0x60, 1, RZ_ANALYSIS_JAVA_BINOP_ADD },
	{ "ladd", 0x61, 1, RZ_ANALYSIS_JAVA_BINOP_ADD },
	{ "fadd", 0x62, 1, RZ_ANALYSIS_JAVA_BINOP_ADD },
	{ "dadd", 0x63, 1, RZ_ANALYSIS_JAVA_BINOP_ADD },

	{ "isub", 0x64, 1, RZ_ANALYSIS_JAVA_BINOP_SUB },
	{ "lsub", 0x65, 1, RZ_ANALYSIS_JAVA_BINOP_SUB },
	{ "fsub", 0x66, 1, RZ_ANALYSIS_JAVA_BINOP_SUB },
	{ "dsub", 0x67, 1, RZ_ANALYSIS_JAVA_BINOP_SUB },

	{ "imul", 0x68, 1, RZ_ANALYSIS_JAVA_BINOP_MUL },
	{ "lmul", 0x69, 1, RZ_ANALYSIS_JAVA_BINOP_MUL },
	{ "fmul", 0x6a, 1, RZ_ANALYSIS_JAVA_BINOP_MUL },
	{ "dmul", 0x6b, 1, RZ_ANALYSIS_JAVA_BINOP_MUL },

	{ "idiv", 0x6c, 1, RZ_ANALYSIS_JAVA_BINOP_DIV },
	{ "ldiv", 0x6d, 1, RZ_ANALYSIS_JAVA_BINOP_DIV },
	{ "fdiv", 0x6e, 1, RZ_ANALYSIS_JAVA_BINOP_DIV },
	{ "ddiv", 0x6f, 1, RZ_ANALYSIS_JAVA_BINOP_DIV },

	{ "irem", 0x70, 1, RZ_ANALYSIS_JAVA_BINOP_MOD },
	{ "lrem", 0x71, 1, RZ_ANALYSIS_JAVA_BINOP_MOD },
	{ "frem", 0x72, 1, RZ_ANALYSIS_JAVA_BINOP_MOD },
	{ "drem", 0x73, 1, RZ_ANALYSIS_JAVA_BINOP_MOD },

	{ "ineg", 0x74, 1, RZ_ANALYSIS_JAVA_BINOP_NOT },
	{ "lneg", 0x75, 1, RZ_ANALYSIS_JAVA_BINOP_NOT },
	{ "fneg", 0x76, 1, RZ_ANALYSIS_JAVA_BINOP_NOT },
	{ "dneg", 0x77, 1, RZ_ANALYSIS_JAVA_BINOP_NOT },

	{ "ishl", 0x78, 1, RZ_ANALYSIS_JAVA_BINOP_SHL },
	{ "lshl", 0x79, 1, RZ_ANALYSIS_JAVA_BINOP_SHL },
	{ "ishr", 0x7a, 1, RZ_ANALYSIS_JAVA_BINOP_SHR },
	{ "lshr", 0x7b, 1, RZ_ANALYSIS_JAVA_BINOP_SHR },
	{ "iushr", 0x7c, 1, RZ_ANALYSIS_JAVA_BINOP_SHR },
	{ "lushr", 0x7d, 1, RZ_ANALYSIS_JAVA_BINOP_SHR },

	{ "iand", 0x7e, 1, RZ_ANALYSIS_JAVA_BINOP_AND },
	{ "land", 0x7f, 1, RZ_ANALYSIS_JAVA_BINOP_AND },

	{ "ior", 0x80, 1, RZ_ANALYSIS_JAVA_BINOP_OR },
	{ "lor", 0x81, 1, RZ_ANALYSIS_JAVA_BINOP_OR },

	{ "ixor", 0x82, 1, RZ_ANALYSIS_JAVA_BINOP_XOR },
	{ "lxor", 0x83, 1, RZ_ANALYSIS_JAVA_BINOP_XOR },

	{ "iinc", 0x84, 3, RZ_ANALYSIS_JAVA_BINOP_ADD },

	{ "i2l", 0x85, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "i2f", 0x86, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "i2d", 0x87, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "l2i", 0x88, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "l2f", 0x89, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "l2d", 0x8a, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "f2i", 0x8b, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "f2l", 0x8c, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "f2d", 0x8d, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "d2i", 0x8e, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "d2l", 0x8f, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "d2f", 0x90, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "i2b", 0x91, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "i2c", 0x92, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },
	{ "i2s", 0x93, 1, RZ_ANALYSIS_JAVA_OBJOP_CAST | RZ_ANALYSIS_JAVA_OBJ_OP },

	{ "lcmp", 0x94, 1, RZ_ANALYSIS_JAVA_BINOP_CMP },
	{ "fcmpl", 0x95, 1, RZ_ANALYSIS_JAVA_BINOP_CMP },
	{ "fcmpg", 0x96, 1, RZ_ANALYSIS_JAVA_BINOP_CMP },
	{ "dcmpl", 0x97, 1, RZ_ANALYSIS_JAVA_BINOP_CMP },
	{ "dcmpg", 0x98, 1, RZ_ANALYSIS_JAVA_BINOP_CMP },

	{ "ifeq", 0x99, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_EQ },
	{ "ifne", 0x9a, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_NE },
	{ "iflt", 0x9b, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_LT },
	{ "ifge", 0x9c, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_GE },
	{ "ifgt", 0x9d, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_GT },
	{ "ifle", 0x9e, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_LE },
	{ "if_icmpeq", 0x9f, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_EQ },
	{ "if_icmpne", 0xa0, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_NE },
	{ "if_icmplt", 0xa1, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_LT },
	{ "if_icmpge", 0xa2, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_GE },
	{ "if_icmpgt", 0xa3, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_GT },
	{ "if_icmple", 0xa4, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_LE },
	{ "if_acmpeq", 0xa5, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_EQ },
	{ "if_acmpne", 0xa6, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_NE },
	{ "goto", 0xa7, 3, RZ_ANALYSIS_JAVA_CODEOP_JMP },
	{ "jsr", 0xa8, 3, RZ_ANALYSIS_JAVA_CODEOP_CALL },
	{ "ret", 0xa9, 2, RZ_ANALYSIS_JAVA_CODEOP_RET },

	{ "tableswitch", 0xaa, 1, RZ_ANALYSIS_JAVA_CODEOP_SWITCH },
	{ "lookupswitch", 0xab, 1, RZ_ANALYSIS_JAVA_CODEOP_SWITCH },

	{ "ireturn", 0xac, 1, RZ_ANALYSIS_JAVA_CODEOP_RET | RZ_ANALYSIS_JAVA_RET_TYPE_PRIM },
	{ "lreturn", 0xad, 1, RZ_ANALYSIS_JAVA_CODEOP_RET | RZ_ANALYSIS_JAVA_RET_TYPE_PRIM },
	{ "freturn", 0xae, 1, RZ_ANALYSIS_JAVA_CODEOP_RET | RZ_ANALYSIS_JAVA_RET_TYPE_PRIM },
	{ "dreturn", 0xaf, 1, RZ_ANALYSIS_JAVA_CODEOP_RET | RZ_ANALYSIS_JAVA_RET_TYPE_PRIM },
	{ "areturn", 0xb0, 1, RZ_ANALYSIS_JAVA_CODEOP_RET | RZ_ANALYSIS_JAVA_RET_TYPE_REF },
	{ "return", 0xb1, 1, RZ_ANALYSIS_JAVA_CODEOP_RET },

	{ "getstatic", 0xb2, 3, RZ_ANALYSIS_JAVA_LDST_LOAD_GET_STATIC },
	{ "putstatic", 0xb3, 3, RZ_ANALYSIS_JAVA_LDST_STORE_PUT_STATIC },
	{ "getfield", 0xb4, 3, RZ_ANALYSIS_JAVA_LDST_LOAD_GET_FIELD },
	{ "putfield", 0xb5, 3, RZ_ANALYSIS_JAVA_LDST_STORE_PUT_FIELD },

	{ "invokevirtual", 0xb6, 3, RZ_ANALYSIS_JAVA_CODEOP_CALL },
	{ "invokespecial", 0xb7, 3, RZ_ANALYSIS_JAVA_CODEOP_CALL },
	{ "invokestatic", 0xb8, 3, RZ_ANALYSIS_JAVA_CODEOP_CALL },
	{ "invokeinterface", 0xb9, 5, RZ_ANALYSIS_JAVA_CODEOP_CALL },
	{ "invokedynamic", 0xba, 5, RZ_ANALYSIS_JAVA_CODEOP_CALL },

	{ "new", 0xbb, 3, RZ_ANALYSIS_JAVA_OBJOP_NEW },
	{ "newarray", 0xbc, 2, RZ_ANALYSIS_JAVA_OBJOP_NEW },
	{ "anewarray", 0xbd, 3, RZ_ANALYSIS_JAVA_OBJOP_NEW },

	{ "arraylength", 0xbe, 1, RZ_ANALYSIS_JAVA_OBJOP_SIZE },
	{ "athrow", 0xbf, 1, RZ_ANALYSIS_JAVA_CODEOP_TRAP },

	{ "checkcast", 0xc0, 3, RZ_ANALYSIS_JAVA_CODEOP_CALL | RZ_ANALYSIS_JAVA_OBJOP_CHECK | RZ_ANALYSIS_JAVA_OBJOP_CAST },
	{ "instanceof", 0xc1, 3, RZ_ANALYSIS_JAVA_CODEOP_CALL | RZ_ANALYSIS_JAVA_OBJOP_CHECK },
	{ "monitorenter", 0xc2, 1, RZ_ANALYSIS_JAVA_CODEOP_CALL | RZ_ANALYSIS_JAVA_LOAD_OP | RZ_ANALYSIS_JAVA_TYPE_REF },
	{ "monitorexit", 0xc3, 1, RZ_ANALYSIS_JAVA_CODEOP_CALL | RZ_ANALYSIS_JAVA_STORE_OP | RZ_ANALYSIS_JAVA_TYPE_REF },
	{ "wide", 0xc4, 1, RZ_ANALYSIS_JAVA_REP_OP },
	{ "multinewarray", 0xc5, 4, RZ_ANALYSIS_JAVA_CODEOP_CALL | RZ_ANALYSIS_JAVA_OBJOP_NEW | RZ_ANALYSIS_JAVA_TYPE_REF },
	{ "ifnull", 0xc6, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_NULL | RZ_ANALYSIS_JAVA_COND_EQ },
	{ "ifnonnull", 0xc7, 3, RZ_ANALYSIS_JAVA_CODEOP_CJMP | RZ_ANALYSIS_JAVA_COND_NULL | RZ_ANALYSIS_JAVA_COND_NE },
	{ "goto_w", 0xc8, 5, RZ_ANALYSIS_JAVA_CODEOP_JMP },
	{ "jsr_w", 0xc9, 5, RZ_ANALYSIS_JAVA_CODEOP_JMP | RZ_ANALYSIS_JAVA_CODEOP_CALL },
	{ "breakpoint", 0xca, 1, RZ_ANALYSIS_JAVA_CODEOP_SWI },

	{ "undefined", 0xcb, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xcc, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xcd, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xce, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xcf, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd0, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd1, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd2, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd3, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd4, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd5, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd6, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd7, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd8, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xd9, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xda, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xdb, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xdc, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xdd, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xde, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xdf, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe0, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe1, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe2, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe3, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe4, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe5, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe6, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe7, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe8, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xe9, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xea, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xeb, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xec, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xed, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xee, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xef, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf0, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf1, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf2, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf3, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf4, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf5, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf6, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf7, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf8, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xf9, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xfa, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xfb, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xfc, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "undefined", 0xfd, 1, RZ_ANALYSIS_JAVA_UNK_OP },
	{ "impdep1", 0xfe, 1, RZ_ANALYSIS_JAVA_ILL_OP },
	{ "impdep2", 0xff, 1, RZ_ANALYSIS_JAVA_ILL_OP },
	{ NULL, 0, 0, 0 }
};
