From de630a12452d76ac3ab9fd88482925d9428d8d5c Mon Sep 17 00:00:00 2001 From: acqn Date: Sun, 13 Sep 2020 09:15:07 +0800 Subject: [PATCH] Fixed quick hack for known registers after calling certain runtime functions, and new quick hack for tosshrax. --- src/cc65/codeent.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/cc65/codeent.c b/src/cc65/codeent.c index 195f7199f..3de694829 100644 --- a/src/cc65/codeent.c +++ b/src/cc65/codeent.c @@ -1418,10 +1418,10 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegX = (In->RegX ^ 0xFF); } } else if (strcmp (E->Arg, "tosandax") == 0) { - if (In->RegA == 0) { + if (RegValIsKnown (In->RegA) && In->RegA == 0) { Out->RegA = 0; } - if (In->RegX == 0) { + if (RegValIsKnown (In->RegX) && In->RegX == 0) { Out->RegX = 0; } } else if (strcmp (E->Arg, "tosaslax") == 0) { @@ -1430,16 +1430,20 @@ void CE_GenRegInfo (CodeEntry* E, RegContents* InputRegs) Out->RegA = 0; } } else if (strcmp (E->Arg, "tosorax") == 0) { - if (In->RegA == 0xFF) { + if (RegValIsKnown (In->RegA) && In->RegA == 0xFF) { Out->RegA = 0xFF; } - if (In->RegX == 0xFF) { + if (RegValIsKnown (In->RegX) && In->RegX == 0xFF) { Out->RegX = 0xFF; } } else if (strcmp (E->Arg, "tosshlax") == 0) { - if ((In->RegA & 0x0F) >= 8) { + if (RegValIsKnown (In->RegA) && (In->RegA & 0x0F) >= 8) { Out->RegA = 0; } + } else if (strcmp (E->Arg, "tosshrax") == 0) { + if (RegValIsKnown (In->RegA) && (In->RegA & 0x0F) >= 8) { + Out->RegX = 0; + } } else if (strcmp (E->Arg, "bcastax") == 0 || strcmp (E->Arg, "bnegax") == 0 || FindBoolCmpCond (E->Arg) != CMP_INV ||