From db2c234607f2608b472145368a8fd7aa0c0f583d Mon Sep 17 00:00:00 2001 From: Brendan Punsky Date: Thu, 27 Aug 2026 03:01:36 -0400 Subject: [PATCH] rexcode/arm32: LDMIB/LDMDA/LDMDB and STMIB/STMDA/STMDB are their own mnemonics LDM and STM each held five A32 forms with identical operand shapes -- the four increment/decrement orders plus a writeback variant -- distinguished only by their fixed bits. Nothing could tell them apart, so the encoder always took the first and six of the eight A32 encodings were unreachable: `ldmib`, `ldmda`, `ldmdb`, `stmib`, `stmda`, `stmdb` could not be produced at all. They are not variants of one mnemonic in the first place. An assembler spells them `ldmib` / `ldmda` / `ldmdb`, with plain `ldm` meaning IA, so this follows the same rule as the rest of the enum: one member per name an assembler accepts. LDM/STM keep the IA order and the Thumb encodings; the other three orders become their own mnemonics, and the T32 DB encodings join them. All eight now encode, byte-exact against llvm-mc: ldm e8900006 stm e8800006 ldmib e9900006 stmib e9800006 ldmda e8100006 stmda e8000006 ldmdb e9100006 stmdb e9000006 Six test checks referenced these forms by index; they were re-derived by matching (bits, mask) against the rebuilt table rather than by adjusting offsets, and every one was found -- so no form was lost in the move. Writeback (`ldm r0!, {...}`) is still unreachable: it is a property of the base operand, not a separate mnemonic, and there is nowhere to put it yet. That is one form per family rather than four. Co-Authored-By: Claude Opus 5 (1M context) --- core/rexcode/isa/arm32/mnemonic_builders.odin | 24 +++++++++ core/rexcode/isa/arm32/mnemonics.odin | 8 ++- .../isa/arm32/tablegen/encoding_table.odin | 33 +++++++----- .../tablegen/generated/decode_tables.odin | 50 +++++++++--------- .../tablegen/generated/encode_tables.odin | 32 +++++++---- .../isa/arm32/tables/arm32.bucket_list.bin | Bin 11106 -> 11106 bytes .../isa/arm32/tables/arm32.encode_forms.bin | Bin 38640 -> 38640 bytes .../isa/arm32/tables/arm32.encode_runs.bin | Bin 4736 -> 4784 bytes .../isa/arm32/tables/arm32.entries.bin | Bin 38640 -> 38640 bytes .../isa/arm32/tables/arm32.form_idx.bin | Bin 3360 -> 3360 bytes core/rexcode/isa/arm32/tests/smoke.odin | 12 ++--- 11 files changed, 104 insertions(+), 55 deletions(-) diff --git a/core/rexcode/isa/arm32/mnemonic_builders.odin b/core/rexcode/isa/arm32/mnemonic_builders.odin index e2932de71..ce36876c5 100644 --- a/core/rexcode/isa/arm32/mnemonic_builders.odin +++ b/core/rexcode/isa/arm32/mnemonic_builders.odin @@ -604,6 +604,18 @@ inst_ldm_r_list :: #force_inline proc "contextless" (dst: Register, r emit_ldm_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_ldm_r_list(dst, regs)) } inst_stm_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .STM, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}}} } emit_stm_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_stm_r_list(dst, regs)) } +inst_ldmib_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .LDMIB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}}} } +emit_ldmib_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_ldmib_r_list(dst, regs)) } +inst_ldmda_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .LDMDA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}}} } +emit_ldmda_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_ldmda_r_list(dst, regs)) } +inst_ldmdb_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .LDMDB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}}} } +emit_ldmdb_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_ldmdb_r_list(dst, regs)) } +inst_stmib_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .STMIB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}}} } +emit_stmib_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_stmib_r_list(dst, regs)) } +inst_stmda_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .STMDA, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}}} } +emit_stmda_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_stmda_r_list(dst, regs)) } +inst_stmdb_r_list :: #force_inline proc "contextless" (dst: Register, regs: u16) -> Instruction { return Instruction{mnemonic = .STMDB, operand_count = 2, mode = .A32, cond = 14, length = 4, ops = {op_reg(dst), op_reg_list(regs), {}, {}}} } +emit_stmdb_r_list :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Register, regs: u16) { append(instructions, inst_stmdb_r_list(dst, regs)) } inst_push_list :: #force_inline proc "contextless" (regs: u16) -> Instruction { return Instruction{mnemonic = .PUSH, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), {}, {}, {}}} } emit_push_list :: #force_inline proc(instructions: ^[dynamic]Instruction, regs: u16) { append(instructions, inst_push_list(regs)) } inst_pop_list :: #force_inline proc "contextless" (regs: u16) -> Instruction { return Instruction{mnemonic = .POP, operand_count = 1, mode = .A32, cond = 14, length = 4, ops = {op_reg_list(regs), {}, {}, {}}} } @@ -1891,6 +1903,18 @@ inst_ldm :: inst_ldm_r_list emit_ldm :: emit_ldm_r_list inst_stm :: inst_stm_r_list emit_stm :: emit_stm_r_list +inst_ldmib :: inst_ldmib_r_list +emit_ldmib :: emit_ldmib_r_list +inst_ldmda :: inst_ldmda_r_list +emit_ldmda :: emit_ldmda_r_list +inst_ldmdb :: inst_ldmdb_r_list +emit_ldmdb :: emit_ldmdb_r_list +inst_stmib :: inst_stmib_r_list +emit_stmib :: emit_stmib_r_list +inst_stmda :: inst_stmda_r_list +emit_stmda :: emit_stmda_r_list +inst_stmdb :: inst_stmdb_r_list +emit_stmdb :: emit_stmdb_r_list inst_push :: inst_push_list emit_push :: emit_push_list inst_pop :: inst_pop_list diff --git a/core/rexcode/isa/arm32/mnemonics.odin b/core/rexcode/isa/arm32/mnemonics.odin index 13342b0b8..f7982e394 100644 --- a/core/rexcode/isa/arm32/mnemonics.odin +++ b/core/rexcode/isa/arm32/mnemonics.odin @@ -190,7 +190,13 @@ Mnemonic :: enum u16 { LDAEXD, STLEXD, // Block move - LDM, STM, // base mnemonic w/ IA/IB/DA/DB suffix flag + LDM, STM, // IA order (the default spelling) + // The other three increment/decrement orders are their own mnemonics -- + // that is how an assembler spells them, and it is the only way to reach + // their encodings: all four share one operand shape, so nothing else + // tells them apart. + LDMIB, LDMDA, LDMDB, + STMIB, STMDA, STMDB, // Stack convenience aliases PUSH, POP, diff --git a/core/rexcode/isa/arm32/tablegen/encoding_table.odin b/core/rexcode/isa/arm32/tablegen/encoding_table.odin index df4e1bbac..928039b5f 100644 --- a/core/rexcode/isa/arm32/tablegen/encoding_table.odin +++ b/core/rexcode/isa/arm32/tablegen/encoding_table.odin @@ -1119,31 +1119,18 @@ ENCODING_TABLE := #partial [Mnemonic][]Encoding{ {.LDM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x08900000, 0x0FD00000, .BASE, .A32, {}, {}}, // LDMIA writeback (LDM Rn!, {reglist}): W=1 {.LDM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x08B00000, 0x0FD00000, .BASE, .A32, {}, {}}, - // LDMIB - {.LDM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x09900000, 0x0FD00000, .BASE, .A32, {}, {}}, - // LDMDA - {.LDM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x08100000, 0x0FD00000, .BASE, .A32, {}, {}}, - // LDMDB - {.LDM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x09100000, 0x0FD00000, .BASE, .A32, {}, {}}, // T16 Format 15 LDMIA: 11001 Rb reg_list8 {.LDM, {.GPR_LOW, .GPR_LIST, .NONE, .NONE}, {.RD_T16_HI, .A32_REG_LIST, .NONE, .NONE}, 0x0000C800, 0x0000F800, .THUMB, .T32, {cond_in_28=false}, {}}, // T32 LDMIA: high=11101000 1001 Rn low=PM 0 reg_list14 {.LDM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_T32, .A32_REG_LIST, .NONE, .NONE}, 0xE8900000, 0xFFD00000, .V6T2, .T32, {thumb32=true, cond_in_28=false}, {}}, - // T32 LDMDB: high=11101001 0001 Rn low=PM 0 reg_list14 - {.LDM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_T32, .A32_REG_LIST, .NONE, .NONE}, 0xE9100000, 0xFFD00000, .V6T2, .T32, {thumb32=true, cond_in_28=false}, {}}, }, .STM = { {.STM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x08800000, 0x0FD00000, .BASE, .A32, {}, {}}, {.STM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x08A00000, 0x0FD00000, .BASE, .A32, {}, {}}, - {.STM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x09800000, 0x0FD00000, .BASE, .A32, {}, {}}, - {.STM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x08000000, 0x0FD00000, .BASE, .A32, {}, {}}, - {.STM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x09000000, 0x0FD00000, .BASE, .A32, {}, {}}, // T16 Format 15 STMIA: 11000 Rb reg_list8 {.STM, {.GPR_LOW, .GPR_LIST, .NONE, .NONE}, {.RD_T16_HI, .A32_REG_LIST, .NONE, .NONE}, 0x0000C000, 0x0000F800, .THUMB, .T32, {cond_in_28=false}, {}}, // T32 STMIA: 0xE8800000 {.STM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_T32, .A32_REG_LIST, .NONE, .NONE}, 0xE8800000, 0xFFD00000, .V6T2, .T32, {thumb32=true, cond_in_28=false}, {}}, - // T32 STMDB: 0xE9000000 - {.STM, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_T32, .A32_REG_LIST, .NONE, .NONE}, 0xE9000000, 0xFFD00000, .V6T2, .T32, {thumb32=true, cond_in_28=false}, {}}, }, // PUSH / POP are conventional aliases for STMDB SP! / LDMIA SP! @@ -3748,5 +3735,25 @@ ENCODING_TABLE := #partial [Mnemonic][]Encoding{ {.VQRSHL, {.QPR, .QPR, .QPR, .NONE}, {.VD_Q, .VM_Q, .VN_Q, .NONE}, 0xF3300550, 0xFFB11F51, .NEON, .A32, {cond_in_28=false}, {.U64, .NONE}}, }, // SPECGEN:END + .LDMIB = { + {.LDMIB, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x09900000, 0x0FD00000, .BASE, .A32, {}, {}}, + }, + .LDMDA = { + {.LDMDA, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x08100000, 0x0FD00000, .BASE, .A32, {}, {}}, + }, + .LDMDB = { + {.LDMDB, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x09100000, 0x0FD00000, .BASE, .A32, {}, {}}, + {.LDMDB, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_T32, .A32_REG_LIST, .NONE, .NONE}, 0xE9100000, 0xFFD00000, .V6T2, .T32, {thumb32=true, cond_in_28=false}, {}}, + }, + .STMIB = { + {.STMIB, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x09800000, 0x0FD00000, .BASE, .A32, {}, {}}, + }, + .STMDA = { + {.STMDA, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x08000000, 0x0FD00000, .BASE, .A32, {}, {}}, + }, + .STMDB = { + {.STMDB, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_A32, .A32_REG_LIST, .NONE, .NONE}, 0x09000000, 0x0FD00000, .BASE, .A32, {}, {}}, + {.STMDB, {.GPR, .GPR_LIST, .NONE, .NONE}, {.RN_T32, .A32_REG_LIST, .NONE, .NONE}, 0xE9000000, 0xFFD00000, .V6T2, .T32, {thumb32=true, cond_in_28=false}, {}}, + }, } diff --git a/core/rexcode/isa/arm32/tablegen/generated/decode_tables.odin b/core/rexcode/isa/arm32/tablegen/generated/decode_tables.odin index bcb3ee5a1..fd06ea7a6 100644 --- a/core/rexcode/isa/arm32/tablegen/generated/decode_tables.odin +++ b/core/rexcode/isa/arm32/tablegen/generated/decode_tables.odin @@ -186,8 +186,8 @@ DECODE_ENTRIES := [1680]lib.Decode_Entry{ { .VADD, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000840, 0xFFB00F50, .NEON, .A32, {}, {.I8,.NONE} }, { .VADD, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000D40, 0xFFB00F50, .NEON, .A32, {}, {.F32,.NONE} }, { .VMUL, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000950, 0xFFB00F50, .NEON, .A32, {}, {.I8,.NONE} }, - { .VMLA, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000D50, 0xFFB00F50, .NEON, .A32, {}, {.F32,.NONE} }, { .VMLA, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000940, 0xFFB00F50, .NEON, .A32, {}, {.I8,.NONE} }, + { .VMLA, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000D50, 0xFFB00F50, .NEON, .A32, {}, {.F32,.NONE} }, { .VFMA, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000C50, 0xFFB00F50, .NEON, .A32, {}, {.F32,.NONE} }, { .VHADD, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000040, 0xFFB00F50, .NEON, .A32, {}, {.S8,.NONE} }, { .VHSUB, {.QPR,.QPR,.QPR,.NONE}, {.VD_Q,.VN_Q,.VM_Q,.NONE}, 0xF2000240, 0xFFB00F50, .NEON, .A32, {}, {.S8,.NONE} }, @@ -230,8 +230,8 @@ DECODE_ENTRIES := [1680]lib.Decode_Entry{ { .VCEQ, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000E00, 0xFFB00F10, .NEON, .A32, {}, {.F32,.NONE} }, { .VCGE, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000310, 0xFFB00F10, .NEON, .A32, {}, {.S8,.NONE} }, { .VCGT, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000300, 0xFFB00F10, .NEON, .A32, {}, {.S8,.NONE} }, - { .VMAX, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000F00, 0xFFB00F10, .NEON, .A32, {}, {.F32,.NONE} }, { .VMAX, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000600, 0xFFB00F10, .NEON, .A32, {}, {.S8,.NONE} }, + { .VMAX, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000F00, 0xFFB00F10, .NEON, .A32, {}, {.F32,.NONE} }, { .VMIN, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000610, 0xFFB00F10, .NEON, .A32, {}, {.S8,.NONE} }, { .VPMAX, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000A00, 0xFFB00F10, .NEON, .A32, {}, {.S8,.NONE} }, { .VPMIN, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2000A10, 0xFFB00F10, .NEON, .A32, {}, {.S8,.NONE} }, @@ -337,8 +337,8 @@ DECODE_ENTRIES := [1680]lib.Decode_Entry{ { .VCGE, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200310, 0xFFB00F10, .NEON, .A32, {}, {.S32,.NONE} }, { .VCGT, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200300, 0xFFB00F10, .NEON, .A32, {}, {.S32,.NONE} }, { .VMAX, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200600, 0xFFB00F10, .NEON, .A32, {}, {.S32,.NONE} }, - { .VMIN, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200F00, 0xFFB00F10, .NEON, .A32, {}, {.F32,.NONE} }, { .VMIN, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200610, 0xFFB00F10, .NEON, .A32, {}, {.S32,.NONE} }, + { .VMIN, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200F00, 0xFFB00F10, .NEON, .A32, {}, {.F32,.NONE} }, { .VPMAX, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200A00, 0xFFB00F10, .NEON, .A32, {}, {.S32,.NONE} }, { .VPMIN, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200A10, 0xFFB00F10, .NEON, .A32, {}, {.S32,.NONE} }, { .VPADD, {.DPR,.DPR,.DPR,.NONE}, {.VD_D,.VN_D,.VM_D,.NONE}, 0xF2200B10, 0xFFB00F10, .NEON, .A32, {}, {.I32,.NONE} }, @@ -373,8 +373,8 @@ DECODE_ENTRIES := [1680]lib.Decode_Entry{ { .VMOV, {.QPR,.IMM,.NONE,.NONE}, {.VD_Q,.NONE,.NONE,.NONE}, 0xF2800050, 0xFEB80FD0, .NEON, .A32, {}, {.I32,.NONE} }, { .VMOV, {.QPR,.IMM,.NONE,.NONE}, {.VD_Q,.NONE,.NONE,.NONE}, 0xF2800F50, 0xFEB80FD0, .NEON, .A32, {}, {.F32,.NONE} }, { .VMOV, {.QPR,.IMM,.NONE,.NONE}, {.VD_Q,.NONE,.NONE,.NONE}, 0xF2800850, 0xFEB80FD0, .NEON, .A32, {}, {.I16,.NONE} }, - { .VMOV, {.QPR,.IMM,.NONE,.NONE}, {.VD_Q,.NONE,.NONE,.NONE}, 0xF2800E50, 0xFEB80FD0, .NEON, .A32, {}, {.I8,.NONE} }, { .VMOV, {.QPR,.IMM,.NONE,.NONE}, {.VD_Q,.NONE,.NONE,.NONE}, 0xF2800E70, 0xFEB80FD0, .NEON, .A32, {}, {.I64,.NONE} }, + { .VMOV, {.QPR,.IMM,.NONE,.NONE}, {.VD_Q,.NONE,.NONE,.NONE}, 0xF2800E50, 0xFEB80FD0, .NEON, .A32, {}, {.I8,.NONE} }, { .VADDL, {.QPR,.DPR,.DPR,.NONE}, {.VD_Q,.VN_D,.VM_D,.NONE}, 0xF2800000, 0xFFB01F50, .NEON, .A32, {}, {.S8,.NONE} }, { .VSUBL, {.QPR,.DPR,.DPR,.NONE}, {.VD_Q,.VN_D,.VM_D,.NONE}, 0xF2800200, 0xFFB01F50, .NEON, .A32, {}, {.S8,.NONE} }, { .VABAL, {.QPR,.DPR,.DPR,.NONE}, {.VD_Q,.VN_D,.VM_D,.NONE}, 0xF2800500, 0xFFB01F50, .NEON, .A32, {}, {.S8,.NONE} }, @@ -400,8 +400,8 @@ DECODE_ENTRIES := [1680]lib.Decode_Entry{ { .VMVN, {.DPR,.IMM,.NONE,.NONE}, {.VD_D,.NONE,.NONE,.NONE}, 0xF2800630, 0xFEB80F90, .NEON, .A32, {}, {.I32,.NONE} }, { .VMVN, {.DPR,.IMM,.NONE,.NONE}, {.VD_D,.NONE,.NONE,.NONE}, 0xF2800D30, 0xFEB80F90, .NEON, .A32, {}, {.I32,.NONE} }, { .VMVN, {.DPR,.IMM,.NONE,.NONE}, {.VD_D,.NONE,.NONE,.NONE}, 0xF2800A30, 0xFEB80F90, .NEON, .A32, {}, {.I16,.NONE} }, - { .VMVN, {.DPR,.IMM,.NONE,.NONE}, {.VD_D,.NONE,.NONE,.NONE}, 0xF2800430, 0xFEB80F90, .NEON, .A32, {}, {.I32,.NONE} }, { .VMVN, {.DPR,.IMM,.NONE,.NONE}, {.VD_D,.NONE,.NONE,.NONE}, 0xF2800830, 0xFEB80F90, .NEON, .A32, {}, {.I16,.NONE} }, + { .VMVN, {.DPR,.IMM,.NONE,.NONE}, {.VD_D,.NONE,.NONE,.NONE}, 0xF2800430, 0xFEB80F90, .NEON, .A32, {}, {.I32,.NONE} }, { .VMVN, {.DPR,.IMM,.NONE,.NONE}, {.VD_D,.NONE,.NONE,.NONE}, 0xF2800030, 0xFEB80F90, .NEON, .A32, {}, {.I32,.NONE} }, { .VMVN, {.DPR,.IMM,.NONE,.NONE}, {.VD_D,.NONE,.NONE,.NONE}, 0xF2800C30, 0xFEB80F90, .NEON, .A32, {}, {.I32,.NONE} }, { .VQSHRN, {.DPR,.QPR,.IMM,.NONE}, {.VD_D,.VM_Q,.NEON_SHIFT_IMM6,.NONE}, 0xF2800910, 0xFE800FD0, .NEON, .A32, {}, {.I16,.NONE} }, @@ -1014,20 +1014,20 @@ DECODE_ENTRIES := [1680]lib.Decode_Entry{ { .BFI, {.GPR,.GPR,.IMM5,.IMM5_W}, {.RD,.RM_A32,.BFI_LSB,.BFI_MSB}, 0x07C00010, 0x0FE00070, .V6T2, .A32, {}, {.NONE,.NONE} }, { .UBFX, {.GPR,.GPR,.IMM5,.IMM5_W}, {.RD,.RM_A32,.BFI_LSB,.BFI_MSB}, 0x07E00050, 0x0FE00070, .V6T2, .A32, {}, {.NONE,.NONE} }, { .UDF, {.IMM,.NONE,.NONE,.NONE}, {.NONE,.NONE,.NONE,.NONE}, 0xE7F000F0, 0xFFF000F0, .BASE, .A32, {}, {.NONE,.NONE} }, - { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08000000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + { .STMDA, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08000000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .RFE, {.GPR,.NONE,.NONE,.NONE}, {.RN_A32,.NONE,.NONE,.NONE}, 0xF8100A00, 0xFE10FFFF, .V6, .A32, {}, {.NONE,.NONE} }, - { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08100000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + { .LDMDA, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08100000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .SRS, {.IMM,.NONE,.NONE,.NONE}, {.NONE,.NONE,.NONE,.NONE}, 0xF84D0500, 0xFE5FFFE0, .V6, .A32, {}, {.NONE,.NONE} }, { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08800000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08900000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08A00000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .POP, {.GPR_LIST,.NONE,.NONE,.NONE}, {.A32_REG_LIST,.NONE,.NONE,.NONE}, 0x08BD0000, 0x0FFF0000, .BASE, .A32, {}, {.NONE,.NONE} }, { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08B00000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09000000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09100000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + { .STMDB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09000000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + { .LDMDB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09100000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .PUSH, {.GPR_LIST,.NONE,.NONE,.NONE}, {.A32_REG_LIST,.NONE,.NONE,.NONE}, 0x092D0000, 0x0FFF0000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09800000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09900000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + { .STMIB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09800000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + { .LDMIB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09900000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .BLX, {.REL24,.NONE,.NONE,.NONE}, {.BRANCH_24,.NONE,.NONE,.NONE}, 0xFA000000, 0xFE000000, .V5T, .A32, {branch=true, writes_pc=true}, {.NONE,.NONE} }, { .B, {.REL24,.NONE,.NONE,.NONE}, {.BRANCH_24,.NONE,.NONE,.NONE}, 0x0A000000, 0x0F000000, .BASE, .A32, {branch=true, cond_branch=true, writes_pc=true}, {.NONE,.NONE} }, { .BL, {.REL24,.NONE,.NONE,.NONE}, {.BRANCH_24,.NONE,.NONE,.NONE}, 0x0B000000, 0x0F000000, .BASE, .A32, {branch=true, cond_branch=true, writes_pc=true}, {.NONE,.NONE} }, @@ -1236,9 +1236,9 @@ DECODE_ENTRIES := [1680]lib.Decode_Entry{ { .POP, {.GPR_LIST,.NONE,.NONE,.NONE}, {.A32_REG_LIST,.NONE,.NONE,.NONE}, 0xE8BD0000, 0xFFFF0000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, { .STREX, {.GPR,.GPR,.MEM,.NONE}, {.RD_T32,.RT_T32,.RN_T32,.NONE}, 0xE8400000, 0xFFF00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE8900000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, - { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE9100000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE8800000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, - { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE9000000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, + { .LDMDB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE9100000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, + { .STMDB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE9000000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, { .LDRD, {.GPR,.GPR,.MEM,.NONE}, {.RT_T32,.RT2_T32,.RN_T32,.NONE}, 0xE9500000, 0xFE500000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, { .STRD, {.GPR,.GPR,.MEM,.NONE}, {.RT_T32,.RT2_T32,.RN_T32,.NONE}, 0xE9400000, 0xFE500000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, { .LSL, {.GPR,.GPR,.IMM5,.NONE}, {.RD_T32,.RM_T32,.NONE,.NONE}, 0xEA4F0000, 0xFFEF8030, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, @@ -1704,21 +1704,21 @@ DECODE_FORM_IDX := [1680]u16{ 1, 0, 0, 0, 5, 4, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 2, 1, 0, 0, 5, 4, 0, 0, 0, 2, 1, 0, 0, 0, 5, 4, 0, 0, 0, 2, 1, 0, 0, 0, 5, 4, 1, 1, 1, 9, 14, - 8, 10, 6, 4, 3, 3, 1, 4, 4, 3, 3, 1, 3, 7, 3, 3, + 8, 6, 10, 4, 3, 3, 1, 4, 4, 3, 3, 1, 3, 7, 3, 3, 0, 0, 3, 9, 3, 1, 4, 1, 1, 0, 0, 13, 5, 5, 9, 3, - 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 8, 0, 0, + 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 0, 0, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 3, 3, 4, 10, 9, 7, 4, 4, 5, 5, 2, 4, 4, 1, 4, 9, 4, 4, 2, 2, 11, 4, 4, 2, 0, 3, 6, 6, 4, 1, 1, 1, 1, 0, 1, 1, 0, 1, 8, 1, 1, 10, 1, 1, 1, 1, 1, 1, 3, 5, 5, 5, 11, 14, 10, 8, 10, 4, 5, 5, 6, 6, 3, 5, 5, 1, 5, 5, 5, 4, 4, 5, 5, 9, 1, 4, 0, 7, 13, 7, 5, 9, 3, 2, 2, 2, 2, - 1, 2, 2, 0, 2, 2, 2, 2, 8, 2, 2, 2, 2, 0, 2, 0, + 1, 2, 2, 0, 2, 2, 2, 2, 2, 8, 2, 2, 2, 0, 2, 0, 7, 12, 4, 7, 7, 1, 11, 5, 6, 0, 8, 3, 3, 3, 0, 10, - 3, 3, 0, 3, 0, 3, 0, 0, 0, 21, 24, 22, 23, 25, 0, 0, + 3, 3, 0, 3, 0, 3, 0, 0, 0, 21, 24, 22, 25, 23, 0, 0, 0, 0, 11, 10, 11, 17, 13, 19, 20, 15, 16, 14, 18, 12, 10, 6, - 0, 0, 0, 3, 5, 9, 7, 4, 6, 2, 8, 1, 0, 1, 0, 0, - 0, 0, 1, 1, 3, 1, 3, 3, 1, 1, 1, 1, 5, 2, 0, 0, + 0, 0, 0, 3, 5, 9, 7, 6, 4, 2, 8, 1, 0, 1, 0, 0, + 0, 1, 0, 1, 3, 1, 3, 3, 1, 1, 1, 1, 5, 2, 0, 0, 2, 0, 2, 0, 0, 0, 4, 0, 1, 1, 1, 1, 1, 1, 1, 18, 12, 11, 1, 7, 1, 6, 1, 6, 2, 0, 2, 0, 2, 0, 4, 4, 4, 4, 3, 2, 2, 2, 2, 2, 2, 2, 22, 19, 13, 16, 12, 15, @@ -1755,8 +1755,8 @@ DECODE_FORM_IDX := [1680]u16{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, 0, 0, 0, 0, 0, 3, 0, - 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 3, 0, 3, - 0, 0, 0, 1, 0, 1, 4, 4, 0, 2, 2, 1, 0, 0, 1, 0, + 0, 0, 0, 0, 0, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 1, 0, 9, 9, 7, 0, 0, 6, 8, 0, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 4, 2, 1, 3, @@ -1769,7 +1769,7 @@ DECODE_FORM_IDX := [1680]u16{ 5, 4, 6, 2, 0, 1, 3, 7, 13, 14, 0, 1, 1, 0, 3, 2, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 4, 1, 0, 1, 0, 16, 15, 2, 3, 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 1, 1, - 1, 0, 0, 0, 0, 1, 1, 2, 2, 1, 6, 7, 6, 7, 4, 4, + 1, 0, 0, 0, 0, 1, 1, 2, 2, 1, 3, 3, 1, 1, 4, 4, 4, 4, 4, 3, 5, 4, 7, 5, 11, 10, 8, 10, 9, 8, 7, 8, 8, 8, 8, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 30, 0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, @@ -1797,7 +1797,7 @@ DECODE_FORM_IDX := [1680]u16{ 4, 3, 6, 6, 6, 3, 3, 3, 2, 0, 2, 1, 2, 0, 0, 9, 5, 7, 4, 4, 4, 4, 4, 5, 4, 4, 4, 5, 6, 5, 5, 5, 5, 6, 7, 0, 10, 1, 1, 1, 1, 9, 11, 0, 1, 1, 1, 1, - 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 5, 5, 1, 1, 1, 2, + 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 2, 2, 1, 1, 1, 2, } @(rodata) @@ -2022,8 +2022,8 @@ DECODE_BUCKET_LIST := [5553]u16{ 1648, 1648, 1649, 1649, 1650, 1650, 1651, 1651, 1652, 1652, 1653, 1654, 1655, 1656, 1657, 1658, 1659, 1660, 1661, 1662, 1663, 1664, 1665, 1666, 1667, 1668, 1669, 1670, 1671, 1672, 1673, 1674, 1674, 1675, 1675, 1676, 1676, 1676, 1677, 1678, 1676, 1679, 1679, 1217, 1218, 1219, 1220, 1225, - 1231, 1221, 1230, 1231, 1230, 1228, 1226, 1228, 1224, 1226, 1214, 1215, 1222, 1231, 1210, 1211, - 1212, 1213, 1216, 1230, 1231, 1230, 1229, 1227, 1223, 1229, 1227, 1231, 1230, 1231, 1209, 1230, + 1231, 1221, 1230, 1231, 1230, 1227, 1226, 1227, 1224, 1226, 1214, 1215, 1222, 1231, 1210, 1211, + 1212, 1213, 1216, 1230, 1231, 1230, 1229, 1228, 1223, 1229, 1228, 1231, 1230, 1231, 1209, 1230, 1231, 1230, 1231, 1230, 1244, 1243, 1236, 1244, 1243, 1250, 1250, 1232, 1233, 1234, 1235, 1241, 1240, 1249, 1232, 1233, 1234, 1235, 1240, 1241, 1249, 1242, 1242, 1245, 1237, 1245, 1239, 1247, 1247, 1248, 1248, 1238, 1246, 1246, 1261, 1269, 1268, 1261, 1265, 1266, 1264, 1267, 1261, 1269, diff --git a/core/rexcode/isa/arm32/tablegen/generated/encode_tables.odin b/core/rexcode/isa/arm32/tablegen/generated/encode_tables.odin index fa59cdbff..a7d733bdc 100644 --- a/core/rexcode/isa/arm32/tablegen/generated/encode_tables.odin +++ b/core/rexcode/isa/arm32/tablegen/generated/encode_tables.odin @@ -801,21 +801,27 @@ ENCODE_FORMS := [1680]lib.Encoding{ // .LDM { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08900000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08B00000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09900000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08100000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09100000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .LDM, {.GPR_LOW,.GPR_LIST,.NONE,.NONE}, {.RD_T16_HI,.A32_REG_LIST,.NONE,.NONE}, 0x0000C800, 0x0000F800, .THUMB, .T32, {}, {.NONE,.NONE} }, { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE8900000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, - { .LDM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE9100000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, // .STM { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08800000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08A00000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09800000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08000000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, - { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09000000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, { .STM, {.GPR_LOW,.GPR_LIST,.NONE,.NONE}, {.RD_T16_HI,.A32_REG_LIST,.NONE,.NONE}, 0x0000C000, 0x0000F800, .THUMB, .T32, {}, {.NONE,.NONE} }, { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE8800000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, - { .STM, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE9000000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, + // .LDMIB + { .LDMIB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09900000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + // .LDMDA + { .LDMDA, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08100000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + // .LDMDB + { .LDMDB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09100000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + { .LDMDB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE9100000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, + // .STMIB + { .STMIB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09800000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + // .STMDA + { .STMDA, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x08000000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + // .STMDB + { .STMDB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_A32,.A32_REG_LIST,.NONE,.NONE}, 0x09000000, 0x0FD00000, .BASE, .A32, {}, {.NONE,.NONE} }, + { .STMDB, {.GPR,.GPR_LIST,.NONE,.NONE}, {.RN_T32,.A32_REG_LIST,.NONE,.NONE}, 0xE9000000, 0xFFD00000, .V6T2, .T32, {thumb32=true}, {.NONE,.NONE} }, // .PUSH { .PUSH, {.GPR_LIST,.NONE,.NONE,.NONE}, {.A32_REG_LIST,.NONE,.NONE,.NONE}, 0x092D0000, 0x0FFF0000, .BASE, .A32, {}, {.NONE,.NONE} }, { .PUSH, {.GPR_LIST,.NONE,.NONE,.NONE}, {.A32_REG_LIST,.NONE,.NONE,.NONE}, 0x0000B400, 0x0000FE00, .THUMB, .T32, {}, {.NONE,.NONE} }, @@ -2506,8 +2512,14 @@ ENCODE_RUNS := [lib.Mnemonic]lib.Encode_Run{ .STLEXH = { 563, 1}, .LDAEXD = { 564, 1}, .STLEXD = { 565, 1}, - .LDM = { 566, 8}, - .STM = { 574, 8}, + .LDM = { 566, 4}, + .STM = { 570, 4}, + .LDMIB = { 574, 1}, + .LDMDA = { 575, 1}, + .LDMDB = { 576, 2}, + .STMIB = { 578, 1}, + .STMDA = { 579, 1}, + .STMDB = { 580, 2}, .PUSH = { 582, 3}, .POP = { 585, 3}, .SWP = { 588, 1}, diff --git a/core/rexcode/isa/arm32/tables/arm32.bucket_list.bin b/core/rexcode/isa/arm32/tables/arm32.bucket_list.bin index d0cc915e6ed5b8c86427f9f980865f5a8c213fd0..6ecfc17830fe1ff4f0a674179dd3bfcdb15ee34c 100644 GIT binary patch delta 30 mcmaD9_9$#amo)2XmQyUJC-+Osv!7u(&T^LJ%;v4qYxx1w>kSP6 delta 30 mcmaD9_9$#amo)1cmQyTeCihFrv!7-;&T^LJ^yaP7Yxx1x0SyfR diff --git a/core/rexcode/isa/arm32/tables/arm32.encode_forms.bin b/core/rexcode/isa/arm32/tables/arm32.encode_forms.bin index e6b479f59e73fa89235f786098f124d08368d27d..1f711dd616f136dcde939fb53ae2ee03e4731ef9 100644 GIT binary patch literal 38640 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 KL*T-R$ie`~l_|0S literal 38640 zcmZQ%U}O|zU}6?yU|?WiVqkc{4`MKYgjpGwm|4I)0c2q|u&@9F1H%MlVVEHTObiSk z_!$@&L5PtNW{3cT0J1R55CMh>2w@f$1_nVP1_lNP28ILw85kHD86buTF>v#UgIw}~ zq2a-Ac18tMVF9SHB1D*#ft!aHr1}*@!-M~D)i7ZJsIVf)zX;DOAUw~+fN-}01Kjf< zVVJuW5S|AK!#r<*@H|Ku=6M5z=Rv|SLktj}XJUYP-T~S3Ak{F>H$Z)<0C6|WI}K3p zC@?TEBgLfy!aE>gm`fZG-T?{2T;hQ64oDd0odAS)K*BIX0ubH-3BwEtKzN6lfrW*I zK~PwTfkBFaf#DxCEDkTA^3286po!Z0fv5bg#E!`wXq;ck#H%#aBPcY}mshD<=X zn-vi|5=hYi5{AZ(45~0Jb_|eW2V^z_gNP^t1A_|#0|P8}SQ%ItB_VOS0#!9ME*X&H zk_{gn0GE9yaN)38FB&P z9gr~0kP8U!u*1F6fb1QRYM6Ht5Z(a^!@QG#@D2x(cOD?T0}_V0>U~X7~WAU>Fz}I2jmO85kgylmMdu zk}w-YSb#x*aRNdZRK|kJBnBs>DCT5f6k=fD0o5=30v{OqKR_xNh}qzZgkRtlL;nXz zO~Qrb5(9)wxR6|8fN%*H10&oe1_+mMAz3*AVI{;6h?Nr%R&pa*8Gx{o8_CK5gq7S# zRt6xfUoebEMGbx>UlnJz%qfGYzvqf7~VtLY<%E=Wdb+Z7BC7R39~UUfP@7Y7BEgg z5*B1&fEcoYnStRyq|JtG$Oc9MBw@HA8yF`bgyE@50V!4SA(D?9Qu5&gM;bRMr!n|{ zU}$&`$!W;K@lat!1_p>B+~Ag+|0{-u_mB*TEF2FNR%Bq{M~dPDh$sdL!(!(EB8ox6 zu-G|(h+>d1EQ&86q8KC$Gvopyib29KLoOhqm>(X+4aiXpQVok@1w<5sgke#vfQVuN zq$qxXh++YxD1Ly5VgYd8fkg2GL=+<%@&OUW$cB7CL@}}<9}rP20Qb%TWbX(d#brJ; z(i9jNAZ9}%Egu>?3JeT_42+DT3`{Jb#^3_R0&wzSfCw`(FtM;QfRg41gfI(>D5NI< zYX8C7gMx6EG$6N;A!b9Y^nYalOD7;WLX5nw=a2}l^`5(R`ygyAl6Kz0d87~+xuWS0md zTmtHP!NLS23~>nqay<_+1mY3}WS4-1VJ>k%xI_f*k_2RzfP^6~DL{6K2s|1NAX^Di z4YASy*-DTw%*q6Wm7?Gh0+eDwR({|Il|Bp%3}Or{8ql7=0;KR3hg<1@TnR`pFbab@ zL!d;$0M4%LASOhZ8^mOA_{7ivtV6SI* zzz;SXBFr5d&A`Br|CyoTKcrBS28Ey)6H83A0K)Qu)0ijwQ zN%aGSYKSmIbpS%O29oLn2-Of_h-w3bYE2~79}ub`!VuL02-RBffED1+X9Q(#CQurL z2tz_}!>IEMrAXMuhsooD(4GwP|c%(7xLQ3Bd)gVI} zkPXp=8?u2P$q-$*Ar8ofKvaVanSgAF9+DvtcY|G`2RGyZvLO)FAVW4F8=?;n*bV#* zY#;cc$;SXb0wutJluiuc!U4#_MqopjLDlGo2KEmhpoSQOgc+GxSeXPE8rVO;lBNj* zqXa7hQzQ$h(q%JXcmPSU5Mk~p9#B+$R%o~YDXUD8R6jtdh6qDcHy~7-F)&Ing3UJI zUx4rqL>Qu4;WIqu&5=|;K&XZYLsTz7sI~xkhk=QOnIV9Iff3{#W{^`M!rZ((3=JO| z5b4AcNwoq(HAEPsdI7R(DWqgh8q|Agi{4sAgtin7}W9 z@FheTly?}ARolW<3m~h82t!mOFxWQF_KvoSAhNwmg6L+}k0%X+?VTfv^F!6w^ zp1`kw2os1fNVNcRn0Uff3m~h82t!mOg^3qjwE?nfh%iJoQkZzdRRF z1i)1rAghK5LsTP$Ng!Nx0J3U`Fhn&{m;}L9e?V3Z5r(Kn3X@>C>H=id5MhXFq%aAA ztDeAbfCv+aFi5oma+rj|RSO`ih6qDcBZWyAT(tqRYKSmIHBy*_!&L_$tA+?eR3n8+ z1YGq8WYrL1h-#!TiG-^zKvoSAhNwmglPI|A3H$|!Fo6hzR3{*ZNixgbU!p7m$Su;ldw~g^NJKV3$l_U|{$Fn@L3$7GMB1azJyM3`Oup zr33OH3`8|3<{3UP{D!xyia}umQqsh%h$~FKArh_Xh@OSEU5WkOZ)5 zaI+jD3{ow?z<^L)3RVq@v~Mh96%U?EPMfB2t*iSNCU!<3M4}wAPhkk{(vw9A`CI)0K$+;Btsm)s=*zE zDzGr9S>Ax$j;)3ZA3zqafeSA{7OsU0KR_0)g9|q>Ahmky;lc-yg&RP^;5694kiZD) zH-KBzjd0-u$ihu<;RVRT&2Zrd$igjf;RPToKYZW^o81Z*et<081`=ijC7%Wcr1p0^ zT=)R8a0gs?0kUu>T=)U9a2H4z>`Q?U0^mFk9_)b#gOcEf4->$7ha0r6pc_fG0YWuI z7@~RuLUj*=3IhX!C#WC7z`(@-8ir<&VPNQC(9mXJ@C6B90OxK7MnqvN3 z4D6sVnS>DDi6lH3+_?r%V zgve9|eMSa`V31QjC@_Bbk17o6=r%Nb{tp|6n8v`U4;xM7XZ+8SM^|IksnSs*Q7%!q6VLRbLV5QH!zvLUm<27m}AWJ3_b z3dn{agqe^HnFG=f#>~iuAcPH&4M7MqBO5XoYygO0K{f;-?0{?tLYM{Fka-~eV9W|N z1e6OI<}*k$Ffc@b^4B&R4c{{?fD417fdLi`3qcu(A(VlEA>c#(*AM^y{|Bo^ z67Jvs87vGcAr`?^J0Pn@5=K_N7_K@2Sv8U{vg##ZuYd^o5A|O`F%M2B2x0yH{on+_ z26D+#1|0?l1{;v_4;Q{NeE9GmJkEwJJmCjO7`z5*8HQ@GFOh`}z^XYwW-mul9q@(W zLjfdAkcB7w1epz1y@CPMcmO%1fPvv5s0{&*hLs=@FlKD%{|@pF7s%{YU?C8}ge<%o zBm&0F$ii#DLLefKA%PK;cQ`?|tp$mIu>f++BMC#(3E0YYV3i<35Lq>nFtY0PAcbHo zgsd7#7+LiOuu2dif~*=z7+E!_@B^u3U?_k_F*vA@grQLkcK0Skie(T0mnUG=2w{P3 z3=H4@Gca(03f;}1fPs}jpyCUJ85khKU`y{KO~-Bls|E=dFerc{4V-)s!VLQ$s+mA$ zZ$(n=09MTj(z*>vI00P2fK%0WxbO#t56?jf0;HG$A<(b^yXVyAa-qLGlh%804J_B=0~Bfw+4D!rf3|u-O6#ckf1Ww*$g~P+_pU z6EK9q?sh=98>$*?wgbZ5yAkdVL2@@#8078(BzHp$fw;Q?;clof*lY%byZ1ocZOg#0 zfgynL11#A?h3!GY1sK8(AmIQ8bk%ksVFAVu{Loaj2jT80BzHrFLGJEAayP_Eh`To+ z+zk~5yW0Ta?!8Fv2K5A>Rziir?gkCHqY8uF4eDZ{3WMFvfN=L-gu8=~+zk~5xw`?$ z-4H7w?p}a!H&htxZUuz9_rcwL0Xe*(!uAXd7Z{Mj8!GGo5=IJdsIVPK7%9B>A>18? zDFQh-!!fHy|7c6$U%d0O7y`a0gxhci##iJw~W7I0PXv5AH}pg~1^RiFssUa0o(T z9wyAF!@$Q6YV!xYWMByR2d-ca!ma#(Y$a3}941IsLWRL$f@CFB7#t=@Rvu(vgj?x= zu<{VZN^l8bfG8mjBMB=YgpVKz7a)X>A_*rTgpa|6H!u_+a`AB_VbDkpG?Scw3tvE1 zeG)GG0a^GIM3|X@VLs0U#{c{u_`wa4(_mp1W(I}{e;OD+{D%sk0SmK%RbN1;J_{Cx zs6K#DeGV)PQT+j-`aD<|qWS?s^#!mnST#SyCEzwPM3@g0!~6j+7+|&QMQ}7Qu`x4D z;BR0AO|XJhLxj1(${k+7^UftCvmx#VtA+@J6#MgEc<~=*_GKiq42VI#PeX`dq}Dwz61;3M^X*(4p{gB10y>F1G6%y;WvSU zf#CwA^@uFI0lV-7POPd0u&Wk8R?WiBz#sy$@&r;%0BG);4wTl7G{PC zputgo&}wl928O3d!VchM58i3?3_R!st|qtye*FJ0@DDta^BmrTVPN(B@!)?vMEC`R zo|3Mvvx}QM0|Nt}0C>cYfq~&AvhY6v1_nr1{1tW|36 z2-Tk$^mKI?oZUceA^{!-m`gq*3;$t&x%&%}FatvMS7c#?>Tlp^0BtREfW{7JKM=!r zBw+<`?0|)TAPGYv4J`ZKd914BT*Geg-7foCbUW{2TcB85nqxRr3mb65!wPUl1b9#l^*- zrLDu@z$@@603i%Fn}Y$YS^%_-0m(`Zh#>-?@nmFS1(<4XWGgugV8T2Me;D9aaxj3c zgqn>IhPVW3HbPhdrW#~6Lf8N%3^E(;ZeF;%K|uvq%?q~@MVN!(eIS41duc`mPGkr2 zf`k{omtj z2P6!Q9eJeK`3H|31}+6e-uVZQ9R_Z=Fh2v5YEA`2-a)7q;DrP%I2!)JV<&(Y5++b# zm@fr5;c1YQ0m%?fq`ZSH3=b1-1|+jN;VBkm2rOU&IFT|5vTAq;f($`&2`q{QP|b$L z4oDcTnirm`_>fie!V?6FFefOJKyw3q?)qJ;lljLs*!z(P%Xd%FJ?f7z>;PF54_+&6Gr$FWC+wd&~yTJ zHyb0o{ANM&4m*;&Cm>>n9m(BrVSWZA)tnO$vBLp3gn7cFkxl}PDU;+1_mu11_lRILlD9!h9HDd41qb2fgLW)hio&-`56$x4anX>7Dn<8vM}7;%nV%cFgbu~ z2+Z>bm{ANt2%{JR3zG(9&m)0|Pss zAUtV0a3h5Ig^*P5MW_}+QjHMi7e-RO520EZNi{;4Uj#|@euQcfB-IFEeo-XVh@{Df zER0B+AYo{Vb>K#*1{neuMyTc&Loyp)dGRrbA-M!D%+Dak$RWwVpkl_rz`(VE?*sn^ zP&xstmSkX12MKe-g~6&B85mUA7#IY&82IY>KY;2>1_m)kP^M>71qlnF2s3gru(4}0 z2yh4RTtKMiWMpK}WMgL#;C4V31~tst*wq*WxKLDca4<5eF|e@5(GB`vM@g*1A`VHNHxPddHxBY76(W* zBR>NJpB6}109lxypOH~Zi;tgypW%%lL^T70ICy0aXc|d?>m%QP{{N7~CV?dU5Fsqd z$f3i)paL2%<`Up#;5UG%mSp7AVPH@P33DR}OChOdK&X~NQjH`m&B(~jz`$$;$|Mtb z82BeZ%$8lbG16DlpF(@GwN^oI*1|@Jq z1l&eu-Sz(>tYxZESFf3bqvtfgEXu`0$BSr>2gm;*byn`%^ zqnS{IA;X;lpu<9uRW~3qAhIxgjG7JA z5SVIqWMMwIO9a5eeBfHjfeXzgFkv*8z=YAPgb70iFa;PG*cprwp67sD$%rD1WF@j{ zBrB1HkvxwqjN}qzVKkRO9ms@cB}^F2N|-R3*)U-wvrQ1b9UWS1Zdqp5}(!j5D%NHt6tNwo#MWMkk)D#DP3k%}-2 zcv`kZOc5d{Pdi8Zs58%iw^VPAs8Q9AIIXOF)J| zRO>M~@FKYzrWz~^Q_aj^1$VaqH)M{H3$zaqSs3DOE>Njy1rP54sJo%6VeSs#hPWH5 z8sZX71_wS!ctceqgdq-us)htCST(qeg{npfL-Gz-wKc-sJV@?F7DjTnHNxFIknjeZ zjVz4hZjd3MbfU@Nz>nl^WML$CgA4&BAFyhKyOD*F+--w!H#<_>2U!>?*&_=hC3_o$ zci53yO31=UxdB-iDK{XSjZ_ySt46AeZ4r5%71Xu|H~ASEkcB~Qd$2GQiZG~c4;E%d z5eBvG!NRO4!l1T2SeOk(7}T~03$ruW!9$P%IRue~kwOqz7%2qp;34RM9D>NgNFj(U zj1+>%W+R0lvTCFdL{iNQNt&Q#kqk(xc_C>KENqVmZ+4{cMixd2Z)9Pl@J1F!3U6d# zr0_--Mhb5Scz6pSTI&o94)72RK(yA;gx?49Zv+j$F)%nH83K1m5apU~on<1m0jp6Gj-~f@BCh<{21VkPLyxJeu%- zc$l~%83HN7!23vDkqm*9RbXK^B-QZb!@%H%q#B-l7#Q4g5vOPprr|#gXsXx2|&iekcB6}gqcuOFMtU%qX>6=zQDf&WC$yY@C2AJ z8;bA(m@qqoFCy6^Ru~JT2*XPs5fou~c_PZ-i^x)lrNkgZ;CY7wURHq&K?uW3A5jKB zWS79&gPbVB@I23jA`H*m+zfumE&(?!z{_Tlh2bRx$Pgr#z*K__fekn?@WERgd`M7pCYVu;DdM`Dhylrz`zJ!mICr6tl)4!6^5&3g|D6fSqWE-EbNa6 zL1wtS85xj;Ar2G(HCT~_;c>~#;ExDFX1FgwhQNc08R8wNAqZi3T!IXNg^2(&ytHRU zH5(S*AYqtl20plIJ|xu+eDJyfB#clENf6+GMY!964-&;tVOR(@Fu=nb;vLAso&%`D zaMdhG;SDkysv22103O~9$l;AFj1=C;!bssA01s~mvd4GBR9RAIPk)PRMj zZ)D*>NO)^%FbE(ARUjk;b+j1*m>E6=LVBZ&49KdHLJ(QC08BL#ifW{QMOLiYFfgz&AgdODsRjvy!yD{Ncr>u1s8)cf1_{GdgYph&wIR4M zj4&INcc3oe1G@yWR;~e2%z%Ol7TyO?g<-MNfLzRg%!b6}0c7DIcPWMQPB zihu`I0CG?v3qxE2H3VM$vmpf)ve`&Mg=`2?P$5(^@WWlg$AD1nzz;VYB#a0uNN*Gz zCdjHGy-_sb0OX*Gga;J^7d&MiqvYnhgkHRtALX z1IWU02(wvsgV%zBrFw7+l$W|h$Mix#)atS=<`4|$BT!NGVlOU=!H9+&euCw7zDVG(g_}6$ham0GkmOlP=w)za5I#^U2*``5SWz*SWpZ>2qPI%3U>(uV!lC`p%iYm1F~=#BwvEM z6Uc2gWMQO{vvMS}k(w>#NM<7mSHM-HG%YINst+JHEh^!v85rSlDa=p_SM7i-Tm@I% zz<{J0Sr{HvA`DenlIm)>*$l|4k%e)nhDU=aLp9t=2UJ5~Ryv?si4aCI zqy`i_;@}nC3>!WPFo0)iMHy;9rKULe2oQ!1p8_DlVhpt))sPk492-6t@PkzggM@jY zr;c!97v{n)%#9>m2RGXR+3Y$-PN>-q$Yvu6Bb$vRjBIv2JiHqi;6;Hj1F|r@C=fvr zh8G2*4E6BvK7eWnEMN~XpcsM>Mlz%U?h*z@B$pryBN@^Fx6%PsHOy=WMjWbavM`b%jc_XupsI#hc>vi;WYtJkHZgKCGBBuvH+LN11MS}tU|PGu%54$igk) z-6#5BmpJgr^Irh%%MfOO2ph05Fc@$%@YzFzMWDilVAY__OJLQa46TejIt&cfpyQX= z6~2IuZ3FufNtg?}FdKGZChWpI3%)SGa#|}RA81nw$Vvw6!YpuM5e6jH9B^S#hBkz| zIgqSG66VA%%#0-5jxdA;yD%$~a0fy)19o9XB;ihkYIX)hz#<8AVHak@F3f}?j0nL7 zM8I|;0+t0XEW&^!%mEh`W#~dUkORqVBw^oF5G}DJOM6z09kkV zTR9o7x`7!~LO@kdK~fFr?15EJMG}TIw86sDkc1(vb+GVsBw@%H9$0t=k}#x=3>KaV zcgX={m&`&^4QV5TRnJD+NW2ra$A*Dn4!o9P;8pkoI%Y`(w3B}h!Vq2s@Hq=mVc1$Z z2401KD5{}r&Uh96fo3Pbs^`MZ7C@NI$}kshb^yX`kTA?_0fgBgVc3GZ0EF4B4D;Y- zgU zR2V#d0vhG#SOB&XEW8M$S^(S-0h`_MM+|fp*&>kH0^o)S*lf5kCnq0NH3K+c;i~xr zAg2L=_NQ(54;SVF8Di|fq44LUeBwVDMg?Am#Yk2*`~eMpfK@L>va;b%0Dr?ju<#O) zFf@Hbe8~lh`K55-03Nt7E5kClumcaomtfV);lcsDaA5`pkT4`c1n@S169g9n11rM{ zkOLvjEnY|nf(=;#H^c#92qRcEWZfeJZv!|?;Hn{JJ0Q$vWLOE$4G!!Z{$GS0?XU_i zd;nQ^HPZI44d88S{GbqA0~bEPg(SQdTvn+wGcfS;F8IO^tGw1Bg!zz!*CT}ak%TuO zN@P$~#{+H^2s0oFgQ_}+un4j+sH%eqi!yA4o6W$u;0psU)DR?LR=BVTvT9DauqeYO zgdt3DVPRxpHn^||vM?81Sd?Ki!VqS-urRVPJ6u=LBpaKMRy7Yd?x%}*m3=9lAL3i6SaD&d&{owEd zbc?Md=>CRXaA5~z;oWfI24vwqaNz^U!h1m$fa+6*`j_=DL3cxd&E5yzUktibh6Q@5 zj3grq1H*o}a0{~V0k|Qu&^s2SKn^?z7v@D4J_HxmMHW8H2y!7e4=)45hXC;1K43$R zz*T=hR(+I_QJsN-CzXML@qohz#t$FL8=uP7)~GwGko~}AEa7AnBgSIXoghK-7yFFKY(si0GoXZNmw2sd>ZaR#s~bM z>q-8D-F=2pON)WQA9P9T1CRsje}D}+%c#Z3z~CRqz`*z*;luy`1rXtL2-OEb?gpzC zW;lyc5Ch`_rVorCoI!>NGhAd;WE5aX<4y;~=Q{?5hX1mlXt;zd z{0}aC8A-SSq52B4FhccJMny(Ofi!NObOr{8cc8m{!De4W7XAkpzK$e(0HOK@vM@sR zO^`5S8aV1fE;#^k_bp^$gzDQ!!boP{K^8`+zRRe{A;6HP0typ_Hw+905VP+xDsl=i zq^X014G_ZjkX8SItGTwEy(+Byv2 zlW!OyC*M3_G-hC6NMT@L@Z~T32Pz7rLCNPSyozSzXZ-gOvW}XS;Tb&H`|=wiR6j># zsTbfZ1zL42%y=hMN5dVfI@j;RguecW~hbek9fJk%W;{e}D@!@V^7Q1bp7(M+P8t{=tP6k%j-mg&F0LR5LJv8f~C3QA8GI zWCAG%xtkH&;erb*A`5fFg&F0LRP(@v6_JH`;X#Fx zPWa%$DCvYBEX-+Q%D~9?;oV36kDw4_U=V-{DW2qA>|8NkBQ zj0%hlU|~?7#E5~P;oV36haj^V8HAa*xFDzgfeuA2gq@fv!oL3o;>5bI*4jk1~G&%Ka#LG6Bi?+fEF)LdV)OTy8@VM34|~|lCUHb zY{ajT&+y+xdGOh9TnthOVL2pWX}B;WpYc1WY9cvuq<4-knQAP$Ogs>cvurgd&0il|KK?Na(A$Yxt1gptj*X5!LeV9)~HizPSV zEra|9Q0%ZWfP}div_O?E--JIG`9FYK1*{AqMD7t z7Ot8>9u-GETd02YR*zJO58!C((p%^=qRbGI;97^0eiFX0W; z-3$y4aMcZR4KR0$fQ2EdC-5b_fx4T4!4a;SK_0GJ6f6u;?ZA(u+6k_@0il|K0VE7j zeF0guGm{Z0yg{cg$xZn4Uk)7J!VE5OVFhGiSGX`EvalOmSP@y+9WLyMEbIXnPDB>= pgbOpsH6UE#1s7I87WRey7(aN$H`VE`?JR*e7v diff --git a/core/rexcode/isa/arm32/tables/arm32.encode_runs.bin b/core/rexcode/isa/arm32/tables/arm32.encode_runs.bin index 034e3b1c2c40a613d7e8e91d9bcb8c89f6ac47ad..e6e37e92baf09a83674a32c44731de01b150109b 100644 GIT binary patch delta 70 zcmZor-JrUGh24^cfq}t_iGcw`+c7aPFfuSO*h6UtCI$v31_lNvDBl@MyMV+u^RgFn F0|4h31(E;& delta 22 dcmdm>+Mv3Dg`Jawfq}t}iGhJ*vn_iuHvly-1Oxy8 diff --git a/core/rexcode/isa/arm32/tables/arm32.entries.bin b/core/rexcode/isa/arm32/tables/arm32.entries.bin index ace3f85b1b5bc3ad6efce3aef392b0c8e1e78f20..3472ceae27d75d13f51364c497cb810ba46fddf2 100644 GIT binary patch literal 38640 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 literal 38640 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 diff --git a/core/rexcode/isa/arm32/tables/arm32.form_idx.bin b/core/rexcode/isa/arm32/tables/arm32.form_idx.bin index bb502b595f95ff3c90474177e78e431932185853..216a4ef34e48fa596868642978711cf70b5f082b 100644 GIT binary patch delta 112 zcmZ1=wLoe^5+gGk1J~qK#!zMk29Ajrg(qKNJiyGvz%h9;lPj|%gZSjzOvd7D3@i*x z3>*xM3=Ck*0HHUlGH+#>Y{1UL$T(S$U3Bvw_8E-q%nZy7j0}vMXLD9E^Dr?mfjA6| H3``6F+EWsJ delta 120 zcmZ1=wLoe^5+gGg1KZ?O#!yC%i5EpDUtm1I%)!7kc`}nLvp9p~