+#elif defined(__OpenBSD__)
+
+static inline int futex_noasync(int32_t *uaddr, int op, int32_t val,
+ const struct timespec *timeout, int32_t *uaddr2, int32_t val3)
+{
+ int ret;
+
+ /*
+ * Check that val3 is zero. Don't let users expect that it is
+ * taken into account.
+ */
+ urcu_posix_assert(!val3);
+
+ ret = futex((volatile uint32_t *) uaddr, op, val, timeout,
+ (volatile uint32_t *) uaddr2);
+ if (caa_unlikely(ret < 0 && errno == ENOSYS)) {
+ return compat_futex_noasync(uaddr, op, val, timeout,
+ uaddr2, val3);
+ }
+ return ret;
+}
+
+static inline int futex_async(int32_t *uaddr, int op, int32_t val,
+ const struct timespec *timeout, int32_t *uaddr2, int32_t val3)
+{
+ int ret;
+
+ /*
+ * Check that val3 is zero. Don't let users expect that it is
+ * taken into account.
+ */
+ urcu_posix_assert(!val3);
+
+ ret = futex((volatile uint32_t *) uaddr, op, val, timeout,
+ (volatile uint32_t *) uaddr2);
+ if (caa_unlikely(ret < 0 && errno == ENOSYS)) {
+ return compat_futex_async(uaddr, op, val, timeout,
+ uaddr2, val3);
+ }
+ return ret;
+}
+