From ab06d85a91c9812e3974f7f1cbc8c25edf151211 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Sun, 19 May 2024 20:48:14 +0200 Subject: [PATCH] Add global inline assembler optimization for static const to immediate propagation --- oscar64/Parser.cpp | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/oscar64/Parser.cpp b/oscar64/Parser.cpp index 8ce2bf2..bebc822 100644 --- a/oscar64/Parser.cpp +++ b/oscar64/Parser.cpp @@ -10944,6 +10944,20 @@ Expression* Parser::ParseAssembler(void) { if (HasAsmInstructionMode(ilast->mAsmInsType, ASMIM_RELATIVE)) ilast->mAsmInsMode = ASMIM_RELATIVE; + else if ( + HasAsmInstructionMode(ilast->mAsmInsType, ASMIM_IMMEDIATE) && + ilast->mLeft && + ilast->mLeft->mType == EX_CONSTANT && + ilast->mLeft->mDecValue->mType == DT_VARIABLE && + (ilast->mLeft->mDecValue->mFlags & DTF_CONST) && + (ilast->mLeft->mDecValue->mFlags & DTF_STATIC) && + ilast->mLeft->mDecType->IsIntegerType() && + ilast->mLeft->mDecValue->mValue && + ilast->mLeft->mDecValue->mValue->mType == EX_CONSTANT) + { + ilast->mAsmInsMode = ASMIM_IMMEDIATE; + ilast->mLeft = ilast->mLeft->mDecValue->mValue; + } else ilast->mAsmInsMode = ASMIM_ABSOLUTE; }