Skip to content

Commit 184b5ca

Browse files
committed
start using standard C11 names for armv7 issues
1 parent fce3521 commit 184b5ca

File tree

2 files changed

+88
-59
lines changed

2 files changed

+88
-59
lines changed

rpmalloc/catomic.h

Lines changed: 45 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -2626,10 +2626,10 @@ make_atomic(void *, atomic_ptr_t)
26262626

26272627
#if defined(__i386__) || defined(__ppc__) || defined(__arm__) || defined(_M_ARM) || defined(__i386) || defined(_M_IX86)
26282628
/* reads a value from an atomic object then cast to type */
2629-
# define atomic_get(type, obj) (type)c89atomic_load_32((c89atomic_uint32 *)obj)
2629+
# define atomic_get(type, obj) (type)c89atomic_load_32((atomic_uint *)obj)
26302630
#else
26312631
/* reads a value from an atomic object then cast to type */
2632-
# define atomic_get(type, obj) (type)c89atomic_load_64((c89atomic_uint64 *)obj)
2632+
# define atomic_get(type, obj) (type)c89atomic_load_64((atomic_ullong *)obj)
26332633
#endif
26342634

26352635
#if !defined(_STDATOMIC_H)
@@ -2654,130 +2654,130 @@ make_atomic(void *, atomic_ptr_t)
26542654

26552655
#if defined(__i386__) || defined(__ppc__) || defined(__arm__) || defined(_M_ARM) || defined(__i386) || defined(_M_IX86)
26562656
/* sets an atomic_flag to true and returns the old value */
2657-
#define atomic_is_lock_free(obj) c89atomic_is_lock_free_32((c89atomic_uint32 *)obj)
2657+
#define atomic_is_lock_free(obj) c89atomic_is_lock_free_32((atomic_uint *)obj)
26582658

26592659
/* stores a value in an atomic object */
2660-
#define atomic_store(obj, desired) c89atomic_store_32((c89atomic_uint32 *)obj, (c89atomic_uint32)desired)
2660+
#define atomic_store(obj, desired) c89atomic_store_32((atomic_uint *)obj, (c89atomic_uint32)desired)
26612661
/* stores a value in an atomic object */
2662-
#define atomic_store_explicit(obj, desired, order) c89atomic_store_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)desired, order)
2662+
#define atomic_store_explicit(obj, desired, order) c89atomic_store_explicit_32((atomic_uint *)obj, (c89atomic_uint32)desired, order)
26632663

26642664
/* reads a value from an atomic object */
2665-
#define atomic_load(obj) c89atomic_load_32((c89atomic_uint32 *)obj)
2665+
#define atomic_load(obj) c89atomic_load_32((atomic_uint *)obj)
26662666
/* reads a value from an atomic object */
2667-
#define atomic_load_explicit(obj, order) c89atomic_load_explicit_32((c89atomic_uint32 *)obj, order)
2667+
#define atomic_load_explicit(obj, order) c89atomic_load_explicit_32((atomic_uint *)obj, order)
26682668

26692669
/* initializes an existing atomic object */
2670-
#define atomic_init(obj, desired) c89atomic_store_32((c89atomic_uint32 *)obj, (c89atomic_uint32)desired)
2670+
#define atomic_init(obj, desired) c89atomic_store_32((atomic_uint *)obj, (c89atomic_uint32)desired)
26712671

26722672
/* atomic addition */
2673-
#define atomic_fetch_add(obj, arg) c89atomic_fetch_add_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg)
2673+
#define atomic_fetch_add(obj, arg) c89atomic_fetch_add_32((atomic_uint *)obj, (c89atomic_uint32)arg)
26742674
/* atomic addition */
2675-
#define atomic_fetch_add_explicit(obj, arg, order) c89atomic_fetch_add_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg, order)
2675+
#define atomic_fetch_add_explicit(obj, arg, order) c89atomic_fetch_add_explicit_32((atomic_uint *)obj, (c89atomic_uint32)arg, order)
26762676

