diff --git a/src/shader_recompiler/frontend/translate/translate.cpp b/src/shader_recompiler/frontend/translate/translate.cpp index 27078b995..4ec4128a7 100644 --- a/src/shader_recompiler/frontend/translate/translate.cpp +++ b/src/shader_recompiler/frontend/translate/translate.cpp @@ -640,7 +640,7 @@ void Translate(IR::Block* block, u32 block_base, std::span inst_l translator.V_MIN3_F32(inst); break; case Opcode::V_MIN_LEGACY_F32: - translator.V_MIN_LEGACY_F32(inst); + translator.V_MIN_F32(inst, true); break; case Opcode::V_MADMK_F32: translator.V_MADMK_F32(inst); @@ -893,7 +893,7 @@ void Translate(IR::Block* block, u32 block_base, std::span inst_l translator.V_MAD_F32(inst); break; case Opcode::V_MAX_LEGACY_F32: - translator.V_MAX_LEGACY_F32(inst); + translator.V_MAX_F32(inst, true); break; case Opcode::V_RSQ_LEGACY_F32: case Opcode::V_RSQ_CLAMP_F32: diff --git a/src/shader_recompiler/frontend/translate/translate.h b/src/shader_recompiler/frontend/translate/translate.h index ab656988c..f8ea773b7 100644 --- a/src/shader_recompiler/frontend/translate/translate.h +++ b/src/shader_recompiler/frontend/translate/translate.h @@ -111,17 +111,15 @@ public: void V_RCP_F32(const GcnInst& inst); void V_FMA_F32(const GcnInst& inst); void V_CMP_F32(ConditionOp op, bool set_exec, const GcnInst& inst); - void V_MAX_F32(const GcnInst& inst); + void V_MAX_F32(const GcnInst& inst, bool is_legacy = false); void V_MAX_U32(bool is_signed, const GcnInst& inst); - void V_MAX_LEGACY_F32(const GcnInst& inst); void V_RSQ_F32(const GcnInst& inst); void V_SIN_F32(const GcnInst& inst); void V_LOG_F32(const GcnInst& inst); void V_EXP_F32(const GcnInst& inst); void V_SQRT_F32(const GcnInst& inst); - void V_MIN_F32(const GcnInst& inst); + void V_MIN_F32(const GcnInst& inst, bool is_legacy = false); void V_MIN3_F32(const GcnInst& inst); - void V_MIN_LEGACY_F32(const GcnInst& inst); void V_MADMK_F32(const GcnInst& inst); void V_CUBEMA_F32(const GcnInst& inst); void V_CUBESC_F32(const GcnInst& inst); diff --git a/src/shader_recompiler/frontend/translate/vector_alu.cpp b/src/shader_recompiler/frontend/translate/vector_alu.cpp index 3393b81f1..7bf24346a 100644 --- a/src/shader_recompiler/frontend/translate/vector_alu.cpp +++ b/src/shader_recompiler/frontend/translate/vector_alu.cpp @@ -203,10 +203,10 @@ void Translator::V_CMP_F32(ConditionOp op, bool set_exec, const GcnInst& inst) { } } -void Translator::V_MAX_F32(const GcnInst& inst) { +void Translator::V_MAX_F32(const GcnInst& inst, bool is_legacy) { const IR::F32 src0{GetSrc(inst.src[0], true)}; const IR::F32 src1{GetSrc(inst.src[1], true)}; - SetDst(inst.dst[0], ir.FPMax(src0, src1)); + SetDst(inst.dst[0], ir.FPMax(src0, src1, is_legacy)); } void Translator::V_MAX_U32(bool is_signed, const GcnInst& inst) { @@ -215,12 +215,6 @@ void Translator::V_MAX_U32(bool is_signed, const GcnInst& inst) { SetDst(inst.dst[0], ir.IMax(src0, src1, is_signed)); } -void Translator::V_MAX_LEGACY_F32(const GcnInst& inst) { - const IR::F32 src0{GetSrc(inst.src[0], true)}; - const IR::F32 src1{GetSrc(inst.src[1], true)}; - SetDst(inst.dst[0], ir.FPMax(src0, src1, true)); -} - void Translator::V_RSQ_F32(const GcnInst& inst) { const IR::F32 src0{GetSrc(inst.src[0], true)}; SetDst(inst.dst[0], ir.FPRecipSqrt(src0)); @@ -246,10 +240,10 @@ void Translator::V_SQRT_F32(const GcnInst& inst) { SetDst(inst.dst[0], ir.FPSqrt(src0)); } -void Translator::V_MIN_F32(const GcnInst& inst) { +void Translator::V_MIN_F32(const GcnInst& inst, bool is_legacy) { const IR::F32 src0{GetSrc(inst.src[0], true)}; const IR::F32 src1{GetSrc(inst.src[1], true)}; - SetDst(inst.dst[0], ir.FPMin(src0, src1)); + SetDst(inst.dst[0], ir.FPMin(src0, src1, is_legacy)); } void Translator::V_MIN3_F32(const GcnInst& inst) { @@ -259,12 +253,6 @@ void Translator::V_MIN3_F32(const GcnInst& inst) { SetDst(inst.dst[0], ir.FPMin(src0, ir.FPMin(src1, src2))); } -void Translator::V_MIN_LEGACY_F32(const GcnInst& inst) { - const IR::F32 src0{GetSrc(inst.src[0], true)}; - const IR::F32 src1{GetSrc(inst.src[1], true)}; - SetDst(inst.dst[0], ir.FPMin(src0, src1, true)); -} - void Translator::V_MADMK_F32(const GcnInst& inst) { const IR::F32 src0{GetSrc(inst.src[0], true)}; const IR::F32 src1{GetSrc(inst.src[1], true)};