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

Method GetType

IDEHelper/Backend/BeMCContext.cpp:2604–2674  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2602}
2603
2604BeType* BeMCContext::GetType(const BeMCOperand& operand)
2605{
2606 if (operand.mKind == BeMCOperandKind_NativeReg)
2607 {
2608 if ((operand.mReg >= X64Reg_RAX) && (operand.mReg <= X64Reg_EFL))
2609 return mModule->mContext->GetPrimitiveType(BeTypeCode_Int64);
2610 if ((operand.mReg >= X64Reg_EAX) && (operand.mReg <= X64Reg_R15D))
2611 return mModule->mContext->GetPrimitiveType(BeTypeCode_Int32);
2612 if ((operand.mReg >= X64Reg_AX) && (operand.mReg <= X64Reg_R15W))
2613 return mModule->mContext->GetPrimitiveType(BeTypeCode_Int16);
2614 if ((operand.mReg >= X64Reg_AL) && (operand.mReg <= X64Reg_R15B))
2615 return mModule->mContext->GetPrimitiveType(BeTypeCode_Int8);
2616 if ((operand.mReg >= X64Reg_XMM0_f64) && (operand.mReg <= X64Reg_XMM15_f64))
2617 return mModule->mContext->GetPrimitiveType(BeTypeCode_Double);
2618 if ((operand.mReg >= X64Reg_XMM0_f32) && (operand.mReg <= X64Reg_XMM15_f32))
2619 return mModule->mContext->GetPrimitiveType(BeTypeCode_Float);
2620 if ((operand.mReg >= X64Reg_M128_XMM0) && (operand.mReg <= X64Reg_M128_XMM15))
2621 return mModule->mContext->GetPrimitiveType(BeTypeCode_M128);
2622 }
2623
2624 if (operand.mKind == BeMCOperandKind_VReg)
2625 return mVRegInfo[operand.mVRegIdx]->mType;
2626 if (operand.mKind == BeMCOperandKind_VRegAddr)
2627 return mModule->mContext->GetPointerTo(mVRegInfo[operand.mVRegIdx]->mType);
2628 if (operand.mKind == BeMCOperandKind_VRegLoad)
2629 {
2630 auto type = mVRegInfo[operand.mVRegIdx]->mType;
2631 BEMC_ASSERT(type->IsPointer());
2632 return ((BePointerType*)type)->mElementType;
2633 }
2634
2635 switch (operand.mKind)
2636 {
2637 case BeMCOperandKind_Immediate_i8: return mModule->mContext->GetPrimitiveType(BeTypeCode_Int8); break;
2638 case BeMCOperandKind_Immediate_i16: return mModule->mContext->GetPrimitiveType(BeTypeCode_Int16); break;
2639 case BeMCOperandKind_Immediate_i32: return mModule->mContext->GetPrimitiveType(BeTypeCode_Int32); break;
2640 case BeMCOperandKind_Immediate_i64:
2641 case BeMCOperandKind_Immediate_HomeSize: return mModule->mContext->GetPrimitiveType(BeTypeCode_Int64); break;
2642 case BeMCOperandKind_Immediate_Null: return operand.mType; break;
2643 case BeMCOperandKind_Immediate_f32:
2644 case BeMCOperandKind_Immediate_f32_Packed128: return mModule->mContext->GetPrimitiveType(BeTypeCode_Float); break;
2645 case BeMCOperandKind_Immediate_f64:
2646 case BeMCOperandKind_Immediate_f64_Packed128: return mModule->mContext->GetPrimitiveType(BeTypeCode_Double); break;
2647 }
2648
2649 if (operand.mKind == BeMCOperandKind_SymbolAddr)
2650 {
2651 auto symbol = mCOFFObject->mSymbols[operand.mSymbolIdx];
2652 if (symbol->mType == NULL)
2653 return NULL;
2654 return mModule->mContext->GetPointerTo(symbol->mType);
2655 }
2656
2657 if (operand.mKind == BeMCOperandKind_Symbol)
2658 {
2659 auto symbol = mCOFFObject->mSymbols[operand.mSymbolIdx];
2660 return symbol->mType;
2661 }

Callers 3

GetOperandMethod · 0.45
CreateStoreMethod · 0.45
GenerateMethod · 0.45

Calls 3

GetPrimitiveTypeMethod · 0.45
GetPointerToMethod · 0.45
IsPointerMethod · 0.45

Tested by

no test coverage detected