Fix placement of proxy variables for unused parameters

This commit is contained in:
drmortalwombat 2024-01-06 20:00:55 +01:00
parent 7ea4356361
commit 36d6fc6760
2 changed files with 15 additions and 6 deletions

View File

@ -426,13 +426,16 @@ void GlobalAnalyzer::CheckFastcall(Declaration* procDec, bool head)
Declaration* dec = procDec->mBase->mParams; Declaration* dec = procDec->mBase->mParams;
while (dec) while (dec)
{ {
// Check for parameter crossing boundary if (!(dec->mFlags & DTF_FPARAM_UNUSED))
if (cnparams < numfpzero && cnparams + dec->mBase->mSize > numfpzero)
{ {
npalign = numfpzero - nparams; // Check for parameter crossing boundary
cnparams += npalign; if (cnparams < numfpzero && cnparams + dec->mBase->mSize > numfpzero)
{
npalign = numfpzero - nparams;
cnparams += npalign;
}
cnparams += dec->mBase->mSize;
} }
cnparams += dec->mBase->mSize;
dec = dec->mNext; dec = dec->mNext;
} }
@ -442,7 +445,11 @@ void GlobalAnalyzer::CheckFastcall(Declaration* procDec, bool head)
dec = procDec->mBase->mParams; dec = procDec->mBase->mParams;
while (dec) while (dec)
{ {
if (dec->mForwardParam && (dec->mForwardCall->mBase->mFlags & DTF_FASTCALL) && !(dec->mForwardCall->mFlags & DTF_INLINE)) if (dec->mFlags & DTF_FPARAM_UNUSED)
{
}
else if (dec->mForwardParam && (dec->mForwardCall->mBase->mFlags & DTF_FASTCALL) && !(dec->mForwardCall->mFlags & DTF_INLINE))
{ {
dec->mVarIndex = dec->mForwardParam->mVarIndex; dec->mVarIndex = dec->mForwardParam->mVarIndex;
} }

View File

@ -328,6 +328,8 @@ bool GlobalOptimizer::Optimize(void)
vi -= pdec->mSize; vi -= pdec->mSize;
pdec->mFlags |= DTF_FPARAM_UNUSED; pdec->mFlags |= DTF_FPARAM_UNUSED;
pdec->mVarIndex = func->mNumVars++;
changed = true; changed = true;
} }
} }