31 #include <m4ri/m4ri_config.h>
34 #include <emmintrin.h>
37 #include <m4ri/misc.h>
45 static inline void _mzd_combine(
word *c,
word const *t1,
wi_t wide_in) {
55 __m128i *__c = (__m128i*)c;
56 __m128i *__t1 = (__m128i*)t1;
57 const __m128i *eof = (__m128i*)((
unsigned long)(c + wide) & ~0xFUL);
62 xmm1 = _mm_xor_si128(*__c, *__t1++);
64 xmm1 = _mm_xor_si128(*__c, *__t1++);
69 xmm1 = _mm_xor_si128(*__c, *__t1++);
75 wide = ((
sizeof(
word) * wide) % 16) /
sizeof(
word);
78 __M4RI_DD_RAWROW(c, wide_in);
81 #endif // __M4RI_HAVE_SSE2
83 wi_t n = (wide + 7) / 8;
85 case 0:
do { *c++ ^= *t1++;
86 case 7: *c++ ^= *t1++;
87 case 6: *c++ ^= *t1++;
88 case 5: *c++ ^= *t1++;
89 case 4: *c++ ^= *t1++;
90 case 3: *c++ ^= *t1++;
91 case 2: *c++ ^= *t1++;
92 case 1: *c++ ^= *t1++;
95 __M4RI_DD_RAWROW(c, wide_in);
99 #include "xor_template.h"
103 #include "xor_template.h"
107 #include "xor_template.h"
111 #include "xor_template.h"
115 #include "xor_template.h"
119 #include "xor_template.h"
123 #include "xor_template.h"
#define __M4RI_ALIGNMENT(addr, n)
Return alignment of addr w.r.t. n. For example the address 17 would be 1 aligned w.r.t. 16.
Definition: misc.h:421
uint64_t word
A word is the typical packed data structure to represent packed bits.
Definition: misc.h:87
int wi_t
Type of word indexes.
Definition: misc.h:80