The futex v1 syscall, see also the newer the futex2_{wait,wakeup,requeue,waitv} syscalls.
The futex_op parameter is a sub-command and flags. The sub-command defines which of the subsequent paramters are relevant.
pub fn futex(uaddr: *const anyopaque, futex_op: FUTEX_OP, val: u32, val2timeout: futex_param4, uaddr2: ?*const anyopaque, val3: u32) usize
pub fn futex(uaddr: *const anyopaque, futex_op: FUTEX_OP, val: u32, val2timeout: futex_param4, uaddr2: ?*const anyopaque, val3: u32) usize {
return syscall6(
if (@hasField(SYS, "futex") and native_arch != .hexagon) .futex else .futex_time64,
@intFromPtr(uaddr),
@as(u32, @bitCast(futex_op)),
val,
@intFromPtr(val2timeout.timeout),
@intFromPtr(uaddr2),
val3,
);
}