diff --git a/src/libs/compat/freebsd_network/compat/machine/atomic.h b/src/libs/compat/freebsd_network/compat/machine/atomic.h index 41cb7c5b6c..9c3c78a0fd 100644 --- a/src/libs/compat/freebsd_network/compat/machine/atomic.h +++ b/src/libs/compat/freebsd_network/compat/machine/atomic.h @@ -1,5 +1,5 @@ /* - * Copyright 2007, Hugo Santos. All Rights Reserved. + * Copyright 2025, Haiku, Inc. All rights reserved. * Distributed under the terms of the MIT License. */ #ifndef _FBSD_COMPAT_MACHINE_ATOMIC_H_ @@ -9,39 +9,37 @@ #include -#define atomic_add_int(ptr, value) \ - atomic_add((int32 *)(ptr), value) +#define atomic_load_32(ptr) atomic_get((int32*)ptr) +#define atomic_set_32(ptr, val) (void)atomic_set((int32*)ptr, val) +#define atomic_fetchadd_32(ptr, val) atomic_add((int32*)ptr, val) +#define atomic_add_32(ptr, val) (void)atomic_add((int32*)ptr, val) +#define atomic_subtract_32(ptr, val) (void)atomic_add((int32*)ptr, -val) +#define atomic_readandclear_32(ptr) atomic_set((int32*)ptr, 0) +#define atomic_cmpset_32(ptr, old, new) \ + (atomic_test_and_set((int32*)ptr, new, old) == old) -#define atomic_subtract_int(ptr, value) \ - atomic_add((int32 *)(ptr), -value) +#define atomic_load_acq_32 atomic_load_32 +#define atomic_set_acq_32 atomic_set_32 -#define atomic_load_int(ptr) \ - atomic_get((int32 *)ptr) +#define atomic_load_64(ptr) atomic_get64((int64*)ptr) -#define atomic_set_acq_32(ptr, value) \ - atomic_set_int(ptr, value) -#define atomic_set_int(ptr, value) \ - atomic_or((int32 *)(ptr), value) +#define atomic_add_int atomic_add_32 +#define atomic_subtract_int atomic_subtract_32 +#define atomic_set_int atomic_set_32 +#define atomic_load_int atomic_load_32 +#define atomic_cmpset_int atomic_cmpset_32 -#define atomic_readandclear_int(ptr) \ - atomic_set((int32 *)(ptr), 0) +#define atomic_store_rel_int atomic_set_32 +#define atomic_cmpset_acq_int atomic_cmpset_32 +#define atomic_readandclear_int atomic_readandclear_32 -#define atomic_cmpset_int(ptr, old, new) \ - (atomic_test_and_set((int32 *)(ptr), new, old) == (int32)old) +#define atomic_load_long atomic_load_64 -#define atomic_add_32 atomic_add_int -#define atomic_subtract_32 atomic_subtract_int -#define atomic_load_acq_32 atomic_load_int -#define atomic_store_rel_int atomic_set_acq_32 -#define atomic_cmpset_acq_int atomic_cmpset_int - -#define atomic_load_32(ptr) (*(volatile uint32 *)(ptr)) -#define atomic_set_32(ptr, val) atomic_set((int32 *)ptr, val) -#define atomic_fetchadd_32(ptr, val) atomic_add((int32 *)ptr, val) #define mb() memory_full_barrier() -#define wmb() memory_write_barrier_inline() +#define wmb() memory_write_barrier() #define rmb() memory_read_barrier() + #endif /* _FBSD_COMPAT_MACHINE_ATOMIC_H_ */ diff --git a/src/libs/compat/freebsd_network/compat/sys/libkern.h b/src/libs/compat/freebsd_network/compat/sys/libkern.h index 7c01d6a424..06b5d1d91c 100644 --- a/src/libs/compat/freebsd_network/compat/sys/libkern.h +++ b/src/libs/compat/freebsd_network/compat/sys/libkern.h @@ -24,6 +24,8 @@ int timingsafe_bcmp(const void *, const void *, size_t); static __inline int imax(int a, int b) { return (a > b ? a : b); } static __inline int imin(int a, int b) { return (a < b ? a : b); } +static __inline long lmax(long a, long b) { return (a > b ? a : b); } +static __inline long lmin(long a, long b) { return (a < b ? a : b); } extern int abs(int a);