mirror of
https://github.com/FEX-Emu/FEX.git
synced 2026-10-12 03:00:39 +02:00
JIT: Implement missing Vector_FToF2
This commit is contained in:
1 parent
b2db04f5d7
commit
082a0baff3
2 files changed
+30
No files matched your search
@@ -355,6 +355,24 @@ DEF_OP(Vector_FToF) {
|
||||
}
|
||||
}
|
||||
|
||||
DEF_OP(Vector_FToF2) {
|
||||
const auto Op = IROp->C<IR::IROp_Vector_FToF2>();
|
||||
|
||||
const auto ElementSize = Op->Header.ElementSize;
|
||||
const auto SubEmitSize = ConvertSubRegSize248(IROp);
|
||||
|
||||
const auto Dst = GetVReg(Node);
|
||||
const auto Vector = GetVReg(Op->Vector.ID());
|
||||
|
||||
if (ElementSize > Op->SrcElementSize) {
|
||||
LOGMAN_THROW_AA_FMT(Op->SrcElementSize == (ElementSize >> 1), "IR invariant");
|
||||
fcvtl2(SubEmitSize, Dst.D(), Vector.D());
|
||||
} else {
|
||||
LOGMAN_THROW_AA_FMT(Op->SrcElementSize == (ElementSize << 1), "IR invariant");
|
||||
fcvtn2(SubEmitSize, Dst.D(), Vector.D());
|
||||
}
|
||||
}
|
||||
|
||||
DEF_OP(Vector_FToI) {
|
||||
const auto Op = IROp->C<IR::IROp_Vector_FToI>();
|
||||
const auto OpSize = IROp->Size;
|
||||
|
||||
@@ -2314,6 +2314,18 @@
|
||||
"DestSize": "RegisterSize",
|
||||
"NumElements": "RegisterSize / DestElementSize"
|
||||
},
|
||||
|
||||
"FPR = Vector_FToF2 u8:#RegisterSize, u8:#DestElementSize, FPR:$Vector, u8:$SrcElementSize": {
|
||||
"Desc": [
|
||||
"Vector op: Converts float from source element size to destination size (fp32<->fp64)",
|
||||
"Selecting from the high half of the register."
|
||||
],
|
||||
"DestSize": "RegisterSize",
|
||||
"NumElements": "RegisterSize / DestElementSize",
|
||||
"EmitValidation": [
|
||||
"RegisterSize != FEXCore::IR::OpSize::i256Bit && \"What does 256-bit mean in this context?\""
|
||||
]
|
||||
},
|
||||
"FPR = Vector_FToI u8:#RegisterSize, u8:#ElementSize, FPR:$Vector, RoundType:$Round": {
|
||||
"Desc": ["Vector op: Rounds float to integral",
|
||||
"Rounding mode determined by argument"
|
||||
|
||||
Reference in new issue
Block a user