eal: use intrinsic function
[dpdk.git] / lib / librte_eal / common / include / rte_byteorder.h
index ccaa528..4902b48 100644 (file)
@@ -1,7 +1,7 @@
 /*-
  *   BSD LICENSE
  * 
- *   Copyright(c) 2010-2012 Intel Corporation. All rights reserved.
+ *   Copyright(c) 2010-2013 Intel Corporation. All rights reserved.
  *   All rights reserved.
  * 
  *   Redistribution and use in source and binary forms, with or without 
@@ -30,7 +30,6 @@
  *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
  *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  * 
- *  version: DPDK.L.1.2.3-3
  */
 
 #ifndef _RTE_BYTEORDER_H_
@@ -153,26 +152,44 @@ static inline uint64_t rte_arch_bswap64(uint64_t x)
 }
 #endif /* RTE_ARCH_X86_64 */
 
+
 /**
  * Swap bytes in a 16-bit value.
  */
 #define rte_bswap16(x) ((uint16_t)(__builtin_constant_p(x) ?           \
                                   rte_constant_bswap16(x) :            \
-                                  rte_arch_bswap16(x)))                \
+                                  rte_arch_bswap16(x)))
 
+#ifndef RTE_FORCE_INTRINSICS
 /**
  * Swap bytes in a 32-bit value.
  */
 #define rte_bswap32(x) ((uint32_t)(__builtin_constant_p(x) ?           \
                                   rte_constant_bswap32(x) :            \
-                                  rte_arch_bswap32(x)))                \
+                                  rte_arch_bswap32(x)))
 
 /**
  * Swap bytes in a 64-bit value.
  */
 #define rte_bswap64(x) ((uint64_t)(__builtin_constant_p(x) ?           \
                                   rte_constant_bswap64(x) :            \
-                                  rte_arch_bswap64(x)))                \
+                                  rte_arch_bswap64(x)))
+
+#else
+
+/* __builtin_bswap16 is only available gcc 4.8 and upwards */
+
+/**
+ * Swap bytes in a 32-bit value.
+ */
+#define rte_bswap32(x) __builtin_bswap32(x)
+
+/**
+ * Swap bytes in a 64-bit value.
+ */
+#define rte_bswap64(x) __builtin_bswap64(x)
+
+#endif
 
 /**
  * Convert a 16-bit value from CPU order to little endian.