@@ -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
0 commit comments