Skip to content

Commit 9cf6d09

Browse files
authored
Merge branch 'main' into ciimprove
2 parents c27c0be + 3f21e73 commit 9cf6d09

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

arm/proofs/decode.ml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,14 @@ let decode = new_definition `!w:int32. decode w =
337337
| [0b00:2; 0b1111001:7; is_ld; 0:1; imm9:9; 0b00:2; Rn:5; Rt:5] ->
338338
SOME (arm_ldst_q is_ld Rt (XREG_SP Rn) (Immediate_Offset (word_sx imm9)))
339339

340+
// LDUR/STUR, only sizes 64 and 32
341+
| [0b1:1; x; 0b1110000:7; is_ld; 0:1; imm9:9; 0b00:2; Rn:5; Rt:5] ->
342+
SOME (arm_ldst is_ld x Rt (XREG_SP Rn) (Immediate_Offset (word_sx imm9)))
343+
344+
// LDURB/STURB
345+
| [0b001110000:9; is_ld; 0:1; imm9:9; 0:2; Rn:5; Rt:5] ->
346+
SOME (arm_ldstb is_ld Rt (XREG_SP Rn) (Immediate_Offset (word_sx imm9)))
347+
340348
// LD1/ST1 (multiple structures), 1 register,
341349
// Post-immediate offset and post-register offset, and no offset.
342350
//

arm/proofs/simulator.ml

Lines changed: 26 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,31 @@ let cosimulate_ldstrb() =
421421
else
422422
[add_Xn_SP_imm rn stackoff; movz_Xn_imm rm regoff; code; sub_Xn_SP_Xn rn];;
423423

424+
(*** This covers LDURB/STURB, and LDUR/STUR for 64-bit and 32-bit values ***)
425+
let cosimulate_ldstu() =
426+
let is_not_b = Random.int 2 in
427+
let x = if is_not_b = 1 then Random.int 2 else 0 in
428+
let isld = Random.int 2
429+
and rn = Random.int 32 in
430+
let rt = (rn + 1 + Random.int 31) mod 32 in
431+
let stackoff =
432+
if rn = 31 then Random.int 15 * 16
433+
else Random.int 249 in
434+
(* May load/store at most 8 bytes. 256 - 8 + 1 = 249 *)
435+
let off = Random.int (249-stackoff) in
436+
let code =
437+
pow2 31 */ num is_not_b +/
438+
pow2 30 */ num x +/
439+
pow2 23 */ num 0b1110000 +/
440+
pow2 22 */ num isld +/
441+
pow2 12 */ num off +/
442+
pow2 5 */ num rn +/
443+
num rt in
444+
if rn = 31 then
445+
[add_Xn_SP_imm 31 stackoff; code; sub_Xn_SP_imm 31 stackoff]
446+
else
447+
[add_Xn_SP_imm rn stackoff; code; sub_Xn_SP_Xn rn];;
448+
424449
(*** This covers LD1R ***)
425450

426451
let cosimulate_ld1r() =
@@ -444,7 +469,7 @@ let cosimulate_ld1r() =
444469
[add_Xn_SP_imm rn stackoff; code; sub_Xn_SP_Xn rn];;
445470

446471
let memclasses =
447-
[cosimulate_ldst_12; cosimulate_ldst_1_2reg; cosimulate_ldstrb; cosimulate_ld1r];;
472+
[cosimulate_ldst_12; cosimulate_ldst_1_2reg; cosimulate_ldstrb; cosimulate_ld1r; cosimulate_ldstu];;
448473

449474
let run_random_memopsimulation() =
450475
let icodes = el (Random.int (length memclasses)) memclasses () in

0 commit comments

Comments
 (0)