@@ -362,7 +362,7 @@ uint gensaverestore(ref CGstate cg,regm_t regm,ref CodeBuilder cdbsave,ref CodeB
362362 uint idx;
363363 import dmd.backend.arm.cod3 : REGSAVE_save, REGSAVE_restore;
364364 REGSAVE_save(cg.regsave,cdbsave,i,idx);
365- cg.reflocal = true ; // not sure why this is not on the x86 branch
365+ cg.reflocal = true ; // registers saved into local stackframe
366366 REGSAVE_restore(cg.regsave,cdb,i,idx);
367367 restore[i] = cdb.finish();
368368 }
@@ -396,8 +396,9 @@ uint gensaverestore(ref CGstate cg,regm_t regm,ref CodeBuilder cdbsave,ref CodeB
396396 else if (i >= XMM0 || I64 || cg.funcarg.size)
397397 {
398398 uint idx;
399- cg.regsave.save(cdbsave, i, idx);
400- cg.regsave.restore(cdb, i, idx);
399+ REGSAVE_save(cg.regsave, cdbsave, i, idx);
400+ cg.reflocal = true ; // registers saved into local stackframe
401+ REGSAVE_restore(cg.regsave, cdb, i, idx);
401402 }
402403 else
403404 {
@@ -3611,8 +3612,9 @@ void cdfunc(ref CGstate cg, ref CodeBuilder cdb, elem* e, ref regm_t pretregs)
36113612 if (mi & tosave)
36123613 {
36133614 uint idx;
3614- cg.regsave.save(cdbsave, j, idx);
3615- cg.regsave.restore(cdbrestore, j, idx);
3615+ REGSAVE_save(cg.regsave, cdbsave, j, idx);
3616+ cg.reflocal = true ; // registers saved into local stackframe
3617+ REGSAVE_restore(cg.regsave, cdbrestore, j, idx);
36163618 saved |= mi;
36173619 keepmsk &= ~ mi; // don't need to keep these for rest of params
36183620 tosave &= ~ mi;
@@ -3679,8 +3681,9 @@ void cdfunc(ref CGstate cg, ref CodeBuilder cdb, elem* e, ref regm_t pretregs)
36793681 if (mi & tosave)
36803682 {
36813683 uint idx;
3682- cg.regsave.save(cdbsave, j, idx);
3683- cg.regsave.restore(cdbrestore, j, idx);
3684+ REGSAVE_save(cg.regsave, cdbsave, j, idx);
3685+ cg.reflocal = true ; // registers saved into local stackframe
3686+ REGSAVE_restore(cg.regsave, cdbrestore, j, idx);
36843687 saved |= mi;
36853688 keepmsk &= ~ mi; // don't need to keep these for rest of params
36863689 tosave &= ~ mi;
0 commit comments