Skip to content

Commit 78df483

Browse files
WalterBrightthewilsonator
authored andcommitted
refactor REGSIZE to untangle how it is used
1 parent dae771d commit 78df483

3 files changed

Lines changed: 10 additions & 10 deletions

File tree

compiler/src/dmd/backend/code.d

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,8 +112,6 @@ struct REGSAVE
112112
nothrow:
113113
@trusted
114114
void reset() { off = 0; top = 0; idx = 0; alignment = _tysize[TYnptr]/*REGSIZE*/; }
115-
void save(ref CodeBuilder cdb, reg_t reg, out uint pidx) { REGSAVE_save (this, cdb, reg, pidx); }
116-
void restore(ref CodeBuilder cdb, reg_t reg, uint idx) { REGSAVE_restore(this, cdb, reg, idx); }
117115
}
118116

119117
/************************************

compiler/src/dmd/backend/x86/cod1.d

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -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;

compiler/src/dmd/backend/x86/cod3.d

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,6 @@ void REGSAVE_save(ref REGSAVE regsave, ref CodeBuilder cdb, reg_t reg, out uint
227227
if (I64)
228228
code_orrex(cdb.last(), REX_W);
229229
}
230-
cgstate.reflocal = true;
231230
if (regsave.idx > regsave.top)
232231
regsave.top = regsave.idx; // keep high water mark
233232
}

0 commit comments

Comments
 (0)