glasm: Fix moving U64 immediates to registers in GLASM
This commit is contained in:
parent
80813b1d14
commit
8eb72ff0dc
|
@ -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