29 #include "../precompiled.h"
51 return "MMX & 3DNow!";
61 #define TINY_BLOCK_COPY 64 // upper limit for movsd type copy
65 #define IN_CACHE_COPY 64 * 1024 // upper limit for movq/movq copy w/SW prefetch
70 #define UNCACHED_COPY 197 * 1024 // upper limit for movq/movntq w/SW prefetch
77 #define BLOCK_PREFETCH_COPY infinity // no limit for movq/movntq w/block prefetch
78 #define CACHEBLOCK 80h // number of 64-byte blocks (cache lines) for block prefetch
101 cmp ecx, TINY_BLOCK_COPY
107 jbe $memcpy_align_done
114 add ecx,
offset $memcpy_align_done
132 cmp ecx, IN_CACHE_COPY/64
141 prefetchnta [esi + (200*64/34+192)]
171 add ecx,
offset $memcpy_last_few
175 cmp ecx, UNCACHED_COPY/64
189 prefetchnta [esi + (200*64/34+192)]
225 mov eax, CACHEBLOCK / 2
226 add esi, CACHEBLOCK * 64
virtual void VPCALL Memcpy(void *dst, const void *src, const int count)
virtual const char *VPCALL GetName(void) const