diff --git a/External/FEXCore/Source/Interface/Core/Interpreter/ConversionOps.cpp b/External/FEXCore/Source/Interface/Core/Interpreter/ConversionOps.cpp index ea53fe82e..ab11cbeae 100644 --- a/External/FEXCore/Source/Interface/Core/Interpreter/ConversionOps.cpp +++ b/External/FEXCore/Source/Interface/Core/Interpreter/ConversionOps.cpp @@ -14,10 +14,10 @@ namespace FEXCore::CPU { #define DEF_OP(x) void InterpreterOps::Op_##x(IR::IROp_Header *IROp, IROpData *Data, IR::NodeID Node) DEF_OP(VInsGPR) { auto Op = IROp->C(); - uint8_t OpSize = IROp->Size; + const uint8_t OpSize = IROp->Size; - __uint128_t Src1 = *GetSrc<__uint128_t*>(Data->SSAData, Op->Header.Args[0]); - __uint128_t Src2 = *GetSrc<__uint128_t*>(Data->SSAData, Op->Header.Args[1]); + auto Src1 = *GetSrc<__uint128_t*>(Data->SSAData, Op->DestVector); + auto Src2 = *GetSrc<__uint128_t*>(Data->SSAData, Op->Src); uint64_t Offset = Op->DestIdx * Op->Header.ElementSize * 8; __uint128_t Mask = (1ULL << (Op->Header.ElementSize * 8)) - 1; @@ -35,31 +35,31 @@ DEF_OP(VInsGPR) { DEF_OP(VCastFromGPR) { auto Op = IROp->C(); - memcpy(GDP, GetSrc(Data->SSAData, Op->Header.Args[0]), Op->Header.ElementSize); + memcpy(GDP, GetSrc(Data->SSAData, Op->Src), Op->Header.ElementSize); } DEF_OP(Float_FromGPR_S) { auto Op = IROp->C(); - uint16_t Conv = (Op->Header.ElementSize << 8) | Op->SrcElementSize; + const uint16_t Conv = (Op->Header.ElementSize << 8) | Op->SrcElementSize; switch (Conv) { case 0x0404: { // Float <- int32_t - float Dst = (float)*GetSrc(Data->SSAData, Op->Header.Args[0]); + const float Dst = (float)*GetSrc(Data->SSAData, Op->Src); memcpy(GDP, &Dst, Op->Header.ElementSize); break; } case 0x0408: { // Float <- int64_t - float Dst = (float)*GetSrc(Data->SSAData, Op->Header.Args[0]); + const float Dst = (float)*GetSrc(Data->SSAData, Op->Src); memcpy(GDP, &Dst, Op->Header.ElementSize); break; } case 0x0804: { // Double <- int32_t - double Dst = (double)*GetSrc(Data->SSAData, Op->Header.Args[0]); + const double Dst = (double)*GetSrc(Data->SSAData, Op->Src); memcpy(GDP, &Dst, Op->Header.ElementSize); break; } case 0x0808: { // Double <- int64_t - double Dst = (double)*GetSrc(Data->SSAData, Op->Header.Args[0]); + const double Dst = (double)*GetSrc(Data->SSAData, Op->Src); memcpy(GDP, &Dst, Op->Header.ElementSize); break; } @@ -68,15 +68,15 @@ DEF_OP(Float_FromGPR_S) { DEF_OP(Float_FToF) { auto Op = IROp->C(); - uint16_t Conv = (Op->Header.ElementSize << 8) | Op->SrcElementSize; + const uint16_t Conv = (Op->Header.ElementSize << 8) | Op->SrcElementSize; switch (Conv) { case 0x0804: { // Double <- Float - double Dst = (double)*GetSrc(Data->SSAData, Op->Header.Args[0]); + const double Dst = (double)*GetSrc(Data->SSAData, Op->Scalar); memcpy(GDP, &Dst, 8); break; } case 0x0408: { // Float <- Double - float Dst = (float)*GetSrc(Data->SSAData, Op->Header.Args[0]); + const float Dst = (float)*GetSrc(Data->SSAData, Op->Scalar); memcpy(GDP, &Dst, 4); break; } @@ -86,14 +86,14 @@ DEF_OP(Float_FToF) { DEF_OP(Vector_SToF) { auto Op = IROp->C(); - uint8_t OpSize = IROp->Size; + const uint8_t OpSize = IROp->Size; - void *Src = GetSrc(Data->SSAData, Op->Header.Args[0]); + void *Src = GetSrc(Data->SSAData, Op->Vector); uint8_t Tmp[16]{}; - uint8_t Elements = OpSize / Op->Header.ElementSize; + const uint8_t Elements = OpSize / Op->Header.ElementSize; - auto Func = [](auto a, auto min, auto max) { return a; }; + const auto Func = [](auto a, auto min, auto max) { return a; }; switch (Op->Header.ElementSize) { DO_VECTOR_1SRC_2TYPE_OP(4, float, int32_t, Func, 0, 0) DO_VECTOR_1SRC_2TYPE_OP(8, double, int64_t, Func, 0, 0) @@ -104,14 +104,14 @@ DEF_OP(Vector_SToF) { DEF_OP(Vector_FToZS) { auto Op = IROp->C(); - uint8_t OpSize = IROp->Size; + const uint8_t OpSize = IROp->Size; - void *Src = GetSrc(Data->SSAData, Op->Header.Args[0]); + void *Src = GetSrc(Data->SSAData, Op->Vector); uint8_t Tmp[16]{}; - uint8_t Elements = OpSize / Op->Header.ElementSize; + const uint8_t Elements = OpSize / Op->Header.ElementSize; - auto Func = [](auto a, auto min, auto max) { return std::trunc(a); }; + const auto Func = [](auto a, auto min, auto max) { return std::trunc(a); }; switch (Op->Header.ElementSize) { DO_VECTOR_1SRC_2TYPE_OP(4, int32_t, float, Func, 0, 0) DO_VECTOR_1SRC_2TYPE_OP(8, int64_t, double, Func, 0, 0) @@ -122,14 +122,14 @@ DEF_OP(Vector_FToZS) { DEF_OP(Vector_FToS) { auto Op = IROp->C(); - uint8_t OpSize = IROp->Size; + const uint8_t OpSize = IROp->Size; - void *Src = GetSrc(Data->SSAData, Op->Header.Args[0]); + void *Src = GetSrc(Data->SSAData, Op->Vector); uint8_t Tmp[16]{}; - uint8_t Elements = OpSize / Op->Header.ElementSize; + const uint8_t Elements = OpSize / Op->Header.ElementSize; - auto Func = [](auto a, auto min, auto max) { return std::nearbyint(a); }; + const auto Func = [](auto a, auto min, auto max) { return std::nearbyint(a); }; switch (Op->Header.ElementSize) { DO_VECTOR_1SRC_2TYPE_OP(4, int32_t, float, Func, 0, 0) DO_VECTOR_1SRC_2TYPE_OP(8, int64_t, double, Func, 0, 0) @@ -140,14 +140,14 @@ DEF_OP(Vector_FToS) { DEF_OP(Vector_FToF) { auto Op = IROp->C(); - uint8_t OpSize = IROp->Size; + const uint8_t OpSize = IROp->Size; - void *Src = GetSrc(Data->SSAData, Op->Header.Args[0]); + void *Src = GetSrc(Data->SSAData, Op->Vector); uint8_t Tmp[16]{}; - uint16_t Conv = (Op->Header.ElementSize << 8) | Op->SrcElementSize; + const uint16_t Conv = (Op->Header.ElementSize << 8) | Op->SrcElementSize; - auto Func = [](auto a, auto min, auto max) { return a; }; + const auto Func = [](auto a, auto min, auto max) { return a; }; switch (Conv) { case 0x0804: { // Double <- float // Only the lower elements from the source @@ -172,17 +172,17 @@ DEF_OP(Vector_FToF) { DEF_OP(Vector_FToI) { auto Op = IROp->C(); - uint8_t OpSize = IROp->Size; + const uint8_t OpSize = IROp->Size; - void *Src = GetSrc(Data->SSAData, Op->Header.Args[0]); + void *Src = GetSrc(Data->SSAData, Op->Vector); uint8_t Tmp[16]{}; - uint8_t Elements = OpSize / Op->Header.ElementSize; - auto Func_Nearest = [](auto a) { return std::rint(a); }; - auto Func_Neg = [](auto a) { return std::floor(a); }; - auto Func_Pos = [](auto a) { return std::ceil(a); }; - auto Func_Trunc = [](auto a) { return std::trunc(a); }; - auto Func_Host = [](auto a) { return std::rint(a); }; + const uint8_t Elements = OpSize / Op->Header.ElementSize; + const auto Func_Nearest = [](auto a) { return std::rint(a); }; + const auto Func_Neg = [](auto a) { return std::floor(a); }; + const auto Func_Pos = [](auto a) { return std::ceil(a); }; + const auto Func_Trunc = [](auto a) { return std::trunc(a); }; + const auto Func_Host = [](auto a) { return std::rint(a); }; switch (Op->Round) { case FEXCore::IR::Round_Nearest.Val: