On 06/16/2017 08:40 AM, Shreyansh Jain wrote:
From: Hemant Agrawal <hemant.agra...@nxp.com>

Bit Swap and LE<=>BE conversions for 23, 40 and 48 bit width

Signed-off-by: Hemant Agrawal <hemant.agra...@nxp.com>
---
  .../common/include/generic/rte_byteorder.h         | 78 ++++++++++++++++++++++
  1 file changed, 78 insertions(+)

diff --git a/lib/librte_eal/common/include/generic/rte_byteorder.h 
b/lib/librte_eal/common/include/generic/rte_byteorder.h
index e00bccb..8903ff6 100644
--- a/lib/librte_eal/common/include/generic/rte_byteorder.h
+++ b/lib/librte_eal/common/include/generic/rte_byteorder.h
@@ -122,6 +122,84 @@ rte_constant_bswap64(uint64_t x)
                ((x & 0xff00000000000000ULL) >> 56);
  }
+/*
+ * An internal function to swap bytes of a 48-bit value.
+ */
+static inline uint64_t
+rte_constant_bswap48(uint64_t x)
+{
+       return  ((x & 0x0000000000ffULL) << 40) |
+               ((x & 0x00000000ff00ULL) << 24) |
+               ((x & 0x000000ff0000ULL) <<  8) |
+               ((x & 0x0000ff000000ULL) >>  8) |
+               ((x & 0x00ff00000000ULL) >> 24) |
+               ((x & 0xff0000000000ULL) >> 40);
+}
+

Won't something like bswap64(x << 16) be much more efficient? Two instructions for the non-constant case, compared to 15-20 here.

Reply via email to