IR: Add IR instruction NZCVFromPackedFlags

This instruction expects NZCV to be in the high bits.
i.e.: The positions they were in PSTATE.
This commit is contained in:
MerryMage
2018-02-03 13:34:40 +00:00
parent 0bb4474fb9
commit 8931ee346b
4 changed files with 30 additions and 0 deletions

View File

@@ -107,6 +107,10 @@ U32U64 IREmitter::ConditionalSelect(Cond cond, const U32U64& a, const U32U64& b)
}
}
NZCV IREmitter::NZCVFromPackedFlags(const U32& a) {
return Inst<NZCV>(Opcode::NZCVFromPackedFlags, a);
}
NZCV IREmitter::NZCVFrom(const Value& value) {
return Inst<NZCV>(Opcode::GetNZCVFromOp, value);
}

View File

@@ -81,6 +81,7 @@ public:
U64 ConditionalSelect(Cond cond, const U64& a, const U64& b);
U32U64 ConditionalSelect(Cond cond, const U32U64& a, const U32U64& b);
NZCV NZCVFromPackedFlags(const U32& a);
// This pseudo-instruction may only be added to instructions that support it.
NZCV NZCVFrom(const Value& value);

View File

@@ -68,6 +68,8 @@ OPCODE(GetOverflowFromOp, T::U1, T::U32
OPCODE(GetGEFromOp, T::U32, T::U32 )
OPCODE(GetNZCVFromOp, T::NZCVFlags, T::Opaque )
OPCODE(NZCVFromPackedFlags, T::NZCVFlags, T::U32 )
// Calculations
OPCODE(Pack2x32To1x64, T::U64, T::U32, T::U32 )
OPCODE(LeastSignificantWord, T::U32, T::U64 )