summaryrefslogtreecommitdiff
path: root/deps/uv/src/unix/atomic-ops.h
diff options
context:
space:
mode:
Diffstat (limited to 'deps/uv/src/unix/atomic-ops.h')
-rw-r--r--deps/uv/src/unix/atomic-ops.h11
1 files changed, 11 insertions, 0 deletions
diff --git a/deps/uv/src/unix/atomic-ops.h b/deps/uv/src/unix/atomic-ops.h
index 84e471838b..815e355238 100644
--- a/deps/uv/src/unix/atomic-ops.h
+++ b/deps/uv/src/unix/atomic-ops.h
@@ -42,6 +42,9 @@ UV_UNUSED(static int cmpxchgi(int* ptr, int oldval, int newval)) {
const int out = (*(volatile int*) ptr);
__compare_and_swap(ptr, &oldval, newval);
return out;
+#elif defined(__MVS__)
+ return __plo_CS(ptr, (unsigned int*) ptr,
+ oldval, (unsigned int*) &newval);
#else
return __sync_val_compare_and_swap(ptr, oldval, newval);
#endif
@@ -63,6 +66,14 @@ UV_UNUSED(static long cmpxchgl(long* ptr, long oldval, long newval)) {
__compare_and_swap(ptr, &oldval, newval);
# endif /* if defined(__64BIT__) */
return out;
+#elif defined (__MVS__)
+# ifdef _LP64
+ return __plo_CSGR(ptr, (unsigned long long*) ptr,
+ oldval, (unsigned long long*) &newval);
+# else
+ return __plo_CS(ptr, (unsigned int*) ptr,
+ oldval, (unsigned int*) &newval);
+# endif
#else
return __sync_val_compare_and_swap(ptr, oldval, newval);
#endif