From 28912cee034067ad15914a0caec3e3067b04284e Mon Sep 17 00:00:00 2001 From: Matias Elo Date: Tue, 12 Oct 2021 12:21:22 +0300 Subject: linux-gen: fix unsupported types build errors Fix "ISO C does not support '__int128' types" errors when building with 'pedantic' option. Signed-off-by: Matias Elo Reviewed-by: Petri Savolainen --- platform/linux-generic/arch/aarch64/odp_atomic.h | 8 +++++++- platform/linux-generic/arch/aarch64/odp_llsc.h | 6 +++--- platform/linux-generic/arch/default/odp_atomic.h | 2 +- platform/linux-generic/include/odp_atomic_internal.h | 2 +- platform/linux-generic/include/odp_llqueue.h | 2 +- platform/linux-generic/odp_queue_lf.c | 2 +- 6 files changed, 14 insertions(+), 8 deletions(-) diff --git a/platform/linux-generic/arch/aarch64/odp_atomic.h b/platform/linux-generic/arch/aarch64/odp_atomic.h index c7a28fc2c..445d91e28 100644 --- a/platform/linux-generic/arch/aarch64/odp_atomic.h +++ b/platform/linux-generic/arch/aarch64/odp_atomic.h @@ -36,6 +36,10 @@ do { \ #define LL_MO(mo) (HAS_ACQ((mo)) ? __ATOMIC_ACQUIRE : __ATOMIC_RELAXED) #define SC_MO(mo) (HAS_RLS((mo)) ? __ATOMIC_RELEASE : __ATOMIC_RELAXED) +/* Prevent warnings about ISO C not supporting __int128 */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wpedantic" + #ifndef __ARM_FEATURE_QRDMX /* Feature only available in v8.1a and beyond */ static inline bool __lockfree_compare_exchange_16(register __int128 *var, __int128 *exp, @@ -219,7 +223,7 @@ static inline __int128 __lockfree_load_16(__int128 *var, int mo) return old; } -typedef unsigned __int128 _u128_t; +__extension__ typedef unsigned __int128 _u128_t; static inline _u128_t lockfree_load_u128(_u128_t *atomic) { @@ -291,6 +295,8 @@ static inline bitset_t bitset_mask(uint32_t bit) return (unsigned __int128)(1ULL << (bit - 64)) << 64; } +#pragma GCC diagnostic pop + #else #error Unsupported size of bit sets (ATOM_BITSET_SIZE) #endif diff --git a/platform/linux-generic/arch/aarch64/odp_llsc.h b/platform/linux-generic/arch/aarch64/odp_llsc.h index cf55be132..45a534100 100644 --- a/platform/linux-generic/arch/aarch64/odp_llsc.h +++ b/platform/linux-generic/arch/aarch64/odp_llsc.h @@ -115,11 +115,11 @@ static inline uint32_t sc(uint64_t *var, uint64_t neu, int mm) #define sc64(a, b, c) sc((a), (b), (c)) union i128 { - __int128 i128; + __extension__ __int128 i128; int64_t i64[2]; }; -static inline __int128 lld(__int128 *var, int mm) +__extension__ static inline __int128 lld(__int128 *var, int mm) { union i128 old; @@ -139,7 +139,7 @@ static inline __int128 lld(__int128 *var, int mm) } /* Return 0 on success, 1 on failure */ -static inline uint32_t scd(__int128 *var, __int128 neu, int mm) +__extension__ static inline uint32_t scd(__int128 *var, __int128 neu, int mm) { uint32_t ret; diff --git a/platform/linux-generic/arch/default/odp_atomic.h b/platform/linux-generic/arch/default/odp_atomic.h index fc8260194..7650d2b52 100644 --- a/platform/linux-generic/arch/default/odp_atomic.h +++ b/platform/linux-generic/arch/default/odp_atomic.h @@ -9,7 +9,7 @@ #ifdef __SIZEOF_INT128__ -typedef unsigned __int128 _u128_t; +__extension__ typedef unsigned __int128 _u128_t; static inline _u128_t lockfree_load_u128(_u128_t *atomic) { diff --git a/platform/linux-generic/include/odp_atomic_internal.h b/platform/linux-generic/include/odp_atomic_internal.h index 81280b1fa..d98e0e6be 100644 --- a/platform/linux-generic/include/odp_atomic_internal.h +++ b/platform/linux-generic/include/odp_atomic_internal.h @@ -138,7 +138,7 @@ static inline void _odp_atomic_flag_clear(_odp_atomic_flag_t *flag) #ifdef ODP_ATOMIC_U128 /** An unsigned 128-bit (16-byte) scalar type */ -typedef __int128 _uint128_t; +__extension__ typedef __int128 _uint128_t; /** Atomic 128-bit type */ typedef struct ODP_ALIGNED(16) { diff --git a/platform/linux-generic/include/odp_llqueue.h b/platform/linux-generic/include/odp_llqueue.h index cc4b84ecd..e9cf9945e 100644 --- a/platform/linux-generic/include/odp_llqueue.h +++ b/platform/linux-generic/include/odp_llqueue.h @@ -49,7 +49,7 @@ static odp_bool_t llq_on_queue(struct llnode *node); typedef uint64_t dintptr_t; #endif #if __SIZEOF_PTRDIFF_T__ == 8 -typedef __int128 dintptr_t; +__extension__ typedef __int128 dintptr_t; #endif struct llnode { diff --git a/platform/linux-generic/odp_queue_lf.c b/platform/linux-generic/odp_queue_lf.c index 206172bb8..f1b265970 100644 --- a/platform/linux-generic/odp_queue_lf.c +++ b/platform/linux-generic/odp_queue_lf.c @@ -21,7 +21,7 @@ #ifdef __SIZEOF_INT128__ -typedef unsigned __int128 u128_t; +__extension__ typedef unsigned __int128 u128_t; static inline void lockfree_zero_u128(u128_t *atomic) { -- cgit v1.2.3