26772677
/* atomic subtraction */
2678-
#define atomic_fetch_sub(obj, arg) c89atomic_fetch_sub_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg)
2678+
#define atomic_fetch_sub(obj, arg) c89atomic_fetch_sub_32((atomic_uint *)obj, (c89atomic_uint32)arg)
26792679
/* atomic subtraction */
2680-
#define atomic_fetch_sub_explicit(obj, arg, order) c89atomic_fetch_sub_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg, order)
2680+
#define atomic_fetch_sub_explicit(obj, arg, order) c89atomic_fetch_sub_explicit_32((atomic_uint *)obj, (c89atomic_uint32)arg, order)
26812681

26822682
/* atomic bitwise OR */
2683-
#define atomic_fetch_or(obj, arg) c89atomic_fetch_or_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg)
2683+
#define atomic_fetch_or(obj, arg) c89atomic_fetch_or_32((atomic_uint *)obj, (c89atomic_uint32)arg)
26842684
/* atomic bitwise OR */
2685-
#define atomic_fetch_or_explicit(obj, arg, order) c89atomic_fetch_or_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg, order)
2685+
#define atomic_fetch_or_explicit(obj, arg, order) c89atomic_fetch_or_explicit_32((atomic_uint *)obj, (c89atomic_uint32)arg, order)
26862686

26872687
/* atomic bitwise exclusive OR */
2688-
#define atomic_fetch_xor(obj, arg) c89atomic_fetch_xor_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg)
2688+
#define atomic_fetch_xor(obj, arg) c89atomic_fetch_xor_32((atomic_uint *)obj, (c89atomic_uint32)arg)
26892689
/* atomic bitwise exclusive OR */
2690-
#define atomic_fetch_xor_explicit(obj, arg, order) c89atomic_fetch_xor_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg, order)
2690+
#define atomic_fetch_xor_explicit(obj, arg, order) c89atomic_fetch_xor_explicit_32((atomic_uint *)obj, (c89atomic_uint32)arg, order)
26912691

26922692
/* atomic bitwise AND */
26932693
#define atomic_fetch_and(obj, arg) \
2694-
c89atomic_fetch_and_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg)
2694+
c89atomic_fetch_and_32((atomic_uint *)obj, (c89atomic_uint32)arg)
26952695
/* atomic bitwise AND */
26962696
#define atomic_fetch_and_explicit(obj, arg, order) \
2697-
c89atomic_fetch_and_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)arg, order)
2697+
c89atomic_fetch_and_explicit_32((atomic_uint *)obj, (c89atomic_uint32)arg, order)
26982698

26992699
/* swaps a value with the value of an atomic object */
27002700
#define atomic_exchange(obj, desired) \
2701-
c89atomic_exchange_32((c89atomic_uint32 *)obj, (c89atomic_uint32)desired)
2701+
c89atomic_exchange_32((atomic_uint *)obj, (c89atomic_uint32)desired)
27022702
/* swaps a value with the value of an atomic object */
27032703
#define atomic_exchange_explicit(obj, desired, order) \
2704-
c89atomic_exchange_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)desired, order)
2704+
c89atomic_exchange_explicit_32((atomic_uint *)obj, (c89atomic_uint32)desired, order)
27052705

27062706
/* swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value */
2707-
#define atomic_compare_exchange_weak(obj, expected, desired) atomic_cas_32((c89atomic_uint32 *)obj, (c89atomic_uint32)expected, desired)
2707+
#define atomic_compare_exchange_weak(obj, expected, desired) atomic_cas_32((atomic_uint *)obj, (c89atomic_uint32)expected, desired)
27082708
/* swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value */
27092709
#define atomic_compare_exchange_weak_explicit(obj, expected, desired, succ, fail) \
2710-
c89atomic_compare_exchange_weak_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)expected, (c89atomic_uint32)desired, succ, fail)
2710+
c89atomic_compare_exchange_weak_explicit_32((atomic_uint *)obj, (c89atomic_uint32)expected, (c89atomic_uint32)desired, succ, fail)
27112711

