src/dpdk/lib/librte_eal/x86/include/rte_memcpy.h
static inline void
rte_mov512blocks(uint8_t *dst, const uint8_t *src, size_t n)
{
	__m512i zmm0, zmm1, zmm2, zmm3, zmm4, zmm5, zmm6, zmm7;

	while (n >= 512) {
		zmm0 = _mm512_loadu_si512((const void *)(src + 0 * 64));
		n -= 512;
		zmm1 = _mm512_loadu_si512((const void *)(src + 1 * 64));
		zmm2 = _mm512_loadu_si512((const void *)(src + 2 * 64));
		zmm3 = _mm512_loadu_si512((const void *)(src + 3 * 64));
		zmm4 = _mm512_loadu_si512((const void *)(src + 4 * 64));
		zmm5 = _mm512_loadu_si512((const void *)(src + 5 * 64));
		zmm6 = _mm512_loadu_si512((const void *)(src + 6 * 64));
		zmm7 = _mm512_loadu_si512((const void *)(src + 7 * 64));
		src = src + 512;
		_mm512_storeu_si512((void *)(dst + 0 * 64), zmm0);
		_mm512_storeu_si512((void *)(dst + 1 * 64), zmm1);
		_mm512_storeu_si512((void *)(dst + 2 * 64), zmm2);
		_mm512_storeu_si512((void *)(dst + 3 * 64), zmm3);
		_mm512_storeu_si512((void *)(dst + 4 * 64), zmm4);
		_mm512_storeu_si512((void *)(dst + 5 * 64), zmm5);
		_mm512_storeu_si512((void *)(dst + 6 * 64), zmm6);
		_mm512_storeu_si512((void *)(dst + 7 * 64), zmm7);
		dst = dst + 512;
	}
}
/**
 * Copy 512-byte blocks from one location to another,
 * locations should not overlap.
 */
Copy 512-byte blocks from one location to another,
locations should not overlap.
Copy 512 - byte blocks from one location to another locations should not overlap .
static inline void
rte_mov512blocks(uint8_t *dst, const uint8_t *src, size_t n)
{
	__m512i zmm0, zmm1, zmm2, zmm3, zmm4, zmm5, zmm6, zmm7;
	while (n >= 512) {
		zmm0 = _mm512_loadu_si512((const void *)(src + 0 * 64));
		n -= 512;
		zmm1 = _mm512_loadu_si512((const void *)(src + 1 * 64));
		zmm2 = _mm512_loadu_si512((const void *)(src + 2 * 64));
		zmm3 = _mm512_loadu_si512((const void *)(src + 3 * 64));
		zmm4 = _mm512_loadu_si512((const void *)(src + 4 * 64));
		zmm5 = _mm512_loadu_si512((const void *)(src + 5 * 64));
		zmm6 = _mm512_loadu_si512((const void *)(src + 6 * 64));
		zmm7 = _mm512_loadu_si512((const void *)(src + 7 * 64));
		src = src + 512;
		_mm512_storeu_si512((void *)(dst + 0 * 64), zmm0);
		_mm512_storeu_si512((void *)(dst + 1 * 64), zmm1);
		_mm512_storeu_si512((void *)(dst + 2 * 64), zmm2);
		_mm512_storeu_si512((void *)(dst + 3 * 64), zmm3);
		_mm512_storeu_si512((void *)(dst + 4 * 64), zmm4);
		_mm512_storeu_si512((void *)(dst + 5 * 64), zmm5);
		_mm512_storeu_si512((void *)(dst + 6 * 64), zmm6);
		_mm512_storeu_si512((void *)(dst + 7 * 64), zmm7);
		dst = dst + 512;
	}
}
static inline void rte_mov512blocks ( uint8_t * dst , const uint8_t * src , size_t n ) { __m512i zmm0 , zmm1 , zmm2 , zmm3 , zmm4 , zmm5 , zmm6 , zmm7 ; while ( n >= 512 ) { zmm0 = _mm512_loadu_si512 ( ( const void * ) ( src + 0 * 64 ) ) ; n -= 512 ; zmm1 = _mm512_loadu_si512 ( ( const void * ) ( src + 1 * 64 ) ) ; zmm2 = _mm512_loadu_si512 ( ( const void * ) ( src + 2 * 64 ) ) ; zmm3 = _mm512_loadu_si512 ( ( const void * ) ( src + 3 * 64 ) ) ; zmm4 = _mm512_loadu_si512 ( ( const void * ) ( src + 4 * 64 ) ) ; zmm5 = _mm512_loadu_si512 ( ( const void * ) ( src + 5 * 64 ) ) ; zmm6 = _mm512_loadu_si512 ( ( const void * ) ( src + 6 * 64 ) ) ; zmm7 = _mm512_loadu_si512 ( ( const void * ) ( src + 7 * 64 ) ) ; src = src + 512 ; _mm512_storeu_si512 ( ( void * ) ( dst + 0 * 64 ) , zmm0 ) ; _mm512_storeu_si512 ( ( void * ) ( dst + 1 * 64 ) , zmm1 ) ; _mm512_storeu_si512 ( ( void * ) ( dst + 2 * 64 ) , zmm2 ) ; _mm512_storeu_si512 ( ( void * ) ( dst + 3 * 64 ) , zmm3 ) ; _mm512_storeu_si512 ( ( void * ) ( dst + 4 * 64 ) , zmm4 ) ; _mm512_storeu_si512 ( ( void * ) ( dst + 5 * 64 ) , zmm5 ) ; _mm512_storeu_si512 ( ( void * ) ( dst + 6 * 64 ) , zmm6 ) ; _mm512_storeu_si512 ( ( void * ) ( dst + 7 * 64 ) , zmm7 ) ; dst = dst + 512 ; } }
Copy 512-byte blocks from one location to another,
 locations should not overlap.
Copy 512 - byte blocks from one location to another locations should not overlap .