DPDK patches and discussions
 help / color / mirror / Atom feed
* [dpdk-dev] [RFC] eal/arm: remove CASP constraints for GCC
@ 2021-10-04 10:03 pbhagavatula
  2021-10-18  6:39 ` Ruifeng Wang
  2021-11-05  8:57 ` [dpdk-dev] [PATCH v2] " pbhagavatula
  0 siblings, 2 replies; 7+ messages in thread
From: pbhagavatula @ 2021-10-04 10:03 UTC (permalink / raw)
  To: jerinj, Ruifeng Wang; +Cc: dev, Pavan Nikhilesh

From: Pavan Nikhilesh <pbhagavatula@marvell.com>

GCC now assigns even register pairs for CASP, the fix has also been
backported to all stable releases of older GCC versions.
Removing the manual register allocation allows GCC to inline the
functions and pick optimal registers for performing CASP.

Signed-off-by: Pavan Nikhilesh <pbhagavatula@marvell.com>
---
 lib/eal/arm/include/rte_atomic_64.h | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/lib/eal/arm/include/rte_atomic_64.h b/lib/eal/arm/include/rte_atomic_64.h
index fa6f334c0d..f6f31ae777 100644
--- a/lib/eal/arm/include/rte_atomic_64.h
+++ b/lib/eal/arm/include/rte_atomic_64.h
@@ -52,6 +52,7 @@ rte_atomic_thread_fence(int memorder)
 #define __LSE_PREAMBLE	""
 #endif
 
+#if defined(__clang__)
 #define __ATOMIC128_CAS_OP(cas_op_name, op_string)                          \
 static __rte_noinline void                                                  \
 cas_op_name(rte_int128_t *dst, rte_int128_t *old, rte_int128_t updated)     \
@@ -76,6 +77,19 @@ cas_op_name(rte_int128_t *dst, rte_int128_t *old, rte_int128_t updated)     \
 	old->val[0] = x0;                                                   \
 	old->val[1] = x1;                                                   \
 }
+#else
+#define __ATOMIC128_CAS_OP(cas_op_name, op_string)                          \
+static __rte_always_inline void                                             \
+cas_op_name(rte_int128_t *dst, rte_int128_t *old, rte_int128_t updated)     \
+{                                                                           \
+	asm volatile(                                                       \
+		__LSE_PREAMBLE                                              \
+		op_string " %[old], %H[old], %[upd], %H[upd], [%[dst]]"     \
+		: [old] "+r"(old->int128)                                   \
+		: [upd] "r"(updated.int128), [dst] "r"(dst)                 \
+		: "memory");                                                \
+}
+#endif
 
 __ATOMIC128_CAS_OP(__cas_128_relaxed, "casp")
 __ATOMIC128_CAS_OP(__cas_128_acquire, "caspa")
-- 
2.17.1


^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2022-02-11  7:53 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-04 10:03 [dpdk-dev] [RFC] eal/arm: remove CASP constraints for GCC pbhagavatula
2021-10-18  6:39 ` Ruifeng Wang
2021-11-05  8:57 ` [dpdk-dev] [PATCH v2] " pbhagavatula
2021-11-08  7:15   ` Ruifeng Wang
2021-11-16 14:56     ` David Marchand
2022-01-20 15:32       ` [EXT] " Pavan Nikhilesh Bhagavatula
2022-02-11  7:53       ` David Marchand

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).