aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatias Elo <matias.elo@nokia.com>2021-10-12 12:21:22 +0300
committerPetri Savolainen <petri.savolainen@nokia.com>2021-10-21 10:53:20 +0300
commit28912cee034067ad15914a0caec3e3067b04284e (patch)
tree5602873970f47aaac56331b69a6a7a0f93a386be
parent42d0383b7346b787995275d67b469135489add15 (diff)
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 <matias.elo@nokia.com> Reviewed-by: Petri Savolainen <petri.savolainen@nokia.com>
-rw-r--r--platform/linux-generic/arch/aarch64/odp_atomic.h8
-rw-r--r--platform/linux-generic/arch/aarch64/odp_llsc.h6
-rw-r--r--platform/linux-generic/arch/default/odp_atomic.h2
-rw-r--r--platform/linux-generic/include/odp_atomic_internal.h2
-rw-r--r--platform/linux-generic/include/odp_llqueue.h2
-rw-r--r--platform/linux-generic/odp_queue_lf.c2
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)
{