From a52c869099bffba7059aa88f1f9288cbae388967 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 31 Oct 2021 19:37:54 +0100 Subject: [PATCH] Avoid needles store to temps before function call --- oscar64/NativeCodeGenerator.cpp | 33 ++++++++++++++++++++------------- 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 7ebac58..6c0a41f 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -2024,20 +2024,20 @@ void NativeCodeInstruction::FilterRegUsage(NumberSet& requiredTemps, NumberSet& if (mType == ASMIT_JSR) { - for (int i = 0; i < 4; i++) - { - if (!providedTemps[BC_REG_ACCU + i]) - requiredTemps += BC_REG_ACCU + i; - providedTemps += BC_REG_ACCU + i; - if (!providedTemps[BC_REG_WORK + i]) - requiredTemps += BC_REG_WORK + i; - providedTemps += BC_REG_WORK + i; - if (!providedTemps[BC_REG_ADDR + i]) - requiredTemps += BC_REG_ADDR + i; - providedTemps += BC_REG_ADDR + i; - } - if (!(mFlags & NCIF_RUNTIME)) + if (mFlags & NCIF_RUNTIME) + { + for (int i = 0; i < 4; i++) + { + if (!providedTemps[BC_REG_ACCU + i]) + requiredTemps += BC_REG_ACCU + i; + if (!providedTemps[BC_REG_WORK + i]) + requiredTemps += BC_REG_WORK + i; + if (!providedTemps[BC_REG_ADDR + i]) + requiredTemps += BC_REG_ADDR + i; + } + } + else { if (mLinkerObject) { @@ -2052,6 +2052,13 @@ void NativeCodeInstruction::FilterRegUsage(NumberSet& requiredTemps, NumberSet& } } + for (int i = 0; i < 4; i++) + { + providedTemps += BC_REG_ACCU + i; + providedTemps += BC_REG_WORK + i; + providedTemps += BC_REG_ADDR + i; + } + providedTemps += CPU_REG_A; providedTemps += CPU_REG_X; providedTemps += CPU_REG_Y;