raw/ioat: fix icc build
authorBruce Richardson <bruce.richardson@intel.com>
Fri, 5 Jul 2019 11:54:24 +0000 (12:54 +0100)
committerThomas Monjalon <thomas@monjalon.net>
Fri, 5 Jul 2019 13:01:59 +0000 (15:01 +0200)
When using _mm_set_epi64() rather than _mm_set_epi64x() intrinsic, ICC
tries to use the x87 floating point registers, leading to warnings about
not properly clearing value when switching between x87 and SSE/AVX modes.

error #13203: No EMMS instruction before call to function

Fix this by using the set64x() intrinsic.

Fixes: 0a92e63fc4cd ("raw/ioat: add local API to perform copies")

Signed-off-by: Bruce Richardson <bruce.richardson@intel.com>
Acked-by: Harry van Haaren <harry.van.haaren@intel.com>
Tested-by: Anatoly Burakov <anatoly.burakov@intel.com>
drivers/raw/ioat/rte_ioat_rawdev.h

index 3babb82..7a89632 100644 (file)
@@ -124,8 +124,7 @@ rte_ioat_enqueue_copy(int dev_id, phys_addr_t src, phys_addr_t dst,
        desc->src_addr = src;
        desc->dest_addr = dst;
 
-       ioat->hdls[write] = _mm_set_epi64((__m64)((uint64_t)dst_hdl),
-                       (__m64)((uint64_t)src_hdl));
+       ioat->hdls[write] = _mm_set_epi64x((int64_t)dst_hdl, (int64_t)src_hdl);
        rte_prefetch0(&ioat->desc_ring[ioat->next_write & mask]);
 
        ioat->enqueued++;