fn __atomic_compare_exchange( size: u32, ptr: [*]u8, expected: [*]u8, desired: [*]u8, success: i32, failure: i32, ) callconv(.c) i32
fn __atomic_compare_exchange( size: u32, ptr: [*]u8, expected: [*]u8, desired: [*]u8, success: i32, failure: i32, ) callconv(.c) i32 { _ = success; _ = failure; var sl = spinlocks.get(@intFromPtr(ptr)); defer sl.release(); for (ptr[0..size], 0..) |b, i| { if (expected[i] != b) break; } else { // The two objects, ptr and expected, are equal @memcpy(ptr[0..size], desired); return 1; } @memcpy(expected[0..size], ptr); return 0; }