diff options
| author | 2021-05-09 21:22:55 -0300 | |
|---|---|---|
| committer | 2021-07-22 21:51:31 -0400 | |
| commit | 7703d65f234a3032adef795037320cd30ef28a3a (patch) | |
| tree | 7e3af9a0fe177f22b39ddf3b30158d68b24633b3 /src/shader_recompiler/backend | |
| parent | glasm: Add logical instructions on GLASM (diff) | |
| download | yuzu-7703d65f234a3032adef795037320cd30ef28a3a.tar.gz yuzu-7703d65f234a3032adef795037320cd30ef28a3a.tar.xz yuzu-7703d65f234a3032adef795037320cd30ef28a3a.zip | |
glasm: Add fp min/max insts and fix store for fp64 on GLASM
Diffstat (limited to 'src/shader_recompiler/backend')
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm_floating_point.cpp | 14 | ||||
| -rw-r--r-- | src/shader_recompiler/backend/glasm/emit_glasm_instructions.h | 4 |
2 files changed, 8 insertions, 10 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_floating_point.cpp b/src/shader_recompiler/backend/glasm/emit_glasm_floating_point.cpp index 1139a22bd..aab506109 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm_floating_point.cpp +++ b/src/shader_recompiler/backend/glasm/emit_glasm_floating_point.cpp | |||
| @@ -75,22 +75,20 @@ void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b, Sca | |||
| 75 | ctx.LongAdd("MAD.F64 {}.x,{},{},{};", inst, a, b, c); | 75 | ctx.LongAdd("MAD.F64 {}.x,{},{},{};", inst, a, b, c); |
| 76 | } | 76 | } |
| 77 | 77 | ||
| 78 | void EmitFPMax32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 a, | 78 | void EmitFPMax32(EmitContext& ctx, IR::Inst& inst, ScalarF32 a, ScalarF32 b) { |
| 79 | [[maybe_unused]] ScalarF32 b) { | 79 | ctx.Add("MAX.F {}.x,{},{};", inst, a, b); |
| 80 | throw NotImplementedException("GLASM instruction"); | ||
| 81 | } | 80 | } |
| 82 | 81 | ||
| 83 | void EmitFPMax64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b) { | 82 | void EmitFPMax64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b) { |
| 84 | ctx.LongAdd("MAX.F64 {},{},{};", inst, a, b); | 83 | ctx.LongAdd("MAX.F64 {}.x,{},{};", inst, a, b); |
| 85 | } | 84 | } |
| 86 | 85 | ||
| 87 | void EmitFPMin32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 a, | 86 | void EmitFPMin32(EmitContext& ctx, IR::Inst& inst, ScalarF32 a, ScalarF32 b) { |
| 88 | [[maybe_unused]] ScalarF32 b) { | 87 | ctx.Add("MIN.F {}.x,{},{};", inst, a, b); |
| 89 | throw NotImplementedException("GLASM instruction"); | ||
| 90 | } | 88 | } |
| 91 | 89 | ||
| 92 | void EmitFPMin64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b) { | 90 | void EmitFPMin64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b) { |
| 93 | ctx.LongAdd("MIN.F64 {},{},{};", inst, a, b); | 91 | ctx.LongAdd("MIN.F64 {}.x,{},{};", inst, a, b); |
| 94 | } | 92 | } |
| 95 | 93 | ||
| 96 | void EmitFPMul16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, | 94 | void EmitFPMul16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] IR::Inst& inst, |
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h index 174eaaafa..5d94f21a6 100644 --- a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h +++ b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h | |||
| @@ -221,9 +221,9 @@ void EmitFPAdd64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b); | |||
| 221 | void EmitFPFma16(EmitContext& ctx, IR::Inst& inst, Register a, Register b, Register c); | 221 | void EmitFPFma16(EmitContext& ctx, IR::Inst& inst, Register a, Register b, Register c); |
| 222 | void EmitFPFma32(EmitContext& ctx, IR::Inst& inst, ScalarF32 a, ScalarF32 b, ScalarF32 c); | 222 | void EmitFPFma32(EmitContext& ctx, IR::Inst& inst, ScalarF32 a, ScalarF32 b, ScalarF32 c); |
| 223 | void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b, ScalarF64 c); | 223 | void EmitFPFma64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b, ScalarF64 c); |
| 224 | void EmitFPMax32(EmitContext& ctx, ScalarF32 a, ScalarF32 b); | 224 | void EmitFPMax32(EmitContext& ctx, IR::Inst& inst, ScalarF32 a, ScalarF32 b); |
| 225 | void EmitFPMax64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b); | 225 | void EmitFPMax64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b); |
| 226 | void EmitFPMin32(EmitContext& ctx, ScalarF32 a, ScalarF32 b); | 226 | void EmitFPMin32(EmitContext& ctx, IR::Inst& inst, ScalarF32 a, ScalarF32 b); |
| 227 | void EmitFPMin64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b); | 227 | void EmitFPMin64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b); |
| 228 | void EmitFPMul16(EmitContext& ctx, IR::Inst& inst, Register a, Register b); | 228 | void EmitFPMul16(EmitContext& ctx, IR::Inst& inst, Register a, Register b); |
| 229 | void EmitFPMul32(EmitContext& ctx, IR::Inst& inst, ScalarF32 a, ScalarF32 b); | 229 | void EmitFPMul32(EmitContext& ctx, IR::Inst& inst, ScalarF32 a, ScalarF32 b); |