8 #ifndef ZenLib_MemoryUtilsH
9 #define ZenLib_MemoryUtilsH
18 #ifdef ZENLIB_MEMUTILS_SSE2
19 #include <emmintrin.h>
20 #endif //ZENLIB_MEMUTILS_SSE2
25 #ifndef ZENLIB_MEMUTILS_SSE2
28 #define malloc_Aligned128 (size) \
30 #define free_Aligned128 (ptr) \
35 #define memcpy_Unaligned_Unaligned memcpy
36 #define memcpy_Aligned128_Unaligned memcpy
40 #define memcpy_Unaligned_Aligned128 memcpy
41 #define memcpy_Aligned128_Aligned128 memcpy
45 #define memcpy_Unaligned_Unaligned_Once128 memcpy
49 #define memcpy_Aligned128_Aligned128_Once128 memcpy
53 #define memcpy_Unaligned_Unaligned_Once1024 memcpy
57 #define memcpy_Aligned128_Aligned128_Once1024 memcpy
61 #define memcpy_Unaligned_Aligned128_Size128 memcpy
62 #define memcpy_Aligned128_Aligned128_Size128 memcpy
64 #else // ZENLIB_MEMUTILS_SSE2
71 return _aligned_malloc (size, 16);
85 __m128i* destination16=(__m128i*)destination;
86 const __m128i* source16=(
const __m128i*)source;
90 _mm_storeu_si128 (destination16++, _mm_loadu_si128(source16++));
92 char* destination1=(
char*)destination16;
93 char* source1=(
char*)source16;
95 *destination1++=*source1++;
100 size_t extra=num&0xF;
101 __m128i* destination16=(__m128i*)destination;
102 const __m128i* source16=(
const __m128i*)source;
106 _mm_storeu_si128 (destination16++, _mm_load_si128(source16++));
108 char* destination1=(
char*)destination16;
109 char* source1=(
char*)source16;
111 *destination1++=*source1++;
119 size_t extra=num&0xF;
120 __m128i* destination16=(__m128i*)destination;
121 const __m128i* source16=(
const __m128i*)source;
125 _mm_stream_si128 (destination16++, _mm_loadu_si128(source16++));
127 char* destination1=(
char*)destination16;
128 char* source1=(
char*)source16;
130 *destination1++=*source1++;
138 _mm_storeu_si128 ((__m128i*)destination, _mm_loadu_si128((
const __m128i*)source));
146 size_t extra=num&0xF;
147 __m128i* destination16=(__m128i*)destination;
148 const __m128i* source16=(
const __m128i*)source;
152 _mm_stream_si128 (destination16++, _mm_load_si128(source16++));
154 char* destination1=(
char*)destination16;
155 char* source1=(
char*)source16;
157 *destination1++=*source1++;
162 __m128i* destination16=(__m128i*)destination;
163 const __m128i* source16=(__m128i*)source;
167 _mm_stream_si128 (destination16++, _mm_load_si128(source16++));
175 __m128i* destination16=(__m128i*)destination;
176 const __m128i* source16=(__m128i*)source;
180 _mm_storeu_si128 (destination16++, _mm_loadu_si128(source16++));
188 _mm_stream_si128 ((__m128i*)destination, _mm_load_si128((
const __m128i*)source));
194 inline void memcpy_Unaligned_Unaligned_Size128 (
void* destination,
const void* source,
size_t num)
196 __m128i* destination16=(__m128i*)destination;
197 const __m128i* source16=(
const __m128i*)source;
201 _mm_storeu_si128 (destination16++, _mm_loadu_si128(source16++));
204 inline void memcpy_Aligned128_Unaligned_Size128 (
void* destination,
const void* source,
size_t num)
206 __m128i* destination16=(__m128i*)destination;
207 const __m128i* source16=(__m128i*)source;
211 _mm_storeu_si128 (destination16++, _mm_load_si128(source16++));
219 __m128i* destination16=(__m128i*)destination;
220 const __m128i* source16=(__m128i*)source;
224 _mm_stream_si128 (destination16++, _mm_loadu_si128(source16++));
258 #endif // ZENLIB_MEMUTILS_SSE2
#define memcpy_Aligned128_Aligned128_Once128
Definition: MemoryUtils.h:49
#define memcpy_Aligned128_Unaligned
Definition: MemoryUtils.h:36
#define memcpy_Unaligned_Unaligned_Once1024
Definition: MemoryUtils.h:53
#define memcpy_Unaligned_Unaligned
Definition: MemoryUtils.h:35
#define malloc_Aligned128
Definition: MemoryUtils.h:28
#define free_Aligned128
Definition: MemoryUtils.h:30
#define memcpy_Aligned128_Aligned128_Size128
Definition: MemoryUtils.h:62
#define memcpy_Unaligned_Unaligned_Once128
Definition: MemoryUtils.h:45
#define memcpy_Unaligned_Aligned128
Definition: MemoryUtils.h:40
#define memcpy_Unaligned_Aligned128_Size128
Definition: MemoryUtils.h:61
#define memcpy_Aligned128_Aligned128
Definition: MemoryUtils.h:41