Skip to content

Commit 93fea36

Browse files
committed
CHB:ARM: add more support for shifted-index operands
1 parent fe4a014 commit 93fea36

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

CodeHawk/CHB/bchlibarm32/bCHARMOperand.ml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -357,9 +357,21 @@ object (self:'a)
357357
let xoffset = int_constant_expr indexoffset in
358358
(match srt with
359359
| ARMImmSRT (_, 0)-> Ok (XOp (XPlus, [XVar indexvar; xoffset]))
360+
| ARMImmSRT (SRType_LSL, 1) ->
361+
let shifted = XOp (XMult, [XVar indexvar; int_constant_expr 2]) in
362+
Ok (XOp (XPlus, [shifted; xoffset]))
360363
| ARMImmSRT (SRType_LSL, 2) ->
361364
let shifted = XOp (XMult, [XVar indexvar; int_constant_expr 4]) in
362365
Ok (XOp (XPlus, [shifted; xoffset]))
366+
| ARMImmSRT (SRType_LSL, 3) ->
367+
let shifted = XOp (XMult, [XVar indexvar; int_constant_expr 8]) in
368+
Ok (XOp (XPlus, [shifted; xoffset]))
369+
| ARMImmSRT (SRType_LSL, 4) ->
370+
let shifted = XOp (XMult, [XVar indexvar; int_constant_expr 16]) in
371+
Ok (XOp (XPlus, [shifted; xoffset]))
372+
| ARMImmSRT (SRType_LSL, 5) ->
373+
let shifted = XOp (XMult, [XVar indexvar; int_constant_expr 32]) in
374+
Ok (XOp (XPlus, [shifted; xoffset]))
363375
| ARMImmSRT (SRType_ASR, 1) ->
364376
let shifted = XOp (XDiv, [XVar indexvar; int_constant_expr 2]) in
365377
Ok (XOp (XPlus, [shifted; xoffset]))
@@ -369,6 +381,9 @@ object (self:'a)
369381
| ARMImmSRT (SRType_ASR, 3) ->
370382
let shifted = XOp (XDiv, [XVar indexvar; int_constant_expr 8]) in
371383
Ok (XOp (XPlus, [shifted; xoffset]))
384+
| ARMImmSRT (SRType_ASR, 4) ->
385+
let shifted = XOp (XDiv, [XVar indexvar; int_constant_expr 16]) in
386+
Ok (XOp (XPlus, [shifted; xoffset]))
372387
| ARMRegSRT (SRType_LSL, srtreg) ->
373388
let shiftvar = env#mk_arm_register_variable srtreg in
374389
let shifted = XOp (XLsl, [XVar indexvar; XVar shiftvar]) in

CodeHawk/CHB/bchlibarm32/bCHFnARMDictionary.ml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2377,16 +2377,16 @@ object (self)
23772377
(tags, args)
23782378

23792379
| SignedBitFieldExtract (c, rd, rn) ->
2380-
let lhs_r = rd#to_variable floc in
2381-
let rhs_r = rn#to_expr floc in
2382-
let rrhs_r = TR.tmap rewrite_expr rhs_r in
2383-
let rdefs = [get_rdef_r rhs_r] in
2384-
let uses = [get_def_use_r lhs_r] in
2385-
let useshigh = [get_def_use_high_r lhs_r] in
2380+
let vrd_r = rd#to_variable floc in
2381+
let xrn_r = rn#to_expr floc in
2382+
let xxrn_r = TR.tmap rewrite_expr xrn_r in
2383+
let rdefs = [get_rdef_r xrn_r] in
2384+
let uses = [get_def_use_r vrd_r] in
2385+
let useshigh = [get_def_use_high_r vrd_r] in
23862386
let (tagstring, args) =
23872387
mk_instrx_data_r
2388-
~vars_r:[lhs_r]
2389-
~xprs_r:[rhs_r; rrhs_r]
2388+
~vars_r:[vrd_r]
2389+
~xprs_r:[xrn_r; xxrn_r]
23902390
~rdefs
23912391
~uses
23922392
~useshigh

0 commit comments

Comments
 (0)