eal/x86: move header file for vector instructions
[dpdk.git] / lib / librte_eal / common / include / arch / x86 / rte_memcpy.h
index 7b2d382..6a57426 100644 (file)
@@ -43,7 +43,7 @@
 #include <stdio.h>
 #include <stdint.h>
 #include <string.h>
-#include <x86intrin.h>
+#include <rte_vect.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -195,31 +195,33 @@ rte_mov256blocks(uint8_t *dst, const uint8_t *src, size_t n)
 static inline void *
 rte_memcpy(void *dst, const void *src, size_t n)
 {
+       uintptr_t dstu = (uintptr_t)dst;
+       uintptr_t srcu = (uintptr_t)src;
        void *ret = dst;
-       int dstofss;
-       int bits;
+       size_t dstofss;
+       size_t bits;
 
        /**
         * Copy less than 16 bytes
         */
        if (n < 16) {
                if (n & 0x01) {
-                       *(uint8_t *)dst = *(const uint8_t *)src;
-                       src = (const uint8_t *)src + 1;
-                       dst = (uint8_t *)dst + 1;
+                       *(uint8_t *)dstu = *(const uint8_t *)srcu;
+                       srcu = (uintptr_t)((const uint8_t *)srcu + 1);
+                       dstu = (uintptr_t)((uint8_t *)dstu + 1);
                }
                if (n & 0x02) {
-                       *(uint16_t *)dst = *(const uint16_t *)src;
-                       src = (const uint16_t *)src + 1;
-                       dst = (uint16_t *)dst + 1;
+                       *(uint16_t *)dstu = *(const uint16_t *)srcu;
+                       srcu = (uintptr_t)((const uint16_t *)srcu + 1);
+                       dstu = (uintptr_t)((uint16_t *)dstu + 1);
                }
                if (n & 0x04) {
-                       *(uint32_t *)dst = *(const uint32_t *)src;
-                       src = (const uint32_t *)src + 1;
-                       dst = (uint32_t *)dst + 1;
+                       *(uint32_t *)dstu = *(const uint32_t *)srcu;
+                       srcu = (uintptr_t)((const uint32_t *)srcu + 1);
+                       dstu = (uintptr_t)((uint32_t *)dstu + 1);
                }
                if (n & 0x08) {
-                       *(uint64_t *)dst = *(const uint64_t *)src;
+                       *(uint64_t *)dstu = *(const uint64_t *)srcu;
                }
                return ret;
        }
@@ -271,7 +273,7 @@ COPY_BLOCK_64_BACK31:
        /**
         * Make store aligned when copy size exceeds 512 bytes
         */
-       dstofss = 32 - (int)((long long)(void *)dst & 0x1F);
+       dstofss = 32 - ((uintptr_t)dst & 0x1F);
        n -= dstofss;
        rte_mov32((uint8_t *)dst, (const uint8_t *)src);
        src = (const uint8_t *)src + dstofss;
@@ -492,31 +494,33 @@ static inline void *
 rte_memcpy(void *dst, const void *src, size_t n)
 {
        __m128i xmm0, xmm1, xmm2, xmm3, xmm4, xmm5, xmm6, xmm7, xmm8;
+       uintptr_t dstu = (uintptr_t)dst;
+       uintptr_t srcu = (uintptr_t)src;
        void *ret = dst;
-       int dstofss;
-       int srcofs;
+       size_t dstofss;
+       size_t srcofs;
 
        /**
         * Copy less than 16 bytes
         */
        if (n < 16) {
                if (n & 0x01) {
-                       *(uint8_t *)dst = *(const uint8_t *)src;
-                       src = (const uint8_t *)src + 1;
-                       dst = (uint8_t *)dst + 1;
+                       *(uint8_t *)dstu = *(const uint8_t *)srcu;
+                       srcu = (uintptr_t)((const uint8_t *)srcu + 1);
+                       dstu = (uintptr_t)((uint8_t *)dstu + 1);
                }
                if (n & 0x02) {
-                       *(uint16_t *)dst = *(const uint16_t *)src;
-                       src = (const uint16_t *)src + 1;
-                       dst = (uint16_t *)dst + 1;
+                       *(uint16_t *)dstu = *(const uint16_t *)srcu;
+                       srcu = (uintptr_t)((const uint16_t *)srcu + 1);
+                       dstu = (uintptr_t)((uint16_t *)dstu + 1);
                }
                if (n & 0x04) {
-                       *(uint32_t *)dst = *(const uint32_t *)src;
-                       src = (const uint32_t *)src + 1;
-                       dst = (uint32_t *)dst + 1;
+                       *(uint32_t *)dstu = *(const uint32_t *)srcu;
+                       srcu = (uintptr_t)((const uint32_t *)srcu + 1);
+                       dstu = (uintptr_t)((uint32_t *)dstu + 1);
                }
                if (n & 0x08) {
-                       *(uint64_t *)dst = *(const uint64_t *)src;
+                       *(uint64_t *)dstu = *(const uint64_t *)srcu;
                }
                return ret;
        }
@@ -589,12 +593,12 @@ COPY_BLOCK_64_BACK15:
         * unaligned copy functions require up to 15 bytes
         * backwards access.
         */
-       dstofss = 16 - (int)((long long)(void *)dst & 0x0F) + 16;
+       dstofss = 16 - ((uintptr_t)dst & 0x0F) + 16;
        n -= dstofss;
        rte_mov32((uint8_t *)dst, (const uint8_t *)src);
        src = (const uint8_t *)src + dstofss;
        dst = (uint8_t *)dst + dstofss;
-       srcofs = (int)((long long)(const void *)src & 0x0F);
+       srcofs = ((uintptr_t)src & 0x0F);
 
        /**
         * For aligned copy