authorgravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-25 11:00:42-04:00
committergravatar for jacobly@ziglang.orgJacob Young <jacobly@ziglang.org> 2023-03-25 16:23:55-04:00
log6d9bdc8733419ebfc9527d114b637c57d3fd8a42
tree7a2ed1ad926b0507612563675adfed555a8471fd
parenta2f6e068b0082692f2c5475c1e31290b9c016010

x86_64: fix cmpxchg


3 files changed, 3 insertions(+), 7 deletions(-)

src/arch/x86_64/CodeGen.zig+1-1
...@@ -7242,7 +7242,7 @@ fn airCmpxchg(self: *Self, inst: Air.Inst.Index) !void {...@@ -7242,7 +7242,7 @@ fn airCmpxchg(self: *Self, inst: Air.Inst.Index) !void {
72427242
7243 try self.spillEflagsIfOccupied();7243 try self.spillEflagsIfOccupied();
7244 _ = try self.addInst(.{ .tag = .cmpxchg, .ops = .lock_mr_sib, .data = .{ .rx = .{7244 _ = try self.addInst(.{ .tag = .cmpxchg, .ops = .lock_mr_sib, .data = .{ .rx = .{
7245 .r = new_reg,7245 .r = registerAlias(new_reg, val_abi_size),
7246 .payload = try self.addExtra(Mir.MemorySib.encode(ptr_mem)),7246 .payload = try self.addExtra(Mir.MemorySib.encode(ptr_mem)),
7247 } } });7247 } } });
72487248
src/arch/x86_64/encodings.zig+2-2
...@@ -257,8 +257,8 @@ pub const table = &[_]Entry{...@@ -257,8 +257,8 @@ pub const table = &[_]Entry{
257257
258 .{ .cmpxchg, .mr, .rm8, .r8, .none, .none, &.{ 0x0f, 0xb0 }, 0, .none },258 .{ .cmpxchg, .mr, .rm8, .r8, .none, .none, &.{ 0x0f, 0xb0 }, 0, .none },
259 .{ .cmpxchg, .mr, .rm8, .r8, .none, .none, &.{ 0x0f, 0xb0 }, 0, .rex },259 .{ .cmpxchg, .mr, .rm8, .r8, .none, .none, &.{ 0x0f, 0xb0 }, 0, .rex },
260 .{ .cmpxchg, .mr, .rm16, .r16, .none, .none, &.{ 0x0f, 0xb1 }, 0, .rex },260 .{ .cmpxchg, .mr, .rm16, .r16, .none, .none, &.{ 0x0f, 0xb1 }, 0, .none },
261 .{ .cmpxchg, .mr, .rm32, .r32, .none, .none, &.{ 0x0f, 0xb1 }, 0, .rex },261 .{ .cmpxchg, .mr, .rm32, .r32, .none, .none, &.{ 0x0f, 0xb1 }, 0, .none },
262 .{ .cmpxchg, .mr, .rm64, .r64, .none, .none, &.{ 0x0f, 0xb1 }, 0, .long },262 .{ .cmpxchg, .mr, .rm64, .r64, .none, .none, &.{ 0x0f, 0xb1 }, 0, .long },
263263
264 .{ .cmpxchg8b , .m, .m64, .none, .none, .none, &.{ 0x0f, 0xc7 }, 1, .none },264 .{ .cmpxchg8b , .m, .m64, .none, .none, .none, &.{ 0x0f, 0xc7 }, 1, .none },
test/behavior/atomics.zig-4
...@@ -5,7 +5,6 @@ const expectEqual = std.testing.expectEqual;...@@ -5,7 +5,6 @@ const expectEqual = std.testing.expectEqual;
55
6test "cmpxchg" {6test "cmpxchg" {
7 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO7 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
8 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
9 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO8 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
10 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO9 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
11 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO10 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
...@@ -96,7 +95,6 @@ test "cmpxchg with ptr" {...@@ -96,7 +95,6 @@ test "cmpxchg with ptr" {
9695
97test "cmpxchg with ignored result" {96test "cmpxchg with ignored result" {
98 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO97 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
99 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
100 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO98 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
101 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO99 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
102 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO100 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
...@@ -143,7 +141,6 @@ var a_global_variable = @as(u32, 1234);...@@ -143,7 +141,6 @@ var a_global_variable = @as(u32, 1234);
143141
144test "cmpxchg on a global variable" {142test "cmpxchg on a global variable" {
145 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO143 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
146 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
147 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO144 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
148 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO145 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
149 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO146 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO
...@@ -384,7 +381,6 @@ fn testAtomicRmwInt128(comptime signedness: std.builtin.Signedness) !void {...@@ -384,7 +381,6 @@ fn testAtomicRmwInt128(comptime signedness: std.builtin.Signedness) !void {
384381
385test "atomics with different types" {382test "atomics with different types" {
386 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO383 if (builtin.zig_backend == .stage2_wasm) return error.SkipZigTest; // TODO
387 if (builtin.zig_backend == .stage2_x86_64) return error.SkipZigTest; // TODO
388 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO384 if (builtin.zig_backend == .stage2_aarch64) return error.SkipZigTest; // TODO
389 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO385 if (builtin.zig_backend == .stage2_sparc64) return error.SkipZigTest; // TODO
390 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO386 if (builtin.zig_backend == .stage2_arm) return error.SkipZigTest; // TODO