diff options
-rw-r--r-- | Makefile | 4 | ||||
-rw-r--r-- | generated/darwin-inject-asm.S | 10 | ||||
-rw-r--r-- | generated/generic-dis-arm.inc.h | 1946 | ||||
-rw-r--r-- | generated/generic-dis-arm64.inc.h | 152 | ||||
-rw-r--r-- | generated/generic-dis-thumb.inc.h | 256 | ||||
-rw-r--r-- | generated/generic-dis-thumb2.inc.h | 3019 | ||||
-rw-r--r-- | generated/inject-asm.S | 17 | ||||
-rwxr-xr-x | script/gen-inject-asm.sh | 4 |
8 files changed, 5382 insertions, 26 deletions
@@ -71,8 +71,10 @@ out/inject-asm-raw-arm.o: lib/darwin/inject-asm-raw.c Makefile out/inject-asm-raw-arm64.o: lib/darwin/inject-asm-raw.c Makefile $(IACLANG) -arch arm64 -o $@ $< IAR_BINS := out/inject-asm-raw-x86_64.bin out/inject-asm-raw-i386.bin out/inject-asm-raw-arm.bin out/inject-asm-raw-arm64.bin -out/inject-asm.S: $(IAR_BINS) Makefile script/gen-inject-asm.sh +out/darwin-inject-asm.S: $(IAR_BINS) Makefile script/gen-inject-asm.sh ./script/gen-inject-asm.sh > $@ || rm -f $@ +generateds: out/darwin-inject-asm.S + cp $< generated/ define define_test out/test-$(1): test/test-$(2).[cm]* $(HEADERS) $(GENERATED) Makefile out/libsubstitute.dylib diff --git a/generated/darwin-inject-asm.S b/generated/darwin-inject-asm.S index a909879..1d1d1b8 100644 --- a/generated/darwin-inject-asm.S +++ b/generated/darwin-inject-asm.S @@ -1,10 +1,8 @@ -.align 12 -.globl _inject_page_start -_inject_page_start: + .align 2 .globl _inject_start_x86_64 _inject_start_x86_64: -.byte 0x55, 0x48, 0x89, 0xe5, 0x53, 0x50, 0x48, 0x89, 0xfb, 0x48, 0x8d, 0x15, 0x53, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x7d, 0xf4, 0x31, 0xf6, 0x48, 0x89, 0xd9, 0xff, 0x13, 0xeb, 0x15, 0xb8, 0x3e, 0x00, 0x00, 0x01, 0x31, 0xff, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x31, 0xd2, 0xb9, 0x40, 0x1f, 0x00, 0x00, 0x0f, 0x05, 0x48, 0x83, 0x7b, 0x18, 0x00, 0x74, 0xe4, 0x48, 0x81, 0xe3, 0x00, 0xf0, 0xff, 0xff, 0xb8, 0x69, 0x01, 0x00, 0x02, 0xbe, 0x00, 0x20, 0x00, 0x00, 0x31, 0xd2, 0x31, 0xc9, 0x48, 0x89, 0xdf, 0x0f, 0x05, 0xb9, 0xad, 0x0b, 0x00, 0x00, 0x31, 0xc0, 0xff, 0xd1, 0x48, 0x83, 0xc4, 0x08, 0x5b, 0x5d, 0xc3, 0x55, 0x48, 0x89, 0xe5, 0x53, 0x50, 0x48, 0x89, 0xfb, 0x48, 0x8b, 0x7b, 0x10, 0x31, 0xf6, 0xff, 0x53, 0x08, 0x48, 0xc7, 0x43, 0x18, 0x01, 0x00, 0x00, 0x00, 0x31, 0xc0, 0x48, 0x83, 0xc4, 0x08, 0x5b, 0x5d, 0xc3 +.byte 0x55, 0x48, 0x89, 0xe5, 0x53, 0x50, 0x48, 0x89, 0xfb, 0x48, 0x8d, 0x15, 0x6a, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x7d, 0xf4, 0x31, 0xf6, 0x48, 0x89, 0xd9, 0xff, 0x13, 0x48, 0x83, 0x7b, 0x18, 0x00, 0x75, 0x27, 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x3e, 0x00, 0x00, 0x01, 0x31, 0xff, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x31, 0xd2, 0xb9, 0x40, 0x1f, 0x00, 0x00, 0x41, 0x50, 0x0f, 0x05, 0x41, 0x58, 0x48, 0x83, 0x7b, 0x18, 0x00, 0x74, 0xe0, 0xb8, 0x69, 0x01, 0x00, 0x02, 0x31, 0xd2, 0x31, 0xc9, 0x48, 0x81, 0xe3, 0x00, 0xf0, 0xff, 0xff, 0x45, 0x31, 0xc0, 0xbe, 0x00, 0x20, 0x00, 0x00, 0x48, 0x89, 0xdf, 0x41, 0x50, 0x0f, 0x05, 0x41, 0x58, 0xb9, 0xad, 0x0b, 0x00, 0x00, 0x31, 0xc0, 0xff, 0xd1, 0x48, 0x83, 0xc4, 0x08, 0x5b, 0x5d, 0xc3, 0x55, 0x48, 0x89, 0xe5, 0x53, 0x50, 0x48, 0x89, 0xfb, 0x48, 0x8b, 0x7b, 0x10, 0x31, 0xf6, 0xff, 0x53, 0x08, 0x48, 0xc7, 0x43, 0x18, 0x01, 0x00, 0x00, 0x00, 0x31, 0xc0, 0x48, 0x83, 0xc4, 0x08, 0x5b, 0x5d, 0xc3 .align 2 .globl _inject_start_i386 _inject_start_i386: @@ -12,8 +10,8 @@ _inject_start_i386: .align 2 .globl _inject_start_arm _inject_start_arm: -.byte 0x90, 0x40, 0x2d, 0xe9, 0x04, 0x70, 0x8d, 0xe2, 0x04, 0xd0, 0x4d, 0xe2, 0x00, 0x40, 0xa0, 0xe1, 0x0d, 0x00, 0xa0, 0xe1, 0x00, 0x90, 0x94, 0xe5, 0x60, 0x20, 0x00, 0xe3, 0x00, 0x20, 0x40, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x02, 0x20, 0x8f, 0xe0, 0x04, 0x30, 0xa0, 0xe1, 0x39, 0xff, 0x2f, 0xe1, 0x0c, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0x08, 0x00, 0x00, 0x1a, 0x3d, 0xc0, 0xe0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x00, 0x20, 0xa0, 0xe3, 0x7d, 0x3d, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe3, 0x80, 0x00, 0x00, 0xef, 0x0c, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0xfa, 0xff, 0xff, 0x0a, 0x1f, 0x40, 0xcb, 0xe7, 0x69, 0xc1, 0x00, 0xe3, 0x02, 0x1a, 0xa0, 0xe3, 0x00, 0x20, 0xa0, 0xe3, 0x04, 0x00, 0xa0, 0xe1, 0x00, 0x30, 0xa0, 0xe3, 0x80, 0x00, 0x00, 0xef, 0xad, 0x0b, 0x00, 0xe3, 0x30, 0xff, 0x2f, 0xe1, 0x04, 0xd0, 0x47, 0xe2, 0x90, 0x80, 0xbd, 0xe8, 0x90, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x00, 0x10, 0xa0, 0xe3, 0xd4, 0x20, 0xc4, 0xe1, 0x04, 0x70, 0x8d, 0xe2, 0x03, 0x00, 0xa0, 0xe1, 0x32, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0xa0, 0xe3, 0x0c, 0x00, 0x84, 0xe5, 0x00, 0x00, 0xa0, 0xe3, 0x90, 0x80, 0xbd, 0xe8 +.byte 0xf0, 0x40, 0x2d, 0xe9, 0x0c, 0x70, 0x8d, 0xe2, 0x04, 0xd0, 0x4d, 0xe2, 0x00, 0x40, 0xa0, 0xe1, 0x0d, 0x00, 0xa0, 0xe1, 0x00, 0x50, 0x94, 0xe5, 0x78, 0x20, 0x00, 0xe3, 0x00, 0x20, 0x40, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x02, 0x20, 0x8f, 0xe0, 0x04, 0x30, 0xa0, 0xe1, 0x00, 0x60, 0xa0, 0xe3, 0x35, 0xff, 0x2f, 0xe1, 0x0c, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0x0b, 0x00, 0x00, 0x1a, 0x00, 0x50, 0xe0, 0xe3, 0x3d, 0xc0, 0xe0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x00, 0x20, 0xa0, 0xe3, 0x7d, 0x3d, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe3, 0x04, 0x50, 0x2d, 0xe5, 0x80, 0x00, 0x00, 0xef, 0x04, 0x50, 0x9d, 0xe4, 0x0c, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0xf8, 0xff, 0xff, 0x0a, 0x1f, 0x40, 0xcb, 0xe7, 0x69, 0xc1, 0x00, 0xe3, 0x02, 0x1a, 0xa0, 0xe3, 0x00, 0x20, 0xa0, 0xe3, 0x04, 0x00, 0xa0, 0xe1, 0x00, 0x30, 0xa0, 0xe3, 0x04, 0x60, 0x2d, 0xe5, 0x80, 0x00, 0x00, 0xef, 0x04, 0x60, 0x9d, 0xe4, 0xad, 0x0b, 0x00, 0xe3, 0x30, 0xff, 0x2f, 0xe1, 0x0c, 0xd0, 0x47, 0xe2, 0xf0, 0x80, 0xbd, 0xe8, 0x90, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x00, 0x10, 0xa0, 0xe3, 0xd4, 0x20, 0xc4, 0xe1, 0x04, 0x70, 0x8d, 0xe2, 0x03, 0x00, 0xa0, 0xe1, 0x32, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0xa0, 0xe3, 0x0c, 0x00, 0x84, 0xe5, 0x00, 0x00, 0xa0, 0xe3, 0x90, 0x80, 0xbd, 0xe8 .align 2 .globl _inject_start_arm64 _inject_start_arm64: -.byte 0xf4, 0x4f, 0xbe, 0xa9, 0xfd, 0x7b, 0x01, 0xa9, 0xfd, 0x43, 0x00, 0x91, 0xff, 0x43, 0x00, 0xd1, 0xf3, 0x03, 0x00, 0xaa, 0x68, 0x02, 0x40, 0xf9, 0x01, 0x00, 0x80, 0xd2, 0x62, 0x03, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0xe0, 0x33, 0x00, 0x91, 0xe3, 0x03, 0x13, 0xaa, 0x00, 0x01, 0x3f, 0xd6, 0x68, 0x0e, 0x40, 0xf9, 0x28, 0x01, 0x00, 0xb5, 0xb0, 0x07, 0x80, 0x92, 0xe1, 0x03, 0x40, 0xb2, 0x03, 0xe8, 0x83, 0xd2, 0x02, 0x00, 0x80, 0xd2, 0x00, 0x00, 0x80, 0xd2, 0x01, 0x10, 0x00, 0xd4, 0x68, 0x0e, 0x40, 0xf9, 0xa8, 0xff, 0xff, 0xb4, 0x60, 0xc6, 0x72, 0x92, 0x30, 0x2d, 0x80, 0xd2, 0xe1, 0x03, 0x73, 0xb2, 0x02, 0x00, 0x80, 0xd2, 0x03, 0x00, 0x80, 0xd2, 0x01, 0x10, 0x00, 0xd4, 0xa8, 0x75, 0x81, 0xd2, 0x00, 0x01, 0x3f, 0xd6, 0xbf, 0x43, 0x00, 0xd1, 0xfd, 0x7b, 0x41, 0xa9, 0xf4, 0x4f, 0xc2, 0xa8, 0xc0, 0x03, 0x5f, 0xd6, 0xf4, 0x4f, 0xbe, 0xa9, 0xfd, 0x7b, 0x01, 0xa9, 0xfd, 0x43, 0x00, 0x91, 0xf3, 0x03, 0x00, 0xaa, 0x68, 0x82, 0x40, 0xa9, 0x01, 0x00, 0x80, 0x52, 0x00, 0x01, 0x3f, 0xd6, 0xe8, 0x03, 0x40, 0xb2, 0x68, 0x0e, 0x00, 0xf9, 0x00, 0x00, 0x80, 0xd2, 0xfd, 0x7b, 0x41, 0xa9, 0xf4, 0x4f, 0xc2, 0xa8, 0xc0, 0x03, 0x5f, 0xd6 +.byte 0xf4, 0x4f, 0xbe, 0xa9, 0xfd, 0x7b, 0x01, 0xa9, 0xfd, 0x43, 0x00, 0x91, 0xff, 0x43, 0x00, 0xd1, 0xf3, 0x03, 0x00, 0xaa, 0x68, 0x02, 0x40, 0xf9, 0x01, 0x00, 0x80, 0xd2, 0x02, 0x04, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0xe0, 0x33, 0x00, 0x91, 0xe3, 0x03, 0x13, 0xaa, 0x00, 0x01, 0x3f, 0xd6, 0x68, 0x0e, 0x40, 0xf9, 0x88, 0x01, 0x00, 0xb5, 0x08, 0x00, 0x80, 0x92, 0xb0, 0x07, 0x80, 0x92, 0xe1, 0x03, 0x40, 0xb2, 0x03, 0xe8, 0x83, 0xd2, 0x02, 0x00, 0x80, 0xd2, 0x00, 0x00, 0x80, 0xd2, 0xe8, 0x0f, 0x1f, 0xf8, 0x01, 0x10, 0x00, 0xd4, 0xe8, 0x07, 0x41, 0xf8, 0x69, 0x0e, 0x40, 0xf9, 0x69, 0xff, 0xff, 0xb4, 0x02, 0x00, 0x80, 0xd2, 0x60, 0xc6, 0x72, 0x92, 0x30, 0x2d, 0x80, 0xd2, 0xe1, 0x03, 0x73, 0xb2, 0xe3, 0x03, 0x02, 0xaa, 0xe2, 0x0f, 0x1f, 0xf8, 0x01, 0x10, 0x00, 0xd4, 0xe2, 0x07, 0x41, 0xf8, 0xa8, 0x75, 0x81, 0xd2, 0x00, 0x01, 0x3f, 0xd6, 0xbf, 0x43, 0x00, 0xd1, 0xfd, 0x7b, 0x41, 0xa9, 0xf4, 0x4f, 0xc2, 0xa8, 0xc0, 0x03, 0x5f, 0xd6, 0xf4, 0x4f, 0xbe, 0xa9, 0xfd, 0x7b, 0x01, 0xa9, 0xfd, 0x43, 0x00, 0x91, 0xf3, 0x03, 0x00, 0xaa, 0x68, 0x82, 0x40, 0xa9, 0x01, 0x00, 0x80, 0x52, 0x00, 0x01, 0x3f, 0xd6, 0xe8, 0x03, 0x40, 0xb2, 0x68, 0x0e, 0x00, 0xf9, 0x00, 0x00, 0x80, 0xd2, 0xfd, 0x7b, 0x41, 0xa9, 0xf4, 0x4f, 0xc2, 0xa8, 0xc0, 0x03, 0x5f, 0xd6 diff --git a/generated/generic-dis-arm.inc.h b/generated/generic-dis-arm.inc.h new file mode 100644 index 0000000..e312884 --- /dev/null +++ b/generated/generic-dis-arm.inc.h @@ -0,0 +1,1946 @@ +/* Generated code; do not edit! + generated by tables/gen.js from imaon2 '2b8112204067abe3d0643e23c2486656841ecafe' + https://github.com/comex/imaon2 + arguments: '--gen-hook-disassembler -n _arm --dis-pattern=P(XXX) out/out-ARM.json' + (fair warning: at present the main (Rust) code in that repository is barely + started, embarrassingly so; no need to look at it ;p) + In case it's copyrightable in any way, consider the generated code in the + public domain. +*/ + +/* GPR_Rn_unk_Rd_1_ADDri: ADDri */ +/* GPR_Rn_GPR_Rm_unk_Rd_1_ADDrr: ADDrr */ +/* GPR_Rn_so_reg_imm_shift_unk_Rd_1_ADDrsi: ADDrsi */ +/* GPR_Rn_so_reg_reg_shift_unk_Rd_1_ADDrsr: ADDrsr */ +/* adrlabel_label_unk_Rd_1_ADR: ADR */ +/* GPR_dst_B_2_BX: BX, BX_pred */ +/* br_target_target_B_1_Bcc: Bcc */ +/* addr_offset_none_addr_unk_Rt_13_LDA: LDA, LDAB, LDAEX, LDAEXB, LDAEXD, LDAEXH, LDAH, LDREX, LDREXB, LDREXD, LDREXH, SWP, SWPB */ +/* addrmode5_addr_8_LDC2L_OFFSET: LDC2L_OFFSET, LDC2_OFFSET, LDCL_OFFSET, LDC_OFFSET, VLDRD, VLDRS, VSTRD, VSTRS */ +/* addr_offset_none_addr_4_LDC2L_OPTION: LDC2L_OPTION, LDC2_OPTION, LDCL_OPTION, LDC_OPTION */ +/* addr_offset_none_addr_postidx_imm8s4_offset_4_LDC2L_POST: LDC2L_POST, LDC2_POST, LDCL_POST, LDC_POST */ +/* addrmode5_pre_addr_4_LDC2L_PRE: LDC2L_PRE, LDC2_PRE, LDCL_PRE, LDC_PRE */ +/* GPR_Rn_reglist_regs_16_LDMDA: LDMDA, LDMDA_UPD, LDMDB, LDMDB_UPD, LDMIA, LDMIA_UPD, LDMIB, LDMIB_UPD, sysLDMDA, sysLDMDA_UPD, sysLDMDB, sysLDMDB_UPD, sysLDMIA, sysLDMIA_UPD, sysLDMIB, sysLDMIB_UPD */ +/* addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM: LDRBT_POST_IMM, LDRB_POST_IMM, LDRT_POST_IMM, LDR_POST_IMM */ +/* addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG: LDRBT_POST_REG, LDRB_POST_REG, LDRT_POST_REG, LDR_POST_REG */ +/* addrmode_imm12_pre_addr_unk_Rt_2_LDRB_PRE_IMM: LDRB_PRE_IMM, LDR_PRE_IMM */ +/* ldst_so_reg_addr_unk_Rt_2_LDRB_PRE_REG: LDRB_PRE_REG, LDR_PRE_REG */ +/* addrmode_imm12_addr_unk_Rt_2_LDRBi12: LDRBi12, LDRi12 */ +/* ldst_so_reg_shift_unk_Rt_2_LDRBrs: LDRBrs, LDRrs */ +/* addrmode3_addr_unk_Rt_4_LDRD: LDRD, LDRH, LDRSB, LDRSH */ +/* addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST: LDRD_POST, LDRH_POST, LDRSB_POST, LDRSH_POST */ +/* addrmode3_pre_addr_unk_Rt_4_LDRD_PRE: LDRD_PRE, LDRH_PRE, LDRSB_PRE, LDRSH_PRE */ +/* addr_offset_none_addr_postidx_imm8_offset_unk_Rt_3_LDRHTi: LDRHTi, LDRSBTi, LDRSHTi */ +/* addr_offset_none_addr_postidx_reg_Rm_unk_Rt_3_LDRHTr: LDRHTr, LDRSBTr, LDRSHTr */ +/* GPR_Rt_4_MCR: MCR, MCR2, VMOVDRR, VMOVSR */ +/* GPRnopc_Rt_4_MCRR: MCRR, MCRR2, MRRC, MRRC2 */ +/* unk_Rd_5_MOVTi16: MOVTi16, MOVi, MOVi16, MOVsi, MOVsr */ +/* GPR_Rm_unk_Rd_1_MOVr: MOVr */ +/* tcGPR_Rm_unk_Rd_1_MOVr_TC: MOVr_TC */ +/* unk_Rt_13_MRC: MRC, MRC2, VMOVRRD, VMOVRRS, VMOVRS, VMRS, VMRS_FPEXC, VMRS_FPINST, VMRS_FPINST2, VMRS_FPSID, VMRS_MVFR0, VMRS_MVFR1, VMRS_MVFR2 */ +/* addrmode5_addr_S_4_STC2L_OFFSET: STC2L_OFFSET, STC2_OFFSET, STCL_OFFSET, STC_OFFSET */ +/* addr_offset_none_addr_S_4_STC2L_OPTION: STC2L_OPTION, STC2_OPTION, STCL_OPTION, STC_OPTION */ +/* addr_offset_none_addr_postidx_imm8s4_offset_S_4_STC2L_POST: STC2L_POST, STC2_POST, STCL_POST, STC_POST */ +/* addrmode5_pre_addr_S_4_STC2L_PRE: STC2L_PRE, STC2_PRE, STCL_PRE, STC_PRE */ +/* GPR_Rt_addr_offset_none_addr_S_3_STL: STL, STLB, STLH */ +/* GPR_Rt_addr_offset_none_addr_unk_Rd_S_6_STLEX: STLEX, STLEXB, STLEXH, STREX, STREXB, STREXH */ +/* GPRPairOp_Rt_addr_offset_none_addr_unk_Rd_S_2_STLEXD: STLEXD, STREXD */ +/* GPR_Rn_reglist_regs_S_16_STMDA: STMDA, STMDA_UPD, STMDB, STMDB_UPD, STMIA, STMIA_UPD, STMIB, STMIB_UPD, sysSTMDA, sysSTMDA_UPD, sysSTMDB, sysSTMDB_UPD, sysSTMIA, sysSTMIA_UPD, sysSTMIB, sysSTMIB_UPD */ +/* GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM: STRBT_POST_IMM, STRB_POST_IMM, STRT_POST_IMM, STR_POST_IMM */ +/* GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG: STRBT_POST_REG, STRB_POST_REG, STRT_POST_REG, STR_POST_REG */ +/* GPR_Rt_addrmode_imm12_pre_addr_S_2_STRB_PRE_IMM: STRB_PRE_IMM, STR_PRE_IMM */ +/* GPR_Rt_ldst_so_reg_addr_S_2_STRB_PRE_REG: STRB_PRE_REG, STR_PRE_REG */ +/* GPRnopc_Rt_addrmode_imm12_addr_S_1_STRBi12: STRBi12 */ +/* GPRnopc_Rt_ldst_so_reg_shift_S_1_STRBrs: STRBrs */ +/* GPR_Rt_addrmode3_addr_S_2_STRD: STRD, STRH */ +/* GPR_Rt_addr_offset_none_addr_am3offset_offset_S_2_STRD_POST: STRD_POST, STRH_POST */ +/* GPR_Rt_addrmode3_pre_addr_S_2_STRD_PRE: STRD_PRE, STRH_PRE */ +/* GPR_Rt_addr_offset_none_addr_postidx_imm8_offset_S_1_STRHTi: STRHTi */ +/* GPR_Rt_addr_offset_none_addr_postidx_reg_Rm_S_1_STRHTr: STRHTr */ +/* GPR_Rt_addrmode_imm12_addr_S_1_STRi12: STRi12 */ +/* GPR_Rt_ldst_so_reg_shift_S_1_STRrs: STRrs */ + switch ((op >> 20) & 0x1f) { + case 0: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0xd0) { + insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST:; + struct bitslice offset = {.nruns = 4, .runs = (struct bitslice_run[]) {{0,0,4}, {8,4,4}, {22,9,1}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST)(ctx, offset, Rt, addr); /* 0x000000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0xb0) { + insn_GPR_Rt_addr_offset_none_addr_am3offset_offset_S_2_STRD_POST:; + struct bitslice offset = {.nruns = 4, .runs = (struct bitslice_run[]) {{0,0,4}, {8,4,4}, {22,9,1}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rt_addr_offset_none_addr_am3offset_offset_S_2_STRD_POST)(ctx, offset, Rt, addr); /* 0x000000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + if ((op & 0xf3f0000) == 0x20f0000) { + insn_adrlabel_label_unk_Rd_1_ADR:; + struct bitslice label = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,12}, {22,12,2}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(adrlabel_label_unk_Rd_1_ADR)(ctx, label, Rd); /* 0x020f0000 | 0xf0c0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: { + insn_GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM:; + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,12}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM)(ctx, offset, Rt, addr); /* 0x04000000 | 0xf0efffff */ + } + case 3: { + if ((op & 0xf100010) == 0x6000000) { + insn_GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG:; + struct bitslice offset = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,7}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG)(ctx, offset, Rt, addr); /* 0x06000000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: { + insn_GPR_Rn_reglist_regs_S_16_STMDA:; + struct bitslice regs = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,16}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_reglist_regs_S_16_STMDA)(ctx, regs, Rn); /* 0x08000000 | 0xf1efffff */ + } + case 5: { + insn_br_target_target_B_1_Bcc:; + struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,24}}}; + return P(br_target_target_B_1_Bcc)(ctx, target); /* 0x0a000000 | 0xf0ffffff */ + } + case 6: + return P(unidentified)(ctx); + case 7: { + if ((op & 0xf100010) == 0xe000010) { + insn_GPR_Rt_4_MCR:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_4_MCR)(ctx, Rt); /* 0x0e000010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0xd0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x000000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0x1000b0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x001000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: { + insn_addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM:; + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,12}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM)(ctx, offset, Rt, addr); /* 0x04100000 | 0xf0efffff */ + } + case 1: { + if ((op & 0xf100010) == 0x6100000) { + insn_addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG:; + struct bitslice offset = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,7}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG)(ctx, offset, Rt, addr); /* 0x06100000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 25) & 0x1) { + case 0: { + insn_GPR_Rn_reglist_regs_16_LDMDA:; + struct bitslice regs = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,16}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_reglist_regs_16_LDMDA)(ctx, regs, Rn); /* 0x08100000 | 0xf1efffff */ + } + case 1: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + } + } + case 3: { + if ((op & 0xf100010) == 0xe100010) { + insn_unk_Rt_13_MRC:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(unk_Rt_13_MRC)(ctx, Rt); /* 0x0e100010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: + case 10: { + switch ((op >> 25) & 0x7) { + case 0: { + if ((op & 0xf700ff0) == 0x2000b0) { + struct bitslice Rm = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,4}, {23,4,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rt_addr_offset_none_addr_postidx_reg_Rm_S_1_STRHTr)(ctx, Rm, Rt, addr); /* 0x002000b0 | 0xf08ff00f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + return P(unidentified)(ctx); + case 2: + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM; /* 0x04000000 | 0xf0efffff */ + case 3: { + if ((op & 0xf100010) == 0x6000000) { + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG; /* 0x06000000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + case 5: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + case 6: { + insn_addr_offset_none_addr_postidx_imm8s4_offset_S_4_STC2L_POST:; + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {23,8,1}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_postidx_imm8s4_offset_S_4_STC2L_POST)(ctx, offset, addr); /* 0x0c200000 | 0xf0cfffff */ + } + case 7: { + if ((op & 0xf100010) == 0xe000010) { + goto insn_GPR_Rt_4_MCR; /* 0x0e000010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: + case 11: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf700ff0) == 0x3000d0) { + insn_addr_offset_none_addr_postidx_reg_Rm_unk_Rt_3_LDRHTr:; + struct bitslice Rm = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,4}, {23,4,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_postidx_reg_Rm_unk_Rt_3_LDRHTr)(ctx, Rm, Rt, addr); /* 0x003000d0 | 0xf08ff00f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf700fb0) == 0x3000b0) { + goto insn_addr_offset_none_addr_postidx_reg_Rm_unk_Rt_3_LDRHTr; /* 0x003000b0 | 0xf08ff04f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM; /* 0x04100000 | 0xf0efffff */ + case 1: { + if ((op & 0xf100010) == 0x6100000) { + goto insn_addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG; /* 0x06100000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + case 1: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: { + insn_addr_offset_none_addr_postidx_imm8s4_offset_4_LDC2L_POST:; + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {23,8,1}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_postidx_imm8s4_offset_4_LDC2L_POST)(ctx, offset, addr); /* 0x0c300000 | 0xf0cfffff */ + } + case 1: { + if ((op & 0xf100010) == 0xe100010) { + goto insn_unk_Rt_13_MRC; /* 0x0e100010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 4: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0xd0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x000000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0xb0) { + goto insn_GPR_Rt_addr_offset_none_addr_am3offset_offset_S_2_STRD_POST; /* 0x000000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + if ((op & 0xf3f0000) == 0x20f0000) { + goto insn_adrlabel_label_unk_Rd_1_ADR; /* 0x020f0000 | 0xf0c0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM; /* 0x04000000 | 0xf0efffff */ + case 3: { + if ((op & 0xf100010) == 0x6000000) { + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG; /* 0x06000000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + case 5: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + case 6: { + if ((op & 0xff00fd0) == 0xc400b10) { + goto insn_GPR_Rt_4_MCR; /* 0x0c400b10 | 0xf00ff02f */ + } else { + insn_GPRnopc_Rt_4_MCRR:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPRnopc_Rt_4_MCRR)(ctx, Rt); /* 0x0c400000 | 0xf00fffff */ + } + } + case 7: { + if ((op & 0xf100010) == 0xe000010) { + goto insn_GPR_Rt_4_MCR; /* 0x0e000010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 5: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0xd0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x000000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0x1000b0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x001000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: + return P(unidentified)(ctx); + case 2: + goto insn_addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM; /* 0x04100000 | 0xf0efffff */ + case 3: { + if ((op & 0xf100010) == 0x6100000) { + goto insn_addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG; /* 0x06100000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + case 5: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + case 6: { + if ((op & 0xff00ed0) == 0xc500a10) { + goto insn_unk_Rt_13_MRC; /* 0x0c500a10 | 0xf00ff12f */ + } else { + goto insn_GPRnopc_Rt_4_MCRR; /* 0x0c500000 | 0xf00fffff */ + } + } + case 7: { + if ((op & 0xf100010) == 0xe100010) { + goto insn_unk_Rt_13_MRC; /* 0x0e100010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: + case 14: { + switch ((op >> 25) & 0x7) { + case 0: { + if ((op & 0xf7000f0) == 0x6000b0) { + struct bitslice offset = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,4}, {8,4,4}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rt_addr_offset_none_addr_postidx_imm8_offset_S_1_STRHTi)(ctx, offset, Rt, addr); /* 0x006000b0 | 0xf08fff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + return P(unidentified)(ctx); + case 2: + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM; /* 0x04000000 | 0xf0efffff */ + case 3: { + if ((op & 0xf100010) == 0x6000000) { + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG; /* 0x06000000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + case 5: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + case 6: + goto insn_addr_offset_none_addr_postidx_imm8s4_offset_S_4_STC2L_POST; /* 0x0c200000 | 0xf0cfffff */ + case 7: { + if ((op & 0xf100010) == 0xe000010) { + goto insn_GPR_Rt_4_MCR; /* 0x0e000010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 7: + case 15: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf7000f0) == 0x7000d0) { + insn_addr_offset_none_addr_postidx_imm8_offset_unk_Rt_3_LDRHTi:; + struct bitslice offset = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,4}, {8,4,4}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_postidx_imm8_offset_unk_Rt_3_LDRHTi)(ctx, offset, Rt, addr); /* 0x007000d0 | 0xf08fff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf7000b0) == 0x7000b0) { + goto insn_addr_offset_none_addr_postidx_imm8_offset_unk_Rt_3_LDRHTi; /* 0x007000b0 | 0xf08fff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM; /* 0x04100000 | 0xf0efffff */ + case 1: { + if ((op & 0xf100010) == 0x6100000) { + goto insn_addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG; /* 0x06100000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + case 1: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_addr_offset_none_addr_postidx_imm8s4_offset_4_LDC2L_POST; /* 0x0c300000 | 0xf0cfffff */ + case 1: { + if ((op & 0xf100010) == 0xe100010) { + goto insn_unk_Rt_13_MRC; /* 0x0e100010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 8: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 4) & 0x3) { + case 0: { + if ((op & 0xfe00ff0) == 0x800000) { + insn_GPR_Rn_GPR_Rm_unk_Rd_1_ADDrr:; + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_GPR_Rm_unk_Rd_1_ADDrr)(ctx, Rm, Rd, Rn); /* 0x00800000 | 0xf01ff00f */ + } else { + insn_GPR_Rn_so_reg_imm_shift_unk_Rd_1_ADDrsi:; + struct bitslice shift = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,7}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_so_reg_imm_shift_unk_Rd_1_ADDrsi)(ctx, shift, Rd, Rn); /* 0x00800000 | 0xf01fffcf */ + } + } + case 1: { + switch ((op >> 7) & 0x1) { + case 0: { + insn_GPR_Rn_so_reg_reg_shift_unk_Rd_1_ADDrsr:; + struct bitslice shift = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,2}, {8,8,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_so_reg_reg_shift_unk_Rd_1_ADDrsr)(ctx, shift, Rd, Rn); /* 0x00800010 | 0xf01fff6f */ + } + case 1: { + if ((op & 0xf2000f0) == 0xd0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x000000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: + goto insn_GPR_Rn_so_reg_imm_shift_unk_Rd_1_ADDrsi; /* 0x00800000 | 0xf01fffef */ + case 3: { + switch ((op >> 7) & 0x1) { + case 0: + goto insn_GPR_Rn_so_reg_reg_shift_unk_Rd_1_ADDrsr; /* 0x00800010 | 0xf01fff6f */ + case 1: + goto insn_GPR_Rt_addr_offset_none_addr_am3offset_offset_S_2_STRD_POST; /* 0x000000b0 | 0xf0cfff4f */ + } + } + } + } + case 1: { + switch ((op >> 16) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: { + insn_GPR_Rn_unk_Rd_1_ADDri:; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_unk_Rd_1_ADDri)(ctx, Rd, Rn); /* 0x02800000 | 0xf01fffff */ + } + case 15: + goto insn_adrlabel_label_unk_Rd_1_ADR; /* 0x020f0000 | 0xf0c0ffff */ + } + } + case 2: + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM; /* 0x04000000 | 0xf0efffff */ + case 3: { + if ((op & 0xf100010) == 0x6000000) { + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG; /* 0x06000000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + case 5: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + case 6: { + insn_addr_offset_none_addr_S_4_STC2L_OPTION:; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_S_4_STC2L_OPTION)(ctx, addr); /* 0x0c800000 | 0xf04fffff */ + } + case 7: { + if ((op & 0xf100010) == 0xe000010) { + goto insn_GPR_Rt_4_MCR; /* 0x0e000010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 9: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 4) & 0x3) { + case 0: { + if ((op & 0xfe00ff0) == 0x800000) { + goto insn_GPR_Rn_GPR_Rm_unk_Rd_1_ADDrr; /* 0x00800000 | 0xf01ff00f */ + } else { + goto insn_GPR_Rn_so_reg_imm_shift_unk_Rd_1_ADDrsi; /* 0x00800000 | 0xf01fffcf */ + } + } + case 1: { + switch ((op >> 7) & 0x1) { + case 0: + goto insn_GPR_Rn_so_reg_reg_shift_unk_Rd_1_ADDrsr; /* 0x00800010 | 0xf01fff6f */ + case 1: { + if ((op & 0xf2000f0) == 0xd0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x000000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: + goto insn_GPR_Rn_so_reg_imm_shift_unk_Rd_1_ADDrsi; /* 0x00800000 | 0xf01fffef */ + case 3: { + switch ((op >> 7) & 0x1) { + case 0: + goto insn_GPR_Rn_so_reg_reg_shift_unk_Rd_1_ADDrsr; /* 0x00800010 | 0xf01fff6f */ + case 1: + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x001000b0 | 0xf0cfff4f */ + } + } + } + } + case 1: + goto insn_GPR_Rn_unk_Rd_1_ADDri; /* 0x02800000 | 0xf01fffff */ + case 2: + goto insn_addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM; /* 0x04100000 | 0xf0efffff */ + case 3: { + if ((op & 0xf100010) == 0x6100000) { + goto insn_addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG; /* 0x06100000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + case 5: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + case 6: { + insn_addr_offset_none_addr_4_LDC2L_OPTION:; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_4_LDC2L_OPTION)(ctx, addr); /* 0x0c900000 | 0xf04fffff */ + } + case 7: { + if ((op & 0xf100010) == 0xe100010) { + goto insn_unk_Rt_13_MRC; /* 0x0e100010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 12: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0xd0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x000000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0xb0) { + goto insn_GPR_Rt_addr_offset_none_addr_am3offset_offset_S_2_STRD_POST; /* 0x000000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + if ((op & 0xf3f0000) == 0x20f0000) { + goto insn_adrlabel_label_unk_Rd_1_ADR; /* 0x020f0000 | 0xf0c0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM; /* 0x04000000 | 0xf0efffff */ + case 3: { + if ((op & 0xf100010) == 0x6000000) { + goto insn_GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG; /* 0x06000000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + case 5: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + case 6: + goto insn_addr_offset_none_addr_S_4_STC2L_OPTION; /* 0x0c800000 | 0xf04fffff */ + case 7: { + if ((op & 0xf100010) == 0xe000010) { + goto insn_GPR_Rt_4_MCR; /* 0x0e000010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 13: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0xd0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x000000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0x1000b0) { + goto insn_addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST; /* 0x001000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM; /* 0x04100000 | 0xf0efffff */ + case 1: { + if ((op & 0xf100010) == 0x6100000) { + goto insn_addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG; /* 0x06100000 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + case 1: + goto insn_br_target_target_B_1_Bcc; /* 0x0a000000 | 0xf0ffffff */ + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_addr_offset_none_addr_4_LDC2L_OPTION; /* 0x0c900000 | 0xf04fffff */ + case 1: { + if ((op & 0xf100010) == 0xe100010) { + goto insn_unk_Rt_13_MRC; /* 0x0e100010 | 0xf0efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 16: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 5) & 0x3) { + case 0: { + if ((op & 0xfb00ff0) == 0x1000090) { + insn_addr_offset_none_addr_unk_Rt_13_LDA:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_unk_Rt_13_LDA)(ctx, Rt, addr); /* 0x01000090 | 0xf04ff00f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + case 3: { + if ((op & 0xf3000b0) == 0x10000b0) { + insn_GPR_Rt_addrmode3_addr_S_2_STRD:; + struct bitslice addr = {.nruns = 5, .runs = (struct bitslice_run[]) {{0,0,4}, {8,4,4}, {16,9,4}, {22,13,1}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_addrmode3_addr_S_2_STRD)(ctx, addr, Rt); /* 0x010000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + case 2: { + if ((op & 0xf2000f0) == 0x10000d0) { + insn_addrmode3_addr_unk_Rt_4_LDRD:; + struct bitslice addr = {.nruns = 5, .runs = (struct bitslice_run[]) {{0,0,4}, {8,4,4}, {16,9,4}, {22,13,1}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(addrmode3_addr_unk_Rt_4_LDRD)(ctx, addr, Rt); /* 0x010000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + insn_unk_Rd_5_MOVTi16:; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(unk_Rd_5_MOVTi16)(ctx, Rd); /* 0x03000000 | 0xf04fffff */ + } + case 2: { + insn_GPR_Rt_addrmode_imm12_addr_S_1_STRi12:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,12}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_addrmode_imm12_addr_S_1_STRi12)(ctx, addr, Rt); /* 0x05000000 | 0xf08fffff */ + } + case 3: { + if ((op & 0xf700010) == 0x7000000) { + insn_GPR_Rt_ldst_so_reg_shift_S_1_STRrs:; + struct bitslice shift = {.nruns = 4, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,7}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_ldst_so_reg_shift_S_1_STRrs)(ctx, shift, Rt); /* 0x07000000 | 0xf08fffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + case 5: + case 7: + return P(unidentified)(ctx); + case 6: { + switch ((op >> 9) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 6: + case 7: { + insn_addrmode5_addr_S_4_STC2L_OFFSET:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + return P(addrmode5_addr_S_4_STC2L_OFFSET)(ctx, addr); /* 0x0d000000 | 0xf0cfffff */ + } + case 5: { + insn_addrmode5_addr_8_LDC2L_OFFSET:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + return P(addrmode5_addr_8_LDC2L_OFFSET)(ctx, addr); /* 0x0d000a00 | 0xf0cff1ff */ + } + } + } + } + } + case 17: + case 21: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0x10000d0) { + goto insn_addrmode3_addr_unk_Rt_4_LDRD; /* 0x010000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0x11000b0) { + goto insn_addrmode3_addr_unk_Rt_4_LDRD; /* 0x011000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: { + insn_addrmode_imm12_addr_unk_Rt_2_LDRBi12:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,12}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(addrmode_imm12_addr_unk_Rt_2_LDRBi12)(ctx, addr, Rt); /* 0x05100000 | 0xf0cfffff */ + } + case 1: { + if ((op & 0xf300010) == 0x7100000) { + insn_ldst_so_reg_shift_unk_Rt_2_LDRBrs:; + struct bitslice shift = {.nruns = 4, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,7}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(ldst_so_reg_shift_unk_Rt_2_LDRBrs)(ctx, shift, Rt); /* 0x07100000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8100000) { + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + if ((op & 0xf300000) == 0xd100000) { + goto insn_addrmode5_addr_8_LDC2L_OFFSET; /* 0x0d100000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 18: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x3) { + case 0: { + if ((op & 0xffffff0) == 0x12fff10) { + struct bitslice dst = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + return P(GPR_dst_B_2_BX)(ctx, dst); /* 0x012fff10 | 0xf000000f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + case 3: { + if ((op & 0xf3000b0) == 0x12000b0) { + insn_GPR_Rt_addrmode3_pre_addr_S_2_STRD_PRE:; + struct bitslice addr = {.nruns = 5, .runs = (struct bitslice_run[]) {{0,0,4}, {8,4,4}, {16,9,4}, {22,13,1}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_addrmode3_pre_addr_S_2_STRD_PRE)(ctx, addr, Rt); /* 0x012000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + case 2: { + if ((op & 0xf2000f0) == 0x12000d0) { + insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE:; + struct bitslice addr = {.nruns = 5, .runs = (struct bitslice_run[]) {{0,0,4}, {8,4,4}, {16,9,4}, {22,13,1}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(addrmode3_pre_addr_unk_Rt_4_LDRD_PRE)(ctx, addr, Rt); /* 0x012000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: { + insn_GPR_Rt_addrmode_imm12_pre_addr_S_2_STRB_PRE_IMM:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,12}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_addrmode_imm12_pre_addr_S_2_STRB_PRE_IMM)(ctx, addr, Rt); /* 0x05200000 | 0xf0cfffff */ + } + case 1: { + if ((op & 0xf300010) == 0x7200000) { + insn_GPR_Rt_ldst_so_reg_addr_S_2_STRB_PRE_REG:; + struct bitslice addr = {.nruns = 4, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,7}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_ldst_so_reg_addr_S_2_STRB_PRE_REG)(ctx, addr, Rt); /* 0x07200000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8000000) { + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + if ((op & 0xf300000) == 0xd200000) { + insn_addrmode5_pre_addr_S_4_STC2L_PRE:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + return P(addrmode5_pre_addr_S_4_STC2L_PRE)(ctx, addr); /* 0x0d200000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 19: + case 23: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0x12000d0) { + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x012000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0x13000b0) { + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x013000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: { + insn_addrmode_imm12_pre_addr_unk_Rt_2_LDRB_PRE_IMM:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,12}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(addrmode_imm12_pre_addr_unk_Rt_2_LDRB_PRE_IMM)(ctx, addr, Rt); /* 0x05300000 | 0xf0cfffff */ + } + case 1: { + if ((op & 0xf300010) == 0x7300000) { + insn_ldst_so_reg_addr_unk_Rt_2_LDRB_PRE_REG:; + struct bitslice addr = {.nruns = 4, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,7}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(ldst_so_reg_addr_unk_Rt_2_LDRB_PRE_REG)(ctx, addr, Rt); /* 0x07300000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8100000) { + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + if ((op & 0xf300000) == 0xd300000) { + insn_addrmode5_pre_addr_4_LDC2L_PRE:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + return P(addrmode5_pre_addr_4_LDC2L_PRE)(ctx, addr); /* 0x0d300000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 20: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 5) & 0x3) { + case 0: { + if ((op & 0xfb00ff0) == 0x1000090) { + goto insn_addr_offset_none_addr_unk_Rt_13_LDA; /* 0x01000090 | 0xf04ff00f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + case 3: { + if ((op & 0xf3000b0) == 0x10000b0) { + goto insn_GPR_Rt_addrmode3_addr_S_2_STRD; /* 0x010000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + case 2: { + if ((op & 0xf2000f0) == 0x10000d0) { + goto insn_addrmode3_addr_unk_Rt_4_LDRD; /* 0x010000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: + goto insn_unk_Rd_5_MOVTi16; /* 0x03000000 | 0xf04fffff */ + case 2: { + insn_GPRnopc_Rt_addrmode_imm12_addr_S_1_STRBi12:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,12}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPRnopc_Rt_addrmode_imm12_addr_S_1_STRBi12)(ctx, addr, Rt); /* 0x05400000 | 0xf08fffff */ + } + case 3: { + if ((op & 0xf700010) == 0x7400000) { + insn_GPRnopc_Rt_ldst_so_reg_shift_S_1_STRBrs:; + struct bitslice shift = {.nruns = 4, .runs = (struct bitslice_run[]) {{0,0,4}, {5,5,7}, {16,13,4}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPRnopc_Rt_ldst_so_reg_shift_S_1_STRBrs)(ctx, shift, Rt); /* 0x07400000 | 0xf08fffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + case 5: + case 7: + return P(unidentified)(ctx); + case 6: { + switch ((op >> 9) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 6: + case 7: + goto insn_addrmode5_addr_S_4_STC2L_OFFSET; /* 0x0d000000 | 0xf0cfffff */ + case 5: + goto insn_addrmode5_addr_8_LDC2L_OFFSET; /* 0x0d000a00 | 0xf0cff1ff */ + } + } + } + } + case 22: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1) { + case 0: { + if ((op & 0xf2000f0) == 0x12000d0) { + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x012000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf3000b0) == 0x12000b0) { + goto insn_GPR_Rt_addrmode3_pre_addr_S_2_STRD_PRE; /* 0x012000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_GPR_Rt_addrmode_imm12_pre_addr_S_2_STRB_PRE_IMM; /* 0x05200000 | 0xf0cfffff */ + case 1: { + if ((op & 0xf300010) == 0x7200000) { + goto insn_GPR_Rt_ldst_so_reg_addr_S_2_STRB_PRE_REG; /* 0x07200000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8000000) { + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + if ((op & 0xf300000) == 0xd200000) { + goto insn_addrmode5_pre_addr_S_4_STC2L_PRE; /* 0x0d200000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 24: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1f) { + case 0: + case 1: + case 2: + case 3: + case 8: + case 9: + case 10: + case 11: + case 12: + case 16: + case 17: + case 18: + case 19: + case 24: + case 25: + case 26: + case 27: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xfb0fff0) == 0x180fc90) { + insn_GPR_Rt_addr_offset_none_addr_S_3_STL:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rt_addr_offset_none_addr_S_3_STL)(ctx, Rt, addr); /* 0x0180fc90 | 0xf04f000f */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 7: + case 13: + case 15: + case 21: + case 23: + case 29: + case 31: { + if ((op & 0xf3000b0) == 0x10000b0) { + goto insn_GPR_Rt_addrmode3_addr_S_2_STRD; /* 0x010000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + case 6: + case 14: + case 22: + case 30: { + if ((op & 0xf2000f0) == 0x10000d0) { + goto insn_addrmode3_addr_unk_Rt_4_LDRD; /* 0x010000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 20: + case 28: { + if ((op & 0xfb00ef0) == 0x1800e90) { + insn_GPR_Rt_addr_offset_none_addr_unk_Rd_S_6_STLEX:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rt_addr_offset_none_addr_unk_Rd_S_6_STLEX)(ctx, Rt, Rd, addr); /* 0x01800e90 | 0xf04ff10f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_GPR_Rt_addrmode_imm12_addr_S_1_STRi12; /* 0x05000000 | 0xf08fffff */ + case 1: { + if ((op & 0xf700010) == 0x7000000) { + goto insn_GPR_Rt_ldst_so_reg_shift_S_1_STRrs; /* 0x07000000 | 0xf08fffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8000000) { + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + switch ((op >> 9) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 6: + case 7: { + if ((op & 0xf300000) == 0xd000000) { + goto insn_addrmode5_addr_S_4_STC2L_OFFSET; /* 0x0d000000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 5: { + if ((op & 0xf300e00) == 0xd000a00) { + goto insn_addrmode5_addr_8_LDC2L_OFFSET; /* 0x0d000a00 | 0xf0cff1ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 25: + case 29: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 8: + case 9: + case 10: + case 11: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xfb00dff) == 0x1900c9f) { + goto insn_addr_offset_none_addr_unk_Rt_13_LDA; /* 0x01900c9f | 0xf04ff200 */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 7: + case 13: + case 15: { + if ((op & 0xf3000b0) == 0x11000b0) { + goto insn_addrmode3_addr_unk_Rt_4_LDRD; /* 0x011000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + case 6: + case 14: { + if ((op & 0xf2000f0) == 0x10000d0) { + goto insn_addrmode3_addr_unk_Rt_4_LDRD; /* 0x010000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 12: { + if ((op & 0xfb00fff) == 0x1900f9f) { + goto insn_addr_offset_none_addr_unk_Rt_13_LDA; /* 0x01900f9f | 0xf04ff000 */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_addrmode_imm12_addr_unk_Rt_2_LDRBi12; /* 0x05100000 | 0xf0cfffff */ + case 1: { + if ((op & 0xf300010) == 0x7100000) { + goto insn_ldst_so_reg_shift_unk_Rt_2_LDRBrs; /* 0x07100000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8100000) { + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + if ((op & 0xf300000) == 0xd100000) { + goto insn_addrmode5_addr_8_LDC2L_OFFSET; /* 0x0d100000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 26: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 4) & 0x3) { + case 0: { + switch ((op >> 16) & 0xf) { + case 0: { + if ((op & 0xfef0ff0) == 0x1a00000) { + insn_GPR_Rm_unk_Rd_1_MOVr:; + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rm_unk_Rd_1_MOVr)(ctx, Rm, Rd); /* 0x01a00000 | 0xf010f00f */ + } else { + goto insn_unk_Rd_5_MOVTi16; /* 0x01a00000 | 0xf010ffcf */ + } + } + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: { + if ((op & 0xfe00ff0) == 0x1a00000) { + insn_tcGPR_Rm_unk_Rd_1_MOVr_TC:; + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(tcGPR_Rm_unk_Rd_1_MOVr_TC)(ctx, Rm, Rd); /* 0x01a00000 | 0xf01ff00f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 6) & 0x3) { + case 0: + case 1: { + if ((op & 0xfef0090) == 0x1a00010) { + goto insn_unk_Rd_5_MOVTi16; /* 0x01a00010 | 0xf010ff6f */ + } else { + return P(unidentified)(ctx); + } + } + case 2: { + if ((op & 0xff00ef0) == 0x1a00e90) { + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPRPairOp_Rt_addr_offset_none_addr_unk_Rd_S_2_STLEXD)(ctx, Rt, Rd, addr); /* 0x01a00e90 | 0xf00ff10f */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x012000d0 | 0xf0dfff0f */ + } + } + case 2: { + if ((op & 0xfef0010) == 0x1a00000) { + goto insn_unk_Rd_5_MOVTi16; /* 0x01a00000 | 0xf010ffef */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + switch ((op >> 7) & 0x1) { + case 0: { + if ((op & 0xfef0090) == 0x1a00010) { + goto insn_unk_Rd_5_MOVTi16; /* 0x01a00010 | 0xf010ff6f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + goto insn_GPR_Rt_addrmode3_pre_addr_S_2_STRD_PRE; /* 0x012000b0 | 0xf0cfff4f */ + } + } + } + } + case 1: { + if ((op & 0xfef0000) == 0x3a00000) { + goto insn_unk_Rd_5_MOVTi16; /* 0x03a00000 | 0xf010ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: + goto insn_GPR_Rt_addrmode_imm12_pre_addr_S_2_STRB_PRE_IMM; /* 0x05200000 | 0xf0cfffff */ + case 3: { + if ((op & 0xf300010) == 0x7200000) { + goto insn_GPR_Rt_ldst_so_reg_addr_S_2_STRB_PRE_REG; /* 0x07200000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + case 5: + case 7: + return P(unidentified)(ctx); + case 6: + goto insn_addrmode5_pre_addr_S_4_STC2L_PRE; /* 0x0d200000 | 0xf0cfffff */ + } + } + case 27: { + switch ((op >> 25) & 0x7) { + case 0: { + switch ((op >> 4) & 0x3) { + case 0: { + switch ((op >> 16) & 0xf) { + case 0: { + if ((op & 0xfef0ff0) == 0x1a00000) { + goto insn_GPR_Rm_unk_Rd_1_MOVr; /* 0x01a00000 | 0xf010f00f */ + } else { + goto insn_unk_Rd_5_MOVTi16; /* 0x01a00000 | 0xf010ffcf */ + } + } + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: { + if ((op & 0xfe00ff0) == 0x1a00000) { + goto insn_tcGPR_Rm_unk_Rd_1_MOVr_TC; /* 0x01a00000 | 0xf01ff00f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 6) & 0x3) { + case 0: + case 1: { + if ((op & 0xfef0090) == 0x1a00010) { + goto insn_unk_Rd_5_MOVTi16; /* 0x01a00010 | 0xf010ff6f */ + } else { + return P(unidentified)(ctx); + } + } + case 2: { + if ((op & 0xfb00eff) == 0x1b00e9f) { + goto insn_addr_offset_none_addr_unk_Rt_13_LDA; /* 0x01b00e9f | 0xf04ff100 */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x012000d0 | 0xf0dfff0f */ + } + } + case 2: { + if ((op & 0xfef0010) == 0x1a00000) { + goto insn_unk_Rd_5_MOVTi16; /* 0x01a00000 | 0xf010ffef */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + switch ((op >> 7) & 0x1) { + case 0: { + if ((op & 0xfef0090) == 0x1a00010) { + goto insn_unk_Rd_5_MOVTi16; /* 0x01a00010 | 0xf010ff6f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x013000b0 | 0xf0cfff4f */ + } + } + } + } + case 1: { + if ((op & 0xfef0000) == 0x3a00000) { + goto insn_unk_Rd_5_MOVTi16; /* 0x03a00000 | 0xf010ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: + goto insn_addrmode_imm12_pre_addr_unk_Rt_2_LDRB_PRE_IMM; /* 0x05300000 | 0xf0cfffff */ + case 3: { + if ((op & 0xf300010) == 0x7300000) { + goto insn_ldst_so_reg_addr_unk_Rt_2_LDRB_PRE_REG; /* 0x07300000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + case 5: + case 7: + return P(unidentified)(ctx); + case 6: + goto insn_addrmode5_pre_addr_4_LDC2L_PRE; /* 0x0d300000 | 0xf0cfffff */ + } + } + case 28: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1f) { + case 0: + case 1: + case 2: + case 3: + case 8: + case 9: + case 10: + case 11: + case 12: + case 16: + case 17: + case 18: + case 19: + case 24: + case 25: + case 26: + case 27: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xfb0fff0) == 0x180fc90) { + goto insn_GPR_Rt_addr_offset_none_addr_S_3_STL; /* 0x0180fc90 | 0xf04f000f */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 7: + case 13: + case 15: + case 21: + case 23: + case 29: + case 31: { + if ((op & 0xf3000b0) == 0x10000b0) { + goto insn_GPR_Rt_addrmode3_addr_S_2_STRD; /* 0x010000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + case 6: + case 14: + case 22: + case 30: { + if ((op & 0xf2000f0) == 0x10000d0) { + goto insn_addrmode3_addr_unk_Rt_4_LDRD; /* 0x010000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 20: + case 28: { + if ((op & 0xfb00ef0) == 0x1800e90) { + goto insn_GPR_Rt_addr_offset_none_addr_unk_Rd_S_6_STLEX; /* 0x01800e90 | 0xf04ff10f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_GPRnopc_Rt_addrmode_imm12_addr_S_1_STRBi12; /* 0x05400000 | 0xf08fffff */ + case 1: { + if ((op & 0xf700010) == 0x7400000) { + goto insn_GPRnopc_Rt_ldst_so_reg_shift_S_1_STRBrs; /* 0x07400000 | 0xf08fffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8000000) { + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + switch ((op >> 9) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 6: + case 7: { + if ((op & 0xf300000) == 0xd000000) { + goto insn_addrmode5_addr_S_4_STC2L_OFFSET; /* 0x0d000000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 5: { + if ((op & 0xf300e00) == 0xd000a00) { + goto insn_addrmode5_addr_8_LDC2L_OFFSET; /* 0x0d000a00 | 0xf0cff1ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 30: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1f) { + case 0: + case 1: + case 2: + case 3: + case 8: + case 9: + case 10: + case 11: + case 12: + case 16: + case 17: + case 18: + case 19: + case 24: + case 25: + case 26: + case 27: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xff0fff0) == 0x1e0fc90) { + goto insn_GPR_Rt_addr_offset_none_addr_S_3_STL; /* 0x01e0fc90 | 0xf00f000f */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 7: + case 13: + case 15: + case 21: + case 23: + case 29: + case 31: { + if ((op & 0xf3000b0) == 0x12000b0) { + goto insn_GPR_Rt_addrmode3_pre_addr_S_2_STRD_PRE; /* 0x012000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + case 6: + case 14: + case 22: + case 30: { + if ((op & 0xf2000f0) == 0x12000d0) { + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x012000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 20: + case 28: { + if ((op & 0xff00ef0) == 0x1e00e90) { + goto insn_GPR_Rt_addr_offset_none_addr_unk_Rd_S_6_STLEX; /* 0x01e00e90 | 0xf00ff10f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_GPR_Rt_addrmode_imm12_pre_addr_S_2_STRB_PRE_IMM; /* 0x05200000 | 0xf0cfffff */ + case 1: { + if ((op & 0xf300010) == 0x7200000) { + goto insn_GPR_Rt_ldst_so_reg_addr_S_2_STRB_PRE_REG; /* 0x07200000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8000000) { + goto insn_GPR_Rn_reglist_regs_S_16_STMDA; /* 0x08000000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + if ((op & 0xf300000) == 0xd200000) { + goto insn_addrmode5_pre_addr_S_4_STC2L_PRE; /* 0x0d200000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 31: { + switch ((op >> 26) & 0x3) { + case 0: { + switch ((op >> 5) & 0x1f) { + case 0: + case 1: + case 2: + case 3: + case 8: + case 9: + case 10: + case 11: + case 12: + case 16: + case 17: + case 18: + case 19: + case 24: + case 25: + case 26: + case 27: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xff00fff) == 0x1f00c9f) { + goto insn_addr_offset_none_addr_unk_Rt_13_LDA; /* 0x01f00c9f | 0xf00ff000 */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 7: + case 13: + case 15: + case 21: + case 23: + case 29: + case 31: { + if ((op & 0xf3000b0) == 0x13000b0) { + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x013000b0 | 0xf0cfff4f */ + } else { + return P(unidentified)(ctx); + } + } + case 6: + case 14: + case 22: + case 30: { + if ((op & 0xf2000f0) == 0x12000d0) { + goto insn_addrmode3_pre_addr_unk_Rt_4_LDRD_PRE; /* 0x012000d0 | 0xf0dfff0f */ + } else { + return P(unidentified)(ctx); + } + } + case 20: + case 28: { + if ((op & 0xfb00eff) == 0x1b00e9f) { + goto insn_addr_offset_none_addr_unk_Rt_13_LDA; /* 0x01b00e9f | 0xf04ff100 */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 25) & 0x1) { + case 0: + goto insn_addrmode_imm12_pre_addr_unk_Rt_2_LDRB_PRE_IMM; /* 0x05300000 | 0xf0cfffff */ + case 1: { + if ((op & 0xf300010) == 0x7300000) { + goto insn_ldst_so_reg_addr_unk_Rt_2_LDRB_PRE_REG; /* 0x07300000 | 0xf0cfffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xe100000) == 0x8100000) { + goto insn_GPR_Rn_reglist_regs_16_LDMDA; /* 0x08100000 | 0xf1efffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + if ((op & 0xf300000) == 0xd300000) { + goto insn_addrmode5_pre_addr_4_LDC2L_PRE; /* 0x0d300000 | 0xf0cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } +/* +static INLINE tdis_ret P(GPRPairOp_Rt_addr_offset_none_addr_unk_Rd_S_2_STLEXD)(struct bitslice ctx, struct bitslice Rt, struct bitslice Rd, struct bitslice addr) {} +static INLINE tdis_ret P(GPR_Rm_unk_Rd_1_MOVr)(struct bitslice ctx, struct bitslice Rm, struct bitslice Rd) {} +static INLINE tdis_ret P(GPR_Rn_GPR_Rm_unk_Rd_1_ADDrr)(struct bitslice ctx, struct bitslice Rm, struct bitslice Rd, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rn_reglist_regs_16_LDMDA)(struct bitslice ctx, struct bitslice regs, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rn_reglist_regs_S_16_STMDA)(struct bitslice ctx, struct bitslice regs, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rn_so_reg_imm_shift_unk_Rd_1_ADDrsi)(struct bitslice ctx, struct bitslice shift, struct bitslice Rd, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rn_so_reg_reg_shift_unk_Rd_1_ADDrsr)(struct bitslice ctx, struct bitslice shift, struct bitslice Rd, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rn_unk_Rd_1_ADDri)(struct bitslice ctx, struct bitslice Rd, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rt_4_MCR)(struct bitslice ctx, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_addr_offset_none_addr_S_3_STL)(struct bitslice ctx, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(GPR_Rt_addr_offset_none_addr_am2offset_imm_offset_S_4_STRBT_POST_IMM)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(GPR_Rt_addr_offset_none_addr_am2offset_reg_offset_S_4_STRBT_POST_REG)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(GPR_Rt_addr_offset_none_addr_am3offset_offset_S_2_STRD_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(GPR_Rt_addr_offset_none_addr_postidx_imm8_offset_S_1_STRHTi)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(GPR_Rt_addr_offset_none_addr_postidx_reg_Rm_S_1_STRHTr)(struct bitslice ctx, struct bitslice Rm, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(GPR_Rt_addr_offset_none_addr_unk_Rd_S_6_STLEX)(struct bitslice ctx, struct bitslice Rt, struct bitslice Rd, struct bitslice addr) {} +static INLINE tdis_ret P(GPR_Rt_addrmode3_addr_S_2_STRD)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_addrmode3_pre_addr_S_2_STRD_PRE)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_addrmode_imm12_addr_S_1_STRi12)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_addrmode_imm12_pre_addr_S_2_STRB_PRE_IMM)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_ldst_so_reg_addr_S_2_STRB_PRE_REG)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_ldst_so_reg_shift_S_1_STRrs)(struct bitslice ctx, struct bitslice shift, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_dst_B_2_BX)(struct bitslice ctx, struct bitslice dst) {} +static INLINE tdis_ret P(GPRnopc_Rt_4_MCRR)(struct bitslice ctx, struct bitslice Rt) {} +static INLINE tdis_ret P(GPRnopc_Rt_addrmode_imm12_addr_S_1_STRBi12)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPRnopc_Rt_ldst_so_reg_shift_S_1_STRBrs)(struct bitslice ctx, struct bitslice shift, struct bitslice Rt) {} +static INLINE tdis_ret P(addr_offset_none_addr_4_LDC2L_OPTION)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_S_4_STC2L_OPTION)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_am2offset_imm_offset_unk_Rt_4_LDRBT_POST_IMM)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_am2offset_reg_offset_unk_Rt_4_LDRBT_POST_REG)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_am3offset_offset_unk_Rt_4_LDRD_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_postidx_imm8_offset_unk_Rt_3_LDRHTi)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_postidx_imm8s4_offset_4_LDC2L_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_postidx_imm8s4_offset_S_4_STC2L_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_postidx_reg_Rm_unk_Rt_3_LDRHTr)(struct bitslice ctx, struct bitslice Rm, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_unk_Rt_13_LDA)(struct bitslice ctx, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode3_addr_unk_Rt_4_LDRD)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(addrmode3_pre_addr_unk_Rt_4_LDRD_PRE)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(addrmode5_addr_8_LDC2L_OFFSET)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode5_addr_S_4_STC2L_OFFSET)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode5_pre_addr_4_LDC2L_PRE)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode5_pre_addr_S_4_STC2L_PRE)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode_imm12_addr_unk_Rt_2_LDRBi12)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(addrmode_imm12_pre_addr_unk_Rt_2_LDRB_PRE_IMM)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(adrlabel_label_unk_Rd_1_ADR)(struct bitslice ctx, struct bitslice label, struct bitslice Rd) {} +static INLINE tdis_ret P(br_target_target_B_1_Bcc)(struct bitslice ctx, struct bitslice target) {} +static INLINE tdis_ret P(ldst_so_reg_addr_unk_Rt_2_LDRB_PRE_REG)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(ldst_so_reg_shift_unk_Rt_2_LDRBrs)(struct bitslice ctx, struct bitslice shift, struct bitslice Rt) {} +static INLINE tdis_ret P(tcGPR_Rm_unk_Rd_1_MOVr_TC)(struct bitslice ctx, struct bitslice Rm, struct bitslice Rd) {} +static INLINE tdis_ret P(unk_Rd_5_MOVTi16)(struct bitslice ctx, struct bitslice Rd) {} +static INLINE tdis_ret P(unk_Rt_13_MRC)(struct bitslice ctx, struct bitslice Rt) {} +*/ + diff --git a/generated/generic-dis-arm64.inc.h b/generated/generic-dis-arm64.inc.h new file mode 100644 index 0000000..9a2fb05 --- /dev/null +++ b/generated/generic-dis-arm64.inc.h @@ -0,0 +1,152 @@ +/* Generated code; do not edit! + generated by tables/gen.js from imaon2 '2b8112204067abe3d0643e23c2486656841ecafe' + https://github.com/comex/imaon2 + arguments: '--gen-hook-disassembler --dis-pattern=P(XXX) out/out-AArch64.json' + (fair warning: at present the main (Rust) code in that repository is barely + started, embarrassingly so; no need to look at it ;p) + In case it's copyrightable in any way, consider the generated code in the + public domain. +*/ + +/* adrlabel_label_unk_Xd_1_ADR: ADR */ +/* adrplabel_label_unk_Xd_1_ADRP: ADRP */ +/* am_b_target_addr_B_1_B: B */ +/* am_bl_target_addr_1_BL: BL */ +/* am_brcond_target_B_5_Bcc: Bcc, CBNZW, CBNZX, CBZW, CBZX */ +/* am_ldrlit_label_unk_Rt_6_LDRDl: LDRDl, LDRQl, LDRSWl, LDRSl, LDRWl, LDRXl */ +/* GPR64_Rn_1_RET: RET */ +/* am_tbrcond_target_B_4_TBNZW: TBNZW, TBNZX, TBZW, TBZX */ + switch ((op >> 26) & 0x1f) { + case 0: + case 1: + case 2: + case 3: + case 8: + case 9: + case 10: + case 11: + case 14: + case 15: + case 16: + case 17: + case 18: + case 19: + case 24: + case 25: + case 26: + case 27: + case 29: + case 30: + case 31: + return P(unidentified)(ctx); + case 4: + case 12: + case 20: + case 28: { + switch ((op >> 31) & 0x1) { + case 0: { + if ((op & 0x9f000000) == 0x10000000) { + struct bitslice Xd = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,5}}}; + struct bitslice label = {.nruns = 2, .runs = (struct bitslice_run[]) {{5,2,19}, {29,0,2}}}; + return P(adrlabel_label_unk_Xd_1_ADR)(ctx, Xd, label); /* 0x10000000 | 0x60ffffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0x9f000000) == 0x90000000) { + struct bitslice Xd = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,5}}}; + struct bitslice label = {.nruns = 2, .runs = (struct bitslice_run[]) {{5,2,19}, {29,0,2}}}; + return P(adrplabel_label_unk_Xd_1_ADRP)(ctx, Xd, label); /* 0x90000000 | 0x60ffffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 5: { + switch ((op >> 31) & 0x1) { + case 0: { + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,26}}}; + return P(am_b_target_addr_B_1_B)(ctx, addr); /* 0x14000000 | 0x03ffffff */ + } + case 1: { + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,26}}}; + return P(am_bl_target_addr_1_BL)(ctx, addr); /* 0x94000000 | 0x03ffffff */ + } + } + } + case 6: + case 7: { + switch ((op >> 31) & 0x1) { + case 0: { + if ((op & 0xbb000000) == 0x18000000) { + insn_am_ldrlit_label_unk_Rt_6_LDRDl:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,5}}}; + struct bitslice label = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,19}}}; + return P(am_ldrlit_label_unk_Rt_6_LDRDl)(ctx, Rt, label); /* 0x18000000 | 0x44ffffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfb000000) == 0x98000000) { + goto insn_am_ldrlit_label_unk_Rt_6_LDRDl; /* 0x98000000 | 0x04ffffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 13: { + switch ((op >> 25) & 0x1) { + case 0: { + insn_am_brcond_target_B_5_Bcc:; + struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,19}}}; + return P(am_brcond_target_B_5_Bcc)(ctx, target); /* 0x34000000 | 0x81ffffff */ + } + case 1: { + struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,14}}}; + return P(am_tbrcond_target_B_4_TBNZW)(ctx, target); /* 0x36000000 | 0x81ffffff */ + } + } + } + case 21: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xff000010) == 0x54000000) { + goto insn_am_brcond_target_B_5_Bcc; /* 0x54000000 | 0x00ffffef */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfffffc1f) == 0xd65f0000) { + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{5,0,5}}}; + return P(GPR64_Rn_1_RET)(ctx, Rn); /* 0xd65f0000 | 0x000003e0 */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 22: + case 23: { + if ((op & 0xbb000000) == 0x18000000) { + goto insn_am_ldrlit_label_unk_Rt_6_LDRDl; /* 0x18000000 | 0x44ffffff */ + } else { + return P(unidentified)(ctx); + } + } + } +/* +static INLINE tdis_ret P(GPR64_Rn_1_RET)(struct bitslice ctx, struct bitslice Rn) {} +static INLINE tdis_ret P(adrlabel_label_unk_Xd_1_ADR)(struct bitslice ctx, struct bitslice Xd, struct bitslice label) {} +static INLINE tdis_ret P(adrplabel_label_unk_Xd_1_ADRP)(struct bitslice ctx, struct bitslice Xd, struct bitslice label) {} +static INLINE tdis_ret P(am_b_target_addr_B_1_B)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(am_bl_target_addr_1_BL)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(am_brcond_target_B_5_Bcc)(struct bitslice ctx, struct bitslice target) {} +static INLINE tdis_ret P(am_ldrlit_label_unk_Rt_6_LDRDl)(struct bitslice ctx, struct bitslice Rt, struct bitslice label) {} +static INLINE tdis_ret P(am_tbrcond_target_B_4_TBNZW)(struct bitslice ctx, struct bitslice target) {} +*/ + diff --git a/generated/generic-dis-thumb.inc.h b/generated/generic-dis-thumb.inc.h new file mode 100644 index 0000000..be5abb6 --- /dev/null +++ b/generated/generic-dis-thumb.inc.h @@ -0,0 +1,256 @@ +/* Generated code; do not edit! + generated by tables/gen.js from imaon2 '2b8112204067abe3d0643e23c2486656841ecafe' + https://github.com/comex/imaon2 + arguments: '--gen-hook-disassembler -n _thumb --dis-pattern=P(XXX) out/out-ARM.json' + (fair warning: at present the main (Rust) code in that repository is barely + started, embarrassingly so; no need to look at it ;p) + In case it's copyrightable in any way, consider the generated code in the + public domain. +*/ + +/* it_pred_cc_it_mask_mask_1_t2IT: t2IT */ +/* GPR_Rm_unk_Rdn_1_tADDhirr: tADDhirr */ +/* unk_Rdn_1_tADDrSP: tADDrSP */ +/* GPR_Rm_1_tADDspr: tADDspr */ +/* t_adrlabel_addr_unk_Rd_1_tADR: tADR */ +/* t_brtarget_target_B_1_tB: tB */ +/* GPR_Rm_B_1_tBX: tBX */ +/* t_bcctarget_target_B_1_tBcc: tBcc */ +/* t_cbtarget_target_B_2_tCBNZ: tCBNZ, tCBZ */ +/* tGPR_Rn_reglist_regs_1_tLDMIA: tLDMIA */ +/* t_addrmode_pc_addr_unk_Rt_1_tLDRpci: tLDRpci */ +/* GPR_Rm_unk_Rd_1_tMOVr: tMOVr */ +/* reglist_regs_1_tPOP: tPOP */ +/* reglist_regs_S_1_tPUSH: tPUSH */ +/* tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD: tSTMIA_UPD */ + switch ((op >> 9) & 0x1f) { + case 0: + case 1: { + if ((op & 0xfffff800) == 0xc000) { + insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD:; + struct bitslice regs = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,3}}}; + return P(tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD)(ctx, regs, Rn); /* 0x0000c000 | 0x000007ff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: { + switch ((op >> 15) & 0x1) { + case 0: { + switch ((op >> 3) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 14: + case 15: { + if ((op & 0xffffff87) == 0x4485) { + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}}; + return P(GPR_Rm_1_tADDspr)(ctx, Rm); /* 0x00004485 | 0x00000078 */ + } else { + if ((op & 0xffffff00) == 0x4400) { + struct bitslice Rdn = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,3}, {7,3,1}}}; + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}}; + return P(GPR_Rm_unk_Rdn_1_tADDhirr)(ctx, Rdn, Rm); /* 0x00004400 | 0x000000ff */ + } else { + return P(unidentified)(ctx); + } + } + } + case 13: { + if ((op & 0xffffff78) == 0x4468) { + struct bitslice Rdn = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,3}, {7,3,1}}}; + return P(unk_Rdn_1_tADDrSP)(ctx, Rdn); /* 0x00004468 | 0x00000087 */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + if ((op & 0xfffff800) == 0xc000) { + goto insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD; /* 0x0000c000 | 0x000007ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + switch ((op >> 8) & 0x1) { + case 0: { + switch ((op >> 15) & 0x1) { + case 0: { + if ((op & 0xffffff00) == 0x4600) { + struct bitslice Rd = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,3}, {7,3,1}}}; + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}}; + return P(GPR_Rm_unk_Rd_1_tMOVr)(ctx, Rd, Rm); /* 0x00004600 | 0x000000ff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfffff800) == 0xc000) { + goto insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD; /* 0x0000c000 | 0x000007ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 15) & 0x1) { + case 0: { + if ((op & 0xffffff87) == 0x4700) { + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{3,0,4}}}; + return P(GPR_Rm_B_1_tBX)(ctx, Rm); /* 0x00004700 | 0x00000078 */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfffff800) == 0xc000) { + goto insn_tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD; /* 0x0000c000 | 0x000007ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 4: + case 5: + case 6: + case 7: { + switch ((op >> 15) & 0x1) { + case 0: { + if ((op & 0xfffff800) == 0x4800) { + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,3}}}; + return P(t_addrmode_pc_addr_unk_Rt_1_tLDRpci)(ctx, addr, Rt); /* 0x00004800 | 0x000007ff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfffff800) == 0xc800) { + struct bitslice regs = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,3}}}; + return P(tGPR_Rn_reglist_regs_1_tLDMIA)(ctx, regs, Rn); /* 0x0000c800 | 0x000007ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: + case 15: { + if ((op & 0xfffff000) == 0xd000) { + struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}}; + return P(t_bcctarget_target_B_1_tBcc)(ctx, target); /* 0x0000d000 | 0x00000fff */ + } else { + return P(unidentified)(ctx); + } + } + case 16: + case 17: + case 18: + case 19: { + switch ((op >> 14) & 0x1) { + case 0: { + if ((op & 0xfffff800) == 0xa000) { + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,8}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,3}}}; + return P(t_adrlabel_addr_unk_Rd_1_tADR)(ctx, addr, Rd); /* 0x0000a000 | 0x000007ff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfffff800) == 0xe000) { + struct bitslice target = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,11}}}; + return P(t_brtarget_target_B_1_tB)(ctx, target); /* 0x0000e000 | 0x000007ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 20: + case 21: + case 22: + case 23: + case 27: + return P(unidentified)(ctx); + case 24: + case 25: + case 28: + case 29: { + if ((op & 0xfffff500) == 0xb100) { + struct bitslice target = {.nruns = 2, .runs = (struct bitslice_run[]) {{3,0,5}, {9,5,1}}}; + return P(t_cbtarget_target_B_2_tCBNZ)(ctx, target); /* 0x0000b100 | 0x00000aff */ + } else { + return P(unidentified)(ctx); + } + } + case 26: { + if ((op & 0xfffffe00) == 0xb400) { + struct bitslice regs = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {8,14,1}}}; + return P(reglist_regs_S_1_tPUSH)(ctx, regs); /* 0x0000b400 | 0x000001ff */ + } else { + return P(unidentified)(ctx); + } + } + case 30: { + if ((op & 0xfffffe00) == 0xbc00) { + struct bitslice regs = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {8,15,1}}}; + return P(reglist_regs_1_tPOP)(ctx, regs); /* 0x0000bc00 | 0x000001ff */ + } else { + return P(unidentified)(ctx); + } + } + case 31: { + if ((op & 0xff00) == 0xbf00) { + struct bitslice mask = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice cc = {.nruns = 1, .runs = (struct bitslice_run[]) {{4,0,4}}}; + return P(it_pred_cc_it_mask_mask_1_t2IT)(ctx, mask, cc); /* 0xbf00 | 0x00ff */ + } else { + return P(unidentified)(ctx); + } + } + } +/* +static INLINE tdis_ret P(GPR_Rm_1_tADDspr)(struct bitslice ctx, struct bitslice Rm) {} +static INLINE tdis_ret P(GPR_Rm_B_1_tBX)(struct bitslice ctx, struct bitslice Rm) {} +static INLINE tdis_ret P(GPR_Rm_unk_Rd_1_tMOVr)(struct bitslice ctx, struct bitslice Rd, struct bitslice Rm) {} +static INLINE tdis_ret P(GPR_Rm_unk_Rdn_1_tADDhirr)(struct bitslice ctx, struct bitslice Rdn, struct bitslice Rm) {} +static INLINE tdis_ret P(it_pred_cc_it_mask_mask_1_t2IT)(struct bitslice ctx, struct bitslice mask, struct bitslice cc) {} +static INLINE tdis_ret P(reglist_regs_1_tPOP)(struct bitslice ctx, struct bitslice regs) {} +static INLINE tdis_ret P(reglist_regs_S_1_tPUSH)(struct bitslice ctx, struct bitslice regs) {} +static INLINE tdis_ret P(tGPR_Rn_reglist_regs_1_tLDMIA)(struct bitslice ctx, struct bitslice regs, struct bitslice Rn) {} +static INLINE tdis_ret P(tGPR_Rn_reglist_regs_S_1_tSTMIA_UPD)(struct bitslice ctx, struct bitslice regs, struct bitslice Rn) {} +static INLINE tdis_ret P(t_addrmode_pc_addr_unk_Rt_1_tLDRpci)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t_adrlabel_addr_unk_Rd_1_tADR)(struct bitslice ctx, struct bitslice addr, struct bitslice Rd) {} +static INLINE tdis_ret P(t_bcctarget_target_B_1_tBcc)(struct bitslice ctx, struct bitslice target) {} +static INLINE tdis_ret P(t_brtarget_target_B_1_tB)(struct bitslice ctx, struct bitslice target) {} +static INLINE tdis_ret P(t_cbtarget_target_B_2_tCBNZ)(struct bitslice ctx, struct bitslice target) {} +static INLINE tdis_ret P(unk_Rdn_1_tADDrSP)(struct bitslice ctx, struct bitslice Rdn) {} +*/ + diff --git a/generated/generic-dis-thumb2.inc.h b/generated/generic-dis-thumb2.inc.h new file mode 100644 index 0000000..6cad07c --- /dev/null +++ b/generated/generic-dis-thumb2.inc.h @@ -0,0 +1,3019 @@ +/* Generated code; do not edit! + generated by tables/gen.js from imaon2 '2b8112204067abe3d0643e23c2486656841ecafe' + https://github.com/comex/imaon2 + arguments: '--gen-hook-disassembler -n _thumb2 --dis-pattern=P(XXX) out/out-ARM.json' + (fair warning: at present the main (Rust) code in that repository is barely + started, embarrassingly so; no need to look at it ;p) + In case it's copyrightable in any way, consider the generated code in the + public domain. +*/ + +/* addrmode5_addr_8_VLDRD: VLDRD, VLDRS, VSTRD, VSTRS, t2LDC2L_OFFSET, t2LDC2_OFFSET, t2LDCL_OFFSET, t2LDC_OFFSET */ +/* GPR_Rt_8_VMOVDRR: VMOVDRR, VMOVSR, t2MCR, t2MCR2, t2MCRR, t2MCRR2, t2MRRC, t2MRRC2 */ +/* unk_Rt_13_VMOVRRD: VMOVRRD, VMOVRRS, VMOVRS, VMRS, VMRS_FPEXC, VMRS_FPINST, VMRS_FPINST2, VMRS_FPSID, VMRS_MVFR0, VMRS_MVFR1, VMRS_MVFR2, t2MRC, t2MRC2 */ +/* GPRnopc_Rn_unk_Rd_2_t2ADDri: t2ADDri, t2ADDrs */ +/* GPR_Rn_unk_Rd_1_t2ADDri12: t2ADDri12 */ +/* GPRnopc_Rn_rGPR_Rm_unk_Rd_1_t2ADDrr: t2ADDrr */ +/* t2adrlabel_addr_unk_Rd_1_t2ADR: t2ADR */ +/* uncondbrtarget_target_B_1_t2B: t2B */ +/* brtarget_target_B_1_t2Bcc: t2Bcc */ +/* addr_offset_none_addr_unk_Rt_11_t2LDA: t2LDA, t2LDAB, t2LDAEX, t2LDAEXB, t2LDAEXD, t2LDAEXH, t2LDAH, t2LDRD_POST, t2LDREXB, t2LDREXD, t2LDREXH */ +/* addr_offset_none_addr_4_t2LDC2L_OPTION: t2LDC2L_OPTION, t2LDC2_OPTION, t2LDCL_OPTION, t2LDC_OPTION */ +/* addr_offset_none_addr_postidx_imm8s4_offset_4_t2LDC2L_POST: t2LDC2L_POST, t2LDC2_POST, t2LDCL_POST, t2LDC_POST */ +/* addrmode5_pre_addr_4_t2LDC2L_PRE: t2LDC2L_PRE, t2LDC2_PRE, t2LDCL_PRE, t2LDC_PRE */ +/* GPR_Rn_reglist_regs_4_t2LDMDB: t2LDMDB, t2LDMDB_UPD, t2LDMIA, t2LDMIA_UPD */ +/* t2addrmode_posimm8_addr_unk_Rt_5_t2LDRBT: t2LDRBT, t2LDRHT, t2LDRSBT, t2LDRSHT, t2LDRT */ +/* addr_offset_none_Rn_t2am_imm8_offset_offset_unk_Rt_5_t2LDRB_POST: t2LDRB_POST, t2LDRH_POST, t2LDRSB_POST, t2LDRSH_POST, t2LDR_POST */ +/* t2addrmode_imm8_pre_addr_unk_Rt_5_t2LDRB_PRE: t2LDRB_PRE, t2LDRH_PRE, t2LDRSB_PRE, t2LDRSH_PRE, t2LDR_PRE */ +/* t2addrmode_imm12_addr_unk_Rt_5_t2LDRBi12: t2LDRBi12, t2LDRHi12, t2LDRSBi12, t2LDRSHi12, t2LDRi12 */ +/* t2addrmode_negimm8_addr_unk_Rt_5_t2LDRBi8: t2LDRBi8, t2LDRHi8, t2LDRSBi8, t2LDRSHi8, t2LDRi8 */ +/* t2ldrlabel_addr_unk_Rt_5_t2LDRBpci: t2LDRBpci, t2LDRHpci, t2LDRSBpci, t2LDRSHpci, t2LDRpci */ +/* t2addrmode_so_reg_addr_unk_Rt_5_t2LDRBs: t2LDRBs, t2LDRHs, t2LDRSBs, t2LDRSHs, t2LDRs */ +/* t2addrmode_imm8s4_pre_addr_unk_Rt_1_t2LDRD_PRE: t2LDRD_PRE */ +/* t2addrmode_imm8s4_addr_unk_Rt_1_t2LDRDi8: t2LDRDi8 */ +/* t2addrmode_imm0_1020s4_addr_unk_Rt_1_t2LDREX: t2LDREX */ +/* unk_Rd_3_t2MOVTi16: t2MOVTi16, t2MOVi, t2MOVi16 */ +/* GPR_Rm_unk_Rd_1_t2MOVr: t2MOVr */ +/* addrmode5_addr_S_4_t2STC2L_OFFSET: t2STC2L_OFFSET, t2STC2_OFFSET, t2STCL_OFFSET, t2STC_OFFSET */ +/* addr_offset_none_addr_S_4_t2STC2L_OPTION: t2STC2L_OPTION, t2STC2_OPTION, t2STCL_OPTION, t2STC_OPTION */ +/* addr_offset_none_addr_postidx_imm8s4_offset_S_4_t2STC2L_POST: t2STC2L_POST, t2STC2_POST, t2STCL_POST, t2STC_POST */ +/* addrmode5_pre_addr_S_4_t2STC2L_PRE: t2STC2L_PRE, t2STC2_PRE, t2STCL_PRE, t2STC_PRE */ +/* rGPR_Rt_addr_offset_none_addr_S_4_t2STL: t2STL, t2STLB, t2STLH, t2STRD_POST */ +/* rGPR_Rt_addr_offset_none_addr_unk_Rd_S_7_t2STLEX: t2STLEX, t2STLEXB, t2STLEXD, t2STLEXH, t2STREXB, t2STREXD, t2STREXH */ +/* GPR_Rn_reglist_regs_S_4_t2STMDB: t2STMDB, t2STMDB_UPD, t2STMIA, t2STMIA_UPD */ +/* t2addrmode_imm8_addr_unk_Rt_S_3_t2STRBT: t2STRBT, t2STRHT, t2STRT */ +/* rGPR_Rt_addr_offset_none_Rn_t2am_imm8_offset_offset_S_2_t2STRB_POST: t2STRB_POST, t2STRH_POST */ +/* rGPR_Rt_t2addrmode_imm8_pre_addr_S_2_t2STRB_PRE: t2STRB_PRE, t2STRH_PRE */ +/* rGPR_Rt_t2addrmode_imm12_addr_S_2_t2STRBi12: t2STRBi12, t2STRHi12 */ +/* rGPR_Rt_t2addrmode_negimm8_addr_S_2_t2STRBi8: t2STRBi8, t2STRHi8 */ +/* rGPR_Rt_t2addrmode_so_reg_addr_S_2_t2STRBs: t2STRBs, t2STRHs */ +/* rGPR_Rt_t2addrmode_imm8s4_pre_addr_S_1_t2STRD_PRE: t2STRD_PRE */ +/* rGPR_Rt_t2addrmode_imm8s4_addr_S_1_t2STRDi8: t2STRDi8 */ +/* rGPR_Rt_t2addrmode_imm0_1020s4_addr_unk_Rd_S_1_t2STREX: t2STREX */ +/* GPRnopc_Rt_addr_offset_none_Rn_t2am_imm8_offset_offset_S_1_t2STR_POST: t2STR_POST */ +/* GPRnopc_Rt_t2addrmode_imm8_pre_addr_S_1_t2STR_PRE: t2STR_PRE */ +/* GPR_Rt_t2addrmode_imm12_addr_S_1_t2STRi12: t2STRi12 */ +/* GPR_Rt_t2addrmode_negimm8_addr_S_1_t2STRi8: t2STRi8 */ +/* GPR_Rt_t2addrmode_so_reg_addr_S_1_t2STRs: t2STRs */ +/* unk_Rm_B_2_t2TBB: t2TBB, t2TBH */ + switch ((op >> 20) & 0x1f) { + case 0: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 15) & 0x1) { + case 0: { + if ((op & 0xfb5f8000) == 0xf20f0000) { + insn_t2adrlabel_addr_unk_Rd_1_t2ADR:; + struct bitslice addr = {.nruns = 5, .runs = (struct bitslice_run[]) {{0,0,8}, {12,8,3}, {21,12,1}, {23,12,1}, {26,11,1}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,4}}}; + return P(t2adrlabel_addr_unk_Rd_1_t2ADR)(ctx, addr, Rd); /* 0xf20f0000 | 0x04007fff */ + } else { + if ((op & 0xfbf08000) == 0xf2000000) { + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_unk_Rd_1_t2ADDri12)(ctx, Rd, Rn); /* 0xf2000000 | 0x040f7fff */ + } else { + return P(unidentified)(ctx); + } + } + } + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + insn_brtarget_target_B_1_t2Bcc:; + struct bitslice target = {.nruns = 5, .runs = (struct bitslice_run[]) {{0,1,11}, {11,19,1}, {13,18,1}, {16,12,6}, {26,20,1}}}; + return P(brtarget_target_B_1_t2Bcc)(ctx, target); /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + insn_uncondbrtarget_target_B_1_t2B:; + struct bitslice target = {.nruns = 5, .runs = (struct bitslice_run[]) {{0,0,11}, {11,21,1}, {13,22,1}, {16,11,10}, {26,23,1}}}; + return P(uncondbrtarget_target_B_1_t2B)(ctx, target); /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 2: { + switch ((op >> 8) & 0x7) { + case 0: { + if ((op & 0xffd00fc0) == 0xf8000000) { + insn_rGPR_Rt_t2addrmode_so_reg_addr_S_2_t2STRBs:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,2,4}, {4,0,2}, {16,6,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(rGPR_Rt_t2addrmode_so_reg_addr_S_2_t2STRBs)(ctx, addr, Rt); /* 0xf8000000 | 0x002ff03f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + case 3: { + if ((op & 0xffd00d00) == 0xf8000900) { + insn_rGPR_Rt_addr_offset_none_Rn_t2am_imm8_offset_offset_S_2_t2STRB_POST:; + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(rGPR_Rt_addr_offset_none_Rn_t2am_imm8_offset_offset_S_2_t2STRB_POST)(ctx, offset, Rt, Rn); /* 0xf8000900 | 0x002ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xffd00d00) == 0xf8000c00) { + insn_rGPR_Rt_t2addrmode_negimm8_addr_S_2_t2STRBi8:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}, {16,9,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(rGPR_Rt_t2addrmode_negimm8_addr_S_2_t2STRBi8)(ctx, addr, Rt); /* 0xf8000c00 | 0x002ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 7: { + if ((op & 0xffd00d00) == 0xf8000d00) { + insn_rGPR_Rt_t2addrmode_imm8_pre_addr_S_2_t2STRB_PRE:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}, {16,9,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(rGPR_Rt_t2addrmode_imm8_pre_addr_S_2_t2STRB_PRE)(ctx, addr, Rt); /* 0xf8000d00 | 0x002ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 6: { + if ((op & 0xffd00f00) == 0xf8000e00) { + insn_t2addrmode_imm8_addr_unk_Rt_S_3_t2STRBT:; + struct bitslice addr = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_imm8_addr_unk_Rt_S_3_t2STRBT)(ctx, addr, Rt); /* 0xf8000e00 | 0x002ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + if ((op & 0xff00f7f) == 0xe000a10) { + insn_GPR_Rt_8_VMOVDRR:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_8_VMOVDRR)(ctx, Rt); /* 0x0e000a10 | 0xf00ff080 */ + } else { + if ((op & 0xef100010) == 0xee000010) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xee000010 | 0x100fffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + case 1: { + switch ((op >> 8) & 0x7) { + case 0: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xfed00fc0) == 0xf8100000) { + insn_t2addrmode_so_reg_addr_unk_Rt_5_t2LDRBs:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,2,4}, {4,0,2}, {16,6,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_so_reg_addr_unk_Rt_5_t2LDRBs)(ctx, addr, Rt); /* 0xf8100000 | 0x012ff03f */ + } else { + if ((op & 0xfe5f0000) == 0xf81f0000) { + insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci:; + struct bitslice addr = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,12}, {23,12,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2ldrlabel_addr_unk_Rt_5_t2LDRBpci)(ctx, addr, Rt); /* 0xf81f0000 | 0x0120f8ff */ + } else { + return P(unidentified)(ctx); + } + } + } + case 3: { + if ((op & 0xef100010) == 0xee100010) { + insn_unk_Rt_13_VMOVRRD:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(unk_Rt_13_VMOVRRD)(ctx, Rt); /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: + case 3: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100900) { + insn_addr_offset_none_Rn_t2am_imm8_offset_offset_unk_Rt_5_t2LDRB_POST:; + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_Rn_t2am_imm8_offset_offset_unk_Rt_5_t2LDRB_POST)(ctx, offset, Rt, Rn); /* 0xf8100900 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + if ((op & 0xff00f7f) == 0xe100a10) { + goto insn_unk_Rt_13_VMOVRRD; /* 0x0e100a10 | 0xf00ff080 */ + } else { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100210 | 0x100ff8ef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + case 4: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100c00) { + insn_t2addrmode_negimm8_addr_unk_Rt_5_t2LDRBi8:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}, {16,9,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_negimm8_addr_unk_Rt_5_t2LDRBi8)(ctx, addr, Rt); /* 0xf8100c00 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 5: + case 7: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100d00) { + insn_t2addrmode_imm8_pre_addr_unk_Rt_5_t2LDRB_PRE:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}, {16,9,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_imm8_pre_addr_unk_Rt_5_t2LDRB_PRE)(ctx, addr, Rt); /* 0xf8100d00 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00f00) == 0xf8100e00) { + insn_t2addrmode_posimm8_addr_unk_Rt_5_t2LDRBT:; + struct bitslice addr = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_posimm8_addr_unk_Rt_5_t2LDRBT)(ctx, addr, Rt); /* 0xf8100e00 | 0x012ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 2: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: { + if ((op & 0xfb5f8000) == 0xf20f0000) { + goto insn_t2adrlabel_addr_unk_Rd_1_t2ADR; /* 0xf22f0000 | 0x04007fff */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 9: + case 11: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 12: + case 13: + case 14: + case 15: + return P(unidentified)(ctx); + } + } + case 2: { + switch ((op >> 8) & 0x7) { + case 0: { + if ((op & 0xffd00fc0) == 0xf8000000) { + goto insn_rGPR_Rt_t2addrmode_so_reg_addr_S_2_t2STRBs; /* 0xf8000000 | 0x002ff03f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + case 3: { + if ((op & 0xffd00d00) == 0xf8000900) { + goto insn_rGPR_Rt_addr_offset_none_Rn_t2am_imm8_offset_offset_S_2_t2STRB_POST; /* 0xf8000900 | 0x002ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xffd00d00) == 0xf8000c00) { + goto insn_rGPR_Rt_t2addrmode_negimm8_addr_S_2_t2STRBi8; /* 0xf8000c00 | 0x002ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 7: { + if ((op & 0xffd00d00) == 0xf8000d00) { + goto insn_rGPR_Rt_t2addrmode_imm8_pre_addr_S_2_t2STRB_PRE; /* 0xf8000d00 | 0x002ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 6: { + if ((op & 0xffd00f00) == 0xf8000e00) { + goto insn_t2addrmode_imm8_addr_unk_Rt_S_3_t2STRBT; /* 0xf8000e00 | 0x002ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xef300000) == 0xec200000) { + insn_addr_offset_none_addr_postidx_imm8s4_offset_S_4_t2STC2L_POST:; + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {23,8,1}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_postidx_imm8s4_offset_S_4_t2STC2L_POST)(ctx, offset, addr); /* 0xec200000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee000010) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xee000010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 3: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 8) & 0x7) { + case 0: { + if ((op & 0xfed00fc0) == 0xf8100000) { + goto insn_t2addrmode_so_reg_addr_unk_Rt_5_t2LDRBs; /* 0xf8100000 | 0x012ff03f */ + } else { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x0120f8ff */ + } else { + return P(unidentified)(ctx); + } + } + } + case 1: + case 3: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100900) { + goto insn_addr_offset_none_Rn_t2am_imm8_offset_offset_unk_Rt_5_t2LDRB_POST; /* 0xf8100900 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 4: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100c00) { + goto insn_t2addrmode_negimm8_addr_unk_Rt_5_t2LDRBi8; /* 0xf8100c00 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 5: + case 7: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100d00) { + goto insn_t2addrmode_imm8_pre_addr_unk_Rt_5_t2LDRB_PRE; /* 0xf8100d00 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00f00) == 0xf8100e00) { + goto insn_t2addrmode_posimm8_addr_unk_Rt_5_t2LDRBT; /* 0xf8100e00 | 0x012ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xef300000) == 0xec300000) { + insn_addr_offset_none_addr_postidx_imm8s4_offset_4_t2LDC2L_POST:; + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {23,8,1}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_postidx_imm8s4_offset_4_t2LDC2L_POST)(ctx, offset, addr); /* 0xec300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 4: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xfff00000) == 0xe8400000) { + struct bitslice addr = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {16,8,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(rGPR_Rt_t2addrmode_imm0_1020s4_addr_unk_Rd_S_1_t2STREX)(ctx, addr, Rd, Rt); /* 0xe8400000 | 0x000fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xffef70f0) == 0xea4f0000) { + insn_GPR_Rm_unk_Rd_1_t2MOVr:; + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,4}}}; + return P(GPR_Rm_unk_Rd_1_t2MOVr)(ctx, Rm, Rd); /* 0xea4f0000 | 0x00108f0f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: + case 7: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xff00fd0) == 0xc400b10) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0x0c400b10 | 0xf00ff02f */ + } else { + if ((op & 0xefe00000) == 0xec400000) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xec400000 | 0x100fffff */ + } else { + return P(unidentified)(ctx); + } + } + } + case 1: { + if ((op & 0xef100010) == 0xee000010) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xee000010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: + case 5: { + switch ((op >> 15) & 0x1) { + case 0: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xfbef8000) == 0xf04f0000) { + insn_unk_Rd_3_t2MOVTi16:; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,4}}}; + return P(unk_Rd_3_t2MOVTi16)(ctx, Rd); /* 0xf04f0000 | 0x04107fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfb708000) == 0xf2400000) { + goto insn_unk_Rd_3_t2MOVTi16; /* 0xf2400000 | 0x048f7fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 6: { + switch ((op >> 8) & 0x7) { + case 0: { + if ((op & 0xfff00fc0) == 0xf8400000) { + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,2,4}, {4,0,2}, {16,6,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_t2addrmode_so_reg_addr_S_1_t2STRs)(ctx, addr, Rt); /* 0xf8400000 | 0x000ff03f */ + } else { + return P(unidentified)(ctx); + } + } + case 1: + case 3: { + if ((op & 0xfff00d00) == 0xf8400900) { + struct bitslice offset = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPRnopc_Rt_addr_offset_none_Rn_t2am_imm8_offset_offset_S_1_t2STR_POST)(ctx, offset, Rt, Rn); /* 0xf8400900 | 0x000ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 2: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xfff00d00) == 0xf8400c00) { + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}, {16,9,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_t2addrmode_negimm8_addr_S_1_t2STRi8)(ctx, addr, Rt); /* 0xf8400c00 | 0x000ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 7: { + if ((op & 0xfff00d00) == 0xf8400d00) { + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {9,8,1}, {16,9,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPRnopc_Rt_t2addrmode_imm8_pre_addr_S_1_t2STR_PRE)(ctx, addr, Rt); /* 0xf8400d00 | 0x000ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + case 6: { + if ((op & 0xfff00f00) == 0xf8400e00) { + goto insn_t2addrmode_imm8_addr_unk_Rt_S_3_t2STRBT; /* 0xf8400e00 | 0x000ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 5: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xfff00f00) == 0xe8500f00) { + struct bitslice addr = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,8}, {16,8,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_imm0_1020s4_addr_unk_Rt_1_t2LDREX)(ctx, addr, Rt); /* 0xe8500f00 | 0x000ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xffef70f0) == 0xea4f0000) { + goto insn_GPR_Rm_unk_Rd_1_t2MOVr; /* 0xea4f0000 | 0x00108f0f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: + case 7: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xff00ed0) == 0xc500a10) { + goto insn_unk_Rt_13_VMOVRRD; /* 0x0c500a10 | 0xf00ff12f */ + } else { + if ((op & 0xefe00000) == 0xec400000) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xec500000 | 0x100fffff */ + } else { + return P(unidentified)(ctx); + } + } + } + case 1: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: + case 5: { + switch ((op >> 12) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: { + if ((op & 0xfbef8000) == 0xf04f0000) { + goto insn_unk_Rd_3_t2MOVTi16; /* 0xf04f0000 | 0x04107fff */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 9: + case 11: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 12: + case 13: + case 14: + case 15: + return P(unidentified)(ctx); + } + } + case 6: { + switch ((op >> 8) & 0x7) { + case 0: { + if ((op & 0xfff00fc0) == 0xf8500000) { + goto insn_t2addrmode_so_reg_addr_unk_Rt_5_t2LDRBs; /* 0xf8500000 | 0x000ff03f */ + } else { + if ((op & 0xff7f0000) == 0xf85f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf85f0000 | 0x0000f8ff */ + } else { + return P(unidentified)(ctx); + } + } + } + case 1: + case 3: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xff7f0000) == 0xf85f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf85f0000 | 0x0080ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfff00d00) == 0xf8500900) { + goto insn_addr_offset_none_Rn_t2am_imm8_offset_offset_unk_Rt_5_t2LDRB_POST; /* 0xf8500900 | 0x000ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xff7f0000) == 0xf85f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf85f0000 | 0x0080ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 4: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xff7f0000) == 0xf85f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf85f0000 | 0x0080ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfff00d00) == 0xf8500c00) { + goto insn_t2addrmode_negimm8_addr_unk_Rt_5_t2LDRBi8; /* 0xf8500c00 | 0x000ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 5: + case 7: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xff7f0000) == 0xf85f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf85f0000 | 0x0080ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfff00d00) == 0xf8500d00) { + goto insn_t2addrmode_imm8_pre_addr_unk_Rt_5_t2LDRB_PRE; /* 0xf8500d00 | 0x000ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xff7f0000) == 0xf85f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf85f0000 | 0x0080ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfff00f00) == 0xf8500e00) { + goto insn_t2addrmode_posimm8_addr_unk_Rt_5_t2LDRBT; /* 0xf8500e00 | 0x000ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + } + } + case 6: + case 14: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xff700000) == 0xe8600000) { + insn_rGPR_Rt_addr_offset_none_addr_S_4_t2STL:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(rGPR_Rt_addr_offset_none_addr_S_4_t2STL)(ctx, Rt, addr); /* 0xe8600000 | 0x008fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xef300000) == 0xec200000) { + goto insn_addr_offset_none_addr_postidx_imm8s4_offset_S_4_t2STC2L_POST; /* 0xec200000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee000010) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xee000010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 7: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xff700000) == 0xe8700000) { + insn_addr_offset_none_addr_unk_Rt_11_t2LDA:; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_unk_Rt_11_t2LDA)(ctx, Rt, addr); /* 0xe8700000 | 0x008fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xef300000) == 0xec300000) { + goto insn_addr_offset_none_addr_postidx_imm8s4_offset_4_t2LDC2L_POST; /* 0xec300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 8: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: { + if ((op & 0xfb5f8000) == 0xf20f0000) { + goto insn_t2adrlabel_addr_unk_Rd_1_t2ADR; /* 0xf28f0000 | 0x04007fff */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 9: + case 11: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 12: + case 13: + case 14: + case 15: + return P(unidentified)(ctx); + } + } + case 2: { + switch ((op >> 28) & 0x1) { + case 0: { + if ((op & 0xffd0a000) == 0xe8800000) { + insn_GPR_Rn_reglist_regs_S_4_t2STMDB:; + struct bitslice regs = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,13}, {14,14,1}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_reglist_regs_S_4_t2STMDB)(ctx, regs, Rn); /* 0xe8800000 | 0x002f5fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xffd00000) == 0xf8800000) { + insn_rGPR_Rt_t2addrmode_imm12_addr_S_2_t2STRBi12:; + struct bitslice addr = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,12}, {16,13,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(rGPR_Rt_t2addrmode_imm12_addr_S_2_t2STRBi12)(ctx, addr, Rt); /* 0xf8800000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xefb00000) == 0xec800000) { + insn_addr_offset_none_addr_S_4_t2STC2L_OPTION:; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_S_4_t2STC2L_OPTION)(ctx, addr); /* 0xec800000 | 0x104fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee000010) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xee000010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 9: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + if ((op & 0xffd00000) == 0xe8900000) { + insn_GPR_Rn_reglist_regs_4_t2LDMDB:; + struct bitslice regs = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,16}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPR_Rn_reglist_regs_4_t2LDMDB)(ctx, regs, Rn); /* 0xe8900000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + case 7: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xefb00000) == 0xec900000) { + insn_addr_offset_none_addr_4_t2LDC2L_OPTION:; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(addr_offset_none_addr_4_t2LDC2L_OPTION)(ctx, addr); /* 0xec900000 | 0x104fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: + case 5: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 16) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: { + if ((op & 0xfed00000) == 0xf8900000) { + insn_t2addrmode_imm12_addr_unk_Rt_5_t2LDRBi12:; + struct bitslice addr = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,12}, {16,13,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_imm12_addr_unk_Rt_5_t2LDRBi12)(ctx, addr, Rt); /* 0xf8900000 | 0x012fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 15: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 10: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: { + if ((op & 0xfb5f8000) == 0xf20f0000) { + goto insn_t2adrlabel_addr_unk_Rd_1_t2ADR; /* 0xf2af0000 | 0x04007fff */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 9: + case 11: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 12: + case 13: + case 14: + case 15: + return P(unidentified)(ctx); + } + } + case 2: { + switch ((op >> 28) & 0x1) { + case 0: { + if ((op & 0xffd0a000) == 0xe8800000) { + goto insn_GPR_Rn_reglist_regs_S_4_t2STMDB; /* 0xe8800000 | 0x002f5fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xffd00000) == 0xf8800000) { + goto insn_rGPR_Rt_t2addrmode_imm12_addr_S_2_t2STRBi12; /* 0xf8800000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xef300000) == 0xec200000) { + goto insn_addr_offset_none_addr_postidx_imm8s4_offset_S_4_t2STC2L_POST; /* 0xec200000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee000010) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xee000010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 11: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + if ((op & 0xffd00000) == 0xe8900000) { + goto insn_GPR_Rn_reglist_regs_4_t2LDMDB; /* 0xe8900000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + case 7: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xef300000) == 0xec300000) { + goto insn_addr_offset_none_addr_postidx_imm8s4_offset_4_t2LDC2L_POST; /* 0xec300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: + case 5: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 16) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: { + if ((op & 0xfed00000) == 0xf8900000) { + goto insn_t2addrmode_imm12_addr_unk_Rt_5_t2LDRBi12; /* 0xf8900000 | 0x012fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 15: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 12: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + switch ((op >> 4) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 6: + case 11: + return P(unidentified)(ctx); + case 4: { + if ((op & 0xfff00ff0) == 0xe8c00f40) { + insn_rGPR_Rt_addr_offset_none_addr_unk_Rd_S_7_t2STLEX:; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + struct bitslice addr = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(rGPR_Rt_addr_offset_none_addr_unk_Rd_S_7_t2STLEX)(ctx, Rd, Rt, addr); /* 0xe8c00f40 | 0x000ff00f */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + case 13: { + if ((op & 0xfff00f70) == 0xe8c00f50) { + goto insn_rGPR_Rt_addr_offset_none_addr_unk_Rd_S_7_t2STLEX; /* 0xe8c00f50 | 0x000ff08f */ + } else { + return P(unidentified)(ctx); + } + } + case 7: + case 15: { + if ((op & 0xfff00070) == 0xe8c00070) { + goto insn_rGPR_Rt_addr_offset_none_addr_unk_Rd_S_7_t2STLEX; /* 0xe8c00070 | 0x000fff8f */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: { + if ((op & 0xfff00fdf) == 0xe8c00f8f) { + goto insn_rGPR_Rt_addr_offset_none_addr_S_4_t2STL; /* 0xe8c00f8f | 0x000ff020 */ + } else { + return P(unidentified)(ctx); + } + } + case 9: { + if ((op & 0xfff00fff) == 0xe8c00f9f) { + goto insn_rGPR_Rt_addr_offset_none_addr_S_4_t2STL; /* 0xe8c00f9f | 0x000ff000 */ + } else { + return P(unidentified)(ctx); + } + } + case 12: + case 14: { + if ((op & 0xfff00fd0) == 0xe8c00fc0) { + goto insn_rGPR_Rt_addr_offset_none_addr_unk_Rd_S_7_t2STLEX; /* 0xe8c00fc0 | 0x000ff02f */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: + case 7: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xefb00000) == 0xec800000) { + goto insn_addr_offset_none_addr_S_4_t2STC2L_OPTION; /* 0xec800000 | 0x104fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee000010) { + goto insn_GPR_Rt_8_VMOVDRR; /* 0xee000010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: + case 5: { + switch ((op >> 12) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: { + if ((op & 0xfb708000) == 0xf2400000) { + goto insn_unk_Rd_3_t2MOVTi16; /* 0xf2400000 | 0x048f7fff */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 9: + case 11: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 12: + case 13: + case 14: + case 15: + return P(unidentified)(ctx); + } + } + case 6: { + if ((op & 0xfff00000) == 0xf8c00000) { + struct bitslice addr = {.nruns = 2, .runs = (struct bitslice_run[]) {{0,0,12}, {16,13,4}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(GPR_Rt_t2addrmode_imm12_addr_S_1_t2STRi12)(ctx, addr, Rt); /* 0xf8c00000 | 0x000fffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 13: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + switch ((op >> 4) & 0xf) { + case 0: + case 1: { + if ((op & 0xfff0ffe0) == 0xe8d0f000) { + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + return P(unk_Rm_B_2_t2TBB)(ctx, Rm); /* 0xe8d0f000 | 0x000f001f */ + } else { + return P(unidentified)(ctx); + } + } + case 2: + case 3: + case 6: + case 11: + return P(unidentified)(ctx); + case 4: + case 5: { + if ((op & 0xfff00fef) == 0xe8d00f4f) { + goto insn_addr_offset_none_addr_unk_Rt_11_t2LDA; /* 0xe8d00f4f | 0x000ff010 */ + } else { + return P(unidentified)(ctx); + } + } + case 7: + case 15: { + if ((op & 0xfff0007f) == 0xe8d0007f) { + goto insn_addr_offset_none_addr_unk_Rt_11_t2LDA; /* 0xe8d0007f | 0x000fff80 */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: + case 12: + case 14: { + if ((op & 0xfff00f9f) == 0xe8d00f8f) { + goto insn_addr_offset_none_addr_unk_Rt_11_t2LDA; /* 0xe8d00f8f | 0x000ff060 */ + } else { + return P(unidentified)(ctx); + } + } + case 9: + case 13: { + if ((op & 0xfff00fbf) == 0xe8d00f9f) { + goto insn_addr_offset_none_addr_unk_Rt_11_t2LDA; /* 0xe8d00f9f | 0x000ff040 */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: + case 7: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xefb00000) == 0xec900000) { + goto insn_addr_offset_none_addr_4_t2LDC2L_OPTION; /* 0xec900000 | 0x104fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xee100010 | 0x10efffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: + case 5: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 16) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: { + if ((op & 0xfff00000) == 0xf8d00000) { + goto insn_t2addrmode_imm12_addr_unk_Rt_5_t2LDRBi12; /* 0xf8d00000 | 0x000fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 15: { + if ((op & 0xff7f0000) == 0xf85f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf85f0000 | 0x0080ffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 15: { + switch ((op >> 25) & 0x7) { + case 0: + case 1: + case 2: + case 3: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: { + if ((op & 0xff700000) == 0xe8700000) { + goto insn_addr_offset_none_addr_unk_Rt_11_t2LDA; /* 0xe8700000 | 0x008fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 5: + return P(unidentified)(ctx); + case 6: { + if ((op & 0xef300000) == 0xec300000) { + goto insn_addr_offset_none_addr_postidx_imm8s4_offset_4_t2LDC2L_POST; /* 0xec300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 7: { + switch ((op >> 17) & 0x3) { + case 0: { + if ((op & 0xff60fff) == 0xef00a10) { + goto insn_unk_Rt_13_VMOVRRD; /* 0x0ef00a10 | 0xf009f000 */ + } else { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xeef00010 | 0x1009ffef */ + } else { + return P(unidentified)(ctx); + } + } + } + case 1: { + if ((op & 0xfff0fff) == 0xefa0a10) { + goto insn_unk_Rt_13_VMOVRRD; /* 0x0efa0a10 | 0xf000f000 */ + } else { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xeef20010 | 0x1009ffef */ + } else { + return P(unidentified)(ctx); + } + } + } + case 2: { + if ((op & 0xfff0fff) == 0xef50a10) { + goto insn_unk_Rt_13_VMOVRRD; /* 0x0ef50a10 | 0xf000f000 */ + } else { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xeef40010 | 0x1009ffef */ + } else { + return P(unidentified)(ctx); + } + } + } + case 3: { + if ((op & 0xffe0fff) == 0xef60a10) { + goto insn_unk_Rt_13_VMOVRRD; /* 0x0ef60a10 | 0xf001f000 */ + } else { + if ((op & 0xef100010) == 0xee100010) { + goto insn_unk_Rt_13_VMOVRRD; /* 0xeef60010 | 0x1009ffef */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + } + case 16: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: { + if ((op & 0xfbe08000) == 0xf1000000) { + insn_GPRnopc_Rn_unk_Rd_2_t2ADDri:; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPRnopc_Rn_unk_Rd_2_t2ADDri)(ctx, Rd, Rn); /* 0xf1000000 | 0x041f7fff */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 9: + case 11: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 12: + case 13: + case 14: + case 15: + return P(unidentified)(ctx); + } + } + case 2: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xffd0a000) == 0xe9000000) { + goto insn_GPR_Rn_reglist_regs_S_4_t2STMDB; /* 0xe9000000 | 0x002f5fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xffe070f0) == 0xeb000000) { + insn_GPRnopc_Rn_rGPR_Rm_unk_Rd_1_t2ADDrr:; + struct bitslice Rm = {.nruns = 1, .runs = (struct bitslice_run[]) {{0,0,4}}}; + struct bitslice Rd = {.nruns = 1, .runs = (struct bitslice_run[]) {{8,0,4}}}; + struct bitslice Rn = {.nruns = 1, .runs = (struct bitslice_run[]) {{16,0,4}}}; + return P(GPRnopc_Rn_rGPR_Rm_unk_Rd_1_t2ADDrr)(ctx, Rm, Rd, Rn); /* 0xeb000000 | 0x001f8f0f */ + } else { + if ((op & 0xffe00000) == 0xeb000000) { + goto insn_GPRnopc_Rn_unk_Rd_2_t2ADDri; /* 0xeb000000 | 0x001fffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + case 3: { + switch ((op >> 29) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: { + if ((op & 0xf200e00) == 0xd000a00) { + insn_addrmode5_addr_8_VLDRD:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + return P(addrmode5_addr_8_VLDRD)(ctx, addr); /* 0x0d000a00 | 0xf0dff1ff */ + } else { + return P(unidentified)(ctx); + } + } + case 7: { + if ((op & 0xef300000) == 0xed000000) { + insn_addrmode5_addr_S_4_t2STC2L_OFFSET:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + return P(addrmode5_addr_S_4_t2STC2L_OFFSET)(ctx, addr); /* 0xed000000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 17: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + switch ((op >> 25) & 0x1) { + case 0: { + if ((op & 0xffd00000) == 0xe9100000) { + goto insn_GPR_Rn_reglist_regs_4_t2LDMDB; /* 0xe9100000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xffe070f0) == 0xeb000000) { + goto insn_GPRnopc_Rn_rGPR_Rm_unk_Rd_1_t2ADDrr; /* 0xeb000000 | 0x001f8f0f */ + } else { + if ((op & 0xffe00000) == 0xeb000000) { + goto insn_GPRnopc_Rn_unk_Rd_2_t2ADDri; /* 0xeb000000 | 0x001fffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + case 3: + case 7: { + switch ((op >> 29) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: { + if ((op & 0xf200e00) == 0xd000a00) { + goto insn_addrmode5_addr_8_VLDRD; /* 0x0d000a00 | 0xf0dff1ff */ + } else { + return P(unidentified)(ctx); + } + } + case 7: { + if ((op & 0xef300000) == 0xed100000) { + goto insn_addrmode5_addr_8_VLDRD; /* 0xed100000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: + case 5: { + switch ((op >> 12) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: { + if ((op & 0xfbe08000) == 0xf1000000) { + goto insn_GPRnopc_Rn_unk_Rd_2_t2ADDri; /* 0xf1000000 | 0x041f7fff */ + } else { + return P(unidentified)(ctx); + } + } + case 8: + case 10: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 9: + case 11: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 12: + case 13: + case 14: + case 15: + return P(unidentified)(ctx); + } + } + case 6: { + switch ((op >> 8) & 0x7) { + case 0: { + if ((op & 0xfed00fc0) == 0xf8100000) { + goto insn_t2addrmode_so_reg_addr_unk_Rt_5_t2LDRBs; /* 0xf8100000 | 0x012ff03f */ + } else { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x0120f8ff */ + } else { + return P(unidentified)(ctx); + } + } + } + case 1: + case 3: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100900) { + goto insn_addr_offset_none_Rn_t2am_imm8_offset_offset_unk_Rt_5_t2LDRB_POST; /* 0xf8100900 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 4: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100c00) { + goto insn_t2addrmode_negimm8_addr_unk_Rt_5_t2LDRBi8; /* 0xf8100c00 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 5: + case 7: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100d00) { + goto insn_t2addrmode_imm8_pre_addr_unk_Rt_5_t2LDRB_PRE; /* 0xf8100d00 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00f00) == 0xf8100e00) { + goto insn_t2addrmode_posimm8_addr_unk_Rt_5_t2LDRBT; /* 0xf8100e00 | 0x012ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + } + } + case 18: { + switch ((op >> 27) & 0x1) { + case 0: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 26) & 0x1) { + case 0: { + if ((op & 0xffd0a000) == 0xe9000000) { + goto insn_GPR_Rn_reglist_regs_S_4_t2STMDB; /* 0xe9000000 | 0x002f5fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef300000) == 0xed200000) { + insn_addrmode5_pre_addr_S_4_t2STC2L_PRE:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + return P(addrmode5_pre_addr_S_4_t2STC2L_PRE)(ctx, addr); /* 0xed200000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 19: { + switch ((op >> 8) & 0x7) { + case 0: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + if ((op & 0xffd00000) == 0xe9100000) { + goto insn_GPR_Rn_reglist_regs_4_t2LDMDB; /* 0xe9100000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + case 7: { + if ((op & 0xef300000) == 0xed300000) { + insn_addrmode5_pre_addr_4_t2LDC2L_PRE:; + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + return P(addrmode5_pre_addr_4_t2LDC2L_PRE)(ctx, addr); /* 0xed300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + case 5: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + if ((op & 0xfed00fc0) == 0xf8100000) { + goto insn_t2addrmode_so_reg_addr_unk_Rt_5_t2LDRBs; /* 0xf8100000 | 0x012ff03f */ + } else { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x0120f8ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + case 1: + case 3: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + if ((op & 0xffd00000) == 0xe9100000) { + goto insn_GPR_Rn_reglist_regs_4_t2LDMDB; /* 0xe9100000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + case 7: { + if ((op & 0xef300000) == 0xed300000) { + goto insn_addrmode5_pre_addr_4_t2LDC2L_PRE; /* 0xed300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + case 5: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100900) { + goto insn_addr_offset_none_Rn_t2am_imm8_offset_offset_unk_Rt_5_t2LDRB_POST; /* 0xf8100900 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 2: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 28) & 0x1) { + case 0: { + if ((op & 0xffd00000) == 0xe9100000) { + goto insn_GPR_Rn_reglist_regs_4_t2LDMDB; /* 0xe9100000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + if ((op & 0xef300000) == 0xed300000) { + goto insn_addrmode5_pre_addr_4_t2LDC2L_PRE; /* 0xed300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 4: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + if ((op & 0xffd00000) == 0xe9100000) { + goto insn_GPR_Rn_reglist_regs_4_t2LDMDB; /* 0xe9100000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + case 7: { + if ((op & 0xef300000) == 0xed300000) { + goto insn_addrmode5_pre_addr_4_t2LDC2L_PRE; /* 0xed300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + case 5: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100c00) { + goto insn_t2addrmode_negimm8_addr_unk_Rt_5_t2LDRBi8; /* 0xf8100c00 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 5: + case 7: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + if ((op & 0xffd00000) == 0xe9100000) { + goto insn_GPR_Rn_reglist_regs_4_t2LDMDB; /* 0xe9100000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + case 7: { + if ((op & 0xef300000) == 0xed300000) { + goto insn_addrmode5_pre_addr_4_t2LDC2L_PRE; /* 0xed300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + case 5: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00d00) == 0xf8100d00) { + goto insn_t2addrmode_imm8_pre_addr_unk_Rt_5_t2LDRB_PRE; /* 0xf8100d00 | 0x012ff2ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 6: { + switch ((op >> 26) & 0x7) { + case 0: + case 1: + return P(unidentified)(ctx); + case 2: { + if ((op & 0xffd00000) == 0xe9100000) { + goto insn_GPR_Rn_reglist_regs_4_t2LDMDB; /* 0xe9100000 | 0x002fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: + case 7: { + if ((op & 0xef300000) == 0xed300000) { + goto insn_addrmode5_pre_addr_4_t2LDC2L_PRE; /* 0xed300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + case 4: + case 5: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 6: { + switch ((op >> 11) & 0x1) { + case 0: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xfed00f00) == 0xf8100e00) { + goto insn_t2addrmode_posimm8_addr_unk_Rt_5_t2LDRBT; /* 0xf8100e00 | 0x012ff0ff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + } + } + case 20: + case 28: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xff700000) == 0xe9400000) { + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(rGPR_Rt_t2addrmode_imm8s4_addr_S_1_t2STRDi8)(ctx, addr, Rt); /* 0xe9400000 | 0x008fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + switch ((op >> 29) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: { + if ((op & 0xf200e00) == 0xd000a00) { + goto insn_addrmode5_addr_8_VLDRD; /* 0x0d000a00 | 0xf0dff1ff */ + } else { + return P(unidentified)(ctx); + } + } + case 7: { + if ((op & 0xef300000) == 0xed000000) { + goto insn_addrmode5_addr_S_4_t2STC2L_OFFSET; /* 0xed000000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 21: + case 29: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + if ((op & 0xff700000) == 0xe9500000) { + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_imm8s4_addr_unk_Rt_1_t2LDRDi8)(ctx, addr, Rt); /* 0xe9500000 | 0x008fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 3: { + switch ((op >> 29) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: { + if ((op & 0xf200e00) == 0xd000a00) { + goto insn_addrmode5_addr_8_VLDRD; /* 0x0d000a00 | 0xf0dff1ff */ + } else { + return P(unidentified)(ctx); + } + } + case 7: { + if ((op & 0xef300000) == 0xed100000) { + goto insn_addrmode5_addr_8_VLDRD; /* 0xed100000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 22: + case 30: { + switch ((op >> 27) & 0x1) { + case 0: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 26) & 0x1) { + case 0: { + if ((op & 0xff700000) == 0xe9600000) { + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(rGPR_Rt_t2addrmode_imm8s4_pre_addr_S_1_t2STRD_PRE)(ctx, addr, Rt); /* 0xe9600000 | 0x008fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef300000) == 0xed200000) { + goto insn_addrmode5_pre_addr_S_4_t2STC2L_PRE; /* 0xed200000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 23: + case 31: { + switch ((op >> 27) & 0x1) { + case 0: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 26) & 0x1) { + case 0: { + if ((op & 0xff700000) == 0xe9700000) { + struct bitslice addr = {.nruns = 3, .runs = (struct bitslice_run[]) {{0,0,8}, {16,9,4}, {23,8,1}}}; + struct bitslice Rt = {.nruns = 1, .runs = (struct bitslice_run[]) {{12,0,4}}}; + return P(t2addrmode_imm8s4_pre_addr_unk_Rt_1_t2LDRD_PRE)(ctx, addr, Rt); /* 0xe9700000 | 0x008fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef300000) == 0xed300000) { + goto insn_addrmode5_pre_addr_4_t2LDC2L_PRE; /* 0xed300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 24: { + switch ((op >> 27) & 0x1) { + case 0: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 29) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: { + if ((op & 0xf200e00) == 0xd000a00) { + goto insn_addrmode5_addr_8_VLDRD; /* 0x0d000a00 | 0xf0dff1ff */ + } else { + return P(unidentified)(ctx); + } + } + case 7: { + if ((op & 0xef300000) == 0xed000000) { + goto insn_addrmode5_addr_S_4_t2STC2L_OFFSET; /* 0xed000000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 25: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 16) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: { + if ((op & 0xfed00000) == 0xf8900000) { + goto insn_t2addrmode_imm12_addr_unk_Rt_5_t2LDRBi12; /* 0xf8900000 | 0x012fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 15: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + switch ((op >> 29) & 0x7) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: { + if ((op & 0xf200e00) == 0xd000a00) { + goto insn_addrmode5_addr_8_VLDRD; /* 0x0d000a00 | 0xf0dff1ff */ + } else { + return P(unidentified)(ctx); + } + } + case 7: { + if ((op & 0xef300000) == 0xed100000) { + goto insn_addrmode5_addr_8_VLDRD; /* 0xed100000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 26: { + switch ((op >> 12) & 0x1) { + case 0: { + switch ((op >> 27) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef300000) == 0xed200000) { + goto insn_addrmode5_pre_addr_S_4_t2STC2L_PRE; /* 0xed200000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 1: { + switch ((op >> 27) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xef300000) == 0xed200000) { + goto insn_addrmode5_pre_addr_S_4_t2STC2L_PRE; /* 0xed200000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } + } + case 27: { + switch ((op >> 26) & 0x3) { + case 0: + case 1: { + switch ((op >> 12) & 0x1) { + case 0: { + if ((op & 0xf800d000) == 0xf0008000) { + goto insn_brtarget_target_B_1_t2Bcc; /* 0xf0008000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + case 1: { + if ((op & 0xf800d000) == 0xf0009000) { + goto insn_uncondbrtarget_target_B_1_t2B; /* 0xf0009000 | 0x07ff2fff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 2: { + switch ((op >> 16) & 0xf) { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + case 6: + case 7: + case 8: + case 9: + case 10: + case 11: + case 12: + case 13: + case 14: { + if ((op & 0xfed00000) == 0xf8900000) { + goto insn_t2addrmode_imm12_addr_unk_Rt_5_t2LDRBi12; /* 0xf8900000 | 0x012fffff */ + } else { + return P(unidentified)(ctx); + } + } + case 15: { + if ((op & 0xfe5f0000) == 0xf81f0000) { + goto insn_t2ldrlabel_addr_unk_Rt_5_t2LDRBpci; /* 0xf81f0000 | 0x01a0ffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + case 3: { + if ((op & 0xef300000) == 0xed300000) { + goto insn_addrmode5_pre_addr_4_t2LDC2L_PRE; /* 0xed300000 | 0x10cfffff */ + } else { + return P(unidentified)(ctx); + } + } + } + } + } +/* +static INLINE tdis_ret P(GPR_Rm_unk_Rd_1_t2MOVr)(struct bitslice ctx, struct bitslice Rm, struct bitslice Rd) {} +static INLINE tdis_ret P(GPR_Rn_reglist_regs_4_t2LDMDB)(struct bitslice ctx, struct bitslice regs, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rn_reglist_regs_S_4_t2STMDB)(struct bitslice ctx, struct bitslice regs, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rn_unk_Rd_1_t2ADDri12)(struct bitslice ctx, struct bitslice Rd, struct bitslice Rn) {} +static INLINE tdis_ret P(GPR_Rt_8_VMOVDRR)(struct bitslice ctx, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_t2addrmode_imm12_addr_S_1_t2STRi12)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_t2addrmode_negimm8_addr_S_1_t2STRi8)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPR_Rt_t2addrmode_so_reg_addr_S_1_t2STRs)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(GPRnopc_Rn_rGPR_Rm_unk_Rd_1_t2ADDrr)(struct bitslice ctx, struct bitslice Rm, struct bitslice Rd, struct bitslice Rn) {} +static INLINE tdis_ret P(GPRnopc_Rn_unk_Rd_2_t2ADDri)(struct bitslice ctx, struct bitslice Rd, struct bitslice Rn) {} +static INLINE tdis_ret P(GPRnopc_Rt_addr_offset_none_Rn_t2am_imm8_offset_offset_S_1_t2STR_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice Rn) {} +static INLINE tdis_ret P(GPRnopc_Rt_t2addrmode_imm8_pre_addr_S_1_t2STR_PRE)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(addr_offset_none_Rn_t2am_imm8_offset_offset_unk_Rt_5_t2LDRB_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice Rn) {} +static INLINE tdis_ret P(addr_offset_none_addr_4_t2LDC2L_OPTION)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_S_4_t2STC2L_OPTION)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_postidx_imm8s4_offset_4_t2LDC2L_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_postidx_imm8s4_offset_S_4_t2STC2L_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice addr) {} +static INLINE tdis_ret P(addr_offset_none_addr_unk_Rt_11_t2LDA)(struct bitslice ctx, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode5_addr_8_VLDRD)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode5_addr_S_4_t2STC2L_OFFSET)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode5_pre_addr_4_t2LDC2L_PRE)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(addrmode5_pre_addr_S_4_t2STC2L_PRE)(struct bitslice ctx, struct bitslice addr) {} +static INLINE tdis_ret P(brtarget_target_B_1_t2Bcc)(struct bitslice ctx, struct bitslice target) {} +static INLINE tdis_ret P(rGPR_Rt_addr_offset_none_Rn_t2am_imm8_offset_offset_S_2_t2STRB_POST)(struct bitslice ctx, struct bitslice offset, struct bitslice Rt, struct bitslice Rn) {} +static INLINE tdis_ret P(rGPR_Rt_addr_offset_none_addr_S_4_t2STL)(struct bitslice ctx, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(rGPR_Rt_addr_offset_none_addr_unk_Rd_S_7_t2STLEX)(struct bitslice ctx, struct bitslice Rd, struct bitslice Rt, struct bitslice addr) {} +static INLINE tdis_ret P(rGPR_Rt_t2addrmode_imm0_1020s4_addr_unk_Rd_S_1_t2STREX)(struct bitslice ctx, struct bitslice addr, struct bitslice Rd, struct bitslice Rt) {} +static INLINE tdis_ret P(rGPR_Rt_t2addrmode_imm12_addr_S_2_t2STRBi12)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(rGPR_Rt_t2addrmode_imm8_pre_addr_S_2_t2STRB_PRE)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(rGPR_Rt_t2addrmode_imm8s4_addr_S_1_t2STRDi8)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(rGPR_Rt_t2addrmode_imm8s4_pre_addr_S_1_t2STRD_PRE)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(rGPR_Rt_t2addrmode_negimm8_addr_S_2_t2STRBi8)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(rGPR_Rt_t2addrmode_so_reg_addr_S_2_t2STRBs)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_imm0_1020s4_addr_unk_Rt_1_t2LDREX)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_imm12_addr_unk_Rt_5_t2LDRBi12)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_imm8_addr_unk_Rt_S_3_t2STRBT)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_imm8_pre_addr_unk_Rt_5_t2LDRB_PRE)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_imm8s4_addr_unk_Rt_1_t2LDRDi8)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_imm8s4_pre_addr_unk_Rt_1_t2LDRD_PRE)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_negimm8_addr_unk_Rt_5_t2LDRBi8)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_posimm8_addr_unk_Rt_5_t2LDRBT)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2addrmode_so_reg_addr_unk_Rt_5_t2LDRBs)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(t2adrlabel_addr_unk_Rd_1_t2ADR)(struct bitslice ctx, struct bitslice addr, struct bitslice Rd) {} +static INLINE tdis_ret P(t2ldrlabel_addr_unk_Rt_5_t2LDRBpci)(struct bitslice ctx, struct bitslice addr, struct bitslice Rt) {} +static INLINE tdis_ret P(uncondbrtarget_target_B_1_t2B)(struct bitslice ctx, struct bitslice target) {} +static INLINE tdis_ret P(unk_Rd_3_t2MOVTi16)(struct bitslice ctx, struct bitslice Rd) {} +static INLINE tdis_ret P(unk_Rm_B_2_t2TBB)(struct bitslice ctx, struct bitslice Rm) {} +static INLINE tdis_ret P(unk_Rt_13_VMOVRRD)(struct bitslice ctx, struct bitslice Rt) {} +*/ + diff --git a/generated/inject-asm.S b/generated/inject-asm.S deleted file mode 100644 index 1d1d1b8..0000000 --- a/generated/inject-asm.S +++ /dev/null @@ -1,17 +0,0 @@ - -.align 2 -.globl _inject_start_x86_64 -_inject_start_x86_64: -.byte 0x55, 0x48, 0x89, 0xe5, 0x53, 0x50, 0x48, 0x89, 0xfb, 0x48, 0x8d, 0x15, 0x6a, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x7d, 0xf4, 0x31, 0xf6, 0x48, 0x89, 0xd9, 0xff, 0x13, 0x48, 0x83, 0x7b, 0x18, 0x00, 0x75, 0x27, 0x49, 0xc7, 0xc0, 0xff, 0xff, 0xff, 0xff, 0xb8, 0x3e, 0x00, 0x00, 0x01, 0x31, 0xff, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x31, 0xd2, 0xb9, 0x40, 0x1f, 0x00, 0x00, 0x41, 0x50, 0x0f, 0x05, 0x41, 0x58, 0x48, 0x83, 0x7b, 0x18, 0x00, 0x74, 0xe0, 0xb8, 0x69, 0x01, 0x00, 0x02, 0x31, 0xd2, 0x31, 0xc9, 0x48, 0x81, 0xe3, 0x00, 0xf0, 0xff, 0xff, 0x45, 0x31, 0xc0, 0xbe, 0x00, 0x20, 0x00, 0x00, 0x48, 0x89, 0xdf, 0x41, 0x50, 0x0f, 0x05, 0x41, 0x58, 0xb9, 0xad, 0x0b, 0x00, 0x00, 0x31, 0xc0, 0xff, 0xd1, 0x48, 0x83, 0xc4, 0x08, 0x5b, 0x5d, 0xc3, 0x55, 0x48, 0x89, 0xe5, 0x53, 0x50, 0x48, 0x89, 0xfb, 0x48, 0x8b, 0x7b, 0x10, 0x31, 0xf6, 0xff, 0x53, 0x08, 0x48, 0xc7, 0x43, 0x18, 0x01, 0x00, 0x00, 0x00, 0x31, 0xc0, 0x48, 0x83, 0xc4, 0x08, 0x5b, 0x5d, 0xc3 -.align 2 -.globl _inject_start_i386 -_inject_start_i386: -.byte 0x55, 0x89, 0xe5, 0x53, 0x57, 0x56, 0x83, 0xec, 0x1c, 0x89, 0xce, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x58, 0x89, 0x74, 0x24, 0x0c, 0x8d, 0x80, 0x90, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x08, 0x8d, 0x45, 0xf0, 0x89, 0x04, 0x24, 0xc7, 0x44, 0x24, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0x16, 0x8b, 0x46, 0x0c, 0x89, 0xe1, 0x83, 0xf8, 0x00, 0x75, 0x33, 0x31, 0xff, 0xbb, 0x01, 0x00, 0x00, 0x00, 0xb8, 0xff, 0xff, 0xff, 0xff, 0x50, 0xb8, 0x40, 0x1f, 0x00, 0x00, 0x50, 0x57, 0x53, 0x57, 0xb8, 0xc2, 0xff, 0xff, 0xff, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x81, 0xc2, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x34, 0x8b, 0x46, 0x0c, 0x89, 0xe1, 0x83, 0xf8, 0x00, 0x74, 0xd4, 0x81, 0xe6, 0x00, 0xf0, 0xff, 0xff, 0x31, 0xc0, 0x50, 0x50, 0x50, 0xb8, 0x00, 0x20, 0x00, 0x00, 0x50, 0x56, 0xb8, 0x69, 0x01, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x81, 0xc2, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x34, 0xb8, 0xad, 0x0b, 0x00, 0x00, 0xff, 0xd0, 0x83, 0xc4, 0x1c, 0x5e, 0x5f, 0x5b, 0x5d, 0xc3, 0x55, 0x89, 0xe5, 0x56, 0x83, 0xec, 0x14, 0x8b, 0x75, 0x08, 0x8b, 0x46, 0x08, 0x89, 0x04, 0x24, 0xc7, 0x44, 0x24, 0x04, 0x00, 0x00, 0x00, 0x00, 0xff, 0x56, 0x04, 0xc7, 0x46, 0x0c, 0x01, 0x00, 0x00, 0x00, 0x31, 0xc0, 0x83, 0xc4, 0x14, 0x5e, 0x5d, 0xc3 -.align 2 -.globl _inject_start_arm -_inject_start_arm: -.byte 0xf0, 0x40, 0x2d, 0xe9, 0x0c, 0x70, 0x8d, 0xe2, 0x04, 0xd0, 0x4d, 0xe2, 0x00, 0x40, 0xa0, 0xe1, 0x0d, 0x00, 0xa0, 0xe1, 0x00, 0x50, 0x94, 0xe5, 0x78, 0x20, 0x00, 0xe3, 0x00, 0x20, 0x40, 0xe3, 0x00, 0x10, 0xa0, 0xe3, 0x02, 0x20, 0x8f, 0xe0, 0x04, 0x30, 0xa0, 0xe1, 0x00, 0x60, 0xa0, 0xe3, 0x35, 0xff, 0x2f, 0xe1, 0x0c, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0x0b, 0x00, 0x00, 0x1a, 0x00, 0x50, 0xe0, 0xe3, 0x3d, 0xc0, 0xe0, 0xe3, 0x01, 0x10, 0xa0, 0xe3, 0x00, 0x20, 0xa0, 0xe3, 0x7d, 0x3d, 0xa0, 0xe3, 0x00, 0x00, 0xa0, 0xe3, 0x04, 0x50, 0x2d, 0xe5, 0x80, 0x00, 0x00, 0xef, 0x04, 0x50, 0x9d, 0xe4, 0x0c, 0x00, 0x94, 0xe5, 0x00, 0x00, 0x50, 0xe3, 0xf8, 0xff, 0xff, 0x0a, 0x1f, 0x40, 0xcb, 0xe7, 0x69, 0xc1, 0x00, 0xe3, 0x02, 0x1a, 0xa0, 0xe3, 0x00, 0x20, 0xa0, 0xe3, 0x04, 0x00, 0xa0, 0xe1, 0x00, 0x30, 0xa0, 0xe3, 0x04, 0x60, 0x2d, 0xe5, 0x80, 0x00, 0x00, 0xef, 0x04, 0x60, 0x9d, 0xe4, 0xad, 0x0b, 0x00, 0xe3, 0x30, 0xff, 0x2f, 0xe1, 0x0c, 0xd0, 0x47, 0xe2, 0xf0, 0x80, 0xbd, 0xe8, 0x90, 0x40, 0x2d, 0xe9, 0x00, 0x40, 0xa0, 0xe1, 0x00, 0x10, 0xa0, 0xe3, 0xd4, 0x20, 0xc4, 0xe1, 0x04, 0x70, 0x8d, 0xe2, 0x03, 0x00, 0xa0, 0xe1, 0x32, 0xff, 0x2f, 0xe1, 0x01, 0x00, 0xa0, 0xe3, 0x0c, 0x00, 0x84, 0xe5, 0x00, 0x00, 0xa0, 0xe3, 0x90, 0x80, 0xbd, 0xe8 -.align 2 -.globl _inject_start_arm64 -_inject_start_arm64: -.byte 0xf4, 0x4f, 0xbe, 0xa9, 0xfd, 0x7b, 0x01, 0xa9, 0xfd, 0x43, 0x00, 0x91, 0xff, 0x43, 0x00, 0xd1, 0xf3, 0x03, 0x00, 0xaa, 0x68, 0x02, 0x40, 0xf9, 0x01, 0x00, 0x80, 0xd2, 0x02, 0x04, 0x00, 0x10, 0x1f, 0x20, 0x03, 0xd5, 0xe0, 0x33, 0x00, 0x91, 0xe3, 0x03, 0x13, 0xaa, 0x00, 0x01, 0x3f, 0xd6, 0x68, 0x0e, 0x40, 0xf9, 0x88, 0x01, 0x00, 0xb5, 0x08, 0x00, 0x80, 0x92, 0xb0, 0x07, 0x80, 0x92, 0xe1, 0x03, 0x40, 0xb2, 0x03, 0xe8, 0x83, 0xd2, 0x02, 0x00, 0x80, 0xd2, 0x00, 0x00, 0x80, 0xd2, 0xe8, 0x0f, 0x1f, 0xf8, 0x01, 0x10, 0x00, 0xd4, 0xe8, 0x07, 0x41, 0xf8, 0x69, 0x0e, 0x40, 0xf9, 0x69, 0xff, 0xff, 0xb4, 0x02, 0x00, 0x80, 0xd2, 0x60, 0xc6, 0x72, 0x92, 0x30, 0x2d, 0x80, 0xd2, 0xe1, 0x03, 0x73, 0xb2, 0xe3, 0x03, 0x02, 0xaa, 0xe2, 0x0f, 0x1f, 0xf8, 0x01, 0x10, 0x00, 0xd4, 0xe2, 0x07, 0x41, 0xf8, 0xa8, 0x75, 0x81, 0xd2, 0x00, 0x01, 0x3f, 0xd6, 0xbf, 0x43, 0x00, 0xd1, 0xfd, 0x7b, 0x41, 0xa9, 0xf4, 0x4f, 0xc2, 0xa8, 0xc0, 0x03, 0x5f, 0xd6, 0xf4, 0x4f, 0xbe, 0xa9, 0xfd, 0x7b, 0x01, 0xa9, 0xfd, 0x43, 0x00, 0x91, 0xf3, 0x03, 0x00, 0xaa, 0x68, 0x82, 0x40, 0xa9, 0x01, 0x00, 0x80, 0x52, 0x00, 0x01, 0x3f, 0xd6, 0xe8, 0x03, 0x40, 0xb2, 0x68, 0x0e, 0x00, 0xf9, 0x00, 0x00, 0x80, 0xd2, 0xfd, 0x7b, 0x41, 0xa9, 0xf4, 0x4f, 0xc2, 0xa8, 0xc0, 0x03, 0x5f, 0xd6 diff --git a/script/gen-inject-asm.sh b/script/gen-inject-asm.sh index 962ecc6..e2b97ec 100755 --- a/script/gen-inject-asm.sh +++ b/script/gen-inject-asm.sh @@ -1,8 +1,8 @@ #!/bin/sh echo <<END /* Generated by script/gen-inject-asm.sh. The relevant source is in-tree (make - * out/inject-asm.S), but this file has been checked in too, in case your C - * compiler doesn't support all of these architectures. + * out/darwin-inject-asm.S), but this file has been checked in too, in case + * your C compiler doesn't support all of these architectures. * This file contains code for 4 architectures in one text page; it's remapped * into the target process and the appropriate thunk executed. Having ARM code * here on x86 and whatnot is currently pointless (and use of that code is |