From 5a0f736d414b83087fe38e8ef8dad5b419d472f0 Mon Sep 17 00:00:00 2001 From: drmortalwombat <90205530+drmortalwombat@users.noreply.github.com> Date: Tue, 5 Nov 2024 08:17:18 +0100 Subject: [PATCH] Fix in block branch collides with fcall proxy generation --- oscar64/NativeCodeGenerator.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/oscar64/NativeCodeGenerator.cpp b/oscar64/NativeCodeGenerator.cpp index 37efdf2..23a3810 100644 --- a/oscar64/NativeCodeGenerator.cpp +++ b/oscar64/NativeCodeGenerator.cpp @@ -54607,8 +54607,13 @@ void NativeCodeGenerator::RegisterFunctionCall(NativeCodeBasicBlock* block, int i -= 2; } + if (i < at) { + // Check conflicting local branch + if (i > 0 && block->mIns[i - 1].mMode == ASMIM_RELATIVE && block->mIns[i - 1].mAddress > 0) + return; + FunctionCall* ncp = new FunctionCall(); ncp->mLinkerObject = lo; ncp->mOffset = block->mIns[at].mAddress; @@ -54676,6 +54681,10 @@ bool NativeCodeGenerator::MergeFunctionCall(NativeCodeBasicBlock* block, int at) if (i < at) { + // Check conflicting local branch + if (i > 0 && block->mIns[i - 1].mMode == ASMIM_RELATIVE && block->mIns[i - 1].mAddress > 0) + return false; + FunctionCall ncp; ncp.mLinkerObject = lo; ncp.mOffset = block->mIns[at].mAddress;