mirror of
https://github.com/dlang/dmd.git
synced 2025-04-26 05:00:16 +03:00
another pass over movParams() (#20949)
This commit is contained in:
parent
eb95108dfb
commit
ddc7eaf570
1 changed files with 1 additions and 21 deletions
|
@ -1946,9 +1946,6 @@ private void movParams(ref CodeBuilder cdb, elem* e, uint stackalign, uint funca
|
||||||
assert(e && e.Eoper != OPparam);
|
assert(e && e.Eoper != OPparam);
|
||||||
|
|
||||||
tym_t tym = tybasic(e.Ety);
|
tym_t tym = tybasic(e.Ety);
|
||||||
if (tyfloating(tym))
|
|
||||||
objmod.fltused();
|
|
||||||
|
|
||||||
targ_size_t szb = paramsize(e, tyf); // size before alignment
|
targ_size_t szb = paramsize(e, tyf); // size before alignment
|
||||||
targ_size_t sz = _align(stackalign, szb); // size after alignment
|
targ_size_t sz = _align(stackalign, szb); // size after alignment
|
||||||
assert((sz & (stackalign - 1)) == 0); // ensure that alignment worked
|
assert((sz & (stackalign - 1)) == 0); // ensure that alignment worked
|
||||||
|
@ -1966,24 +1963,7 @@ private void movParams(ref CodeBuilder cdb, elem* e, uint stackalign, uint funca
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
regm_t retregs = cgstate.allregs;
|
regm_t retregs = tyfloating(tym) ? INSTR.FLOATREGS : cgstate.allregs;
|
||||||
if (tyvector(tym) ||
|
|
||||||
config.fpxmmregs && tyxmmreg(tym) &&
|
|
||||||
// If not already in x87 register from function call return
|
|
||||||
!((e.Eoper == OPcall || e.Eoper == OPucall) && I32))
|
|
||||||
{
|
|
||||||
retregs = XMMREGS;
|
|
||||||
codelem(cgstate,cdb, e, retregs, false);
|
|
||||||
const op = xmmstore(tym);
|
|
||||||
const r = findreg(retregs);
|
|
||||||
cdb.genc1(op, modregxrm(2, r - XMM0, BPRM), FL.funcarg, funcargtos - sz); // MOV funcarg[EBP],r
|
|
||||||
checkSetVex(cdb.last(),tym);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else if (tyfloating(tym))
|
|
||||||
{
|
|
||||||
assert(0);
|
|
||||||
}
|
|
||||||
scodelem(cgstate,cdb, e, retregs, 0, true);
|
scodelem(cgstate,cdb, e, retregs, 0, true);
|
||||||
if (sz <= REGSIZE)
|
if (sz <= REGSIZE)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue