43 a_sse = _mm_load_sd(a);
44 b_sse = _mm_load_sd(b);
48 tmp1 = _mm_setzero_pd();
50 tmp1 = _mm_shuffle_pd(a_sse, a_sse, 0x1);
51 a_sse = _mm_add_pd(a_sse, tmp1);
53 tmp2 = _mm_setzero_pd();
54 tmp2 = _mm_shuffle_pd(b_sse, b_sse, 0x1);
55 b_sse = _mm_add_pd(b_sse, tmp2);
65 for(
int i=0; i < 3*n_4vec; i++) {
68 y1 = _mm_load_pd(y_p);
69 x1 = _mm_load_pd(x_p);
70 z1 = _mm_mul_pd(a_sse,x1);
71 tmp1 = _mm_mul_pd(b_sse,y1);
72 z1 = _mm_add_pd(z1,tmp1);
73 _mm_store_pd(z_p, z1);
75 y2 = _mm_load_pd(y_p+2);
76 x2 = _mm_load_pd(x_p+2);
77 z2 = _mm_mul_pd(a_sse,x2);
78 tmp2 = _mm_mul_pd(b_sse,y2);
79 z2 = _mm_add_pd(z2,tmp2);
80 _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_add_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_add_pd(z1,tmp1);
95 _mm_store_pd(z_p+6, z1);
97 x_p+=8; y_p+=8; z_p+=8;
102 for(
int i=0; i < 3*n_4vec; i++) {
106 y1 = _mm_load_pd(y_p);
107 x1 = _mm_load_pd(x_p);
108 tmp1 = _mm_mul_pd(b_sse,y1);
109 z1 = _mm_mul_pd(a_sse,x1);
110 z1 = _mm_add_pd(z1,tmp1);
111 _mm_stream_pd(z_p, z1);
113 y2 = _mm_load_pd(y_p+2);
114 x2 = _mm_load_pd(x_p+2);
115 tmp2 = _mm_mul_pd(b_sse,y2);
116 z2 = _mm_mul_pd(a_sse,x2);
117 z2 = _mm_add_pd(z2,tmp2);
118 _mm_stream_pd(z_p+2, z2);
120 y3 = _mm_load_pd(y_p+4);
121 x3 = _mm_load_pd(x_p+4);
122 tmp3 = _mm_mul_pd(b_sse,y3);
123 z3 = _mm_mul_pd(a_sse,x3);
124 z3 = _mm_add_pd(z3,tmp3);
125 _mm_stream_pd(z_p+4, z3);
128 y1 = _mm_load_pd(y_p+6);
129 x1 = _mm_load_pd(x_p+6);
130 tmp1 = _mm_mul_pd(b_sse,y1);
131 z1 = _mm_mul_pd(a_sse,x1);
132 z1 = _mm_add_pd(z1,tmp1);
133 _mm_stream_pd(z_p+6, z1);
135 x_p +=8; y_p+=8; z_p+=8;
165 a_sse = _mm_load_sd(a);
166 b_sse = _mm_load_sd(b);
170 tmp1 = _mm_setzero_pd();
171 tmp1 = _mm_shuffle_pd(a_sse, a_sse, 0x1);
172 a_sse = _mm_add_pd(a_sse, tmp1);
174 tmp2 = _mm_setzero_pd();
175 tmp2 = _mm_shuffle_pd(b_sse, b_sse, 0x1);
176 b_sse = _mm_add_pd(b_sse, tmp2);
183 if (n_4vec <
L2BY2 ) {
185 for(
int i=0; i < 3*n_4vec; i++) {
187 y1 = _mm_load_pd(y_p);
188 x1 = _mm_load_pd(x_p);
189 tmp1 = _mm_mul_pd(b_sse,y1);
190 z1 = _mm_mul_pd(a_sse,x1);
191 z1 = _mm_add_pd(z1,tmp1);
192 _mm_store_pd(y_p, z1);
194 y2 = _mm_load_pd(y_p+2);
195 x2 = _mm_load_pd(x_p+2);
196 tmp2 = _mm_mul_pd(b_sse,y2);
197 z2 = _mm_mul_pd(a_sse,x2);
198 z2 = _mm_add_pd(z2,tmp2);
199 _mm_store_pd(y_p+2, z2);
201 y3 = _mm_load_pd(y_p+4);
202 x3 = _mm_load_pd(x_p+4);
203 tmp3 = _mm_mul_pd(b_sse,y3);
204 z3 = _mm_mul_pd(a_sse,x3);
205 z3 = _mm_add_pd(z3,tmp3);
206 _mm_store_pd(y_p+4, z3);
208 y1 = _mm_load_pd(y_p+6);
209 x1 = _mm_load_pd(x_p+6);
210 z1 = _mm_mul_pd(a_sse,x1);
211 tmp1 = _mm_mul_pd(b_sse,y1);
212 z1 = _mm_add_pd(z1,tmp1);
213 _mm_store_pd(y_p+6, z1);
221 for(
int i=0; i < 3*n_4vec; i++) {
226 y1 = _mm_load_pd(y_p);
227 x1 = _mm_load_pd(x_p);
228 z1 = _mm_mul_pd(a_sse,x1);
229 tmp1 = _mm_mul_pd(b_sse,y1);
230 z1 = _mm_add_pd(z1,tmp1);
231 _mm_store_pd(y_p, z1);
233 y2 = _mm_load_pd(y_p+2);
234 x2 = _mm_load_pd(x_p+2);
235 z2 = _mm_mul_pd(a_sse,x2);
236 tmp2 = _mm_mul_pd(b_sse,y2);
237 z2 = _mm_add_pd(z2,tmp2);
238 _mm_store_pd(y_p+2, z2);
240 y3 = _mm_load_pd(y_p+4);
241 x3 = _mm_load_pd(x_p+4);
242 z3 = _mm_mul_pd(a_sse,x3);
243 tmp3 = _mm_mul_pd(b_sse,y3);
244 z3 = _mm_add_pd(z3,tmp3);
245 _mm_store_pd(y_p+4, z3);
247 y1 = _mm_load_pd(y_p+6);
248 x1 = _mm_load_pd(x_p+6);
249 z1 = _mm_mul_pd(a_sse,x1);
250 tmp1 = _mm_mul_pd(b_sse,y1);
251 z1 = _mm_add_pd(z1,tmp1);
252 _mm_store_pd(y_p+6, z1);
261 y2 = _mm_load_pd(y_p+8);
262 x2 = _mm_load_pd(x_p+8);
263 z2 = _mm_mul_pd(a_sse,x2);
264 tmp2 = _mm_mul_pd(b_sse,y2);
265 z2 = _mm_add_pd(z2,tmp2);
266 _mm_store_pd(y_p+8, z2);
268 y3 = _mm_load_pd(y_p+10);
269 x3 = _mm_load_pd(x_p+10);
270 z3 = _mm_mul_pd(a_sse,x3);
271 tmp3 = _mm_mul_pd(b_sse,y3);
272 z3 = _mm_add_pd(z3,tmp3);
273 _mm_store_pd(y_p+10, z3);
275 y1 = _mm_load_pd(y_p+12);
276 x1 = _mm_load_pd(x_p+12);
277 z1 = _mm_mul_pd(a_sse,x1);
278 tmp1 = _mm_mul_pd(b_sse,y1);
279 z1 = _mm_add_pd(z1,tmp1);
280 _mm_store_pd(y_p+12, z1);
282 y2 = _mm_load_pd(y_p+14);
283 x2 = _mm_load_pd(x_p+14);
284 z2 = _mm_mul_pd(a_sse,x2);
285 tmp2 = _mm_mul_pd(b_sse,y2);
286 z2 = _mm_add_pd(z2,tmp2);
287 _mm_store_pd(y_p+14, z2);
292 y3 = _mm_load_pd(y_p+16);
293 x3 = _mm_load_pd(x_p+16);
294 z3 = _mm_mul_pd(a_sse,x3);
295 tmp3 = _mm_mul_pd(b_sse,y3);
296 z3 = _mm_add_pd(z3,tmp3);
297 _mm_store_pd(y_p+16, z3);
300 y1 = _mm_load_pd(y_p+18);
301 x1 = _mm_load_pd(x_p+18);
302 z1 = _mm_mul_pd(a_sse,x1);
303 tmp1 = _mm_mul_pd(b_sse,y1);
304 z1 = _mm_add_pd(z1,tmp1);
305 _mm_store_pd(y_p+18, z1);
307 y2 = _mm_load_pd(y_p+20);
308 x2 = _mm_load_pd(x_p+20);
309 z2 = _mm_mul_pd(a_sse,x2);
310 tmp2 = _mm_mul_pd(b_sse,y2);
311 z2 = _mm_add_pd(z2,tmp2);
312 _mm_store_pd(y_p+20, z2);
315 y3 = _mm_load_pd(y_p+22);
316 x3 = _mm_load_pd(x_p+22);
317 z3 = _mm_mul_pd(a_sse,x3);
318 tmp3 = _mm_mul_pd(b_sse,y3);
319 z3 = _mm_add_pd(z3,tmp3);
320 _mm_store_pd(y_p+22, z3);