summaryrefslogtreecommitdiff
path: root/src/shader_recompiler/backend/glasm
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-05-10 01:33:24 -0300
committerGravatar ameerj2021-07-22 21:51:31 -0400
commit8eb72ff0dc3eb428c28b578ffb3912c1bd1c42dd (patch)
tree7101d69f5241ee8a4ea3c7a03bbc5aee89de3f39 /src/shader_recompiler/backend/glasm
parentglasm: Implement storage atomic ops (diff)
downloadyuzu-8eb72ff0dc3eb428c28b578ffb3912c1bd1c42dd.tar.gz
yuzu-8eb72ff0dc3eb428c28b578ffb3912c1bd1c42dd.tar.xz
yuzu-8eb72ff0dc3eb428c28b578ffb3912c1bd1c42dd.zip
glasm: Fix moving U64 immediates to registers in GLASM
Diffstat (limited to 'src/shader_recompiler/backend/glasm')
-rw-r--r--src/shader_recompiler/backend/glasm/emit_glasm.cpp3
-rw-r--r--src/shader_recompiler/backend/glasm/reg_alloc.h4
2 files changed, 4 insertions, 3 deletions
diff --git a/src/shader_recompiler/backend/glasm/emit_glasm.cpp b/src/shader_recompiler/backend/glasm/emit_glasm.cpp
index e6e065e7f..8e5d575a9 100644
--- a/src/shader_recompiler/backend/glasm/emit_glasm.cpp
+++ b/src/shader_recompiler/backend/glasm/emit_glasm.cpp
@@ -43,7 +43,8 @@ struct RegWrapper {
43 RegWrapper(EmitContext& ctx, Value value) 43 RegWrapper(EmitContext& ctx, Value value)
44 : reg_alloc{ctx.reg_alloc}, allocated{value.type != Type::Register} { 44 : reg_alloc{ctx.reg_alloc}, allocated{value.type != Type::Register} {
45 if (allocated) { 45 if (allocated) {
46 reg = value.type == Type::F64 ? reg_alloc.AllocLongReg() : reg_alloc.AllocReg(); 46 const bool is_long{value.type == Type::F64 || value.type == Type::U64};
47 reg = is_long ? reg_alloc.AllocLongReg() : reg_alloc.AllocReg();
47 } else { 48 } else {
48 reg = Register{value}; 49 reg = Register{value};
49 } 50 }
diff --git a/src/shader_recompiler/backend/glasm/reg_alloc.h b/src/shader_recompiler/backend/glasm/reg_alloc.h
index 200c51610..8df73ca18 100644
--- a/src/shader_recompiler/backend/glasm/reg_alloc.h
+++ b/src/shader_recompiler/backend/glasm/reg_alloc.h
@@ -289,9 +289,9 @@ struct fmt::formatter<Shader::Backend::GLASM::ScalarF64> {
289 case Shader::Backend::GLASM::Type::F32: 289 case Shader::Backend::GLASM::Type::F32:
290 break; 290 break;
291 case Shader::Backend::GLASM::Type::U64: 291 case Shader::Backend::GLASM::Type::U64:
292 return format_to(ctx.out(), "{}", Common::BitCast<f64>(value.imm_u64)); 292 return fmt::format_to(ctx.out(), "{}", Common::BitCast<f64>(value.imm_u64));
293 case Shader::Backend::GLASM::Type::F64: 293 case Shader::Backend::GLASM::Type::F64:
294 return format_to(ctx.out(), "{}", value.imm_f64); 294 return fmt::format_to(ctx.out(), "{}", value.imm_f64);
295 } 295 }
296 throw Shader::InvalidArgument("Invalid value type {}", value.type); 296 throw Shader::InvalidArgument("Invalid value type {}", value.type);
297 } 297 }