From 36d6fc676080276e6ed1d09f7532ecea3377dc6a Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sat, 6 Jan 2024 20:00:55 +0100 Subject: [PATCH] Fix placement of proxy variables for unused parameters --- oscar64/GlobalAnalyzer.cpp | 19 +++++++++++++------ oscar64/GlobalOptimizer.cpp | 2 ++ 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/oscar64/GlobalAnalyzer.cpp b/oscar64/GlobalAnalyzer.cpp index a627ce8..7eb7755 100644 --- a/oscar64/GlobalAnalyzer.cpp +++ b/oscar64/GlobalAnalyzer.cpp @@ -426,13 +426,16 @@ void GlobalAnalyzer::CheckFastcall(Declaration* procDec, bool head) Declaration* dec = procDec->mBase->mParams; while (dec) { - // Check for parameter crossing boundary - if (cnparams < numfpzero && cnparams + dec->mBase->mSize > numfpzero) + if (!(dec->mFlags & DTF_FPARAM_UNUSED)) { - npalign = numfpzero - nparams; - cnparams += npalign; + // Check for parameter crossing boundary + if (cnparams < numfpzero && cnparams + dec->mBase->mSize > numfpzero) + { + npalign = numfpzero - nparams; + cnparams += npalign; + } + cnparams += dec->mBase->mSize; } - cnparams += dec->mBase->mSize; dec = dec->mNext; } @@ -442,7 +445,11 @@ void GlobalAnalyzer::CheckFastcall(Declaration* procDec, bool head) dec = procDec->mBase->mParams; 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; } diff --git a/oscar64/GlobalOptimizer.cpp b/oscar64/GlobalOptimizer.cpp index a3bad8b..0dbeeee 100644 --- a/oscar64/GlobalOptimizer.cpp +++ b/oscar64/GlobalOptimizer.cpp @@ -328,6 +328,8 @@ bool GlobalOptimizer::Optimize(void) vi -= pdec->mSize; pdec->mFlags |= DTF_FPARAM_UNUSED; + pdec->mVarIndex = func->mNumVars++; + changed = true; } }