Parcourir la source

glasm: Fix moving U64 immediates to registers in GLASM

ReinUsesLisp il y a 5 ans
Parent
commit
8eb72ff0dc

+ 2 - 1
src/shader_recompiler/backend/glasm/emit_glasm.cpp

@@ -43,7 +43,8 @@ struct RegWrapper {
     RegWrapper(EmitContext& ctx, Value value)
     RegWrapper(EmitContext& ctx, Value value)
         : reg_alloc{ctx.reg_alloc}, allocated{value.type != Type::Register} {
         : reg_alloc{ctx.reg_alloc}, allocated{value.type != Type::Register} {
         if (allocated) {
         if (allocated) {
-            reg = value.type == Type::F64 ? reg_alloc.AllocLongReg() : reg_alloc.AllocReg();
+            const bool is_long{value.type == Type::F64 || value.type == Type::U64};
+            reg = is_long ? reg_alloc.AllocLongReg() : reg_alloc.AllocReg();
         } else {
         } else {
             reg = Register{value};
             reg = Register{value};
         }
         }

+ 2 - 2
src/shader_recompiler/backend/glasm/reg_alloc.h

@@ -289,9 +289,9 @@ struct fmt::formatter<Shader::Backend::GLASM::ScalarF64> {
         case Shader::Backend::GLASM::Type::F32:
         case Shader::Backend::GLASM::Type::F32:
             break;
             break;
         case Shader::Backend::GLASM::Type::U64:
         case Shader::Backend::GLASM::Type::U64:
-            return format_to(ctx.out(), "{}", Common::BitCast<f64>(value.imm_u64));
+            return fmt::format_to(ctx.out(), "{}", Common::BitCast<f64>(value.imm_u64));
         case Shader::Backend::GLASM::Type::F64:
         case Shader::Backend::GLASM::Type::F64:
-            return format_to(ctx.out(), "{}", value.imm_f64);
+            return fmt::format_to(ctx.out(), "{}", value.imm_f64);
         }
         }
         throw Shader::InvalidArgument("Invalid value type {}", value.type);
         throw Shader::InvalidArgument("Invalid value type {}", value.type);
     }
     }