Commit a7efc56d86
Changed files (1)
src
arch
x86_64
src/arch/x86_64/CodeGen.zig
@@ -2669,7 +2669,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
@@ -2677,13 +2677,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb = .{
- .of = .src0y,
- .body = &.{
- .{ ._, .v_dqu, .mov, .tmp1y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_, mir_tag, .tmp1y, .tmp1y, .limb(.src1y), ._ },
- .{ ._, .v_dqu, .mov, .limb(.dst0y), .tmp1y, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_dqu, .mov, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null },
@@ -2691,7 +2691,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
@@ -2699,13 +2699,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb = .{
- .of = .src0y,
- .body = &.{
- .{ ._, .v_pd, .movu, .tmp1y, .limb(.src0y), ._, ._ },
- .{ ._, .v_pd, mir_tag, .tmp1y, .tmp1y, .limb(.src1y), ._ },
- .{ ._, .v_pd, .movu, .limb(.dst0y), .tmp1y, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_pd, .movu, .tmp1y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, mir_tag, .tmp1y, .tmp1y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movu, .memia(.dst0y, .tmp0, .add_size), .tmp1y, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null },
@@ -2713,7 +2713,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
@@ -2721,13 +2721,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb = .{
- .of = .src0x,
- .body = &.{
- .{ ._, .v_dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_, mir_tag, .tmp1x, .tmp1x, .limb(.src1x), ._ },
- .{ ._, .v_dqu, .mov, .limb(.dst0x), .tmp1x, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_, mir_tag, .tmp1x, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null },
@@ -2735,7 +2735,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
@@ -2743,13 +2743,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb = .{
- .of = .src0x,
- .body = &.{
- .{ ._, ._dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ },
- .{ ._, .p_, mir_tag, .tmp1x, .limb(.src1x), ._, ._ },
- .{ ._, ._dqu, .mov, .limb(.dst0x), .tmp1x, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._dqu, .mov, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .sse, null },
@@ -2757,7 +2757,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
@@ -2765,13 +2765,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb = .{
- .of = .src0x,
- .body = &.{
- .{ ._, ._ps, .movu, .tmp1x, .limb(.src0x), ._, ._ },
- .{ ._, ._ps, mir_tag, .tmp1x, .limb(.src1x), ._, ._ },
- .{ ._, ._ps, .movu, .limb(.dst0x), .tmp1x, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._ps, .movu, .tmp1x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, mir_tag, .tmp1x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .movu, .memia(.dst0x, .tmp0, .add_size), .tmp1x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.required_features = .{ .mmx, null },
@@ -2779,7 +2779,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .mmx } },
.unused,
.unused,
@@ -2787,20 +2787,20 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb = .{
- .of = .src0q,
- .body = &.{
- .{ ._, ._q, .mov, .tmp1q, .limb(.src0q), ._, ._ },
- .{ ._, .p_, mir_tag, .tmp1q, .limb(.src1q), ._, ._ },
- .{ ._, ._q, .mov, .limb(.dst0q), .tmp1q, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp1q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_, mir_tag, .tmp1q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._q, .mov, .memia(.dst0q, .tmp0, .add_size), .tmp1q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
}, .{
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
@@ -2808,13 +2808,13 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb = .{
- .of = .src0p,
- .body = &.{
- .{ ._, ._, .mov, .tmp1p, .limb(.src0p), ._, ._ },
- .{ ._, ._, mir_tag, .tmp1p, .limb(.src1p), ._, ._ },
- .{ ._, ._, .mov, .limb(.dst0p), .tmp1p, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, mir_tag, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp0, .add_size), .tmp1p, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .a(.tmp1, .add_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
} },
}) catch |err2| switch (err2) {
@@ -3306,7 +3306,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.clobbers = .{ .eflags = true },
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
@@ -3341,32 +3341,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0y,
- .of_mask = .dst0b,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0d), .tmp2d, ._, ._ },
- },
- .ne => &.{
- .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0d), .tmp2d, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0d, .tmp1), .tmp2d, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
},
} },
}, .{
@@ -3376,34 +3382,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0y,
- .of_mask = .dst0w,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ },
- .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ },
- },
- .ne => &.{
- .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ },
- .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .not, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .ackssw, .tmp3y, .tmp3y, .tmp3y, ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
},
} },
}, .{
@@ -3413,32 +3425,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0y,
- .of_mask = .dst0d,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ },
- .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0b), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, .v_dqu, .mov, .tmp3y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .limb(.src1y), ._ },
- .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
- .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0b), .tmp2b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp3y, .tmp3y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .movmsk, .tmp2d, .tmp3y, ._, ._ },
+ .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
},
} },
}, .{
@@ -3448,34 +3466,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rcx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0y,
- .of_mask = .dst0q,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, .v_dqu, .mov, .tmp4y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .limb(.src1y), ._ },
- .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
- .ne => &.{
- .{ ._, .v_dqu, .mov, .tmp4y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .limb(.src1y), ._ },
- .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp4y, .tmp4y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4y, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
},
} },
}, .{
@@ -3485,32 +3533,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0x,
- .of_mask = .dst0b,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, .v_dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .limb(.src1x), ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ },
- },
- .ne => &.{
- .{ ._, .v_dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .limb(.src1x), ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .not, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_b, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
},
} },
}, .{
@@ -3520,34 +3574,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0x,
- .of_mask = .dst0w,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, .v_dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .limb(.src1x), ._ },
- .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, .v_dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .limb(.src1x), ._ },
- .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
- .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_w, .cmpeq, .tmp3x, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_b, .ackssw, .tmp3x, .tmp3x, .tmp3x, ._ },
+ .{ ._, .vp_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
},
} },
}, .{
@@ -3557,34 +3617,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rcx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0x,
- .of_mask = .dst0d,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, .v_dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .limb(.src1x), ._ },
- .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
- .ne => &.{
- .{ ._, .v_dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .limb(.src1x), ._ },
- .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_d, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
},
} },
}, .{
@@ -3594,34 +3684,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rcx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0x,
- .of_mask = .dst0q,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, .v_dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .limb(.src1x), ._ },
- .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
- .ne => &.{
- .{ ._, .v_dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .limb(.src1x), ._ },
- .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .i(0b11), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_q, .cmpeq, .tmp4x, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .i(0b11), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
},
} },
}, .{
@@ -3631,32 +3751,38 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0x,
- .of_mask = .dst0b,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp3x, .limb(.src1x), ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp3x, .limb(.src1x), ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .not, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .not, .tmp2d, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0w, .tmp1), .tmp2w, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
},
} },
}, .{
@@ -3666,34 +3792,40 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0x,
- .of_mask = .dst0w,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ },
- .{ ._, .p_w, .cmpeq, .tmp3x, .limb(.src1x), ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._dqu, .mov, .tmp3x, .limb(.src0x), ._, ._ },
- .{ ._, .p_w, .cmpeq, .tmp3x, .limb(.src1x), ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
- .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp3x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp3x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp3x, .tmp3x, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3x, ._, ._ },
+ .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
},
} },
}, .{
@@ -3703,34 +3835,64 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rcx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0x,
- .of_mask = .dst0d,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ },
- .{ ._, .p_q, .cmpeq, .tmp4x, .limb(.src1x), ._, ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ },
- .{ ._, .p_d, .cmpeq, .tmp4x, .limb(.src1x), ._, ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._ps, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
},
} },
}, .{
@@ -3740,143 +3902,249 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rcx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0x,
- .of_mask = .dst0q,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ },
- .{ ._, .p_q, .cmpeq, .tmp4x, .limb(.src1x), ._, ._ },
- .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._dqu, .mov, .tmp4x, .limb(.src0x), ._, ._ },
- .{ ._, .p_q, .cmpeq, .tmp4x, .limb(.src1x), ._, ._ },
- .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .i(0b11), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp4x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_q, .cmpeq, .tmp4x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._pd, .movmsk, .tmp3d, .tmp4x, ._, ._ },
+ .{ ._, ._, .xor, .tmp3b, .i(0b11), ._, ._ },
+ .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp3, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp3), .tmp2b, ._, ._ },
},
} },
}, .{
- .required_features = .{ .mmx, null },
+ .required_features = .{ .sse, .mmx },
.src_constraints = .{ .{ .int = .byte }, .{ .int = .byte } },
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .u16, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .mmx } },
.unused,
.unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0q,
- .of_mask = .dst0b,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._dqu, .mov, .tmp3q, .limb(.src0q), ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp3q, .limb(.src1q), ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._dqu, .mov, .tmp3q, .limb(.src0q), ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp3q, .limb(.src1q), ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
- .{ ._, ._, .not, .tmp2w, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2w, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp3q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp3q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
+ .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp1), .tmp2b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 1), ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
},
} },
}, .{
- .required_features = .{ .mmx, null },
+ .required_features = .{ .sse, .mmx },
.src_constraints = .{ .{ .int = .word }, .{ .int = .word } },
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .mmx } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .mmx } },
- .unused,
- .unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0q,
- .of_mask = .dst0w,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._dqu, .mov, .tmp3q, .limb(.src0q), ._, ._ },
- .{ ._, .p_w, .cmpeq, .tmp3q, .limb(.src1q), ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp3q, .tmp3q, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._dqu, .mov, .tmp3q, .limb(.src0q), ._, ._ },
- .{ ._, .p_w, .cmpeq, .tmp3q, .limb(.src1q), ._, ._ },
- .{ ._, .p_b, .ackssw, .tmp3q, .tmp3q, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp2d, .tmp3q, ._, ._ },
- .{ ._, ._, .not, .tmp2b, ._, ._, ._ },
- .{ ._, ._, .mov, .maskLimb(.dst0w), .tmp2b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
+ .{ ._, ._, .xor, .tmp4b, .i(0b1111), ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 4), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
},
} },
}, .{
- .required_features = .{ .mmx, null },
+ .required_features = .{ .sse, .mmx },
.src_constraints = .{ .{ .int = .dword }, .{ .int = .dword } },
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .reg = .rcx } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .u32, .kind = .{ .reg = .rcx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
+ .{ .kind = .{ .rc = .mmx } },
+ .{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .mmx } },
- .unused,
},
.dst_temps = .{.mem},
- .each = .{ .limb_and_mask_limb = .{
- .of = .src0q,
- .of_mask = .dst0d,
- .body = switch (cc) {
- else => unreachable,
- .e => &.{
- .{ ._, ._dqu, .mov, .tmp4q, .limb(.src0q), ._, ._ },
- .{ ._, .p_q, .cmpeq, .tmp4q, .limb(.src1q), ._, ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp4q, ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
- .ne => &.{
- .{ ._, ._dqu, .mov, .tmp4q, .limb(.src0q), ._, ._ },
- .{ ._, .p_q, .cmpeq, .tmp4q, .limb(.src1q), ._, ._ },
- .{ ._, ._ps, .movmsk, .tmp3d, .tmp4q, ._, ._ },
- .{ ._, ._, .xor, .tmp3b, .i(0b1111), ._, ._ },
- .{ ._, ._l, .ro, .tmp3b, .tmp1b, ._, ._ },
- .{ ._, ._, .@"or", .tmp2b, .tmp3b, ._, ._ },
- },
+ .each = .{ .once = switch (cc) {
+ else => unreachable,
+ .e => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
+ },
+ .ne => &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ ._, .p_, .xor, .tmp3q, .tmp3q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp5q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_d, .cmpeq, .tmp5q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_w, .ackssd, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .ackssw, .tmp5q, .tmp3q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp4d, .tmp5q, ._, ._ },
+ .{ ._, ._, .xor, .tmp4b, .i(0b11), ._, ._ },
+ .{ ._, ._l, .ro, .tmp4b, .tmp1b, ._, ._ },
+ .{ ._, ._, .@"or", .tmp2b, .tmp4b, ._, ._ },
+ .{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, 2), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memid(.dst0b, .tmp4, -1), .tmp2b, ._, ._ },
+ .{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ },
+ .{ .@"1:", ._, .add, .tmp0p, .i(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ },
+ .{ ._, ._z, .j, .@"0f", ._, ._, ._ },
+ .{ ._, ._, .mov, .tmp4d, .tmp1d, ._, ._ },
+ .{ ._, ._r, .sh, .tmp4d, .i(3), ._, ._ },
+ .{ ._, ._, .mov, .memi(.dst0b, .tmp4), .tmp2b, ._, ._ },
},
} },
}, .{
@@ -3887,7 +4155,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -3915,7 +4183,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -3944,7 +4212,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -3972,7 +4240,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -4001,7 +4269,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -4029,7 +4297,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -4058,7 +4326,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -4087,7 +4355,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -4185,7 +4453,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
@@ -4214,7 +4482,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
@@ -4244,7 +4512,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
@@ -4273,7 +4541,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
@@ -4303,7 +4571,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
@@ -4332,7 +4600,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
@@ -4362,7 +4630,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
@@ -4392,7 +4660,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
@@ -4493,7 +4761,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
@@ -4523,7 +4791,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .rc = .general_purpose } },
@@ -4553,7 +4821,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
@@ -4582,7 +4850,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u16, .kind = .{ .rc = .general_purpose } },
@@ -4612,7 +4880,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
@@ -4642,7 +4910,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .rc = .general_purpose } },
@@ -4672,7 +4940,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
@@ -4702,7 +4970,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u8, .kind = .{ .reg = .cl } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
.{ .type = .u64, .kind = .{ .rc = .general_purpose } },
@@ -4803,7 +5071,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
@@ -4822,15 +5090,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
.{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
.{ ._, ._, .add, .tmp1d, .i(1), ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .ia(-1, .tmp2, .add_bit_size), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .ia(-1, .none, .add_ptr_bit_size), ._, ._ },
.{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
.{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_access_size), .tmp2p, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
.{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
.{ .@"1:", ._, .add, .tmp0p, .i(1), ._, ._ },
.{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .ia(-1, .tmp2, .add_bit_size), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .ia(-1, .none, .add_ptr_bit_size), ._, ._ },
.{ ._, ._z, .j, .@"0f", ._, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
.{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
@@ -4842,7 +5110,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .u32, .kind = .{ .reg = .ecx } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
@@ -4861,15 +5129,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ ._, ._l, .sh, .tmp3p, .tmp1b, ._, ._ },
.{ ._, ._, .@"or", .tmp2p, .tmp3p, ._, ._ },
.{ ._, ._, .inc, .tmp1d, ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .ia(-1, .tmp2, .add_bit_size), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .ia(-1, .none, .add_ptr_bit_size), ._, ._ },
.{ ._, ._nz, .j, .@"1f", ._, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
.{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
- .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_access_size), .tmp2p, ._, ._ },
+ .{ ._, ._, .mov, .memia(.dst0p, .tmp3, .sub_ptr_size), .tmp2p, ._, ._ },
.{ ._, ._, .xor, .tmp2d, .tmp2d, ._, ._ },
.{ .@"1:", ._, .inc, .tmp0p, ._, ._, ._ },
.{ ._, ._nz, .j, .@"0b", ._, ._, ._ },
- .{ ._, ._, .@"test", .tmp1d, .ia(-1, .tmp2, .add_bit_size), ._, ._ },
+ .{ ._, ._, .@"test", .tmp1d, .ia(-1, .none, .add_ptr_bit_size), ._, ._ },
.{ ._, ._z, .j, .@"0f", ._, ._, ._ },
.{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ },
.{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ },
@@ -5040,8 +5308,8 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .type = .bool, .kind = .{ .rc = .general_purpose } },
.unused,
.unused,
.unused,
@@ -5049,18 +5317,16 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
},
.clobbers = .{ .eflags = true },
.dst_temps = .{.{ .rc = .general_purpose }},
- .each = .{ .limb = .{
- .of = .src0p,
- .header = &.{
- .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
- },
- .body = &.{
- .{ ._, ._, .mov, .tmp0p, .limb(.src0p), ._, ._ },
- .{ ._, ._r, .sh, .tmp1b, .i(1), ._, ._ },
- .{ ._, ._, .sbb, .tmp0p, .limb(.src1p), ._, ._ },
- .{ ._, ._c, .set, .tmp1b, ._, ._, ._ },
- .{ ._, .fromCondition(cc), .set, .dst0b, ._, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1b, .tmp1b, ._, ._ },
+ .{ .@"0:", ._r, .sh, .tmp1b, .i(1), ._, ._ },
+ .{ ._, ._, .mov, .tmp1p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .sbb, .tmp1p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._c, .set, .tmp1b, ._, ._, ._ },
+ .{ ._, .fromCondition(cc), .set, .dst0b, ._, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .a(.tmp1, .add_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
} },
} },
}) catch |err| switch (err) {
@@ -5296,35 +5562,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
- .{ .kind = .{ .rc = .sse } },
- .{ .kind = .{ .rc = .sse } },
- .unused,
- .unused,
- .unused,
- },
- .dst_temps = .{.{ .cc = cc }},
- .each = .{ .limb = .{
- .of = .src0y,
- .header = &.{
- .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .tmp2y, ._ },
- },
- .body = &.{
- .{ ._, .v_dqu, .mov, .tmp1y, .limb(.src0y), ._, ._ },
- .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .limb(.src1y), ._ },
- .{ ._, .vp_, .@"or", .tmp2y, .tmp2y, .tmp1y, ._ },
- },
- .trailer = &.{
- .{ ._, .vp_, .@"test", .tmp2y, .tmp2y, ._, ._ },
- },
- } },
- }, .{
- .required_features = .{ .avx, null },
- .patterns = &.{
- .{ .src = .{ .to_mem, .to_mem } },
- },
- .extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.{ .kind = .{ .rc = .sse } },
.unused,
@@ -5332,19 +5570,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.{ .cc = cc }},
- .each = .{ .limb = .{
- .of = .src0y,
- .header = &.{
- .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .tmp2y, ._ },
- },
- .body = &.{
- .{ ._, .v_pd, .movu, .tmp1y, .limb(.src0y), ._, ._ },
- .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .limb(.src1y), ._ },
- .{ ._, .v_pd, .@"or", .tmp2y, .tmp2y, .tmp1y, ._ },
- },
- .trailer = &.{
- .{ ._, .vp_, .@"test", .tmp2y, .tmp2y, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .vp_, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null },
@@ -5352,7 +5586,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.{ .kind = .{ .rc = .sse } },
.unused,
@@ -5360,19 +5594,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.{ .cc = cc }},
- .each = .{ .limb = .{
- .of = .src0x,
- .header = &.{
- .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
- },
- .body = &.{
- .{ ._, .v_dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .limb(.src1x), ._ },
- .{ ._, .vp_, .@"or", .tmp2x, .tmp2x, .tmp1x, ._ },
- },
- .trailer = &.{
- .{ ._, .vp_, .@"test", .tmp2x, .tmp2x, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, .v_pd, .xor, .tmp1y, .tmp1y, .tmp1y, ._ },
+ .{ .@"0:", .v_pd, .movu, .tmp2y, .memia(.src0y, .tmp0, .add_size), ._, ._ },
+ .{ ._, .v_pd, .xor, .tmp2y, .tmp2y, .memia(.src1y, .tmp0, .add_size), ._ },
+ .{ ._, .v_pd, .@"or", .tmp1y, .tmp1y, .tmp2y, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(32), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_, .@"test", .tmp1y, .tmp1y, ._, ._ },
} },
}, .{
.required_features = .{ .avx, null },
@@ -5380,7 +5610,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.{ .kind = .{ .rc = .sse } },
.unused,
@@ -5388,19 +5618,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.{ .cc = cc }},
- .each = .{ .limb = .{
- .of = .src0x,
- .header = &.{
- .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .tmp2x, ._ },
- },
- .body = &.{
- .{ ._, .v_dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ },
- .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .limb(.src1x), ._ },
- .{ ._, .vp_, .@"or", .tmp2x, .tmp2x, .tmp1x, ._ },
- },
- .trailer = &.{
- .{ ._, .vp_, .@"test", .tmp2x, .tmp2x, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp1x, .tmp1x, .tmp1x, ._ },
+ .{ .@"0:", .v_dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .vp_, .xor, .tmp2x, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._ },
+ .{ ._, .vp_, .@"or", .tmp1x, .tmp1x, .tmp2x, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .vp_, .@"test", .tmp1x, .tmp1x, ._, ._ },
} },
}, .{
.required_features = .{ .sse4_1, null },
@@ -5408,7 +5634,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.{ .kind = .{ .rc = .sse } },
.unused,
@@ -5416,19 +5642,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.{ .cc = cc }},
- .each = .{ .limb = .{
- .of = .src0x,
- .header = &.{
- .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- },
- .body = &.{
- .{ ._, ._dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ },
- .{ ._, .p_, .xor, .tmp1x, .limb(.src1x), ._, ._ },
- .{ ._, .p_, .@"or", .tmp2x, .tmp1x, ._, ._ },
- },
- .trailer = &.{
- .{ ._, .p_, .@"test", .tmp2x, .tmp2x, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_, .@"test", .tmp1x, .tmp1x, ._, ._ },
} },
}, .{
.required_features = .{ .sse2, null },
@@ -5436,7 +5658,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .sse } },
.{ .kind = .{ .rc = .sse } },
.unused,
@@ -5444,22 +5666,18 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.{ .cc = cc }},
- .each = .{ .limb = .{
- .of = .src0x,
- .header = &.{
- .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
- },
- .body = &.{
- .{ ._, ._dqu, .mov, .tmp1x, .limb(.src0x), ._, ._ },
- .{ ._, .p_, .xor, .tmp1x, .limb(.src1x), ._, ._ },
- .{ ._, .p_, .@"or", .tmp2x, .tmp1x, ._, ._ },
- },
- .trailer = &.{
- .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp2x, .tmp1x, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp0d, .tmp2x, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .i(0xffff), ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp1x, .tmp1x, ._, ._ },
+ .{ .@"0:", ._dqu, .mov, .tmp2x, .memia(.src0x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .memia(.src1x, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_, .@"or", .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(16), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp1x, .tmp2x, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp0d, .tmp1x, ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .i(0xffff), ._, ._ },
} },
}, .{
.required_features = .{ .sse, .mmx },
@@ -5467,7 +5685,7 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .kind = .{ .rc = .mmx } },
.{ .kind = .{ .rc = .mmx } },
.unused,
@@ -5475,29 +5693,25 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.{ .cc = cc }},
- .each = .{ .limb = .{
- .of = .src0q,
- .header = &.{
- .{ ._, .p_, .xor, .tmp2q, .tmp2q, ._, ._ },
- },
- .body = &.{
- .{ ._, ._q, .mov, .tmp1q, .limb(.src0q), ._, ._ },
- .{ ._, .p_, .xor, .tmp1q, .limb(.src1q), ._, ._ },
- .{ ._, .p_, .@"or", .tmp2q, .tmp1q, ._, ._ },
- },
- .trailer = &.{
- .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ },
- .{ ._, .p_b, .cmpeq, .tmp2q, .tmp1q, ._, ._ },
- .{ ._, .p_b, .movmsk, .tmp0d, .tmp2q, ._, ._ },
- .{ ._, ._, .xor, .tmp0d, .i(0xff), ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp1q, .tmp1q, ._, ._ },
+ .{ .@"0:", ._q, .mov, .tmp2q, .memia(.src0q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_, .xor, .tmp2q, .memia(.src1q, .tmp0, .add_size), ._, ._ },
+ .{ ._, .p_, .@"or", .tmp1q, .tmp2q, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .i(8), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, .p_, .xor, .tmp2q, .tmp2q, ._, ._ },
+ .{ ._, .p_b, .cmpeq, .tmp1q, .tmp2q, ._, ._ },
+ .{ ._, .p_b, .movmsk, .tmp0d, .tmp1q, ._, ._ },
+ .{ ._, ._, .cmp, .tmp0d, .i(0xff), ._, ._ },
} },
}, .{
.patterns = &.{
.{ .src = .{ .to_mem, .to_mem } },
},
.extra_temps = .{
- .{ .type = .usize, .kind = .{ .rc = .general_purpose } },
+ .{ .type = .isize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.{ .type = .usize, .kind = .{ .rc = .general_purpose } },
.unused,
@@ -5505,19 +5719,15 @@ fn genBody(cg: *CodeGen, body: []const Air.Inst.Index) InnerError!void {
.unused,
},
.dst_temps = .{.{ .cc = cc }},
- .each = .{ .limb = .{
- .of = .src0p,
- .header = &.{
- .{ ._, ._, .xor, .tmp2p, .tmp2p, ._, ._ },
- },
- .body = &.{
- .{ ._, ._, .mov, .tmp1p, .limb(.src0p), ._, ._ },
- .{ ._, ._, .xor, .tmp1p, .limb(.src1p), ._, ._ },
- .{ ._, ._, .@"or", .tmp2p, .tmp1p, ._, ._ },
- },
- .trailer = &.{
- .{ ._, ._, .@"test", .tmp2p, .tmp2p, ._, ._ },
- },
+ .each = .{ .once = &.{
+ .{ ._, ._, .mov, .tmp0p, .a(.src0, .sub_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp1p, .tmp1p, ._, ._ },
+ .{ .@"0:", ._, .mov, .tmp2p, .memia(.src0p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .xor, .tmp2p, .memia(.src1p, .tmp0, .add_size), ._, ._ },
+ .{ ._, ._, .@"or", .tmp1p, .tmp2p, ._, ._ },
+ .{ ._, ._, .add, .tmp0p, .a(.tmp2, .add_size), ._, ._ },
+ .{ ._, ._nc, .j, .@"0b", ._, ._, ._ },
+ .{ ._, ._, .@"test", .tmp1p, .tmp1p, ._, ._ },
} },
} },
}) catch |err| switch (err) {
@@ -24063,8 +24273,6 @@ const Select = struct {
backward: ?Mir.Inst.Index,
forward: [1]?Mir.Inst.Index,
},
- limb: Memory.Mod.Rm,
- mask_limb: Memory.Mod.Rm,
fn emitLabel(s: *Select, label_index: Label) void {
if (label_index == ._) return;
@@ -24112,23 +24320,6 @@ const Select = struct {
dst_temps: [@intFromEnum(Select.Operand.Ref.src0) - @intFromEnum(Select.Operand.Ref.dst0)]TempSpec.Kind = @splat(.unused),
each: union(enum) {
once: []const Instruction,
- limb: struct {
- of: Select.Operand.Ref.Sized,
- header: []const Instruction = &.{},
- first: ?[]const Instruction = null,
- body: []const Instruction,
- last: ?[]const Instruction = null,
- trailer: []const Instruction = &.{},
- },
- limb_and_mask_limb: struct {
- of: Select.Operand.Ref.Sized,
- of_mask: Select.Operand.Ref.Sized,
- header: []const Instruction = &.{},
- first: ?[]const Instruction = null,
- body: []const Instruction,
- last: ?[]const Instruction = null,
- trailer: []const Instruction = &.{},
- },
},
};
@@ -24349,26 +24540,20 @@ const Select = struct {
backward_label,
forward_label,
ref,
- limb,
- mask_limb,
simm,
lea,
mem,
};
const Adjust = enum {
none,
- add_access_size,
- sub_access_size,
+ add_ptr_size,
+ sub_ptr_size,
+ add_ptr_bit_size,
+ sub_ptr_bit_size,
add_size,
sub_size,
- add_bit_size,
- sub_bit_size,
- add_limbs,
- sub_limbs,
add_len,
sub_len,
- add_elem_size,
- sub_elem_size,
add_elem_limbs,
sub_elem_limbs,
};
@@ -24435,6 +24620,15 @@ const Select = struct {
const tmp4x: Sized = .{ .ref = .tmp4, .size = .xword };
const tmp4y: Sized = .{ .ref = .tmp4, .size = .yword };
+ const tmp5: Sized = .{ .ref = .tmp5, .size = .none };
+ const tmp5b: Sized = .{ .ref = .tmp5, .size = .byte };
+ const tmp5w: Sized = .{ .ref = .tmp5, .size = .word };
+ const tmp5d: Sized = .{ .ref = .tmp5, .size = .dword };
+ const tmp5p: Sized = .{ .ref = .tmp5, .size = .ptr };
+ const tmp5q: Sized = .{ .ref = .tmp5, .size = .qword };
+ const tmp5x: Sized = .{ .ref = .tmp5, .size = .xword };
+ const tmp5y: Sized = .{ .ref = .tmp5, .size = .yword };
+
const dst0: Sized = .{ .ref = .dst0, .size = .none };
const dst0b: Sized = .{ .ref = .dst0, .size = .byte };
const dst0w: Sized = .{ .ref = .dst0, .size = .word };
@@ -24515,6 +24709,14 @@ const Select = struct {
const tmp4x: Select.Operand = .{ .tag = .ref, .base = .tmp4x };
const tmp4y: Select.Operand = .{ .tag = .ref, .base = .tmp4y };
+ const tmp5b: Select.Operand = .{ .tag = .ref, .base = .tmp5b };
+ const tmp5w: Select.Operand = .{ .tag = .ref, .base = .tmp5w };
+ const tmp5d: Select.Operand = .{ .tag = .ref, .base = .tmp5d };
+ const tmp5p: Select.Operand = .{ .tag = .ref, .base = .tmp5p };
+ const tmp5q: Select.Operand = .{ .tag = .ref, .base = .tmp5q };
+ const tmp5x: Select.Operand = .{ .tag = .ref, .base = .tmp5x };
+ const tmp5y: Select.Operand = .{ .tag = .ref, .base = .tmp5y };
+
const dst0b: Select.Operand = .{ .tag = .ref, .base = .dst0b };
const dst0w: Select.Operand = .{ .tag = .ref, .base = .dst0w };
const dst0d: Select.Operand = .{ .tag = .ref, .base = .dst0d };
@@ -24539,13 +24741,6 @@ const Select = struct {
const src1x: Select.Operand = .{ .tag = .ref, .base = .src1x };
const src1y: Select.Operand = .{ .tag = .ref, .base = .src1y };
- fn limb(ref: Ref.Sized) Select.Operand {
- return .{ .tag = .limb, .base = ref };
- }
- fn maskLimb(ref: Ref.Sized) Select.Operand {
- return .{ .tag = .mask_limb, .base = ref };
- }
-
fn i(imm: i32) Select.Operand {
return .{ .tag = .simm, .imm = imm };
}
@@ -24673,28 +24868,14 @@ const Select = struct {
fn adjustedImm(op: Select.Operand, s: *const Select) i32 {
return switch (op.adjust) {
.none => op.imm,
- .add_access_size => op.imm + @as(i32, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8))),
- .sub_access_size => op.imm - @as(i32, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8))),
+ .add_ptr_size => op.imm + @divExact(s.cg.target.ptrBitWidth(), 8),
+ .sub_ptr_size => op.imm - @divExact(s.cg.target.ptrBitWidth(), 8),
+ .add_ptr_bit_size => op.imm + s.cg.target.ptrBitWidth(),
+ .sub_ptr_bit_size => op.imm - s.cg.target.ptrBitWidth(),
.add_size => op.imm + @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu))),
.sub_size => op.imm - @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu))),
- .add_bit_size => op.imm + @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).bitSize(s.cg.pt.zcu))),
- .sub_bit_size => op.imm - @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).bitSize(s.cg.pt.zcu))),
- .add_limbs => op.imm + @as(i32, @intCast(@divExact(
- op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu),
- @divExact(op.base.size.bitSize(s.cg.target), 8),
- ))),
- .sub_limbs => op.imm + @as(i32, @intCast(@divExact(
- op.base.ref.deref(s).typeOf(s.cg).abiSize(s.cg.pt.zcu),
- @divExact(op.base.size.bitSize(s.cg.target), 8),
- ))),
.add_len => op.imm + @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu))),
.sub_len => op.imm - @as(i32, @intCast(op.base.ref.deref(s).typeOf(s.cg).vectorLen(s.cg.pt.zcu))),
- .add_elem_size => op.imm + @as(i32, @intCast(
- op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu),
- )),
- .sub_elem_size => op.imm - @as(i32, @intCast(
- op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu),
- )),
.add_elem_limbs => op.imm + @as(i32, @intCast(@divExact(
op.base.ref.deref(s).typeOf(s.cg).scalarType(s.cg.pt.zcu).abiSize(s.cg.pt.zcu),
@divExact(op.base.size.bitSize(s.cg.target), 8),
@@ -24726,7 +24907,6 @@ const Select = struct {
else => |mcv| .{ .mem = try mcv.mem(s.cg, .{ .size = op.base.size }) },
.register => |reg| .{ .reg = registerAlias(reg, @intCast(@divExact(op.base.size.bitSize(s.cg.target), 8))) },
},
- inline .limb, .mask_limb => |kind| .{ .mem = try op.base.ref.deref(s).tracking(s.cg).short.mem(s.cg, @field(s, @tagName(kind))) },
.simm => .{ .imm = .s(op.adjustedImm(s)) },
.lea => .{ .mem = .{
.base = .{ .reg = registerAlias(op.base.ref.deref(s).tracking(s.cg).short.register, @divExact(s.cg.target.ptrBitWidth(), 8)) },
@@ -24775,8 +24955,6 @@ fn select(
.cg = cg,
.temps = undefined,
.labels = @splat(.{ .forward = @splat(null), .backward = null }),
- .limb = undefined,
- .mask_limb = undefined,
};
const tmp_slots = s.temps[@intFromEnum(Select.Operand.Ref.tmp0)..@intFromEnum(Select.Operand.Ref.dst0)];
const dst_slots = s.temps[@intFromEnum(Select.Operand.Ref.dst0)..@intFromEnum(Select.Operand.Ref.src0)];
@@ -24797,74 +24975,11 @@ fn select(
@memcpy(dst_slots[0..dst_temps.len], dst_temps);
switch (case.each) {
- .once => |body| for (body) |inst| try s.emit(inst),
- .limb => |limb| {
- const limb_of_size: i32 = @intCast(limb.of.ref.deref(&s).typeOf(cg).abiSize(cg.pt.zcu));
- s.limb = .{
- .size = limb.of.size,
- .index = (try Select.Operand.tmp0p.lower(&s)).reg,
- .disp = limb_of_size,
- };
- for (limb.header) |inst| try s.emit(inst);
- try s.emit(.{ ._, ._, .mov, .tmp0p, .i(-limb_of_size), ._, ._ });
- assert(s.labels[0].backward == null);
- s.labels[0].backward = @intCast(cg.mir_instructions.len);
- for (limb.body) |inst| try s.emit(inst);
- try s.emit(.{ ._, ._, .add, .tmp0p, .i(@intCast(@divExact(limb.of.size.bitSize(cg.target), 8))), ._, ._ });
- try s.emit(.{ ._, ._nc, .j, .@"0b", ._, ._, ._ });
- for (limb.trailer) |inst| try s.emit(inst);
- },
- .limb_and_mask_limb => |limb| {
- const limb_of_size: i32 = @intCast(limb.of.ref.deref(&s).typeOf(cg).abiSize(cg.pt.zcu));
- s.limb = .{
- .size = limb.of.size,
- .index = (try Select.Operand.tmp0p.lower(&s)).reg,
- .disp = limb_of_size,
- };
- const mask_limb_bit_size: u31 = @intCast(@divExact(
- limb.of.size.bitSize(cg.target),
- limb.of_mask.size.bitSize(cg.target),
- ));
- if (mask_limb_bit_size >= 8) {
- s.mask_limb = .{
- .size = .fromBitSize(mask_limb_bit_size),
- .index = (try Select.Operand.tmp1p.lower(&s)).reg,
- };
- for (limb.header) |inst| try s.emit(inst);
- try s.emit(.{ ._, ._, .mov, .tmp0p, .i(-limb_of_size), ._, ._ });
- try s.emit(.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ });
- assert(s.labels[0].backward == null);
- s.labels[0].backward = @intCast(cg.mir_instructions.len);
- for (limb.body) |inst| try s.emit(inst);
- try s.emit(.{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, @divExact(mask_limb_bit_size, 8)), ._, ._ });
- try s.emit(.{ ._, ._, .add, .tmp0p, .i(@intCast(@divExact(limb.of.size.bitSize(cg.target), 8))), ._, ._ });
- try s.emit(.{ ._, ._nc, .j, .@"0b", ._, ._, ._ });
- for (limb.trailer) |inst| try s.emit(inst);
- } else {
- for (limb.header) |inst| try s.emit(inst);
- try s.emit(.{ ._, ._, .mov, .tmp0p, .i(-limb_of_size), ._, ._ });
- try s.emit(.{ ._, ._, .xor, .tmp1d, .tmp1d, ._, ._ });
- try s.emit(.{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ });
- assert(s.labels[0].backward == null);
- s.labels[0].backward = @intCast(cg.mir_instructions.len);
- for (limb.body) |inst| try s.emit(inst);
- try s.emit(.{ ._, ._, .lea, .tmp1d, .lead(.none, .tmp1, mask_limb_bit_size), ._, ._ });
- try s.emit(.{ ._, ._, .@"test", .tmp1d, .i(0b111), ._, ._ });
- try s.emit(.{ ._, ._nz, .j, .@"1f", ._, ._, ._ });
- try s.emit(.{ ._, ._, .mov, .tmp3d, .tmp1d, ._, ._ });
- try s.emit(.{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ });
- try s.emit(.{ ._, ._, .mov, .memid(.{ .ref = limb.of_mask.ref, .size = .byte }, .tmp3, -1), .tmp2b, ._, ._ });
- try s.emit(.{ ._, ._, .xor, .tmp2b, .tmp2b, ._, ._ });
- try s.emit(.{ .@"1:", ._, .add, .tmp0p, .i(@intCast(@divExact(limb.of.size.bitSize(cg.target), 8))), ._, ._ });
- try s.emit(.{ ._, ._nc, .j, .@"0b", ._, ._, ._ });
- try s.emit(.{ ._, ._, .lea, .tmp3d, .lead(.none, .tmp1, -1), ._, ._ });
- try s.emit(.{ ._, ._r, .sh, .tmp3d, .i(3), ._, ._ });
- try s.emit(.{ ._, ._, .mov, .memi(.{ .ref = limb.of_mask.ref, .size = .byte }, .tmp3), .tmp2b, ._, ._ });
- for (limb.trailer) |inst| try s.emit(inst);
- }
+ .once => |body| {
+ for (body) |inst| try s.emit(inst);
+ s.emitLabel(.@"0:");
},
}
- s.emitLabel(.@"0:");
for (dst_temps, case.dst_temps[0..dst_temps.len]) |dst_temp, dst_kind| dst_kind.finish(dst_temp, &s);
for (case.extra_temps, tmp_slots) |spec, temp| if (spec.kind != .unused) try temp.die(cg);