111 for(
int i=0; i < n_mat; i++) {
112 m1_1 = _mm_loadu_pd(m1_p);
113 m1_2 = _mm_loadu_pd(m1_p+2);
114 m1_3 = _mm_loadu_pd(m1_p+4);
116 m2_1 = _mm_loadu_pd(m2_p);
117 m2_2 = _mm_loadu_pd(m2_p+6);
118 m2_3 = _mm_loadu_pd(m2_p+12);
121 CCMUL(m3_11, m2_1, m1_1);
122 m1_1 = _mm_loadu_pd(m1_p+6);
123 CCMADD(m3_11, m2_2, m1_2);
124 m1_2 = _mm_loadu_pd(m1_p+8);
125 CCMADD(m3_11, m2_3, m1_3);
126 m1_3 = _mm_loadu_pd(m1_p+10);
129 CCMUL(m3_12, m2_1, m1_1);
130 m1_1 = _mm_loadu_pd(m1_p+12);
131 CCMADD(m3_12, m2_2, m1_2);
132 m1_2 = _mm_loadu_pd(m1_p+14);
133 CCMADD(m3_12, m2_3, m1_3);
134 m1_3 = _mm_loadu_pd(m1_p+16);
137 CCMUL(m3_13, m2_1, m1_1);
138 m2_1 = _mm_loadu_pd(m2_p+2);
140 m2_2 = _mm_loadu_pd(m2_p+8);
141 CCMADD(m3_13, m2_3, m1_3);
142 m2_3 = _mm_loadu_pd(m2_p+14);
144 _mm_storeu_pd(m3_p, m3_11);
145 _mm_storeu_pd(m3_p+2, m3_12);
146 _mm_storeu_pd(m3_p+4, m3_13);
148 m1_1 = _mm_loadu_pd(m1_p);
149 m1_2 = _mm_loadu_pd(m1_p+2);
150 m1_3 = _mm_loadu_pd(m1_p+4);
152 CCMUL(m3_11, m2_1, m1_1);
153 m1_1 = _mm_loadu_pd(m1_p+6);
154 CCMADD(m3_11, m2_2, m1_2);
155 m1_2 = _mm_loadu_pd(m1_p+8);
156 CCMADD(m3_11, m2_3, m1_3);
157 m1_3 = _mm_loadu_pd(m1_p+10);
160 CCMUL(m3_12, m2_1, m1_1);
161 m1_1 = _mm_loadu_pd(m1_p+12);
162 CCMADD(m3_12, m2_2, m1_2);
163 m1_2 = _mm_loadu_pd(m1_p+14);
164 CCMADD(m3_12, m2_3, m1_3);
165 m1_3 = _mm_loadu_pd(m1_p+16);
168 CCMUL(m3_13, m2_1, m1_1);
169 m2_1 = _mm_loadu_pd(m2_p+4);
171 m2_2 = _mm_loadu_pd(m2_p+10);
172 CCMADD(m3_13, m2_3, m1_3);
173 m2_3 = _mm_loadu_pd(m2_p+16);
175 _mm_storeu_pd(m3_p+6, m3_11);
176 _mm_storeu_pd(m3_p+8, m3_12);
177 _mm_storeu_pd(m3_p+10, m3_13);
179 m1_1 = _mm_loadu_pd(m1_p);
180 m1_2 = _mm_loadu_pd(m1_p+2);
181 m1_3 = _mm_loadu_pd(m1_p+4);
183 CCMUL(m3_11, m2_1, m1_1);
184 m1_1 = _mm_loadu_pd(m1_p+6);
185 CCMADD(m3_11, m2_2, m1_2);
186 m1_2 = _mm_loadu_pd(m1_p+8);
187 CCMADD(m3_11, m2_3, m1_3);
188 m1_3 = _mm_loadu_pd(m1_p+10);
190 CCMUL(m3_12, m2_1, m1_1);
191 m1_1 = _mm_loadu_pd(m1_p+12);
192 CCMADD(m3_12, m2_2, m1_2);
193 m1_2 = _mm_loadu_pd(m1_p+14);
194 CCMADD(m3_12, m2_3, m1_3);
195 m1_3 = _mm_loadu_pd(m1_p+16);
197 CCMUL(m3_13, m2_1, m1_1);
198 CCMADD(m3_13, m2_2, m1_2);
199 CCMADD(m3_13, m2_3, m1_3);
201 _mm_storeu_pd(m3_p+12, m3_11);
202 _mm_storeu_pd(m3_p+14, m3_12);
203 _mm_storeu_pd(m3_p+16, m3_13);
207 m1_p += 18; m2_p += 18; m3_p += 18;
227 __m128d res1,res2,res3;
233 scalar = _mm_load_sd(a);
237 tmp1 = _mm_setzero_pd();
238 tmp1 = _mm_shuffle_pd(scalar, scalar, 0x1);
239 scalar = _mm_add_pd(scalar, tmp1);
247 for(
int i =0; i < n_mat; i++) {
248 m1_1 = _mm_loadu_pd(m1_p);
249 m1_2 = _mm_loadu_pd(m1_p+2);
250 m1_3 = _mm_loadu_pd(m1_p+4);
253 m2_1 = _mm_loadu_pd(m2_p);
254 m2_2 = _mm_loadu_pd(m2_p+6);
255 m2_3 = _mm_loadu_pd(m2_p+12);
257 res1 = _mm_loadu_pd(m3_p);
258 res2 = _mm_loadu_pd(m3_p+2);
259 res3 = _mm_loadu_pd(m3_p+4);
262 CCMUL(m3_11, m2_1, m1_1);
263 m1_1 = _mm_loadu_pd(m1_p+6);
264 CCMADD(m3_11, m2_2, m1_2);
265 m1_2 = _mm_loadu_pd(m1_p+8);
266 CCMADD(m3_11, m2_3, m1_3);
267 m1_3 = _mm_loadu_pd(m1_p+10);
269 m3_11 = _mm_mul_pd(scalar,m3_11);
270 m3_11 = _mm_add_pd(res1, m3_11);
273 CCMUL(m3_12, m2_1, m1_1);
274 m1_1 = _mm_loadu_pd(m1_p+12);
275 CCMADD(m3_12, m2_2, m1_2);
276 m1_2 = _mm_loadu_pd(m1_p+14);
277 CCMADD(m3_12, m2_3, m1_3);
278 m1_3 = _mm_loadu_pd(m1_p+16);
280 m3_12 = _mm_mul_pd(scalar,m3_12);
281 m3_12 = _mm_add_pd(res2, m3_12);
285 CCMUL(m3_13, m2_1, m1_1);
286 m2_1 = _mm_loadu_pd(m2_p+2);
288 m2_2 = _mm_loadu_pd(m2_p+8);
289 CCMADD(m3_13, m2_3, m1_3);
290 m2_3 = _mm_loadu_pd(m2_p+14);
292 m3_13 = _mm_mul_pd(scalar,m3_13);
293 m3_13 = _mm_add_pd(res3, m3_13);
298 _mm_storeu_pd(m3_p, m3_11);
299 _mm_storeu_pd(m3_p+2, m3_12);
300 _mm_storeu_pd(m3_p+4, m3_13);
302 res1 = _mm_loadu_pd(m3_p+6);
303 res2 = _mm_loadu_pd(m3_p+8);
304 res3 = _mm_loadu_pd(m3_p+10);
306 m1_1 = _mm_loadu_pd(m1_p);
307 m1_2 = _mm_loadu_pd(m1_p+2);
308 m1_3 = _mm_loadu_pd(m1_p+4);
310 CCMUL(m3_11, m2_1, m1_1);
311 m1_1 = _mm_loadu_pd(m1_p+6);
312 CCMADD(m3_11, m2_2, m1_2);
313 m1_2 = _mm_loadu_pd(m1_p+8);
314 CCMADD(m3_11, m2_3, m1_3);
315 m1_3 = _mm_loadu_pd(m1_p+10);
317 m3_11 = _mm_mul_pd(scalar,m3_11);
318 m3_11 = _mm_add_pd(res1, m3_11);
321 CCMUL(m3_12, m2_1, m1_1);
322 m1_1 = _mm_loadu_pd(m1_p+12);
323 CCMADD(m3_12, m2_2, m1_2);
324 m1_2 = _mm_loadu_pd(m1_p+14);
325 CCMADD(m3_12, m2_3, m1_3);
326 m1_3 = _mm_loadu_pd(m1_p+16);
328 m3_12 = _mm_mul_pd(scalar,m3_12);
329 m3_12 = _mm_add_pd(res2, m3_12);
333 CCMUL(m3_13, m2_1, m1_1);
334 m2_1 = _mm_loadu_pd(m2_p+4);
336 m2_2 = _mm_loadu_pd(m2_p+10);
337 CCMADD(m3_13, m2_3, m1_3);
338 m2_3 = _mm_loadu_pd(m2_p+16);
340 m3_13 = _mm_mul_pd(scalar,m3_13);
341 m3_13 = _mm_add_pd(res3, m3_13);
345 _mm_storeu_pd(m3_p+6, m3_11);
346 _mm_storeu_pd(m3_p+8, m3_12);
347 _mm_storeu_pd(m3_p+10, m3_13);
348 res1 = _mm_loadu_pd(m3_p+12);
349 res2 = _mm_loadu_pd(m3_p+14);
350 res3 = _mm_loadu_pd(m3_p+16);
353 m1_1 = _mm_loadu_pd(m1_p);
354 m1_2 = _mm_loadu_pd(m1_p+2);
355 m1_3 = _mm_loadu_pd(m1_p+4);
357 CCMUL(m3_11, m2_1, m1_1);
358 m1_1 = _mm_loadu_pd(m1_p+6);
359 CCMADD(m3_11, m2_2, m1_2);
360 m1_2 = _mm_loadu_pd(m1_p+8);
361 CCMADD(m3_11, m2_3, m1_3);
362 m1_3 = _mm_loadu_pd(m1_p+10);
364 m3_11 = _mm_mul_pd(scalar,m3_11);
365 m3_11 = _mm_add_pd(res1, m3_11);
369 CCMUL(m3_12, m2_1, m1_1);
370 m1_1 = _mm_loadu_pd(m1_p+12);
371 CCMADD(m3_12, m2_2, m1_2);
372 m1_2 = _mm_loadu_pd(m1_p+14);
373 CCMADD(m3_12, m2_3, m1_3);
374 m1_3 = _mm_loadu_pd(m1_p+16);
376 m3_12 = _mm_mul_pd(scalar,m3_12);
377 m3_12 = _mm_add_pd(res2, m3_12);
379 CCMUL(m3_13, m2_1, m1_1);
380 CCMADD(m3_13, m2_2, m1_2);
381 CCMADD(m3_13, m2_3, m1_3);
383 m3_13 = _mm_mul_pd(scalar,m3_13);
384 m3_13 = _mm_add_pd(res3, m3_13);
386 _mm_storeu_pd(m3_p+12, m3_11);
387 _mm_storeu_pd(m3_p+14, m3_12);
388 _mm_storeu_pd(m3_p+16, m3_13);
390 m1_p += 18; m2_p += 18; m3_p += 18;
419 for(
int i=0; i < n_mat; i++) {
420 m1_1 = _mm_load_pd(m1_p);
421 m1_2 = _mm_load_pd(m1_p+2);
422 m1_3 = _mm_load_pd(m1_p+4);
424 m2_1 = _mm_load_pd(m2_p);
425 m2_2 = _mm_load_pd(m2_p+6);
426 m2_3 = _mm_load_pd(m2_p+12);
429 CCMUL(m3_11, m2_1, m1_1);
430 m1_1 = _mm_load_pd(m1_p+6);
431 CCMADD(m3_11, m2_2, m1_2);
432 m1_2 = _mm_load_pd(m1_p+8);
433 CCMADD(m3_11, m2_3, m1_3);
434 m1_3 = _mm_load_pd(m1_p+10);
437 CCMUL(m3_12, m2_1, m1_1);
438 m1_1 = _mm_load_pd(m1_p+12);
439 CCMADD(m3_12, m2_2, m1_2);
440 m1_2 = _mm_load_pd(m1_p+14);
441 CCMADD(m3_12, m2_3, m1_3);
442 m1_3 = _mm_load_pd(m1_p+16);
445 CCMUL(m3_13, m2_1, m1_1);
446 m2_1 = _mm_load_pd(m2_p+2);
448 m2_2 = _mm_load_pd(m2_p+8);
449 CCMADD(m3_13, m2_3, m1_3);
450 m2_3 = _mm_load_pd(m2_p+14);
452 _mm_store_pd(m3_p, m3_11);
453 _mm_store_pd(m3_p+2, m3_12);
454 _mm_store_pd(m3_p+4, m3_13);
456 m1_1 = _mm_load_pd(m1_p);
457 m1_2 = _mm_load_pd(m1_p+2);
458 m1_3 = _mm_load_pd(m1_p+4);
460 CCMUL(m3_11, m2_1, m1_1);
461 m1_1 = _mm_load_pd(m1_p+6);
462 CCMADD(m3_11, m2_2, m1_2);
463 m1_2 = _mm_load_pd(m1_p+8);
464 CCMADD(m3_11, m2_3, m1_3);
465 m1_3 = _mm_load_pd(m1_p+10);
468 CCMUL(m3_12, m2_1, m1_1);
469 m1_1 = _mm_load_pd(m1_p+12);
470 CCMADD(m3_12, m2_2, m1_2);
471 m1_2 = _mm_load_pd(m1_p+14);
472 CCMADD(m3_12, m2_3, m1_3);
473 m1_3 = _mm_load_pd(m1_p+16);
476 CCMUL(m3_13, m2_1, m1_1);
477 m2_1 = _mm_load_pd(m2_p+4);
479 m2_2 = _mm_load_pd(m2_p+10);
480 CCMADD(m3_13, m2_3, m1_3);
481 m2_3 = _mm_load_pd(m2_p+16);
483 _mm_store_pd(m3_p+6, m3_11);
484 _mm_store_pd(m3_p+8, m3_12);
485 _mm_store_pd(m3_p+10, m3_13);
487 m1_1 = _mm_load_pd(m1_p);
488 m1_2 = _mm_load_pd(m1_p+2);
489 m1_3 = _mm_load_pd(m1_p+4);
491 CCMUL(m3_11, m2_1, m1_1);
492 m1_1 = _mm_load_pd(m1_p+6);
493 CCMADD(m3_11, m2_2, m1_2);
494 m1_2 = _mm_load_pd(m1_p+8);
495 CCMADD(m3_11, m2_3, m1_3);
496 m1_3 = _mm_load_pd(m1_p+10);
498 CCMUL(m3_12, m2_1, m1_1);
499 m1_1 = _mm_load_pd(m1_p+12);
500 CCMADD(m3_12, m2_2, m1_2);
501 m1_2 = _mm_load_pd(m1_p+14);
502 CCMADD(m3_12, m2_3, m1_3);
503 m1_3 = _mm_load_pd(m1_p+16);
505 CCMUL(m3_13, m2_1, m1_1);
506 CCMADD(m3_13, m2_2, m1_2);
507 CCMADD(m3_13, m2_3, m1_3);
509 _mm_store_pd(m3_p+12, m3_11);
510 _mm_store_pd(m3_p+14, m3_12);
511 _mm_store_pd(m3_p+16, m3_13);
515 m1_p += 18; m2_p += 18; m3_p += 18;
535 __m128d res1,res2,res3;
541 scalar = _mm_load_sd(a);
545 tmp1 = _mm_setzero_pd();
546 tmp1 = _mm_shuffle_pd(scalar, scalar, 0x1);
547 scalar = _mm_add_pd(scalar, tmp1);
554 for(
int i =0; i < n_mat; i++) {
555 m1_1 = _mm_load_pd(m1_p);
556 m1_2 = _mm_load_pd(m1_p+2);
557 m1_3 = _mm_load_pd(m1_p+4);
560 m2_1 = _mm_load_pd(m2_p);
561 m2_2 = _mm_load_pd(m2_p+6);
562 m2_3 = _mm_load_pd(m2_p+12);
564 res1 = _mm_load_pd(m3_p);
565 res2 = _mm_load_pd(m3_p+2);
566 res3 = _mm_load_pd(m3_p+4);
569 CCMUL(m3_11, m2_1, m1_1);
570 m1_1 = _mm_load_pd(m1_p+6);
571 CCMADD(m3_11, m2_2, m1_2);
572 m1_2 = _mm_load_pd(m1_p+8);
573 CCMADD(m3_11, m2_3, m1_3);
574 m1_3 = _mm_load_pd(m1_p+10);
576 m3_11 = _mm_mul_pd(scalar,m3_11);
577 m3_11 = _mm_add_pd(res1, m3_11);
580 CCMUL(m3_12, m2_1, m1_1);
581 m1_1 = _mm_load_pd(m1_p+12);
582 CCMADD(m3_12, m2_2, m1_2);
583 m1_2 = _mm_load_pd(m1_p+14);
584 CCMADD(m3_12, m2_3, m1_3);
585 m1_3 = _mm_load_pd(m1_p+16);
587 m3_12 = _mm_mul_pd(scalar,m3_12);
588 m3_12 = _mm_add_pd(res2, m3_12);
592 CCMUL(m3_13, m2_1, m1_1);
593 m2_1 = _mm_load_pd(m2_p+2);
595 m2_2 = _mm_load_pd(m2_p+8);
596 CCMADD(m3_13, m2_3, m1_3);
597 m2_3 = _mm_load_pd(m2_p+14);
599 m3_13 = _mm_mul_pd(scalar,m3_13);
600 m3_13 = _mm_add_pd(res3, m3_13);
605 _mm_store_pd(m3_p, m3_11);
606 _mm_store_pd(m3_p+2, m3_12);
607 _mm_store_pd(m3_p+4, m3_13);
609 res1 = _mm_load_pd(m3_p+6);
610 res2 = _mm_load_pd(m3_p+8);
611 res3 = _mm_load_pd(m3_p+10);
613 m1_1 = _mm_load_pd(m1_p);
614 m1_2 = _mm_load_pd(m1_p+2);
615 m1_3 = _mm_load_pd(m1_p+4);
617 CCMUL(m3_11, m2_1, m1_1);
618 m1_1 = _mm_load_pd(m1_p+6);
619 CCMADD(m3_11, m2_2, m1_2);
620 m1_2 = _mm_load_pd(m1_p+8);
621 CCMADD(m3_11, m2_3, m1_3);
622 m1_3 = _mm_load_pd(m1_p+10);
624 m3_11 = _mm_mul_pd(scalar,m3_11);
625 m3_11 = _mm_add_pd(res1, m3_11);
628 CCMUL(m3_12, m2_1, m1_1);
629 m1_1 = _mm_load_pd(m1_p+12);
630 CCMADD(m3_12, m2_2, m1_2);
631 m1_2 = _mm_load_pd(m1_p+14);
632 CCMADD(m3_12, m2_3, m1_3);
633 m1_3 = _mm_load_pd(m1_p+16);
635 m3_12 = _mm_mul_pd(scalar,m3_12);
636 m3_12 = _mm_add_pd(res2, m3_12);
640 CCMUL(m3_13, m2_1, m1_1);
641 m2_1 = _mm_load_pd(m2_p+4);
643 m2_2 = _mm_load_pd(m2_p+10);
644 CCMADD(m3_13, m2_3, m1_3);
645 m2_3 = _mm_load_pd(m2_p+16);
647 m3_13 = _mm_mul_pd(scalar,m3_13);
648 m3_13 = _mm_add_pd(res3, m3_13);
652 _mm_store_pd(m3_p+6, m3_11);
653 _mm_store_pd(m3_p+8, m3_12);
654 _mm_store_pd(m3_p+10, m3_13);
655 res1 = _mm_load_pd(m3_p+12);
656 res2 = _mm_load_pd(m3_p+14);
657 res3 = _mm_load_pd(m3_p+16);
660 m1_1 = _mm_load_pd(m1_p);
661 m1_2 = _mm_load_pd(m1_p+2);
662 m1_3 = _mm_load_pd(m1_p+4);
664 CCMUL(m3_11, m2_1, m1_1);
665 m1_1 = _mm_load_pd(m1_p+6);
666 CCMADD(m3_11, m2_2, m1_2);
667 m1_2 = _mm_load_pd(m1_p+8);
668 CCMADD(m3_11, m2_3, m1_3);
669 m1_3 = _mm_load_pd(m1_p+10);
671 m3_11 = _mm_mul_pd(scalar,m3_11);
672 m3_11 = _mm_add_pd(res1, m3_11);
676 CCMUL(m3_12, m2_1, m1_1);
677 m1_1 = _mm_load_pd(m1_p+12);
678 CCMADD(m3_12, m2_2, m1_2);
679 m1_2 = _mm_load_pd(m1_p+14);
680 CCMADD(m3_12, m2_3, m1_3);
681 m1_3 = _mm_load_pd(m1_p+16);
683 m3_12 = _mm_mul_pd(scalar,m3_12);
684 m3_12 = _mm_add_pd(res2, m3_12);
686 CCMUL(m3_13, m2_1, m1_1);
687 CCMADD(m3_13, m2_2, m1_2);
688 CCMADD(m3_13, m2_3, m1_3);
690 m3_13 = _mm_mul_pd(scalar,m3_13);
691 m3_13 = _mm_add_pd(res3, m3_13);
693 _mm_store_pd(m3_p+12, m3_11);
694 _mm_store_pd(m3_p+14, m3_12);
695 _mm_store_pd(m3_p+16, m3_13);
697 m1_p += 18; m2_p += 18; m3_p += 18;