MCPcopy Create free account
hub / github.com/beefytech/Beef / GetRMParams

Method GetRMParams

IDEHelper/Backend/BeMCContext.cpp:5819–6049  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

5817}
5818
5819void BeMCContext::GetRMParams(const BeMCOperand& operand, BeRMParamsInfo& rmInfo, bool doValidate)
5820{
5821 BeMCRMMode rmMode = BeMCRMMode_Invalid;
5822 if (operand.mKind == BeMCOperandKind_NativeReg)
5823 {
5824 if (rmInfo.mRegA == X64Reg_None)
5825 rmInfo.mRegA = operand.mReg;
5826 else if (rmInfo.mRegB == X64Reg_None)
5827 rmInfo.mRegB = operand.mReg;
5828 else
5829 {
5830 rmInfo.mMode = BeMCRMMode_Invalid;
5831 return;
5832 }
5833 rmInfo.mMode = BeMCRMMode_Direct;
5834 return ValidateRMResult(operand, rmInfo, doValidate);
5835 }
5836 else if (operand.IsImmediateInt())
5837 {
5838 rmInfo.mDisp += (int)operand.mImmediate;
5839 rmInfo.mMode = BeMCRMMode_Direct;
5840 return ValidateRMResult(operand, rmInfo, doValidate);
5841 }
5842
5843 if (operand.mKind == BeMCOperandKind_VReg)
5844 {
5845 auto vregInfo = mVRegInfo[operand.mVRegIdx];
5846 if (!vregInfo->mIsExpr)
5847 {
5848 auto reg = vregInfo->mReg;
5849 if (reg != X64Reg_None)
5850 {
5851 if (rmInfo.mRegA == X64Reg_None)
5852 rmInfo.mRegA = reg;
5853 else if (rmInfo.mRegB == X64Reg_None)
5854 rmInfo.mRegB = reg;
5855 else
5856 {
5857 rmInfo.mMode = BeMCRMMode_Invalid;
5858 return;
5859 }
5860 rmInfo.mMode = BeMCRMMode_Direct;
5861 return ValidateRMResult(operand, rmInfo, doValidate);
5862 }
5863
5864 GetRMParams(OperandToAddr(operand), rmInfo, doValidate);
5865 if (rmInfo.mMode == BeMCRMMode_Invalid)
5866 return;
5867 BF_ASSERT(rmInfo.mMode == BeMCRMMode_Direct);
5868 rmInfo.mMode = BeMCRMMode_Deref;
5869 return ValidateRMResult(OperandToAddr(operand), rmInfo, doValidate);
5870 }
5871 // Fall through
5872 }
5873 else if (operand.mKind == BeMCOperandKind_VRegAddr)
5874 {
5875 auto vregInfo = mVRegInfo[operand.mVRegIdx];
5876

Callers

nothing calls this directly

Calls 3

IsImmediateIntMethod · 0.80
IsDirectRelToAnyMethod · 0.80
IsVRegAnyMethod · 0.80

Tested by

no test coverage detected