mirror of
https://github.com/luau-lang/luau.git
synced 2024-11-15 14:25:44 +08:00
CodeGen: Simplify UNM_NUM/UNM_VEC lowering
vxorpd has a 3-argument form but the lowering is written assuming we are targeting SSE. Since we aren't, we can directly vxorpd into the target register.
This commit is contained in:
parent
c9324853e5
commit
b4a4053ad0
@ -541,18 +541,7 @@ void IrLoweringX64::lowerInst(IrInst& inst, uint32_t index, const IrBlock& next)
|
|||||||
{
|
{
|
||||||
inst.regX64 = regs.allocRegOrReuse(SizeX64::xmmword, index, {inst.a});
|
inst.regX64 = regs.allocRegOrReuse(SizeX64::xmmword, index, {inst.a});
|
||||||
|
|
||||||
RegisterX64 src = regOp(inst.a);
|
build.vxorpd(inst.regX64, regOp(inst.a), build.f64(-0.0));
|
||||||
|
|
||||||
if (inst.regX64 == src)
|
|
||||||
{
|
|
||||||
build.vxorpd(inst.regX64, inst.regX64, build.f64(-0.0));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
build.vmovsd(inst.regX64, src, src);
|
|
||||||
build.vxorpd(inst.regX64, inst.regX64, build.f64(-0.0));
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IrCmd::FLOOR_NUM:
|
case IrCmd::FLOOR_NUM:
|
||||||
@ -664,17 +653,7 @@ void IrLoweringX64::lowerInst(IrInst& inst, uint32_t index, const IrBlock& next)
|
|||||||
{
|
{
|
||||||
inst.regX64 = regs.allocRegOrReuse(SizeX64::xmmword, index, {inst.a});
|
inst.regX64 = regs.allocRegOrReuse(SizeX64::xmmword, index, {inst.a});
|
||||||
|
|
||||||
RegisterX64 src = regOp(inst.a);
|
build.vxorpd(inst.regX64, regOp(inst.a), build.f32x4(-0.0, -0.0, -0.0, -0.0));
|
||||||
|
|
||||||
if (inst.regX64 == src)
|
|
||||||
{
|
|
||||||
build.vxorpd(inst.regX64, inst.regX64, build.f32x4(-0.0, -0.0, -0.0, -0.0));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
build.vmovsd(inst.regX64, src, src);
|
|
||||||
build.vxorpd(inst.regX64, inst.regX64, build.f32x4(-0.0, -0.0, -0.0, -0.0));
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!FFlag::LuauCodegenVectorTag)
|
if (!FFlag::LuauCodegenVectorTag)
|
||||||
build.vpinsrd(inst.regX64, inst.regX64, build.i32(LUA_TVECTOR), 3);
|
build.vpinsrd(inst.regX64, inst.regX64, build.i32(LUA_TVECTOR), 3);
|
||||||
|
Loading…
Reference in New Issue
Block a user