1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-09 03:52:19 +02:00

Fixed division issue with RDX preservation

This commit is contained in:
Brian Fiete 2020-03-20 09:24:38 -07:00
parent fc57557fd9
commit 69cb6d0208
3 changed files with 9 additions and 1 deletions

View file

@ -5578,6 +5578,9 @@ void BeMCContext::DisableRegister(const BeMCOperand& operand, X64CPURegister reg
case X64Reg_RAX: case X64Reg_RAX:
vregInfo->mDisableRAX = true; vregInfo->mDisableRAX = true;
break; break;
case X64Reg_RDX:
vregInfo->mDisableRDX = true;
break;
case X64Reg_SIL: case X64Reg_SIL:
vregInfo->mDisableEx = true; vregInfo->mDisableEx = true;
break; break;
@ -9228,6 +9231,8 @@ bool BeMCContext::DoLegalization()
{ {
// This is to avoid overlap with PreserveRAX // This is to avoid overlap with PreserveRAX
DisableRegister(inst->mArg0, X64Reg_RAX); DisableRegister(inst->mArg0, X64Reg_RAX);
if (preserveRDX)
DisableRegister(inst->mArg0, X64Reg_RDX);
} }
} }
AllocInst(BeMCInstKind_Mov, inst->mArg0, mcRemaindier, instIdx++ + 1); AllocInst(BeMCInstKind_Mov, inst->mArg0, mcRemaindier, instIdx++ + 1);
@ -14709,7 +14714,7 @@ void BeMCContext::Generate(BeFunction* function)
mDbgPreferredRegs[32] = X64Reg_R8;*/ mDbgPreferredRegs[32] = X64Reg_R8;*/
//mDbgPreferredRegs[8] = X64Reg_RAX; //mDbgPreferredRegs[8] = X64Reg_RAX;
//mDebugging = function->mName == "?Hey@Blurg@bf@@SAXXZ"; mDebugging = function->mName == "?Dequeue@?$Queue@Tint@@@Generic@Collections@System@bf@@QEAATint@@XZ";
//"?ColorizeCodeString@IDEUtils@IDE@bf@@SAXPEAVString@System@3@W4CodeKind@123@@Z"; //"?ColorizeCodeString@IDEUtils@IDE@bf@@SAXPEAVString@System@3@W4CodeKind@123@@Z";
//"?Main@Program@bf@@CAHPEAV?$Array1@PEAVString@System@bf@@@System@2@@Z"; //"?Main@Program@bf@@CAHPEAV?$Array1@PEAVString@System@bf@@@System@2@@Z";

View file

@ -428,6 +428,7 @@ BfCompiler::BfCompiler(BfSystem* bfSystem, bool isResolveOnly)
mTypeTypeDef = NULL; mTypeTypeDef = NULL;
mUnboundAttributeTypeDef = NULL; mUnboundAttributeTypeDef = NULL;
mValueTypeTypeDef = NULL; mValueTypeTypeDef = NULL;
mResultTypeDef = NULL;
mObsoleteAttributeTypeDef = NULL; mObsoleteAttributeTypeDef = NULL;
mErrorAttributeTypeDef = NULL; mErrorAttributeTypeDef = NULL;
mWarnAttributeTypeDef = NULL; mWarnAttributeTypeDef = NULL;
@ -5923,6 +5924,7 @@ bool BfCompiler::DoCompile(const StringImpl& outputDirectory)
mFriendAttributeTypeDef = _GetRequiredType("System.FriendAttribute"); mFriendAttributeTypeDef = _GetRequiredType("System.FriendAttribute");
mCheckedAttributeTypeDef = _GetRequiredType("System.CheckedAttribute"); mCheckedAttributeTypeDef = _GetRequiredType("System.CheckedAttribute");
mUncheckedAttributeTypeDef = _GetRequiredType("System.UncheckedAttribute"); mUncheckedAttributeTypeDef = _GetRequiredType("System.UncheckedAttribute");
mResultTypeDef = _GetRequiredType("System.Result", 1);
mFunctionTypeDef = _GetRequiredType("System.Function"); mFunctionTypeDef = _GetRequiredType("System.Function");
mGCTypeDef = _GetRequiredType("System.GC"); mGCTypeDef = _GetRequiredType("System.GC");
mGenericIEnumerableTypeDef = _GetRequiredType("System.Collections.Generic.IEnumerable"); mGenericIEnumerableTypeDef = _GetRequiredType("System.Collections.Generic.IEnumerable");

View file

@ -345,6 +345,7 @@ public:
BfTypeDef* mStringTypeDef; BfTypeDef* mStringTypeDef;
BfTypeDef* mTypeTypeDef; BfTypeDef* mTypeTypeDef;
BfTypeDef* mValueTypeTypeDef; BfTypeDef* mValueTypeTypeDef;
BfTypeDef* mResultTypeDef;
BfTypeDef* mFunctionTypeDef; BfTypeDef* mFunctionTypeDef;
BfTypeDef* mGCTypeDef; BfTypeDef* mGCTypeDef;
BfTypeDef* mGenericIEnumerableTypeDef; BfTypeDef* mGenericIEnumerableTypeDef;