27122712
/* swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value */
2713-
#define atomic_compare_exchange_strong(obj, expected, desired) atomic_cas_32((c89atomic_uint32 *)obj, (c89atomic_uint32)expected, desired)
2713+
#define atomic_compare_exchange_strong(obj, expected, desired) atomic_cas_32((atomic_uint *)obj, (c89atomic_uint32)expected, desired)
27142714
/* swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value */
27152715
#define atomic_compare_exchange_strong_explicit(obj, expected, desired, succ, fail) \
2716-
c89atomic_compare_exchange_strong_explicit_32((c89atomic_uint32 *)obj, (c89atomic_uint32)expected, (c89atomic_uint32)desired, succ, fail)
2716+
c89atomic_compare_exchange_strong_explicit_32((atomic_uint *)obj, (c89atomic_uint32)expected, (c89atomic_uint32)desired, succ, fail)
27172717
#else
27182718
/* indicates whether the atomic object is lock-free */
2719-
#define atomic_is_lock_free(obj) c89atomic_is_lock_free_64((c89atomic_uint64 *)obj)
2719+
#define atomic_is_lock_free(obj) c89atomic_is_lock_free_64((atomic_ullong *)obj)
27202720

27212721
/* stores a value in an atomic object */
2722-
#define atomic_store(obj, desired) c89atomic_store_64((c89atomic_uint64 *)obj, (c89atomic_uint64)desired)
2722+
#define atomic_store(obj, desired) c89atomic_store_64((atomic_ullong *)obj, (c89atomic_uint64)desired)
27232723
/* stores a value in an atomic object */
2724-
#define atomic_store_explicit(obj, desired, order) c89atomic_store_explicit_64((c89atomic_uint64 *)obj, (c89atomic_uint64)desired, order)
2724+
#define atomic_store_explicit(obj, desired, order) c89atomic_store_explicit_64((atomic_ullong *)obj, (c89atomic_uint64)desired, order)
27252725

27262726
/* reads a value from an atomic object */
2727-
#define atomic_load(obj) c89atomic_load_64((c89atomic_uint64 *)obj)
2727+
#define atomic_load(obj) c89atomic_load_64((atomic_ullong *)obj)
27282728
/* reads a value from an atomic object */
2729-
#define atomic_load_explicit(obj, order) c89atomic_load_explicit_64((c89atomic_uint64 *)obj, order)
2729+
#define atomic_load_explicit(obj, order) c89atomic_load_explicit_64((atomic_ullong *)obj, order)
27302730

27312731
/* initializes an existing atomic object */
2732-
#define atomic_init(obj, desired) c89atomic_store_64((c89atomic_uint64 *)obj, (c89atomic_uint64)desired)
2732+
#define atomic_init(obj, desired) c89atomic_store_64((atomic_ullong *)obj, (c89atomic_uint64)desired)
27332733

27342734
/* atomic addition */
2735-
#define atomic_fetch_add(obj, arg) c89atomic_fetch_add_64((c89atomic_uint64 *)obj, (c89atomic_uint64)arg)
2735+
#define atomic_fetch_add(obj, arg) c89atomic_fetch_add_64((atomic_ullong *)obj, (c89atomic_uint64)arg)
27362736
/* atomic addition */
2737-
#define atomic_fetch_add_explicit(obj, arg, order) c89atomic_fetch_add_explicit_64((c89atomic_uint64 *)obj, (c89atomic_uint64)arg, order)
2737+
#define atomic_fetch_add_explicit(obj, arg, order) c89atomic_fetch_add_explicit_64((atomic_ullong *)obj, (c89atomic_uint64)arg, order)
27382738

