authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-12-04 13:07:33-05:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-12-04 13:09:13-05:00
logbdb6546a8f753fff65790fd289e35b1d5ba6cd5b
treeb6fdd48647a5248ee2c83a4d15d947eb67a534a9
parent50993a8f08595b690e0b566cea3266c5ce2c5131

x86_64: fix vector comparisions


3 files changed, 22 insertions(+), 10 deletions(-)

src/arch/x86_64/CodeGen.zig+19-6
...@@ -9977,12 +9977,25 @@ fn genBinOp(...@@ -9977,12 +9977,25 @@ fn genBinOp(
9977 defer self.register_manager.unlockReg(gp_lock);9977 defer self.register_manager.unlockReg(gp_lock);
99789978
9979 try self.asmRegisterRegister(switch (mir_tag[0]) {9979 try self.asmRegisterRegister(switch (mir_tag[0]) {
9980 ._pd, ._sd => .{ ._pd, .movmsk },9980 ._pd, ._sd, .p_q => .{ ._pd, .movmsk },
9981 ._ps, ._ss => .{ ._ps, .movmsk },9981 ._ps, ._ss, .p_d => .{ ._ps, .movmsk },
9982 .p_b, .p_d, .p_q, .p_w => .{ .p_b, .movmsk },9982 .p_b => .{ .p_b, .movmsk },
9983 .v_pd, .v_sd => .{ .v_pd, .movmsk },9983 .p_w => movmsk: {
9984 .v_ps, .v_ss => .{ .v_ps, .movmsk },9984 try self.asmRegisterRegister(.{ .p_b, .ackssw }, dst_reg, dst_reg);
9985 .vp_b, .vp_d, .vp_q, .vp_w => .{ .vp_b, .movmsk },9985 break :movmsk .{ .p_b, .movmsk };
9986 },
9987 .v_pd, .v_sd, .vp_q => .{ .v_pd, .movmsk },
9988 .v_ps, .v_ss, .vp_d => .{ .v_ps, .movmsk },
9989 .vp_b => .{ .vp_b, .movmsk },
9990 .vp_w => movmsk: {
9991 try self.asmRegisterRegisterRegister(
9992 .{ .vp_b, .ackssw },
9993 dst_reg,
9994 dst_reg,
9995 dst_reg,
9996 );
9997 break :movmsk .{ .vp_b, .movmsk };
9998 },
9986 else => unreachable,9999 else => unreachable,
9987 }, gp_reg.to32(), dst_reg);10000 }, gp_reg.to32(), dst_reg);
9988 return .{ .register = gp_reg };10001 return .{ .register = gp_reg };
test/behavior/math.zig+3-3
...@@ -78,12 +78,11 @@ fn testClz() !void {...@@ -78,12 +78,11 @@ fn testClz() !void {
78}78}
7979
80test "@clz big ints" {80test "@clz big ints" {
81 if (builtin.zig_backend == .stage2_x86_64 and
82 !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .lzcnt)) return error.SkipZigTest; // TODO
83 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO81 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
84 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO82 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
85 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO83 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
86 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;84 if (builtin.zig_backend == .stage2_spirv64) return error.SkipZigTest;
85 if (builtin.zig_backend == .stage2_x86_64 and builtin.target.ofmt != .elf) return error.SkipZigTest;
8786
88 try testClzBigInts();87 try testClzBigInts();
89 try comptime testClzBigInts();88 try comptime testClzBigInts();
...@@ -1610,8 +1609,9 @@ test "vector comparison" {...@@ -1610,8 +1609,9 @@ test "vector comparison" {
1610 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO1609 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
1611 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO1610 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
1612 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO1611 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
1613 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
1614 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO1612 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
1613 if (builtin.zig_backend == .stage2_x86_64 and
1614 !comptime std.Target.x86.featureSetHas(builtin.cpu.features, .avx2)) return error.SkipZigTest;
16151615
1616 const S = struct {1616 const S = struct {
1617 fn doTheTest() !void {1617 fn doTheTest() !void {
test/behavior/vector.zig-1
...@@ -49,7 +49,6 @@ test "vector wrap operators" {...@@ -49,7 +49,6 @@ test "vector wrap operators" {
4949
50test "vector bin compares with mem.eql" {50test "vector bin compares with mem.eql" {
51 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO51 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
52 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
53 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO52 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
54 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO53 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
55 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO54 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO