From 044d5d5f03a403fd67528aaa239525f0714aa866 Mon Sep 17 00:00:00 2001 From: Brian Fiete Date: Fri, 26 Feb 2021 07:35:38 -0800 Subject: [PATCH] Fixed '*vreg' divisor legalization issue --- IDEHelper/Backend/BeMCContext.cpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/IDEHelper/Backend/BeMCContext.cpp b/IDEHelper/Backend/BeMCContext.cpp index 2f79f075..40485635 100644 --- a/IDEHelper/Backend/BeMCContext.cpp +++ b/IDEHelper/Backend/BeMCContext.cpp @@ -9878,11 +9878,19 @@ bool BeMCContext::DoLegalization() auto arg0Type = GetType(arg0); if (arg0Type->IsInt()) { - if (arg1.mKind == BeMCOperandKind_NativeReg) + auto checkArg1 = arg1; + if (checkArg1.mKind == BeMCOperandKind_VRegLoad) + { + // Handle '*vreg' case + checkArg1.mKind = BeMCOperandKind_VReg; + checkArg1 = GetFixedOperand(checkArg1); + } + + if (checkArg1.mKind == BeMCOperandKind_NativeReg) { // We can't allow division by RDX because we need RAX:RDX for the dividend - auto divisorReg = GetFullRegister(arg1.mReg); - if ((arg1.IsNativeReg()) && + auto divisorReg = GetFullRegister(checkArg1.mReg); + if ((checkArg1.IsNativeReg()) && ((divisorReg == X64Reg_RDX) || (divisorReg == X64Reg_RAX))) { BF_ASSERT(inst->mArg1.IsVRegAny()); @@ -15842,7 +15850,7 @@ void BeMCContext::Generate(BeFunction* function) mDbgPreferredRegs[32] = X64Reg_R8;*/ //mDbgPreferredRegs[8] = X64Reg_RAX; - //mDebugging = (function->mName == "?Zoips@TestProgram@BeefTest@bf@@SAXXZ"); + //mDebugging = (function->mName == "??Kint2@bf@@SA?A01@01@0@Z"); // || (function->mName == "?MethodA@TestProgram@BeefTest@bf@@CAXXZ"); // || (function->mName == "?Hey@Blurg@bf@@SAXXZ") // ;