authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-09-27 17:48:31-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2025-09-27 18:30:52-04:00
logb206b0626ae8e4fd1c50097d2f376890a48d4518
tree77b03dfcbd1f6507360ab176c14bfcc2f3ebaccc
parent237e8a5a7a9b1b007f177198a52eeb99fb5d1b43

x86_64: fix `@floatFromInt` miscomps


1 files changed, 51 insertions(+), 44 deletions(-)

src/codegen/x86_64/CodeGen.zig+51-44
......@@ -112419,7 +112419,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
112419112419 .dst_temps = .{ .mem, .unused },
112420112420 .clobbers = .{ .eflags = true },
112421112421 .each = .{ .once = &.{
112422 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
112422 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
112423112423 .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memi(.src0q, .tmp0), ._, ._ },
112424112424 .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
112425112425 .{ ._, .v_, .cvtps2ph, .memsi(.dst0x, .@"2", .tmp0), .tmp1y, .rm(.{}), ._ },
......@@ -112449,7 +112449,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
112449112449 .dst_temps = .{ .mem, .unused },
112450112450 .clobbers = .{ .eflags = true },
112451112451 .each = .{ .once = &.{
112452 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
112452 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
112453112453 .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
112454112454 .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
112455112455 .{ ._, .v_, .cvtps2ph, .memsi(.dst0q, .@"2", .tmp0), .tmp1x, .rm(.{}), ._ },
......@@ -112479,7 +112479,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
112479112479 .dst_temps = .{ .mem, .unused },
112480112480 .clobbers = .{ .eflags = true },
112481112481 .each = .{ .once = &.{
112482 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
112482 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
112483112483 .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memi(.src0q, .tmp0), ._, ._ },
112484112484 .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
112485112485 .{ ._, .v_, .cvtps2ph, .memsi(.dst0x, .@"2", .tmp0), .tmp1y, .rm(.{}), ._ },
......@@ -112509,7 +112509,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
112509112509 .dst_temps = .{ .mem, .unused },
112510112510 .clobbers = .{ .eflags = true },
112511112511 .each = .{ .once = &.{
112512 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
112512 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
112513112513 .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
112514112514 .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
112515112515 .{ ._, .v_, .cvtps2ph, .memsi(.dst0q, .@"2", .tmp0), .tmp1x, .rm(.{}), ._ },
......@@ -113103,7 +113103,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
113103113103 .dst_temps = .{ .mem, .unused },
113104113104 .clobbers = .{ .eflags = true },
113105113105 .each = .{ .once = &.{
113106 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
113106 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ },
113107113107 .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
113108113108 .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
113109113109 .{ ._, .v_, .cvtps2ph, .memi(.dst0x, .tmp0), .tmp1y, .rm(.{}), ._ },
......@@ -113133,7 +113133,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
113133113133 .dst_temps = .{ .mem, .unused },
113134113134 .clobbers = .{ .eflags = true },
113135113135 .each = .{ .once = &.{
113136 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
113136 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
113137113137 .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
113138113138 .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
113139113139 .{ ._, .v_, .cvtps2ph, .memi(.dst0q, .tmp0), .tmp1x, .rm(.{}), ._ },
......@@ -113163,7 +113163,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
113163113163 .dst_temps = .{ .mem, .unused },
113164113164 .clobbers = .{ .eflags = true },
113165113165 .each = .{ .once = &.{
113166 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
113166 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ },
113167113167 .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
113168113168 .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
113169113169 .{ ._, .v_, .cvtps2ph, .memi(.dst0x, .tmp0), .tmp1y, .rm(.{}), ._ },
......@@ -113193,7 +113193,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
113193113193 .dst_temps = .{ .mem, .unused },
113194113194 .clobbers = .{ .eflags = true },
113195113195 .each = .{ .once = &.{
113196 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
113196 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
113197113197 .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
113198113198 .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
113199113199 .{ ._, .v_, .cvtps2ph, .memi(.dst0q, .tmp0), .tmp1x, .rm(.{}), ._ },
......@@ -113503,7 +113503,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
113503113503 .dst_temps = .{ .mem, .unused },
113504113504 .clobbers = .{ .eflags = true },
113505113505 .each = .{ .once = &.{
113506 .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
113506 .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_unaligned_size_up_16), ._, ._ },
113507113507 .{ .@"0:", .v_ps, .cvtdq2, .tmp1y, .memsi(.src0y, .@"2", .tmp0), ._, ._ },
113508113508 .{ ._, .v_, .cvtps2ph, .memi(.dst0x, .tmp0), .tmp1y, .rm(.{}), ._ },
113509113509 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
......@@ -113532,7 +113532,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
113532113532 .dst_temps = .{ .mem, .unused },
113533113533 .clobbers = .{ .eflags = true },
113534113534 .each = .{ .once = &.{
113535 .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_size), ._, ._ },
113535 .{ ._, ._, .mov, .tmp0d, .sia(-8, .dst0, .add_unaligned_size_up_8), ._, ._ },
113536113536 .{ .@"0:", .v_ps, .cvtdq2, .tmp1x, .memsi(.src0x, .@"2", .tmp0), ._, ._ },
113537113537 .{ ._, .v_, .cvtps2ph, .memi(.dst0q, .tmp0), .tmp1x, .rm(.{}), ._ },
113538113538 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
......@@ -115546,7 +115546,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
115546115546 .dst_temps = .{ .mem, .unused },
115547115547 .clobbers = .{ .eflags = true },
115548115548 .each = .{ .once = &.{
115549 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
115549 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
115550115550 .{ .@"0:", .vp_d, .movsxb, .tmp1y, .memi(.src0q, .tmp0), ._, ._ },
115551115551 .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
115552115552 .{ ._, .v_ps, .mova, .memsi(.dst0y, .@"4", .tmp0), .tmp1y, ._, ._ },
......@@ -115576,7 +115576,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
115576115576 .dst_temps = .{ .mem, .unused },
115577115577 .clobbers = .{ .eflags = true },
115578115578 .each = .{ .once = &.{
115579 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
115579 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
115580115580 .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
115581115581 .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
115582115582 .{ ._, .v_ps, .mova, .memsi(.dst0x, .@"4", .tmp0), .tmp1x, ._, ._ },
......@@ -115606,7 +115606,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
115606115606 .dst_temps = .{ .mem, .unused },
115607115607 .clobbers = .{ .eflags = true },
115608115608 .each = .{ .once = &.{
115609 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
115609 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
115610115610 .{ .@"0:", .p_d, .movsxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
115611115611 .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
115612115612 .{ ._, ._ps, .mova, .memsi(.dst0x, .@"4", .tmp0), .tmp1x, ._, ._ },
......@@ -115636,7 +115636,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
115636115636 .dst_temps = .{ .mem, .unused },
115637115637 .clobbers = .{ .eflags = true },
115638115638 .each = .{ .once = &.{
115639 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
115639 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
115640115640 .{ .@"0:", .vp_d, .movzxb, .tmp1y, .memi(.src0q, .tmp0), ._, ._ },
115641115641 .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
115642115642 .{ ._, .v_ps, .mova, .memsi(.dst0y, .@"4", .tmp0), .tmp1y, ._, ._ },
......@@ -115666,7 +115666,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
115666115666 .dst_temps = .{ .mem, .unused },
115667115667 .clobbers = .{ .eflags = true },
115668115668 .each = .{ .once = &.{
115669 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
115669 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
115670115670 .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
115671115671 .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
115672115672 .{ ._, .v_ps, .mova, .memsi(.dst0x, .@"4", .tmp0), .tmp1x, ._, ._ },
......@@ -115696,7 +115696,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
115696115696 .dst_temps = .{ .mem, .unused },
115697115697 .clobbers = .{ .eflags = true },
115698115698 .each = .{ .once = &.{
115699 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
115699 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
115700115700 .{ .@"0:", .p_d, .movzxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
115701115701 .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
115702115702 .{ ._, ._ps, .mova, .memsi(.dst0x, .@"4", .tmp0), .tmp1x, ._, ._ },
......@@ -116052,7 +116052,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116052116052 .dst_temps = .{ .mem, .unused },
116053116053 .clobbers = .{ .eflags = true },
116054116054 .each = .{ .once = &.{
116055 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
116055 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ },
116056116056 .{ .@"0:", .vp_d, .movsxw, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
116057116057 .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
116058116058 .{ ._, .v_ps, .mova, .memsi(.dst0y, .@"2", .tmp0), .tmp1y, ._, ._ },
......@@ -116082,7 +116082,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116082116082 .dst_temps = .{ .mem, .unused },
116083116083 .clobbers = .{ .eflags = true },
116084116084 .each = .{ .once = &.{
116085 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
116085 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
116086116086 .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
116087116087 .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
116088116088 .{ ._, .v_ps, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ },
......@@ -116112,7 +116112,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116112116112 .dst_temps = .{ .mem, .unused },
116113116113 .clobbers = .{ .eflags = true },
116114116114 .each = .{ .once = &.{
116115 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
116115 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
116116116116 .{ .@"0:", .p_d, .movsxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
116117116117 .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
116118116118 .{ ._, ._ps, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ },
......@@ -116142,7 +116142,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116142116142 .dst_temps = .{ .mem, .unused },
116143116143 .clobbers = .{ .eflags = true },
116144116144 .each = .{ .once = &.{
116145 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
116145 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ },
116146116146 .{ .@"0:", .vp_d, .movzxw, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
116147116147 .{ ._, .v_ps, .cvtdq2, .tmp1y, .tmp1y, ._, ._ },
116148116148 .{ ._, .v_ps, .mova, .memsi(.dst0y, .@"2", .tmp0), .tmp1y, ._, ._ },
......@@ -116172,7 +116172,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116172116172 .dst_temps = .{ .mem, .unused },
116173116173 .clobbers = .{ .eflags = true },
116174116174 .each = .{ .once = &.{
116175 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
116175 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
116176116176 .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
116177116177 .{ ._, .v_ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
116178116178 .{ ._, .v_ps, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ },
......@@ -116202,7 +116202,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116202116202 .dst_temps = .{ .mem, .unused },
116203116203 .clobbers = .{ .eflags = true },
116204116204 .each = .{ .once = &.{
116205 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
116205 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
116206116206 .{ .@"0:", .p_d, .movzxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
116207116207 .{ ._, ._ps, .cvtdq2, .tmp1x, .tmp1x, ._, ._ },
116208116208 .{ ._, ._ps, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ },
......@@ -116392,7 +116392,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116392116392 .dst_temps = .{ .mem, .unused },
116393116393 .clobbers = .{ .eflags = true },
116394116394 .each = .{ .once = &.{
116395 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_size), ._, ._ },
116395 .{ ._, ._, .mov, .tmp0d, .sia(-32, .src0, .add_unaligned_size_up_32), ._, ._ },
116396116396 .{ .@"0:", .v_ps, .cvtdq2, .tmp1y, .memi(.src0y, .tmp0), ._, ._ },
116397116397 .{ ._, .v_ps, .mova, .memi(.dst0y, .tmp0), .tmp1y, ._, ._ },
116398116398 .{ ._, ._, .sub, .tmp0d, .si(32), ._, ._ },
......@@ -116421,7 +116421,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116421116421 .dst_temps = .{ .mem, .unused },
116422116422 .clobbers = .{ .eflags = true },
116423116423 .each = .{ .once = &.{
116424 .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
116424 .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_unaligned_size_up_16), ._, ._ },
116425116425 .{ .@"0:", .v_ps, .cvtdq2, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
116426116426 .{ ._, .v_ps, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
116427116427 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
......@@ -116450,7 +116450,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
116450116450 .dst_temps = .{ .mem, .unused },
116451116451 .clobbers = .{ .eflags = true },
116452116452 .each = .{ .once = &.{
116453 .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_size), ._, ._ },
116453 .{ ._, ._, .mov, .tmp0d, .sia(-16, .dst0, .add_unaligned_size_up_16), ._, ._ },
116454116454 .{ .@"0:", ._ps, .cvtdq2, .tmp1x, .memi(.src0x, .tmp0), ._, ._ },
116455116455 .{ ._, ._ps, .mova, .memi(.dst0x, .tmp0), .tmp1x, ._, ._ },
116456116456 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
......@@ -118066,7 +118066,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118066118066 .dst_temps = .{ .mem, .unused },
118067118067 .clobbers = .{ .eflags = true },
118068118068 .each = .{ .once = &.{
118069 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
118069 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
118070118070 .{ .@"0:", .vp_d, .movsxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
118071118071 .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
118072118072 .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"8", .tmp0), .tmp1y, ._, ._ },
......@@ -118096,7 +118096,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118096118096 .dst_temps = .{ .mem, .unused },
118097118097 .clobbers = .{ .eflags = true },
118098118098 .each = .{ .once = &.{
118099 .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_size), ._, ._ },
118099 .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size_up_2), ._, ._ },
118100118100 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
118101118101 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memi(.src0w, .tmp0), .ui(0) },
118102118102 .{ ._, .vp_d, .movsxb, .tmp1x, .tmp1d, ._, ._ },
......@@ -118128,7 +118128,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118128118128 .dst_temps = .{ .mem, .unused },
118129118129 .clobbers = .{ .eflags = true },
118130118130 .each = .{ .once = &.{
118131 .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_size), ._, ._ },
118131 .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size_up_2), ._, ._ },
118132118132 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
118133118133 .{ ._, .p_w, .insr, .tmp1x, .memi(.src0w, .tmp0), .ui(0), ._ },
118134118134 .{ ._, .p_d, .movsxb, .tmp1x, .tmp1d, ._, ._ },
......@@ -118160,7 +118160,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118160118160 .dst_temps = .{ .mem, .unused },
118161118161 .clobbers = .{ .eflags = true },
118162118162 .each = .{ .once = &.{
118163 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
118163 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
118164118164 .{ .@"0:", .vp_d, .movzxb, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
118165118165 .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
118166118166 .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"8", .tmp0), .tmp1y, ._, ._ },
......@@ -118190,7 +118190,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118190118190 .dst_temps = .{ .mem, .unused },
118191118191 .clobbers = .{ .eflags = true },
118192118192 .each = .{ .once = &.{
118193 .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_size), ._, ._ },
118193 .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size_up_2), ._, ._ },
118194118194 .{ .@"0:", .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
118195118195 .{ ._, .vp_w, .insr, .tmp1x, .tmp1x, .memi(.src0w, .tmp0), .ui(0) },
118196118196 .{ ._, .vp_d, .movzxb, .tmp1x, .tmp1d, ._, ._ },
......@@ -118222,7 +118222,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118222118222 .dst_temps = .{ .mem, .unused },
118223118223 .clobbers = .{ .eflags = true },
118224118224 .each = .{ .once = &.{
118225 .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_size), ._, ._ },
118225 .{ ._, ._, .mov, .tmp0d, .sia(-2, .src0, .add_unaligned_size_up_2), ._, ._ },
118226118226 .{ .@"0:", .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
118227118227 .{ ._, .p_w, .insr, .tmp1x, .memi(.src0w, .tmp0), .ui(0), ._ },
118228118228 .{ ._, .p_d, .movzxb, .tmp1x, .tmp1d, ._, ._ },
......@@ -118704,7 +118704,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118704118704 .dst_temps = .{ .mem, .unused },
118705118705 .clobbers = .{ .eflags = true },
118706118706 .each = .{ .once = &.{
118707 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
118707 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
118708118708 .{ .@"0:", .vp_d, .movsxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
118709118709 .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
118710118710 .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"4", .tmp0), .tmp1y, ._, ._ },
......@@ -118734,7 +118734,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118734118734 .dst_temps = .{ .mem, .unused },
118735118735 .clobbers = .{ .eflags = true },
118736118736 .each = .{ .once = &.{
118737 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
118737 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
118738118738 .{ .@"0:", .v_d, .mov, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
118739118739 .{ ._, .vp_d, .movsxw, .tmp1x, .tmp1q, ._, ._ },
118740118740 .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
......@@ -118765,7 +118765,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118765118765 .dst_temps = .{ .mem, .unused },
118766118766 .clobbers = .{ .eflags = true },
118767118767 .each = .{ .once = &.{
118768 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
118768 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
118769118769 .{ .@"0:", ._d, .mov, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
118770118770 .{ ._, .p_d, .movsxw, .tmp1x, .tmp1q, ._, ._ },
118771118771 .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
......@@ -118796,7 +118796,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118796118796 .dst_temps = .{ .mem, .unused },
118797118797 .clobbers = .{ .eflags = true },
118798118798 .each = .{ .once = &.{
118799 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
118799 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
118800118800 .{ .@"0:", .vp_d, .movzxw, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
118801118801 .{ ._, .v_pd, .cvtdq2, .tmp1y, .tmp1x, ._, ._ },
118802118802 .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"4", .tmp0), .tmp1y, ._, ._ },
......@@ -118826,7 +118826,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118826118826 .dst_temps = .{ .mem, .unused },
118827118827 .clobbers = .{ .eflags = true },
118828118828 .each = .{ .once = &.{
118829 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
118829 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
118830118830 .{ .@"0:", .v_d, .mov, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
118831118831 .{ ._, .vp_d, .movzxw, .tmp1x, .tmp1q, ._, ._ },
118832118832 .{ ._, .v_pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
......@@ -118857,7 +118857,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
118857118857 .dst_temps = .{ .mem, .unused },
118858118858 .clobbers = .{ .eflags = true },
118859118859 .each = .{ .once = &.{
118860 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_size), ._, ._ },
118860 .{ ._, ._, .mov, .tmp0d, .sia(-4, .src0, .add_unaligned_size_up_4), ._, ._ },
118861118861 .{ .@"0:", ._d, .mov, .tmp1x, .memi(.src0d, .tmp0), ._, ._ },
118862118862 .{ ._, .p_d, .movzxw, .tmp1x, .tmp1q, ._, ._ },
118863118863 .{ ._, ._pd, .cvtdq2, .tmp1x, .tmp1q, ._, ._ },
......@@ -119110,7 +119110,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
119110119110 .dst_temps = .{ .mem, .unused },
119111119111 .clobbers = .{ .eflags = true },
119112119112 .each = .{ .once = &.{
119113 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_size), ._, ._ },
119113 .{ ._, ._, .mov, .tmp0d, .sia(-16, .src0, .add_unaligned_size_up_16), ._, ._ },
119114119114 .{ .@"0:", .v_pd, .cvtdq2, .tmp1y, .memi(.src0x, .tmp0), ._, ._ },
119115119115 .{ ._, .v_pd, .mova, .memsi(.dst0y, .@"2", .tmp0), .tmp1y, ._, ._ },
119116119116 .{ ._, ._, .sub, .tmp0d, .si(16), ._, ._ },
......@@ -119139,7 +119139,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
119139119139 .dst_temps = .{ .mem, .unused },
119140119140 .clobbers = .{ .eflags = true },
119141119141 .each = .{ .once = &.{
119142 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
119142 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
119143119143 .{ .@"0:", .v_pd, .cvtdq2, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
119144119144 .{ ._, .v_pd, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ },
119145119145 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
......@@ -119168,7 +119168,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
119168119168 .dst_temps = .{ .mem, .unused },
119169119169 .clobbers = .{ .eflags = true },
119170119170 .each = .{ .once = &.{
119171 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_size), ._, ._ },
119171 .{ ._, ._, .mov, .tmp0d, .sia(-8, .src0, .add_unaligned_size_up_8), ._, ._ },
119172119172 .{ .@"0:", ._pd, .cvtdq2, .tmp1x, .memi(.src0q, .tmp0), ._, ._ },
119173119173 .{ ._, ._pd, .mova, .memsi(.dst0x, .@"2", .tmp0), .tmp1x, ._, ._ },
119174119174 .{ ._, ._, .sub, .tmp0d, .si(8), ._, ._ },
......@@ -193468,7 +193468,7 @@ const Select = struct {
193468193468 ref: Ref,
193469193469 scale: Memory.Scale = .@"1",
193470193470 } = .{ .ref = .none },
193471 unused: u2 = 0,
193471 unused: u1 = 0,
193472193472 },
193473193473 imm: i32 = 0,
193474193474
......@@ -193481,7 +193481,7 @@ const Select = struct {
193481193481 lea,
193482193482 mem,
193483193483 };
193484 const Adjust = packed struct(u11) {
193484 const Adjust = packed struct(u12) {
193485193485 sign: enum(u1) { neg, pos },
193486193486 lhs: enum(u6) {
193487193487 none,
......@@ -193518,7 +193518,7 @@ const Select = struct {
193518193518 umax_shr_src1,
193519193519 repeat,
193520193520 },
193521 op: enum(u2) { mul, div, div_8_down, rem_8_mul },
193521 op: enum(u3) { mul, div, div_8_down, rem_8_mul, up_2_mul, up_32_mul },
193522193522 rhs: Memory.Scale,
193523193523
193524193524 const none: Adjust = .{ .sign = .pos, .lhs = .none, .op = .mul, .rhs = .@"1" };
......@@ -193539,6 +193539,11 @@ const Select = struct {
193539193539 const add_delta_elem_size: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .mul, .rhs = .@"1" };
193540193540 const add_delta_elem_size_div_8: Adjust = .{ .sign = .pos, .lhs = .delta_elem_size, .op = .div, .rhs = .@"8" };
193541193541 const add_unaligned_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" };
193542 const add_unaligned_size_up_2: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_2_mul, .rhs = .@"1" };
193543 const add_unaligned_size_up_4: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_2_mul, .rhs = .@"2" };
193544 const add_unaligned_size_up_8: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_2_mul, .rhs = .@"4" };
193545 const add_unaligned_size_up_16: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_2_mul, .rhs = .@"8" };
193546 const add_unaligned_size_up_32: Adjust = .{ .sign = .pos, .lhs = .unaligned_size, .op = .up_32_mul, .rhs = .@"1" };
193542193547 const sub_unaligned_size: Adjust = .{ .sign = .neg, .lhs = .unaligned_size, .op = .mul, .rhs = .@"1" };
193543193548 const add_unaligned_size_add_elem_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size_add_elem_size, .op = .mul, .rhs = .@"1" };
193544193549 const add_unaligned_size_sub_elem_size: Adjust = .{ .sign = .pos, .lhs = .unaligned_size_sub_elem_size, .op = .mul, .rhs = .@"1" };
......@@ -194551,7 +194556,9 @@ const Select = struct {
194551194556 },
194552194557 .div => @shrExact(lhs, rhs),
194553194558 .div_8_down => lhs >> 3 & @as(SignedImm, -1) << rhs,
194554 .rem_8_mul => lhs & (@as(SignedImm, 1) << @intCast(@as(u3, 3) + rhs)) - 1,
194559 .rem_8_mul => lhs & ((@as(SignedImm, 8) << rhs) - 1),
194560 .up_2_mul => ((lhs - 1) & @as(SignedImm, -2) << rhs) + (@as(SignedImm, 2) << rhs),
194561 .up_32_mul => ((lhs - 1) & @as(SignedImm, -32) << rhs) + (@as(SignedImm, 32) << rhs),
194555194562 };
194556194563 const disp: SignedImm = @bitCast(@as(UnsignedImm, @as(u32, @bitCast(op.imm))));
194557194564 return switch (op.flags.adjust.sign) {