104 for(
int i=0; i < n_mat; i++) {
105 m2_1 = _mm_loadu_pd(m2_p);
106 m2_2 = _mm_loadu_pd(m2_p+6);
107 m2_3 = _mm_loadu_pd(m2_p+12);
109 tmp1 = _mm_loadu_pd(m1_p);
110 tmp2 = _mm_loadu_pd(m1_p+2);
111 tmp3 = _mm_loadu_pd(m1_p+4);
114 tmp1 = _mm_loadu_pd(m1_p+6);
116 tmp2 = _mm_loadu_pd(m1_p+8);
118 tmp3 = _mm_loadu_pd(m1_p+10);
121 tmp1 = _mm_loadu_pd(m1_p+12);
123 tmp2 = _mm_loadu_pd(m1_p+14);
125 tmp3 = _mm_loadu_pd(m1_p+16);
128 _mm_storeu_pd(m3_p, m3_11);
130 _mm_storeu_pd(m3_p+2, m3_12);
132 _mm_storeu_pd(m3_p+4, m3_13);
134 m2_1 = _mm_loadu_pd(m2_p+2);
135 m2_2 = _mm_loadu_pd(m2_p+8);
136 m2_3 = _mm_loadu_pd(m2_p+14);
138 tmp1 = _mm_loadu_pd(m1_p);
139 tmp2 = _mm_loadu_pd(m1_p+2);
140 tmp3 = _mm_loadu_pd(m1_p+4);
143 tmp1 = _mm_loadu_pd(m1_p+6);
145 tmp2 = _mm_loadu_pd(m1_p+8);
147 tmp3 = _mm_loadu_pd(m1_p+10);
150 tmp1 = _mm_loadu_pd(m1_p+12);
152 tmp2 = _mm_loadu_pd(m1_p+14);
154 tmp3 = _mm_loadu_pd(m1_p+16);
157 _mm_storeu_pd(m3_p+6, m3_11);
159 _mm_storeu_pd(m3_p+8, m3_12);
161 _mm_storeu_pd(m3_p+10, m3_13);
163 m2_1 = _mm_loadu_pd(m2_p+4);
164 m2_2 = _mm_loadu_pd(m2_p+10);
165 m2_3 = _mm_loadu_pd(m2_p+16);
167 tmp1 = _mm_loadu_pd(m1_p);
168 tmp2 = _mm_loadu_pd(m1_p+2);
169 tmp3 = _mm_loadu_pd(m1_p+4);
172 tmp1 = _mm_loadu_pd(m1_p+6);
174 tmp2 = _mm_loadu_pd(m1_p+8);
176 tmp3 = _mm_loadu_pd(m1_p+10);
179 tmp1 = _mm_loadu_pd(m1_p+12);
181 tmp2 = _mm_loadu_pd(m1_p+14);
183 tmp3 = _mm_loadu_pd(m1_p+16);
186 _mm_storeu_pd(m3_p+12, m3_11);
188 _mm_storeu_pd(m3_p+14, m3_12);
190 _mm_storeu_pd(m3_p+16, m3_13);
193 m1_p += 18; m2_p += 18; m3_p += 18;
220 scalar = _mm_load_sd(a);
221 tmp1 = _mm_setzero_pd();
222 tmp1 = _mm_shuffle_pd(scalar, scalar, 0x1);
223 scalar = _mm_add_pd(scalar, tmp1);
229 for(
int i =0; i < n_mat; i++) {
230 res1 = _mm_loadu_pd(m3_p);
231 res2 = _mm_loadu_pd(m3_p+2);
232 res3 = _mm_loadu_pd(m3_p+4);
234 m2_1 = _mm_loadu_pd(m2_p);
235 m2_2 = _mm_loadu_pd(m2_p+6);
236 m2_3 = _mm_loadu_pd(m2_p+12);
238 tmp1 = _mm_loadu_pd(m1_p);
239 tmp2 = _mm_loadu_pd(m1_p+2);
240 tmp3 = _mm_loadu_pd(m1_p+4);
243 tmp1 = _mm_loadu_pd(m1_p+6);
245 tmp2 = _mm_loadu_pd(m1_p+8);
247 tmp3 = _mm_loadu_pd(m1_p+10);
250 tmp1 = _mm_loadu_pd(m1_p+12);
252 tmp2 = _mm_loadu_pd(m1_p+14);
254 tmp3 = _mm_loadu_pd(m1_p+16);
260 m3_11 = _mm_mul_pd(scalar, m3_11);
261 m3_11 = _mm_add_pd(res1, m3_11);
263 m3_12 = _mm_mul_pd(scalar, m3_12);
264 m3_12 = _mm_add_pd(res2, m3_12);
266 m3_13 = _mm_mul_pd(scalar, m3_13);
267 m3_13 = _mm_add_pd(res3, m3_13);
269 _mm_storeu_pd(m3_p, m3_11);
270 _mm_storeu_pd(m3_p+2, m3_12);
271 _mm_storeu_pd(m3_p+4, m3_13);
273 res1=_mm_loadu_pd(m3_p+6);
274 res2=_mm_loadu_pd(m3_p+8);
275 res3=_mm_loadu_pd(m3_p+10);
278 m2_1 = _mm_loadu_pd(m2_p+2);
279 m2_2 = _mm_loadu_pd(m2_p+8);
280 m2_3 = _mm_loadu_pd(m2_p+14);
282 tmp1 = _mm_loadu_pd(m1_p);
283 tmp2 = _mm_loadu_pd(m1_p+2);
284 tmp3 = _mm_loadu_pd(m1_p+4);
287 tmp1 = _mm_loadu_pd(m1_p+6);
289 tmp2 = _mm_loadu_pd(m1_p+8);
291 tmp3 = _mm_loadu_pd(m1_p+10);
294 tmp1 = _mm_loadu_pd(m1_p+12);
296 tmp2 = _mm_loadu_pd(m1_p+14);
298 tmp3 = _mm_loadu_pd(m1_p+16);
304 m3_11 = _mm_mul_pd(scalar, m3_11);
305 m3_11 = _mm_add_pd(res1,m3_11);
307 m3_12 = _mm_mul_pd(scalar, m3_12);
308 m3_12 = _mm_add_pd(res2,m3_12);
310 m3_13 = _mm_mul_pd(scalar, m3_13);
311 m3_13 = _mm_add_pd(res3, m3_13);
313 _mm_storeu_pd(m3_p+6, m3_11);
314 _mm_storeu_pd(m3_p+8, m3_12);
315 _mm_storeu_pd(m3_p+10, m3_13);
317 res1=_mm_loadu_pd(m3_p+12);
318 res2=_mm_loadu_pd(m3_p+14);
319 res3=_mm_loadu_pd(m3_p+16);
321 m2_1 = _mm_loadu_pd(m2_p+4);
322 m2_2 = _mm_loadu_pd(m2_p+10);
323 m2_3 = _mm_loadu_pd(m2_p+16);
325 tmp1 = _mm_loadu_pd(m1_p);
326 tmp2 = _mm_loadu_pd(m1_p+2);
327 tmp3 = _mm_loadu_pd(m1_p+4);
330 tmp1 = _mm_loadu_pd(m1_p+6);
332 tmp2 = _mm_loadu_pd(m1_p+8);
334 tmp3 = _mm_loadu_pd(m1_p+10);
337 tmp1 = _mm_loadu_pd(m1_p+12);
339 tmp2 = _mm_loadu_pd(m1_p+14);
341 tmp3 = _mm_loadu_pd(m1_p+16);
347 m3_11 = _mm_mul_pd(scalar, m3_11);
348 m3_11 = _mm_add_pd(res1,m3_11);
350 m3_12 = _mm_mul_pd(scalar, m3_12);
351 m3_12 = _mm_add_pd(res2,m3_12);
353 m3_13 = _mm_mul_pd(scalar, m3_13);
354 m3_13 = _mm_add_pd(res3, m3_13);
356 _mm_storeu_pd(m3_p+12, m3_11);
357 _mm_storeu_pd(m3_p+14, m3_12);
358 _mm_storeu_pd(m3_p+16, m3_13);
359 m1_p += 18; m2_p += 18; m3_p += 18;
389 for(
int i=0; i < n_mat; i++) {
390 m2_1 = _mm_load_pd(m2_p);
391 m2_2 = _mm_load_pd(m2_p+6);
392 m2_3 = _mm_load_pd(m2_p+12);
394 tmp1 = _mm_load_pd(m1_p);
395 tmp2 = _mm_load_pd(m1_p+2);
396 tmp3 = _mm_load_pd(m1_p+4);
399 tmp1 = _mm_load_pd(m1_p+6);
401 tmp2 = _mm_load_pd(m1_p+8);
403 tmp3 = _mm_load_pd(m1_p+10);
406 tmp1 = _mm_load_pd(m1_p+12);
408 tmp2 = _mm_load_pd(m1_p+14);
410 tmp3 = _mm_load_pd(m1_p+16);
413 _mm_store_pd(m3_p, m3_11);
415 _mm_store_pd(m3_p+2, m3_12);
417 _mm_store_pd(m3_p+4, m3_13);
419 m2_1 = _mm_load_pd(m2_p+2);
420 m2_2 = _mm_load_pd(m2_p+8);
421 m2_3 = _mm_load_pd(m2_p+14);
423 tmp1 = _mm_load_pd(m1_p);
424 tmp2 = _mm_load_pd(m1_p+2);
425 tmp3 = _mm_load_pd(m1_p+4);
428 tmp1 = _mm_load_pd(m1_p+6);
430 tmp2 = _mm_load_pd(m1_p+8);
432 tmp3 = _mm_load_pd(m1_p+10);
435 tmp1 = _mm_load_pd(m1_p+12);
437 tmp2 = _mm_load_pd(m1_p+14);
439 tmp3 = _mm_load_pd(m1_p+16);
442 _mm_store_pd(m3_p+6, m3_11);
444 _mm_store_pd(m3_p+8, m3_12);
446 _mm_store_pd(m3_p+10, m3_13);
448 m2_1 = _mm_load_pd(m2_p+4);
449 m2_2 = _mm_load_pd(m2_p+10);
450 m2_3 = _mm_load_pd(m2_p+16);
452 tmp1 = _mm_load_pd(m1_p);
453 tmp2 = _mm_load_pd(m1_p+2);
454 tmp3 = _mm_load_pd(m1_p+4);
457 tmp1 = _mm_load_pd(m1_p+6);
459 tmp2 = _mm_load_pd(m1_p+8);
461 tmp3 = _mm_load_pd(m1_p+10);
464 tmp1 = _mm_load_pd(m1_p+12);
466 tmp2 = _mm_load_pd(m1_p+14);
468 tmp3 = _mm_load_pd(m1_p+16);
471 _mm_store_pd(m3_p+12, m3_11);
473 _mm_store_pd(m3_p+14, m3_12);
475 _mm_store_pd(m3_p+16, m3_13);
478 m1_p += 18; m2_p += 18; m3_p += 18;
505 scalar = _mm_load_sd(a);
506 tmp1 = _mm_setzero_pd();
507 tmp1 = _mm_shuffle_pd(scalar, scalar, 0x1);
508 scalar = _mm_add_pd(scalar, tmp1);
514 for(
int i =0; i < n_mat; i++) {
515 res1 = _mm_load_pd(m3_p);
516 res2 = _mm_load_pd(m3_p+2);
517 res3 = _mm_load_pd(m3_p+4);
519 m2_1 = _mm_load_pd(m2_p);
520 m2_2 = _mm_load_pd(m2_p+6);
521 m2_3 = _mm_load_pd(m2_p+12);
523 tmp1 = _mm_load_pd(m1_p);
524 tmp2 = _mm_load_pd(m1_p+2);
525 tmp3 = _mm_load_pd(m1_p+4);
528 tmp1 = _mm_load_pd(m1_p+6);
530 tmp2 = _mm_load_pd(m1_p+8);
532 tmp3 = _mm_load_pd(m1_p+10);
535 tmp1 = _mm_load_pd(m1_p+12);
537 tmp2 = _mm_load_pd(m1_p+14);
539 tmp3 = _mm_load_pd(m1_p+16);
545 m3_11 = _mm_mul_pd(scalar, m3_11);
546 m3_11 = _mm_add_pd(res1, m3_11);
548 m3_12 = _mm_mul_pd(scalar, m3_12);
549 m3_12 = _mm_add_pd(res2, m3_12);
551 m3_13 = _mm_mul_pd(scalar, m3_13);
552 m3_13 = _mm_add_pd(res3, m3_13);
554 _mm_store_pd(m3_p, m3_11);
555 _mm_store_pd(m3_p+2, m3_12);
556 _mm_store_pd(m3_p+4, m3_13);
558 res1=_mm_load_pd(m3_p+6);
559 res2=_mm_load_pd(m3_p+8);
560 res3=_mm_load_pd(m3_p+10);
563 m2_1 = _mm_load_pd(m2_p+2);
564 m2_2 = _mm_load_pd(m2_p+8);
565 m2_3 = _mm_load_pd(m2_p+14);
567 tmp1 = _mm_load_pd(m1_p);
568 tmp2 = _mm_load_pd(m1_p+2);
569 tmp3 = _mm_load_pd(m1_p+4);
572 tmp1 = _mm_load_pd(m1_p+6);
574 tmp2 = _mm_load_pd(m1_p+8);
576 tmp3 = _mm_load_pd(m1_p+10);
579 tmp1 = _mm_load_pd(m1_p+12);
581 tmp2 = _mm_load_pd(m1_p+14);
583 tmp3 = _mm_load_pd(m1_p+16);
589 m3_11 = _mm_mul_pd(scalar, m3_11);
590 m3_11 = _mm_add_pd(res1,m3_11);
592 m3_12 = _mm_mul_pd(scalar, m3_12);
593 m3_12 = _mm_add_pd(res2,m3_12);
595 m3_13 = _mm_mul_pd(scalar, m3_13);
596 m3_13 = _mm_add_pd(res3, m3_13);
598 _mm_store_pd(m3_p+6, m3_11);
599 _mm_store_pd(m3_p+8, m3_12);
600 _mm_store_pd(m3_p+10, m3_13);
602 res1=_mm_load_pd(m3_p+12);
603 res2=_mm_load_pd(m3_p+14);
604 res3=_mm_load_pd(m3_p+16);
606 m2_1 = _mm_load_pd(m2_p+4);
607 m2_2 = _mm_load_pd(m2_p+10);
608 m2_3 = _mm_load_pd(m2_p+16);
610 tmp1 = _mm_load_pd(m1_p);
611 tmp2 = _mm_load_pd(m1_p+2);
612 tmp3 = _mm_load_pd(m1_p+4);
615 tmp1 = _mm_load_pd(m1_p+6);
617 tmp2 = _mm_load_pd(m1_p+8);
619 tmp3 = _mm_load_pd(m1_p+10);
622 tmp1 = _mm_load_pd(m1_p+12);
624 tmp2 = _mm_load_pd(m1_p+14);
626 tmp3 = _mm_load_pd(m1_p+16);
632 m3_11 = _mm_mul_pd(scalar, m3_11);
633 m3_11 = _mm_add_pd(res1,m3_11);
635 m3_12 = _mm_mul_pd(scalar, m3_12);
636 m3_12 = _mm_add_pd(res2,m3_12);
638 m3_13 = _mm_mul_pd(scalar, m3_13);
639 m3_13 = _mm_add_pd(res3, m3_13);
641 _mm_store_pd(m3_p+12, m3_11);
642 _mm_store_pd(m3_p+14, m3_12);
643 _mm_store_pd(m3_p+16, m3_13);
644 m1_p += 18; m2_p += 18; m3_p += 18;