27392739
/* atomic subtraction */
2740-
#define atomic_fetch_sub(obj, arg) c89atomic_fetch_sub_64((c89atomic_uint64 *)obj, (c89atomic_uint64)arg)
2740+
#define atomic_fetch_sub(obj, arg) c89atomic_fetch_sub_64((atomic_ullong *)obj, (c89atomic_uint64)arg)
27412741
/* atomic subtraction */
27422742
#define atomic_fetch_sub_explicit(obj, arg, order) c89atomic_fetch_sub_explicit_64(obj, (c89atomic_uint64)arg, order)
27432743

27442744
/* atomic bitwise OR */
2745-
#define atomic_fetch_or(obj, arg) c89atomic_fetch_or_64((c89atomic_uint64 *)obj, (c89atomic_uint64 *)arg)
2745+
#define atomic_fetch_or(obj, arg) c89atomic_fetch_or_64((atomic_ullong *)obj, (atomic_ullong *)arg)
27462746
/* atomic bitwise OR */
2747-
#define atomic_fetch_or_explicit(obj, arg, order) c89atomic_fetch_or_explicit_64((c89atomic_uint64 *)obj, (c89atomic_uint64)arg, order)
2747+
#define atomic_fetch_or_explicit(obj, arg, order) c89atomic_fetch_or_explicit_64((atomic_ullong *)obj, (c89atomic_uint64)arg, order)
27482748

27492749
/* atomic bitwise exclusive OR */
27502750
#define atomic_fetch_xor(obj, arg) \
2751-
c89atomic_fetch_xor_64((c89atomic_uint64 *)obj, (c89atomic_uint64)arg)
2751+
c89atomic_fetch_xor_64((atomic_ullong *)obj, (c89atomic_uint64)arg)
27522752
/* atomic bitwise exclusive OR */
27532753
#define atomic_fetch_xor_explicit(obj, arg, order) \
2754-
c89atomic_fetch_xor_explicit_64((c89atomic_uint64 *)obj, (c89atomic_uint64)arg, order)
2754+
c89atomic_fetch_xor_explicit_64((atomic_ullong *)obj, (c89atomic_uint64)arg, order)
27552755

27562756
/* atomic bitwise AND */
27572757
#define atomic_fetch_and(obj, arg) \
2758-
c89atomic_fetch_and_64((c89atomic_uint64 *)obj, (c89atomic_uint64)arg)
2758+
c89atomic_fetch_and_64((atomic_ullong *)obj, (c89atomic_uint64)arg)
27592759
/* atomic bitwise AND */
27602760
#define atomic_fetch_and_explicit(obj, arg, order) \
2761-
c89atomic_fetch_and_explicit_64((c89atomic_uint64 *)obj, (c89atomic_uint64)arg, order)
2761+
c89atomic_fetch_and_explicit_64((atomic_ullong *)obj, (c89atomic_uint64)arg, order)
27622762

27632763
/* swaps a value with the value of an atomic object */
27642764
#define atomic_exchange(obj, desired) \
2765-
c89atomic_exchange_64((c89atomic_uint64 *)obj, (c89atomic_uint64)desired)
2765+
c89atomic_exchange_64((atomic_ullong *)obj, (c89atomic_uint64)desired)
27662766
/* swaps a value with the value of an atomic object */
27672767
#define atomic_exchange_explicit(obj, desired, order) \
2768-
c89atomic_exchange_explicit_64((c89atomic_uint64 *)obj, (c89atomic_uint64)(c89atomic_uint64)desired, order)
2768+
c89atomic_exchange_explicit_64((atomic_ullong *)obj, (c89atomic_uint64)(c89atomic_uint64)desired, order)
27692769

