commit f91782c6d1f7a8ef1ee3196147bb33c9e1ac059d (tree)
parent d19e1709b315d03d32138211140108308e540e3e
Author: FnControlOption <70830482+FnControlOption@users.noreply.github.com>
Date: Sun, 8 Aug 2021 09:21:30 -0700
Skip 128-bit cmpxchg test if CMPXCHG16B is not supported
Diffstat:
1 file changed, 22 insertions(+), 14 deletions(-)
diff --git a/test/behavior/atomics.zig b/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" {