summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend
diff options
context:
space:
mode:
Diffstat (limited to 'src/shader_recompiler/backend')
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm_floating_point.cpp29
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm_instructions.h14
2 files changed, 22 insertions, 21 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 84028e01a..15db6618f 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_floating_point.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_floating_point.cpp
@@ -125,40 +125,41 @@ void EmitFPNeg64(EmitContext& ctx, IR::Inst& inst, Register value) {
125 ctx.LongAdd("MOV.F64 {}.x,-{};", inst, value); 125 ctx.LongAdd("MOV.F64 {}.x,-{};", inst, value);
126} 126}
127 127
128void EmitFPSin([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 value) { 128void EmitFPSin(EmitContext& ctx, IR::Inst& inst, ScalarF32 value) {
129 throw NotImplementedException("GLASM instruction"); 129 ctx.Add("SIN {}.x,{};", inst, value);
130} 130}
131 131
132void EmitFPCos([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 value) { 132void EmitFPCos(EmitContext& ctx, IR::Inst& inst, ScalarF32 value) {
133 throw NotImplementedException("GLASM instruction"); 133 ctx.Add("COS {}.x,{};", inst, value);
134} 134}
135 135
136void EmitFPExp2([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 value) { 136void EmitFPExp2(EmitContext& ctx, IR::Inst& inst, ScalarF32 value) {
137 throw NotImplementedException("GLASM instruction"); 137 ctx.Add("EX2 {}.x,{};", inst, value);
138} 138}
139 139
140void EmitFPLog2([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 value) { 140void EmitFPLog2(EmitContext& ctx, IR::Inst& inst, ScalarF32 value) {
141 throw NotImplementedException("GLASM instruction"); 141 ctx.Add("LG2 {}.x,{};", inst, value);
142} 142}
143 143
144void EmitFPRecip32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 value) { 144void EmitFPRecip32(EmitContext& ctx, IR::Inst& inst, ScalarF32 value) {
145 throw NotImplementedException("GLASM instruction"); 145 ctx.Add("RCP {}.x,{};", inst, value);
146} 146}
147 147
148void EmitFPRecip64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) { 148void EmitFPRecip64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) {
149 throw NotImplementedException("GLASM instruction"); 149 throw NotImplementedException("GLASM instruction");
150} 150}
151 151
152void EmitFPRecipSqrt32([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 value) { 152void EmitFPRecipSqrt32(EmitContext& ctx, IR::Inst& inst, ScalarF32 value) {
153 throw NotImplementedException("GLASM instruction"); 153 ctx.Add("RSQ {}.x,{};", inst, value);
154} 154}
155 155
156void EmitFPRecipSqrt64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) { 156void EmitFPRecipSqrt64([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) {
157 throw NotImplementedException("GLASM instruction"); 157 throw NotImplementedException("GLASM instruction");
158} 158}
159 159
160void EmitFPSqrt([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] ScalarF32 value) { 160void EmitFPSqrt(EmitContext& ctx, IR::Inst& inst, ScalarF32 value) {
161 throw NotImplementedException("GLASM instruction"); 161 const Register ret{ctx.reg_alloc.Define(inst)};
162 ctx.Add("RSQ {}.x,{};RCP {}.x,{}.x;", ret, value, ret, ret);
162} 163}
163 164
164void EmitFPSaturate16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) { 165void EmitFPSaturate16([[maybe_unused]] EmitContext& ctx, [[maybe_unused]] Register value) {
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
index d65a474f2..1bbd02022 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
+++ b/src/shader_recompiler/backend/glasm/emit_glasm_instructions.h
@@ -232,15 +232,15 @@ void EmitFPMul64(EmitContext& ctx, IR::Inst& inst, ScalarF64 a, ScalarF64 b);
232void EmitFPNeg16(EmitContext& ctx, Register value); 232void EmitFPNeg16(EmitContext& ctx, Register value);
233void EmitFPNeg32(EmitContext& ctx, IR::Inst& inst, ScalarRegister value); 233void EmitFPNeg32(EmitContext& ctx, IR::Inst& inst, ScalarRegister value);
234void EmitFPNeg64(EmitContext& ctx, IR::Inst& inst, Register value); 234void EmitFPNeg64(EmitContext& ctx, IR::Inst& inst, Register value);
235void EmitFPSin(EmitContext& ctx, ScalarF32 value); 235void EmitFPSin(EmitContext& ctx, IR::Inst& inst, ScalarF32 value);
236void EmitFPCos(EmitContext& ctx, ScalarF32 value); 236void EmitFPCos(EmitContext& ctx, IR::Inst& inst, ScalarF32 value);
237void EmitFPExp2(EmitContext& ctx, ScalarF32 value); 237void EmitFPExp2(EmitContext& ctx, IR::Inst& inst, ScalarF32 value);
238void EmitFPLog2(EmitContext& ctx, ScalarF32 value); 238void EmitFPLog2(EmitContext& ctx, IR::Inst& inst, ScalarF32 value);
239void EmitFPRecip32(EmitContext& ctx, ScalarF32 value); 239void EmitFPRecip32(EmitContext& ctx, IR::Inst& inst, ScalarF32 value);
240void EmitFPRecip64(EmitContext& ctx, Register value); 240void EmitFPRecip64(EmitContext& ctx, Register value);
241void EmitFPRecipSqrt32(EmitContext& ctx, ScalarF32 value); 241void EmitFPRecipSqrt32(EmitContext& ctx, IR::Inst& inst, ScalarF32 value);
242void EmitFPRecipSqrt64(EmitContext& ctx, Register value); 242void EmitFPRecipSqrt64(EmitContext& ctx, Register value);
243void EmitFPSqrt(EmitContext& ctx, ScalarF32 value); 243void EmitFPSqrt(EmitContext& ctx, IR::Inst& inst, ScalarF32 value);
244void EmitFPSaturate16(EmitContext& ctx, Register value); 244void EmitFPSaturate16(EmitContext& ctx, Register value);
245void EmitFPSaturate32(EmitContext& ctx, IR::Inst& inst, ScalarF32 value); 245void EmitFPSaturate32(EmitContext& ctx, IR::Inst& inst, ScalarF32 value);
246void EmitFPSaturate64(EmitContext& ctx, Register value); 246void EmitFPSaturate64(EmitContext& ctx, Register value);