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

Method GetInstForm

IDEHelper/Backend/BeMCContext.cpp:11922–12139  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

11920}
11921
11922BeMCInstForm BeMCContext::GetInstForm(BeMCInst* inst)
11923{
11924 if (!inst->mArg0)
11925 return BeMCInstForm_Unknown;
11926
11927 auto arg0 = GetFixedOperand(inst->mArg0);
11928 auto arg1 = GetFixedOperand(inst->mArg1);
11929
11930 if (!arg1)
11931 {
11932 if (arg0.mKind == BeMCOperandKind_Symbol)
11933 return BeMCInstForm_Symbol;
11934 if (arg0.mKind == BeMCOperandKind_SymbolAddr)
11935 return BeMCInstForm_SymbolAddr;
11936
11937 auto arg0Type = GetType(arg0);
11938 if (arg0Type == NULL)
11939 return BeMCInstForm_Unknown;
11940 if (arg0.IsImmediate())
11941 {
11942 if ((arg0.mImmediate >= -0x80000000LL) && (arg0.mImmediate <= 0x7FFFFFFF))
11943 return BeMCInstForm_IMM32;
11944 }
11945 if (arg0.mKind == BeMCOperandKind_NativeReg)
11946 {
11947 if (arg0Type->mSize == 4)
11948 return BeMCInstForm_R32;
11949 if (arg0Type->mSize == 2)
11950 return BeMCInstForm_R16;
11951 if (arg0Type->mSize == 1)
11952 return BeMCInstForm_R8;
11953 return BeMCInstForm_R64;
11954 }
11955 if (arg0Type->mSize == 4)
11956 return BeMCInstForm_RM32;
11957 if (arg0Type->mSize == 2)
11958 return BeMCInstForm_RM16;
11959 if (arg0Type->mSize == 1)
11960 return BeMCInstForm_RM8;
11961 return BeMCInstForm_RM64;
11962 }
11963
11964 auto arg0Type = GetType(arg0);
11965 auto arg1Type = GetType(arg1);
11966
11967 if ((arg0Type != NULL) && (arg1Type != NULL) &&
11968 ((arg0Type->IsVector()) || (arg1Type->IsVector())))
11969 {
11970 if (((arg0Type->IsVector()) && (arg0Type->mSize == 8)) ||
11971 ((arg1Type->IsVector()) && (arg1Type->mSize == 8)))
11972 {
11973 if (arg0.IsNativeReg())
11974 {
11975 return BeMCInstForm_XMM64_RM64;
11976 }
11977 else
11978 {
11979 return BeMCInstForm_FRM64_XMM64;

Callers

nothing calls this directly

Calls 6

IsVectorMethod · 0.80
IsNativeRegMethod · 0.80
IsImmediateIntMethod · 0.80
IsImmediateMethod · 0.45
IsFloatMethod · 0.45
IsIntMethod · 0.45

Tested by

no test coverage detected