@@ -1479,11 +1479,60 @@ object (self)
14791479 (tags, args)
14801480
14811481 | LoadMultipleIncrementBefore (wback , c , base , rl , _ ) ->
1482- let reglhs_rl = rl#to_multiple_variable floc in
1482+ let lhsvars_rl = rl#to_multiple_variable floc in
14831483 let basereg = base#get_register in
14841484 let baselhs_r = base#to_variable floc in
14851485 let baserhs_r = base#to_expr floc in
14861486 let regcount = rl#get_register_count in
1487+ let (memrhss_r, rmemrhss_r, cmemrhss_r, _) =
1488+ List. fold_left
1489+ (fun (mems , rmems , cmems , off ) _lhsvar ->
1490+ let memop = arm_reg_deref ~with_offset: off basereg RD in
1491+ let memrhs_r = memop#to_expr floc in
1492+ let rmemrhs_r = TR. tmap rewrite_expr memrhs_r in
1493+ let cmemrhs_r =
1494+ TR. tbind (floc#convert_xpr_to_c_expr ~size: (Some 4 )) rmemrhs_r in
1495+ (mems @ [memrhs_r],
1496+ rmems @ [rmemrhs_r],
1497+ cmems @ [cmemrhs_r],
1498+ off + 4 )) ([] , [] , [] , 4 ) lhsvars_rl in
1499+ let xaddrs_r =
1500+ List. init
1501+ rl#get_register_count
1502+ (fun i ->
1503+ let xaddr_r =
1504+ TR. tmap
1505+ (fun baserhs ->
1506+ XOp (XPlus , [baserhs; int_constant_expr (i + 4 )]))
1507+ baserhs_r in
1508+ TR. tmap rewrite_expr xaddr_r) in
1509+ let cxaddrs_r =
1510+ List. map (fun xaddr_r ->
1511+ TR. tbind (floc#convert_xpr_to_c_expr ~size: (Some 4 )) xaddr_r)
1512+ xaddrs_r in
1513+ let rdefs = List. map get_rdef_r (baserhs_r :: memrhss_r) in
1514+ let uses = List. map get_def_use_high_r (baselhs_r :: lhsvars_rl) in
1515+ let useshigh = List. map get_def_use_high_r (baselhs_r :: lhsvars_rl) in
1516+ let vars_r = baselhs_r :: lhsvars_rl in
1517+ let xprs_r = baserhs_r :: (memrhss_r @ rmemrhss_r @ xaddrs_r) in
1518+ let cxprs_r = cmemrhss_r @ cxaddrs_r in
1519+ let (tagstring, args) =
1520+ mk_instrx_data_r
1521+ ~vars_r ~xprs_r ~cxprs_r ~rdefs ~uses ~useshigh () in
1522+ let (tags, args) = add_optional_instr_condition tagstring args c in
1523+ let tags = add_optional_subsumption tags in
1524+ let (tags, args) =
1525+ if wback then
1526+ let inc = 4 * regcount in
1527+ let xinc = int_constant_expr inc in
1528+ let baseresult_r =
1529+ TR. tmap (fun baserhs -> XOp (XPlus , [baserhs; xinc])) baserhs_r in
1530+ let rbaseresult_r = TR. tmap rewrite_expr baseresult_r in
1531+ add_base_update tags args baselhs_r inc rbaseresult_r
1532+ else
1533+ (tags, args) in
1534+ (tags, args)
1535+ (*
14871536 let (memreads_r, _) =
14881537 List.fold_left
14891538 (fun (acc, off) _reglhs ->
@@ -1513,6 +1562,7 @@ object (self)
15131562 () in
15141563 let (tags, args) = add_optional_instr_condition tagstring args c in
15151564 (tags, args)
1565+ *)
15161566
15171567 | LoadRegister _ when instr#is_aggregate_anchor ->
15181568 let iaddr = instr#get_address in
0 commit comments