27702770
/* swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value */
2771-
#define atomic_compare_exchange_weak(obj, expected, desired) atomic_cas((c89atomic_uint64 *)obj, expected, desired)
2771+
#define atomic_compare_exchange_weak(obj, expected, desired) atomic_cas((atomic_ullong *)obj, expected, desired)
27722772
/* swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value */
27732773
#define atomic_compare_exchange_weak_explicit(obj, expected, desired, succ, fail) \
2774-
c89atomic_compare_exchange_weak_explicit_64((c89atomic_uint64 *)obj, (c89atomic_uint64)expected, (c89atomic_uint64)desired, succ, fail)
2774+
c89atomic_compare_exchange_weak_explicit_64((atomic_ullong *)obj, (c89atomic_uint64)expected, (c89atomic_uint64)desired, succ, fail)
27752775

27762776
/* swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value */
2777-
#define atomic_compare_exchange_strong(obj, expected, desired) atomic_cas((c89atomic_uint64 *)obj, expected, desired)
2777+
#define atomic_compare_exchange_strong(obj, expected, desired) atomic_cas((atomic_ullong *)obj, expected, desired)
27782778
/* swaps a value with an atomic object if the old value is what is expected, otherwise reads the old value */
27792779
#define atomic_compare_exchange_strong_explicit(obj, expected, desired, succ, fail) \
2780-
c89atomic_compare_exchange_strong_explicit_64((c89atomic_uint64 *)obj, (c89atomic_uint64)expected, (c89atomic_uint64)desired, succ, fail)
2780+
c89atomic_compare_exchange_strong_explicit_64((atomic_ullong *)obj, (c89atomic_uint64)expected, (c89atomic_uint64)desired, succ, fail)
27812781
#endif
27822782
#endif
27832783

rpmalloc/rpmalloc.c

Lines changed: 43 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -261,20 +261,49 @@ static int _rpmalloc_shuting_down = 0;
261261
make_atomic(unsigned int, atomic32_t)
262262
make_atomic(unsigned long long, atomic64_t)
263263

