| 11920 | } |
| 11921 | |
| 11922 | BeMCInstForm 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; |
nothing calls this directly
no test coverage detected