Commit f91782c6d1

FnControlOption <70830482+FnControlOption@users.noreply.github.com>
2021-08-08 18:21:30
Skip 128-bit cmpxchg test if CMPXCHG16B is not supported
1 parent d19e170
Changed files (1)
test
behavior
test/behavior/atomics.zig
@@ -75,20 +75,28 @@ test "cmpxchg with ptr" {
 }
 
 test "128-bit cmpxchg" {
-   var x: u128 = 1234;
-   if (@cmpxchgWeak(u128, &x, 99, 5678, .SeqCst, .SeqCst)) |x1| {
-       try expect(x1 == 1234);
-   } else {
-       @panic("cmpxchg should have failed");
-   }
-
-   while (@cmpxchgWeak(u128, &x, 1234, 5678, .SeqCst, .SeqCst)) |x1| {
-       try expect(x1 == 1234);
-   }
-   try expect(x == 5678);
-
-   try expect(@cmpxchgStrong(u128, &x, 5678, 42, .SeqCst, .SeqCst) == null);
-   try expect(x == 42);
+    try test_u128_cmpxchg();
+    comptime try test_u128_cmpxchg();
+}
+
+fn test_u128_cmpxchg() !void {
+    if (std.Target.current.cpu.arch != .x86_64) return error.SkipZigTest;
+    if (comptime !std.Target.x86.featureSetHas(std.Target.current.cpu.features, .cx16)) return error.SkipZigTest;
+
+    var x: u128 = 1234;
+    if (@cmpxchgWeak(u128, &x, 99, 5678, .SeqCst, .SeqCst)) |x1| {
+        try expect(x1 == 1234);
+    } else {
+        @panic("cmpxchg should have failed");
+    }
+
+    while (@cmpxchgWeak(u128, &x, 1234, 5678, .SeqCst, .SeqCst)) |x1| {
+        try expect(x1 == 1234);
+    }
+    try expect(x == 5678);
+
+    try expect(@cmpxchgStrong(u128, &x, 5678, 42, .SeqCst, .SeqCst) == null);
+    try expect(x == 42);
 }
 
 test "cmpxchg with ignored result" {