glasm: Fix moving U64 immediates to registers in GLASM
This commit is contained in:
		| @@ -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}; | ||||||
|         } |         } | ||||||
|   | |||||||
| @@ -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); | ||||||
|     } |     } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user