1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-14 14:24:10 +02:00

Fixed some constant '1' pointer value handling

This commit is contained in:
Brian Fiete 2020-12-24 06:57:28 -08:00
parent e8de8cd7be
commit 8894430f98

View file

@ -5410,6 +5410,10 @@ void BeMCContext::FixOperand(BeMCOperand& operand, int depth)
{ {
operand = checkOperand; operand = checkOperand;
} }
else if (checkOperand.IsImmediate())
{
operand = checkOperand;
}
} }
} }
@ -13186,7 +13190,7 @@ void BeMCContext::DoCodeEmission()
} }
break; break;
case BeMCInstKind_PreserveVolatiles: case BeMCInstKind_PreserveVolatiles:
{ {
for (int vregIdx : *inst->mLiveness) for (int vregIdx : *inst->mLiveness)
{ {
if (vregIdx >= mLivenessContext.mNumItems) if (vregIdx >= mLivenessContext.mNumItems)
@ -13299,6 +13303,11 @@ void BeMCContext::DoCodeEmission()
break; break;
case BeMCInstKind_Mov: case BeMCInstKind_Mov:
{ {
if (mDebugging)
{
NOP;
}
if (inst->mArg1.mKind == BeMCOperandKind_ConstAgg) if (inst->mArg1.mKind == BeMCOperandKind_ConstAgg)
{ {
if (mDebugging) if (mDebugging)
@ -13314,6 +13323,14 @@ void BeMCContext::DoCodeEmission()
auto arg0Type = GetType(inst->mArg0); auto arg0Type = GetType(inst->mArg0);
auto arg1Type = GetType(inst->mArg1); auto arg1Type = GetType(inst->mArg1);
// auto arg1 = inst->mArg1;
// while (arg1.IsVReg())
// {
// auto vregInfo = GetVRegInfo(arg1);
// if (vregInfo->IsDirectRelTo())
// arg1 = vregInfo->mRelTo;
// }
if (instForm == BeMCInstForm_Unknown) if (instForm == BeMCInstForm_Unknown)
{ {
if ((inst->mArg0.IsNativeReg()) && (inst->mArg1.IsNativeReg())) if ((inst->mArg0.IsNativeReg()) && (inst->mArg1.IsNativeReg()))
@ -13606,7 +13623,7 @@ void BeMCContext::DoCodeEmission()
if (EmitStdXMMInst(instForm, inst, 0x10, 0x11)) if (EmitStdXMMInst(instForm, inst, 0x10, 0x11))
break; break;
if ((inst->mArg0.IsNativeReg()) && (inst->mArg1.IsImmediateInt())) if ((inst->mArg0.IsNativeReg()) && (arg1.IsImmediateInt()))
{ {
auto arg0Type = GetType(inst->mArg0); auto arg0Type = GetType(inst->mArg0);
if (arg0Type->mTypeCode == BeTypeCode_Int16) if (arg0Type->mTypeCode == BeTypeCode_Int16)
@ -13614,7 +13631,7 @@ void BeMCContext::DoCodeEmission()
Emit(0x66); Emit(0x66);
EmitREX(BeMCOperand(), inst->mArg0, false); EmitREX(BeMCOperand(), inst->mArg0, false);
Emit(0xB8 + EncodeRegNum(inst->mArg0.mReg)); Emit(0xB8 + EncodeRegNum(inst->mArg0.mReg));
mOut.Write((int16)inst->mArg1.mImmediate); mOut.Write((int16)arg1.mImmediate);
break; break;
} }
else if ((arg0Type->mTypeCode == BeTypeCode_Int32) || (arg0Type->mTypeCode == BeTypeCode_Int64)) else if ((arg0Type->mTypeCode == BeTypeCode_Int32) || (arg0Type->mTypeCode == BeTypeCode_Int64))
@ -15773,7 +15790,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 == "?SetDefaults@KeySettings@BeefTest@bf@@QEAAXXZ"); //mDebugging = (function->mName == "??$EmitNow@UInitialize@CoreEvents@Atma@bf@@@Emitter@Atma@bf@@QEAAXUInitialize@CoreEvents@Atma@bf@@@Z");
// || (function->mName == "?MethodA@TestProgram@BeefTest@bf@@CAXXZ"); // || (function->mName == "?MethodA@TestProgram@BeefTest@bf@@CAXXZ");
// || (function->mName == "?Hey@Blurg@bf@@SAXXZ") // || (function->mName == "?Hey@Blurg@bf@@SAXXZ")
// ; // ;