102 for(
int i=0; i < n_mat; i++) {
104 m2_1 = _mm_loadu_pd(m2_p);
105 m2_2 = _mm_loadu_pd(m2_p+2);
106 m2_3 = _mm_loadu_pd(m2_p+4);
109 m1_1 = _mm_loadu_pd(m1_p);
110 m1_2 = _mm_loadu_pd(m1_p+2);
111 m1_3 = _mm_loadu_pd(m1_p+4);
114 m1_1 = _mm_loadu_pd(m1_p+6);
117 m1_2 = _mm_loadu_pd(m1_p+8);
120 m1_3 = _mm_loadu_pd(m1_p+10);
122 _mm_storeu_pd(m3_p, m3_11);
126 m1_1 = _mm_loadu_pd(m1_p+12);
129 m1_2 = _mm_loadu_pd(m1_p+14);
132 m1_3 = _mm_loadu_pd(m1_p+16);
134 _mm_storeu_pd(m3_p+2, m3_11);
138 m2_1 = _mm_loadu_pd(m2_p+6);
140 m2_2 = _mm_loadu_pd(m2_p+8);
142 m2_3 = _mm_loadu_pd(m2_p+10);
144 _mm_storeu_pd(m3_p+4, m3_11);
147 m1_1 = _mm_loadu_pd(m1_p);
148 m1_2 = _mm_loadu_pd(m1_p+2);
149 m1_3 = _mm_loadu_pd(m1_p+4);
152 m1_1 = _mm_loadu_pd(m1_p+6);
155 m1_2 = _mm_loadu_pd(m1_p+8);
158 m1_3 = _mm_loadu_pd(m1_p+10);
160 _mm_storeu_pd(m3_p+6, m3_11);
164 m1_1 = _mm_loadu_pd(m1_p+12);
167 m1_2 = _mm_loadu_pd(m1_p+14);
170 m1_3 = _mm_loadu_pd(m1_p+16);
172 _mm_storeu_pd(m3_p+8, m3_11);
176 m2_1 = _mm_loadu_pd(m2_p+12);
178 m2_2 = _mm_loadu_pd(m2_p+14);
180 m2_3 = _mm_loadu_pd(m2_p+16);
182 _mm_storeu_pd(m3_p+10, m3_11);
185 m1_1 = _mm_loadu_pd(m1_p);
186 m1_2 = _mm_loadu_pd(m1_p+2);
187 m1_3 = _mm_loadu_pd(m1_p+4);
190 m1_1 = _mm_loadu_pd(m1_p+6);
193 m1_2 = _mm_loadu_pd(m1_p+8);
196 m1_3 = _mm_loadu_pd(m1_p+10);
198 _mm_storeu_pd(m3_p+12, m3_11);
202 m1_1 = _mm_loadu_pd(m1_p+12);
205 m1_2 = _mm_loadu_pd(m1_p+14);
208 m1_3 = _mm_loadu_pd(m1_p+16);
210 _mm_storeu_pd(m3_p+14, m3_11);
217 _mm_storeu_pd(m3_p+16, m3_11);
222 m1_p += 18; m2_p += 18; m3_p += 18;
249 scalar = _mm_load_sd(a);
250 tmp1 = _mm_setzero_pd();
251 tmp1 = _mm_shuffle_pd(scalar, scalar, 0x1);
252 scalar = _mm_add_pd(scalar, tmp1);
258 for(
int i =0; i < n_mat; i++) {
260 m2_1 = _mm_loadu_pd(m2_p);
261 m2_1 = _mm_mul_pd(scalar, m2_1);
263 m2_2 = _mm_loadu_pd(m2_p+2);
264 m2_2 = _mm_mul_pd(scalar, m2_2);
266 m2_3 = _mm_loadu_pd(m2_p+4);
267 m2_3 = _mm_mul_pd(scalar, m2_3);
270 tmp1 = _mm_loadu_pd(m3_p);
271 m1_1 = _mm_loadu_pd(m1_p);
272 m1_2 = _mm_loadu_pd(m1_p+2);
273 m1_3 = _mm_loadu_pd(m1_p+4);
276 m1_1 = _mm_loadu_pd(m1_p+6);
279 m1_2 = _mm_loadu_pd(m1_p+8);
282 m1_3 = _mm_loadu_pd(m1_p+10);
284 tmp1 = _mm_add_pd(tmp1, m3_11);
285 _mm_storeu_pd(m3_p, tmp1);
286 tmp2 = _mm_loadu_pd(m3_p+2);
289 m1_1 = _mm_loadu_pd(m1_p+12);
292 m1_2 = _mm_loadu_pd(m1_p+14);
295 m1_3 = _mm_loadu_pd(m1_p+16);
297 tmp2 = _mm_add_pd(tmp2, m3_11);
298 _mm_storeu_pd(m3_p+2, tmp2);
299 tmp1 = _mm_loadu_pd(m3_p+4);
302 m2_1 = _mm_loadu_pd(m2_p+6);
303 m2_1 = _mm_mul_pd(scalar, m2_1);
306 m2_2 = _mm_loadu_pd(m2_p+8);
307 m2_2 = _mm_mul_pd(scalar, m2_2);
310 m2_3 = _mm_loadu_pd(m2_p+10);
311 m2_3 = _mm_mul_pd(scalar, m2_3);
313 tmp1 = _mm_add_pd( tmp1, m3_11);
314 _mm_storeu_pd(m3_p+4, tmp1);
315 tmp2 = _mm_loadu_pd(m3_p+6);
317 m1_1 = _mm_loadu_pd(m1_p);
318 m1_2 = _mm_loadu_pd(m1_p+2);
319 m1_3 = _mm_loadu_pd(m1_p+4);
322 m1_1 = _mm_loadu_pd(m1_p+6);
325 m1_2 = _mm_loadu_pd(m1_p+8);
328 m1_3 = _mm_loadu_pd(m1_p+10);
330 tmp2 = _mm_add_pd(tmp2, m3_11);
331 _mm_storeu_pd(m3_p+6, tmp2);
332 tmp1 = _mm_loadu_pd(m3_p + 8);
335 m1_1 = _mm_loadu_pd(m1_p+12);
338 m1_2 = _mm_loadu_pd(m1_p+14);
341 m1_3 = _mm_loadu_pd(m1_p+16);
343 tmp1 = _mm_add_pd(tmp1, m3_11);
344 _mm_storeu_pd(m3_p+8, tmp1);
345 tmp2 = _mm_loadu_pd(m3_p+10);
348 m2_1 = _mm_loadu_pd(m2_p+12);
349 m2_1 = _mm_mul_pd(scalar, m2_1);
352 m2_2 = _mm_loadu_pd(m2_p+14);
353 m2_2 = _mm_mul_pd(scalar, m2_2);
356 m2_3 = _mm_loadu_pd(m2_p+16);
357 m2_3 = _mm_mul_pd(scalar, m2_3);
359 tmp2 = _mm_add_pd(tmp2, m3_11);
360 _mm_storeu_pd(m3_p+10, tmp2);
361 tmp1 = _mm_loadu_pd(m3_p+12);
363 m1_1 = _mm_loadu_pd(m1_p);
364 m1_2 = _mm_loadu_pd(m1_p+2);
365 m1_3 = _mm_loadu_pd(m1_p+4);
368 m1_1 = _mm_loadu_pd(m1_p+6);
371 m1_2 = _mm_loadu_pd(m1_p+8);
374 m1_3 = _mm_loadu_pd(m1_p+10);
376 tmp1 = _mm_add_pd(tmp1, m3_11);
377 _mm_storeu_pd(m3_p+12, tmp1);
379 tmp2 = _mm_loadu_pd(m3_p+14);
380 tmp1 = _mm_loadu_pd(m3_p+16);
383 m1_1 = _mm_loadu_pd(m1_p+12);
386 m1_2 = _mm_loadu_pd(m1_p+14);
389 m1_3 = _mm_loadu_pd(m1_p+16);
391 tmp2 = _mm_add_pd(tmp2, m3_11);
392 _mm_storeu_pd(m3_p+14, tmp2);
399 tmp1 = _mm_add_pd(tmp1, m3_11);
400 _mm_storeu_pd(m3_p+16, tmp1);
402 m1_p += 18; m2_p += 18; m3_p += 18;
435 for(
int i=0; i < n_mat; i++) {
437 m2_1 = _mm_load_pd(m2_p);
438 m2_2 = _mm_load_pd(m2_p+2);
439 m2_3 = _mm_load_pd(m2_p+4);
442 m1_1 = _mm_load_pd(m1_p);
443 m1_2 = _mm_load_pd(m1_p+2);
444 m1_3 = _mm_load_pd(m1_p+4);
447 m1_1 = _mm_load_pd(m1_p+6);
450 m1_2 = _mm_load_pd(m1_p+8);
453 m1_3 = _mm_load_pd(m1_p+10);
455 _mm_store_pd(m3_p, m3_11);
459 m1_1 = _mm_load_pd(m1_p+12);
462 m1_2 = _mm_load_pd(m1_p+14);
465 m1_3 = _mm_load_pd(m1_p+16);
467 _mm_store_pd(m3_p+2, m3_11);
471 m2_1 = _mm_load_pd(m2_p+6);
473 m2_2 = _mm_load_pd(m2_p+8);
475 m2_3 = _mm_load_pd(m2_p+10);
477 _mm_store_pd(m3_p+4, m3_11);
480 m1_1 = _mm_load_pd(m1_p);
481 m1_2 = _mm_load_pd(m1_p+2);
482 m1_3 = _mm_load_pd(m1_p+4);
485 m1_1 = _mm_load_pd(m1_p+6);
488 m1_2 = _mm_load_pd(m1_p+8);
491 m1_3 = _mm_load_pd(m1_p+10);
493 _mm_store_pd(m3_p+6, m3_11);
497 m1_1 = _mm_load_pd(m1_p+12);
500 m1_2 = _mm_load_pd(m1_p+14);
503 m1_3 = _mm_load_pd(m1_p+16);
505 _mm_store_pd(m3_p+8, m3_11);
509 m2_1 = _mm_load_pd(m2_p+12);
511 m2_2 = _mm_load_pd(m2_p+14);
513 m2_3 = _mm_load_pd(m2_p+16);
515 _mm_store_pd(m3_p+10, m3_11);
518 m1_1 = _mm_load_pd(m1_p);
519 m1_2 = _mm_load_pd(m1_p+2);
520 m1_3 = _mm_load_pd(m1_p+4);
523 m1_1 = _mm_load_pd(m1_p+6);
526 m1_2 = _mm_load_pd(m1_p+8);
529 m1_3 = _mm_load_pd(m1_p+10);
531 _mm_store_pd(m3_p+12, m3_11);
535 m1_1 = _mm_load_pd(m1_p+12);
538 m1_2 = _mm_load_pd(m1_p+14);
541 m1_3 = _mm_load_pd(m1_p+16);
543 _mm_store_pd(m3_p+14, m3_11);
550 _mm_store_pd(m3_p+16, m3_11);
555 m1_p += 18; m2_p += 18; m3_p += 18;
582 scalar = _mm_load_sd(a);
583 tmp1 = _mm_setzero_pd();
584 tmp1 = _mm_shuffle_pd(scalar, scalar, 0x1);
585 scalar = _mm_add_pd(scalar, tmp1);
591 for(
int i =0; i < n_mat; i++) {
593 m2_1 = _mm_load_pd(m2_p);
594 m2_1 = _mm_mul_pd(scalar, m2_1);
596 m2_2 = _mm_load_pd(m2_p+2);
597 m2_2 = _mm_mul_pd(scalar, m2_2);
599 m2_3 = _mm_load_pd(m2_p+4);
600 m2_3 = _mm_mul_pd(scalar, m2_3);
603 tmp1 = _mm_load_pd(m3_p);
604 m1_1 = _mm_load_pd(m1_p);
605 m1_2 = _mm_load_pd(m1_p+2);
606 m1_3 = _mm_load_pd(m1_p+4);
609 m1_1 = _mm_load_pd(m1_p+6);
612 m1_2 = _mm_load_pd(m1_p+8);
615 m1_3 = _mm_load_pd(m1_p+10);
617 tmp1 = _mm_add_pd(tmp1, m3_11);
618 _mm_store_pd(m3_p, tmp1);
619 tmp2 = _mm_load_pd(m3_p+2);
622 m1_1 = _mm_load_pd(m1_p+12);
625 m1_2 = _mm_load_pd(m1_p+14);
628 m1_3 = _mm_load_pd(m1_p+16);
630 tmp2 = _mm_add_pd(tmp2, m3_11);
631 _mm_store_pd(m3_p+2, tmp2);
632 tmp1 = _mm_load_pd(m3_p+4);
635 m2_1 = _mm_load_pd(m2_p+6);
636 m2_1 = _mm_mul_pd(scalar, m2_1);
639 m2_2 = _mm_load_pd(m2_p+8);
640 m2_2 = _mm_mul_pd(scalar, m2_2);
643 m2_3 = _mm_load_pd(m2_p+10);
644 m2_3 = _mm_mul_pd(scalar, m2_3);
646 tmp1 = _mm_add_pd( tmp1, m3_11);
647 _mm_store_pd(m3_p+4, tmp1);
648 tmp2 = _mm_load_pd(m3_p+6);
650 m1_1 = _mm_load_pd(m1_p);
651 m1_2 = _mm_load_pd(m1_p+2);
652 m1_3 = _mm_load_pd(m1_p+4);
655 m1_1 = _mm_load_pd(m1_p+6);
658 m1_2 = _mm_load_pd(m1_p+8);
661 m1_3 = _mm_load_pd(m1_p+10);
663 tmp2 = _mm_add_pd(tmp2, m3_11);
664 _mm_store_pd(m3_p+6, tmp2);
665 tmp1 = _mm_load_pd(m3_p + 8);
668 m1_1 = _mm_load_pd(m1_p+12);
671 m1_2 = _mm_load_pd(m1_p+14);
674 m1_3 = _mm_load_pd(m1_p+16);
676 tmp1 = _mm_add_pd(tmp1, m3_11);
677 _mm_store_pd(m3_p+8, tmp1);
678 tmp2 = _mm_load_pd(m3_p+10);
681 m2_1 = _mm_load_pd(m2_p+12);
682 m2_1 = _mm_mul_pd(scalar, m2_1);
685 m2_2 = _mm_load_pd(m2_p+14);
686 m2_2 = _mm_mul_pd(scalar, m2_2);
689 m2_3 = _mm_load_pd(m2_p+16);
690 m2_3 = _mm_mul_pd(scalar, m2_3);
692 tmp2 = _mm_add_pd(tmp2, m3_11);
693 _mm_store_pd(m3_p+10, tmp2);
694 tmp1 = _mm_load_pd(m3_p+12);
696 m1_1 = _mm_load_pd(m1_p);
697 m1_2 = _mm_load_pd(m1_p+2);
698 m1_3 = _mm_load_pd(m1_p+4);
701 m1_1 = _mm_load_pd(m1_p+6);
704 m1_2 = _mm_load_pd(m1_p+8);
707 m1_3 = _mm_load_pd(m1_p+10);
709 tmp1 = _mm_add_pd(tmp1, m3_11);
710 _mm_store_pd(m3_p+12, tmp1);
712 tmp2 = _mm_load_pd(m3_p+14);
713 tmp1 = _mm_load_pd(m3_p+16);
716 m1_1 = _mm_load_pd(m1_p+12);
719 m1_2 = _mm_load_pd(m1_p+14);
722 m1_3 = _mm_load_pd(m1_p+16);
724 tmp2 = _mm_add_pd(tmp2, m3_11);
725 _mm_store_pd(m3_p+14, tmp2);
732 tmp1 = _mm_add_pd(tmp1, m3_11);
733 _mm_store_pd(m3_p+16, tmp1);
735 m1_p += 18; m2_p += 18; m3_p += 18;