aboutsummaryrefslogtreecommitdiff
path: root/platform/linux-generic/arch/aarch64/odp_llsc.h
diff options
context:
space:
mode:
Diffstat (limited to 'platform/linux-generic/arch/aarch64/odp_llsc.h')
-rw-r--r--platform/linux-generic/arch/aarch64/odp_llsc.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/platform/linux-generic/arch/aarch64/odp_llsc.h b/platform/linux-generic/arch/aarch64/odp_llsc.h
index cf55be132..2561451ca 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,10 +139,12 @@ 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;
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wpedantic"
if (mm == __ATOMIC_RELEASE)
__asm__ volatile("stlxp %w0, %1, %2, [%3]"
: "=&r" (ret)
@@ -159,6 +161,7 @@ static inline uint32_t scd(__int128 *var, __int128 neu, int mm)
: );
else
ODP_ABORT();
+#pragma GCC diagnostic pop
return ret;
}