| author | |
| committer | |
| log | bdb6546a8f753fff65790fd289e35b1d5ba6cd5b |
| tree | b6fdd48647a5248ee2c83a4d15d947eb67a534a9 |
| parent | 50993a8f08595b690e0b566cea3266c5ce2c5131 |
3 files changed, 22 insertions(+), 10 deletions(-)
src/arch/x86_64/CodeGen.zig+19-6| ... | ... | @@ -9977,12 +9977,25 @@ fn genBinOp( |
| 9977 | 9977 | defer self.register_manager.unlockReg(gp_lock); |
| 9978 | 9978 | |
| 9979 | 9979 | try self.asmRegisterRegister(switch (mir_tag[0]) { |
| 9980 | ._pd, ._sd => .{ ._pd, .movmsk }, | |
| 9981 | ._ps, ._ss => .{ ._ps, .movmsk }, | |
| 9982 | .p_b, .p_d, .p_q, .p_w => .{ .p_b, .movmsk }, | |
| 9983 | .v_pd, .v_sd => .{ .v_pd, .movmsk }, | |
| 9984 | .v_ps, .v_ss => .{ .v_ps, .movmsk }, | |
| 9985 | .vp_b, .vp_d, .vp_q, .vp_w => .{ .vp_b, .movmsk }, | |
| 9980 | ._pd, ._sd, .p_q => .{ ._pd, .movmsk }, | |
| 9981 | ._ps, ._ss, .p_d => .{ ._ps, .movmsk }, | |
| 9982 | .p_b => .{ .p_b, .movmsk }, | |
| 9983 | .p_w => movmsk: { | |
| 9984 | try self.asmRegisterRegister(.{ .p_b, .ackssw }, dst_reg, dst_reg); | |
| 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 | 9999 | else => unreachable, |
| 9987 | 10000 | }, gp_reg.to32(), dst_reg); |
| 9988 | 10001 | return .{ .register = gp_reg }; |
test/behavior/math.zig+3-3| ... | ... | @@ -78,12 +78,11 @@ fn testClz() !void { |
| 78 | 78 | } |
| 79 | 79 | |
| 80 | 80 | test "@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 | 81 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 84 | 82 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 85 | 83 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |
| 86 | 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; | |
| 87 | 86 | |
| 88 | 87 | try testClzBigInts(); |
| 89 | 88 | try comptime testClzBigInts(); |
| ... | ... | @@ -1610,8 +1609,9 @@ test "vector comparison" { |
| 1610 | 1609 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 1611 | 1610 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 1612 | 1611 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 1613 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 1614 | 1612 | 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; | |
| 1615 | 1615 | |
| 1616 | 1616 | const S = struct { |
| 1617 | 1617 | fn doTheTest() !void { |
test/behavior/vector.zig-1| ... | ... | @@ -49,7 +49,6 @@ test "vector wrap operators" { |
| 49 | 49 | |
| 50 | 50 | test "vector bin compares with mem.eql" { |
| 51 | 51 | if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO |
| 52 | if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO | |
| 53 | 52 | if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO |
| 54 | 53 | if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO |
| 55 | 54 | if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO |