Skip to content

Commit a1ebec4

Browse files
committed
CHB:ARM:disassembly for STCL/STC2/LDC2
1 parent fe6bdcb commit a1ebec4

File tree

3 files changed

+44
-3
lines changed

3 files changed

+44
-3
lines changed

CodeHawk/CHB/bchlibarm32/bCHDisassembleARMInstruction.ml

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1836,6 +1836,23 @@ let parse_misc_6_type (instr: doubleword_int) (cond: int) =
18361836
(* FSTMIAX<c> <Rn>, <list> *)
18371837
FStoreMultipleIncrementAfter (false, c, rn RD, rl RD, mem WR)
18381838

1839+
(* <cc><6>01D10<rn><cd><cp><-imm8-> *) (* STCL - A1 *)
1840+
| (1, 2, 1) ->
1841+
let isindex = (bv 24) = 1 in
1842+
let isadd = (bv 23) = 1 in
1843+
let iswback = (bv 21) = 1 in
1844+
let islong = (bv 22) = 1 in
1845+
let crd = b 15 12 in
1846+
let coproc = b 11 8 in
1847+
let imm32 = 4 * (b 7 0) in
1848+
let offset = ARMImmOffset imm32 in
1849+
let rnreg = get_arm_reg (b 19 16) in
1850+
let mem =
1851+
mk_arm_offset_address_op
1852+
~align:4 rnreg offset ~isadd ~isindex ~iswback in
1853+
(* STC{L}<c> <coproc>, <CRd>, [<Rn>, #+/-<imm>]{!} *)
1854+
StoreCoprocessor (islong, false, c, coproc, crd, mem WR, None)
1855+
18391856
(* <cc><6>01D00<rn><vd><11><-imm8-> *) (* VSTM - A1-wb *)
18401857
| (1, 2, 11) when (bv 0) = 0 ->
18411858
let d = prefix_bit (bv 22) (b 15 12) in
@@ -4750,6 +4767,27 @@ let parse_cond15 (instr: doubleword_int) (iaddr: doubleword_int) =
47504767
(* BLX <label> *)
47514768
BranchLinkExchange(cc, tgtop)
47524769

4770+
(* <15>110PUDW0<rn><cd><cp><-imm8-> *)(* STC2{L}<c> <coproc>,<CRd>,[<Rn>, #+/-imm] *)
4771+
| (25, (2 | 3), 1, 0, 0) ->
4772+
let isindex = (bv 24) = 1 in
4773+
let isadd = (bv 23) = 1 in
4774+
let iswback = (bv 21) = 1 in
4775+
let islong = (bv 22) = 1 in
4776+
let crd = b 15 12 in
4777+
let coproc = b 11 8 in
4778+
let imm32 = 4 * (b 7 0) in
4779+
let offset = ARMImmOffset imm32 in
4780+
let rnreg = get_arm_reg (b 19 16) in
4781+
let mem =
4782+
mk_arm_offset_address_op
4783+
~align:4 rnreg offset ~isadd ~isindex ~iswback in
4784+
if (bv 20) = 0 then
4785+
(* STC{L}<c> <coproc>, <CRd>, [<Rn>, #+/-<imm>]{!} *)
4786+
StoreCoprocessor (islong, true, cc, coproc, crd, mem WR, None)
4787+
else
4788+
(* LDC{L}<c> <coproc>, <CRd>, [<Rn>, #+-<imm>}{!} *)
4789+
LoadCoprocessor (islong, true, cc, coproc, crd, mem RD, None)
4790+
47534791
| (x, y, z, q, v) ->
47544792
NotRecognized (
47554793
"arm:cond15:"

CodeHawk/CHB/bchlibarm32/bCHDisassembleThumbInstruction.ml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -828,10 +828,10 @@ let parse_thumb32_29_2
828828
~align:4 rnreg offset ~isadd ~isindex ~iswback in
829829
if (bv 20) = 0 then
830830
(* STC{L}<c> <coproc>, <CRd>, [<Rn>, #+/-<imm>]{!} *)
831-
StoreCoprocessor (islong, false, cc, coproc, crd, mem WR, None)
831+
StoreCoprocessor (islong, true, cc, coproc, crd, mem WR, None)
832832
else
833833
(* LDC{L}<c> <coproc>, <CRd>, [<Rn>, #+-<imm>}{!} *)
834-
LoadCoprocessor (islong, false, cc, coproc, crd, mem RD, None)
834+
LoadCoprocessor (islong, true, cc, coproc, crd, mem RD, None)
835835
else
836836
let selector = b 24 23 in
837837
let isz = b 21 20 in

CodeHawk/CHT/CHB_tests/bchlibarm32_tests/txbchlibarm32/bCHDisassembleARMInstructionTest.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ open BCHDisassembleARMInstruction
4848

4949

5050
let testname = "bCHDisassembleARMInstructionTest"
51-
let lastupdated = "2024-10-31"
51+
let lastupdated = "2025-06-09"
5252

5353

5454
let make_dw (s: string) = TR.tget_ok (string_to_doubleword s)
@@ -78,6 +78,7 @@ let arm_basic () =
7878
("CMP", "010050e3", "CMP R0, #1");
7979
("CMPNE", "00005111", "CMPNE R1, R0");
8080
("DMB", "5bf07ff5", "DMB ISH");
81+
("LDC2", "0181b0fc", "LDC2 p1, c8, [R0],#4");
8182
("LDCL", "02a1f0ec", "LDCL p1, c10, [R0],#8");
8283
("LDM", "1c5091e8", "LDM R1, {R2,R3,R4,R12,LR}");
8384
("LDR", "001094e5", "LDR R1, [R4]");
@@ -125,6 +126,8 @@ let arm_basic () =
125126
("SMULL", "9310c7e0", "SMULL R1, R7, R3, R0");
126127
("SMULWB", "a90523e1", "SMULWB R3, R9, R5");
127128
("SMULWT", "e00c23e1", "SMULWT R3, R0, R12");
129+
("STC2", "0181a0fc", "STC2 p1, c8, [R0],#4");
130+
("STCL", "0201e0ec", "STCL p1, c0, [R0],#8");
128131
("STM", "1a0080e8", "STM R0, {R1,R3,R4}");
129132
("STMDA", "030003e8", "STMDA R3, {R0,R1}");
130133
("STMIB", "21078de9", "STMIB SP, {R0,R5,R8,R9,R10}");

0 commit comments

Comments
 (0)