42 a_sse = _mm_load_sd(a);
43 b_sse = _mm_load_sd(b);
47 tmp1 = _mm_setzero_pd();
49 tmp1 = _mm_shuffle_pd(a_sse, a_sse, 0x1);
50 a_sse = _mm_add_pd(a_sse, tmp1);
52 tmp2 = _mm_setzero_pd();
53 tmp2 = _mm_shuffle_pd(b_sse, b_sse, 0x1);
54 b_sse = _mm_add_pd(b_sse, tmp2);
62 if( n_4vec <
L2BY2 ) {
65 for(
int i=0; i < 3*n_4vec; i++) {
67 y1 = _mm_load_pd(y_p);
68 x1 = _mm_load_pd(x_p);
69 z1 = _mm_mul_pd(a_sse,x1);
70 tmp1 = _mm_mul_pd(b_sse,y1);
71 z1 = _mm_sub_pd(z1,tmp1);
72 _mm_store_pd(z_p, z1);
74 y2 = _mm_load_pd(y_p+2);
75 x2 = _mm_load_pd(x_p+2);
76 z2 = _mm_mul_pd(a_sse,x2);
77 tmp2 = _mm_mul_pd(b_sse,y2);
78 z2 = _mm_sub_pd(z2,tmp2);
79 _mm_store_pd(z_p+2, z2);
82 y3 = _mm_load_pd(y_p+4);
83 x3 = _mm_load_pd(x_p+4);
84 z3 = _mm_mul_pd(a_sse,x3);
85 tmp3 = _mm_mul_pd(b_sse,y3);
86 z3 = _mm_sub_pd(z3,tmp3);
87 _mm_store_pd(z_p+4, z3);
90 y1 = _mm_load_pd(y_p+6);
91 x1 = _mm_load_pd(x_p+6);
92 z1 = _mm_mul_pd(a_sse,x1);
93 tmp1 = _mm_mul_pd(b_sse,y1);
94 z1 = _mm_sub_pd(z1,tmp1);
95 _mm_store_pd(z_p+6, z1);
97 x_p+=8; y_p+=8; z_p+=8;
104 for(
int i=0; i < 3*n_4vec; i++) {
109 y1 = _mm_load_pd(y_p);
110 x1 = _mm_load_pd(x_p);
111 z1 = _mm_mul_pd(a_sse,x1);
112 tmp1 = _mm_mul_pd(b_sse,y1);
113 z1 = _mm_sub_pd(z1,tmp1);
114 _mm_stream_pd(z_p, z1);
116 y2 = _mm_load_pd(y_p+2);
117 x2 = _mm_load_pd(x_p+2);
118 z2 = _mm_mul_pd(a_sse,x2);
119 tmp2 = _mm_mul_pd(b_sse,y2);
120 z2 = _mm_sub_pd(z2,tmp2);
121 _mm_stream_pd(z_p+2, z2);
124 y3 = _mm_load_pd(y_p+4);
125 x3 = _mm_load_pd(x_p+4);
126 z3 = _mm_mul_pd(a_sse,x3);
127 tmp3 = _mm_mul_pd(b_sse,y3);
128 z3 = _mm_sub_pd(z3,tmp3);
129 _mm_stream_pd(z_p+4, z3);
132 y1 = _mm_load_pd(y_p+6);
133 x1 = _mm_load_pd(x_p+6);
134 z1 = _mm_mul_pd(a_sse,x1);
135 tmp1 = _mm_mul_pd(b_sse,y1);
136 z1 = _mm_sub_pd(z1,tmp1);
137 _mm_stream_pd(z_p+6, z1);
139 x_p+=8; y_p+=8; z_p+=8;
170 a_sse = _mm_load_sd(a);
171 b_sse = _mm_load_sd(b);
175 tmp1 = _mm_setzero_pd();
176 tmp1 = _mm_shuffle_pd(a_sse, a_sse, 0x1);
177 a_sse = _mm_add_pd(a_sse, tmp1);
179 tmp2 = _mm_setzero_pd();
180 tmp2 = _mm_shuffle_pd(b_sse, b_sse, 0x1);
181 b_sse = _mm_add_pd(b_sse, tmp2);
189 if( n_4vec <
L2BY2 ) {
190 for(
int i=0; i < 3*n_4vec; i++) {
193 y1 = _mm_load_pd(y_p);
194 x1 = _mm_load_pd(x_p);
195 z1 = _mm_mul_pd(a_sse,x1);
196 tmp1 = _mm_mul_pd(b_sse,y1);
197 z1 = _mm_sub_pd(z1,tmp1);
198 _mm_store_pd(y_p, z1);
200 y2 = _mm_load_pd(y_p+2);
201 x2 = _mm_load_pd(x_p+2);
202 z2 = _mm_mul_pd(a_sse,x2);
203 tmp2 = _mm_mul_pd(b_sse,y2);
204 z2 = _mm_sub_pd(z2,tmp2);
205 _mm_store_pd(y_p+2, z2);
208 y3 = _mm_load_pd(y_p+4);
209 x3 = _mm_load_pd(x_p+4);
210 z3 = _mm_mul_pd(a_sse,x3);
211 tmp3 = _mm_mul_pd(b_sse,y3);
212 z3 = _mm_sub_pd(z3,tmp3);
213 _mm_store_pd(y_p+4, z3);
216 y1 = _mm_load_pd(y_p+6);
217 x1 = _mm_load_pd(x_p+6);
218 z1 = _mm_mul_pd(a_sse,x1);
219 tmp1 = _mm_mul_pd(b_sse,y1);
220 z1 = _mm_sub_pd(z1,tmp1);
221 _mm_store_pd(y_p+6, z1);
228 for(
int i=0; i < 3*n_4vec; i++) {
233 y1 = _mm_load_pd(y_p);
234 x1 = _mm_load_pd(x_p);
235 z1 = _mm_mul_pd(a_sse,x1);
236 tmp1 = _mm_mul_pd(b_sse,y1);
237 z1 = _mm_sub_pd(z1,tmp1);
238 _mm_store_pd(y_p, z1);
240 y2 = _mm_load_pd(y_p+2);
241 x2 = _mm_load_pd(x_p+2);
242 z2 = _mm_mul_pd(a_sse,x2);
243 tmp2 = _mm_mul_pd(b_sse,y2);
244 z2 = _mm_sub_pd(z2,tmp2);
245 _mm_store_pd(y_p+2, z2);
248 y3 = _mm_load_pd(y_p+4);
249 x3 = _mm_load_pd(x_p+4);
250 z3 = _mm_mul_pd(a_sse,x3);
251 tmp3 = _mm_mul_pd(b_sse,y3);
252 z3 = _mm_sub_pd(z3,tmp3);
253 _mm_store_pd(y_p+4, z3);
256 y1 = _mm_load_pd(y_p+6);
257 x1 = _mm_load_pd(x_p+6);
258 z1 = _mm_mul_pd(a_sse,x1);
259 tmp1 = _mm_mul_pd(b_sse,y1);
260 z1 = _mm_sub_pd(z1,tmp1);
261 _mm_store_pd(y_p+6, z1);