264-
static FORCEINLINE int32_t atomic_load32(atomic32_t *src) { return c89atomic_load_explicit_32(src, memory_order_relaxed); }
265-
static FORCEINLINE void atomic_store32(atomic32_t *dst, int32_t val) { c89atomic_store_explicit_32(dst, val, memory_order_relaxed); }
266-
static FORCEINLINE int32_t atomic_incr32(atomic32_t *val) { return c89atomic_fetch_add_explicit_32(val, 1, memory_order_relaxed) + 1; }
267-
static FORCEINLINE int32_t atomic_decr32(atomic32_t *val) { return c89atomic_fetch_add_explicit_32(val, -1, memory_order_relaxed) - 1; }
268-
static FORCEINLINE int32_t atomic_add32(atomic32_t *val, int32_t add) { return c89atomic_fetch_add_explicit_32(val, add, memory_order_relaxed) + add; }
269-
static FORCEINLINE int atomic_cas32_acquire(atomic32_t *dst, int32_t val, int32_t ref) { return c89atomic_compare_exchange_weak_explicit_32(dst, &ref, val, memory_order_acquire, memory_order_relaxed); }
270-
static FORCEINLINE void atomic_store32_release(atomic32_t *dst, int32_t val) { c89atomic_store_explicit_32(dst, val, memory_order_release); }
271-
static FORCEINLINE int64_t atomic_load64(atomic64_t *val) { return c89atomic_load_explicit_64((volatile c89atomic_uint64 *)val, memory_order_relaxed); }
272-
static FORCEINLINE int64_t atomic_add64(atomic64_t *val, int64_t add) { return c89atomic_fetch_add_explicit_64((volatile c89atomic_uint64 *)val, add, memory_order_relaxed) + add; }
273-
static FORCEINLINE void *atomic_load_ptr(atomic_ptr_t *src) { return (void *)c89atomic_load_explicit_64((volatile c89atomic_uint64 *)src, memory_order_relaxed); }
274-
static FORCEINLINE void atomic_store_ptr(atomic_ptr_t *dst, void *val) { c89atomic_store_explicit_64((volatile c89atomic_uint64 *)dst, (c89atomic_uint64)val, memory_order_relaxed); }
275-
static FORCEINLINE void atomic_store_ptr_release(atomic_ptr_t *dst, void *val) { c89atomic_store_explicit_64((volatile c89atomic_uint64 *)dst, (c89atomic_uint64)val, memory_order_release); }
276-
static FORCEINLINE void *atomic_exchange_ptr_acquire(atomic_ptr_t *dst, void *val) { return (void *)c89atomic_exchange_explicit_64((volatile c89atomic_uint64 *)dst, (c89atomic_uint64)val, memory_order_acquire); }
277-
static FORCEINLINE int atomic_cas_ptr(atomic_ptr_t *dst, void *val, void *ref) { return (int)atomic_swap(dst, &ref, (c89atomic_uint64)val); }
264+
static FORCEINLINE int32_t atomic_load32(atomic32_t * src) {
265+
return c89atomic_load_explicit_32(src, memory_order_relaxed);
266+
}
267+
static FORCEINLINE void atomic_store32(atomic32_t *dst, int32_t val) {
268+
c89atomic_store_explicit_32(dst, val, memory_order_relaxed);
269+
}
270+
static FORCEINLINE int32_t atomic_incr32(atomic32_t *val) {
271+
return c89atomic_fetch_add_explicit_32(val, 1, memory_order_relaxed) + 1;
272+
}
273+
static FORCEINLINE int32_t atomic_decr32(atomic32_t *val) {
274+
return c89atomic_fetch_add_explicit_32(val, -1, memory_order_relaxed) - 1;
275+
}
276+
static FORCEINLINE int32_t atomic_add32(atomic32_t *val, int32_t add) {
277+
return c89atomic_fetch_add_explicit_32(val, add, memory_order_relaxed) + add;
278+
}
279+
static FORCEINLINE int atomic_cas32_acquire(atomic32_t *dst, int32_t val, int32_t ref) {
280+
return c89atomic_compare_exchange_weak_explicit_32(dst, &ref, val, memory_order_acquire, memory_order_relaxed);
281+
}
282+
static FORCEINLINE void atomic_store32_release(atomic32_t *dst, int32_t val) {
283+
c89atomic_store_explicit_32(dst, val, memory_order_release);
284+
}
285+
static FORCEINLINE int64_t atomic_load64(atomic64_t *val) {
286+
return c89atomic_load_explicit_64((volatile c89atomic_uint64 *)val, memory_order_relaxed);
287+
}
288+
static FORCEINLINE int64_t atomic_add64(atomic64_t *val, int64_t add) {
289+
return c89atomic_fetch_add_explicit_64((volatile c89atomic_uint64 *)val, add, memory_order_relaxed) + add;
290+
}
291+
292+
static FORCEINLINE void *atomic_load_ptr(atomic_ptr_t *src) {
293+
return (void *)atomic_load_explicit(src, memory_order_relaxed);
294+
}
295+
static FORCEINLINE void atomic_store_ptr(atomic_ptr_t *dst, void *val) {
296+
atomic_store_explicit(dst, val, memory_order_relaxed);
297+
}
298+
static FORCEINLINE void atomic_store_ptr_release(atomic_ptr_t *dst, void *val) {
299+
atomic_store_explicit(dst, val, memory_order_release);
300+
}
301+
static FORCEINLINE void *atomic_exchange_ptr_acquire(atomic_ptr_t *dst, void *val) {
302+
return (void *)atomic_exchange_explicit(dst, val, memory_order_acquire);
303+
}
304+
static FORCEINLINE int atomic_cas_ptr(atomic_ptr_t *dst, void *val, void *ref) {
305+
return (int)atomic_swap(dst, &ref, val);
306+
}
278307

279308
#if defined(__TINYC__) || !defined(_WIN32)
280309
int rpmalloc_tls_create(tls_t *key, tls_dtor_t dtor) {

0 commit comments

Comments
 (0)