105 for(
int i=0; i < n_mat; i++) {
106 m2_1 = _mm_load_pd(m2_p);
107 m1_1 = _mm_load_pd(m1_p);
108 m1_2 = _mm_load_pd(m1_p+2);
109 m1_3 = _mm_load_pd(m1_p+4);
111 CMUL(m3_11, m2_1, m1_1);
112 CMUL(m3_12, m2_1, m1_2);
113 CMUL(m3_13, m2_1, m1_3);
115 m2_1 = _mm_load_pd(m2_p+2);
116 m1_1 = _mm_load_pd(m1_p+6);
117 m1_2 = _mm_load_pd(m1_p+8);
118 m1_3 = _mm_load_pd(m1_p+10);
120 CMADD(m3_11, m2_1, m1_1);
121 CMADD(m3_12, m2_1, m1_2);
122 CMADD(m3_13, m2_1, m1_3);
124 m2_1 = _mm_load_pd(m2_p+4);
125 m1_1 = _mm_load_pd(m1_p+12);
126 m1_2 = _mm_load_pd(m1_p+14);
127 m1_3 = _mm_load_pd(m1_p+16);
129 CMADD(m3_11, m2_1, m1_1);
130 _mm_store_pd(m3_p, m3_11);
132 CMADD(m3_12, m2_1, m1_2);
133 _mm_store_pd(m3_p+2, m3_12);
135 CMADD(m3_13, m2_1, m1_3);
136 _mm_store_pd(m3_p+4, m3_13);
139 m2_2 = _mm_load_pd(m2_p+6);
140 m2_1 = _mm_load_pd(m2_p+12);
142 m1_1 = _mm_load_pd(m1_p);
143 m1_2 = _mm_load_pd(m1_p+2);
144 m1_3 = _mm_load_pd(m1_p+4);
146 CMUL(m3_21, m2_2, m1_1);
147 CMUL(m3_22, m2_2, m1_2);
148 CMUL(m3_23, m2_2, m1_3);
150 CMUL(m3_11, m2_1, m1_1);
151 CMUL(m3_12, m2_1, m1_2);
152 CMUL(m3_13, m2_1, m1_3);
154 m2_2 = _mm_load_pd(m2_p+8);
155 m2_1 = _mm_load_pd(m2_p+14);
157 m1_1 = _mm_load_pd(m1_p+6);
158 m1_2 = _mm_load_pd(m1_p+8);
159 m1_3 = _mm_load_pd(m1_p+10);
161 CMADD(m3_21, m2_2, m1_1);
162 CMADD(m3_22, m2_2, m1_2);
163 CMADD(m3_23, m2_2, m1_3);
165 CMADD(m3_11, m2_1, m1_1);
166 CMADD(m3_12, m2_1, m1_2);
167 CMADD(m3_13, m2_1, m1_3);
169 m2_2 = _mm_load_pd(m2_p+10);
170 m2_1 = _mm_load_pd(m2_p+16);
172 m1_1 = _mm_load_pd(m1_p+12);
173 m1_2 = _mm_load_pd(m1_p+14);
174 m1_3 = _mm_load_pd(m1_p+16);
176 CMADD(m3_21, m2_2, m1_1);
177 _mm_store_pd(m3_p+6, m3_21);
179 CMADD(m3_22, m2_2, m1_2);
180 _mm_store_pd(m3_p+8, m3_22);
182 CMADD(m3_23, m2_2, m1_3);
183 _mm_store_pd(m3_p+10, m3_23);
185 CMADD(m3_11, m2_1, m1_1);
186 _mm_store_pd(m3_p+12, m3_11);
188 CMADD(m3_12, m2_1, m1_2);
189 _mm_store_pd(m3_p+14, m3_12);
191 CMADD(m3_13, m2_1, m1_3);
192 _mm_store_pd(m3_p+16, m3_13);
195 m1_p += 18; m2_p += 18; m3_p += 18;
223 scalar = _mm_load_sd(a);
227 tmp1 = _mm_setzero_pd();
228 tmp1 = _mm_shuffle_pd(scalar, scalar, 0x1);
229 scalar = _mm_add_pd(scalar, tmp1);
238 for(
int i=0; i < n_mat; i++) {
240 m3_11 = _mm_load_pd(m3_p);
241 m3_12 = _mm_load_pd(m3_p+2);
242 m3_13 = _mm_load_pd(m3_p+4);
244 m2_1 = _mm_load_pd(m2_p);
245 m2_1 = _mm_mul_pd(m2_1,scalar);
247 m1_1 = _mm_load_pd(m1_p);
248 m1_2 = _mm_load_pd(m1_p+2);
249 m1_3 = _mm_load_pd(m1_p+4);
251 CMADD(m3_11, m2_1, m1_1);
252 CMADD(m3_12, m2_1, m1_2);
253 CMADD(m3_13, m2_1, m1_3);
255 m2_1 = _mm_load_pd(m2_p+2);
256 m2_1 = _mm_mul_pd(m2_1,scalar);
258 m1_1 = _mm_load_pd(m1_p+6);
259 m1_2 = _mm_load_pd(m1_p+8);
260 m1_3 = _mm_load_pd(m1_p+10);
262 CMADD(m3_11, m2_1, m1_1);
263 CMADD(m3_12, m2_1, m1_2);
264 CMADD(m3_13, m2_1, m1_3);
266 m2_1 = _mm_load_pd(m2_p+4);
267 m2_1 = _mm_mul_pd(m2_1,scalar);
269 m1_1 = _mm_load_pd(m1_p+12);
270 m1_2 = _mm_load_pd(m1_p+14);
271 m1_3 = _mm_load_pd(m1_p+16);
273 CMADD(m3_11, m2_1, m1_1);
274 _mm_store_pd(m3_p, m3_11);
276 CMADD(m3_12, m2_1, m1_2);
277 _mm_store_pd(m3_p+2, m3_12);
279 CMADD(m3_13, m2_1, m1_3);
280 _mm_store_pd(m3_p+4, m3_13);
283 m3_21 = _mm_load_pd(m3_p+6);
284 m3_22 = _mm_load_pd(m3_p+8);
285 m3_23 = _mm_load_pd(m3_p+10);
286 m3_11 = _mm_load_pd(m3_p+12);
287 m3_12 = _mm_load_pd(m3_p+14);
288 m3_13 = _mm_load_pd(m3_p+16);
290 m2_2 = _mm_load_pd(m2_p+6);
291 m2_2 = _mm_mul_pd(m2_2,scalar);
293 m2_1 = _mm_load_pd(m2_p+12);
294 m2_1 = _mm_mul_pd(m2_1,scalar);
296 m1_1 = _mm_load_pd(m1_p);
297 m1_2 = _mm_load_pd(m1_p+2);
298 m1_3 = _mm_load_pd(m1_p+4);
302 CMADD(m3_21, m2_2, m1_1)
303 CMADD(m3_22, m2_2, m1_2);
304 CMADD(m3_23, m2_2, m1_3);
307 CMADD(m3_11, m2_1, m1_1);
308 CMADD(m3_12, m2_1, m1_2);
309 CMADD(m3_13, m2_1, m1_3);
311 m2_2 = _mm_load_pd(m2_p+8);
312 m2_2 = _mm_mul_pd(m2_2,scalar);
314 m2_1 = _mm_load_pd(m2_p+14);
315 m2_1 = _mm_mul_pd(m2_1,scalar);
317 m1_1 = _mm_load_pd(m1_p+6);
318 m1_2 = _mm_load_pd(m1_p+8);
319 m1_3 = _mm_load_pd(m1_p+10);
321 CMADD(m3_21, m2_2, m1_1);
322 CMADD(m3_22, m2_2, m1_2);
323 CMADD(m3_23, m2_2, m1_3);
325 CMADD(m3_11, m2_1, m1_1);
326 CMADD(m3_12, m2_1, m1_2);
327 CMADD(m3_13, m2_1, m1_3);
329 m2_2 = _mm_load_pd(m2_p+10);
330 m2_2 = _mm_mul_pd(m2_2,scalar);
332 m2_1 = _mm_load_pd(m2_p+16);
333 m2_1 = _mm_mul_pd(m2_1,scalar);
335 m1_1 = _mm_load_pd(m1_p+12);
336 m1_2 = _mm_load_pd(m1_p+14);
337 m1_3 = _mm_load_pd(m1_p+16);
339 CMADD(m3_21, m2_2, m1_1);
340 _mm_store_pd(m3_p+6, m3_21);
342 CMADD(m3_22, m2_2, m1_2);
343 _mm_store_pd(m3_p+8, m3_22);
345 CMADD(m3_23, m2_2, m1_3);
346 _mm_store_pd(m3_p+10, m3_23);
348 CMADD(m3_11, m2_1, m1_1);
349 _mm_store_pd(m3_p+12, m3_11);
351 CMADD(m3_12, m2_1, m1_2);
352 _mm_store_pd(m3_p+14, m3_12);
354 CMADD(m3_13, m2_1, m1_3);
355 _mm_store_pd(m3_p+16, m3_13);
358 m1_p += 18; m2_p += 18; m3_p += 18;
395 for(
int i=0; i < n_mat; i++) {
396 m2_1 = _mm_loadu_pd(m2_p);
397 m1_1 = _mm_loadu_pd(m1_p);
398 m1_2 = _mm_loadu_pd(m1_p+2);
399 m1_3 = _mm_loadu_pd(m1_p+4);
401 CMUL(m3_11, m2_1, m1_1);
402 CMUL(m3_12, m2_1, m1_2);
403 CMUL(m3_13, m2_1, m1_3);
405 m2_1 = _mm_loadu_pd(m2_p+2);
406 m1_1 = _mm_loadu_pd(m1_p+6);
407 m1_2 = _mm_loadu_pd(m1_p+8);
408 m1_3 = _mm_loadu_pd(m1_p+10);
410 CMADD(m3_11, m2_1, m1_1);
411 CMADD(m3_12, m2_1, m1_2);
412 CMADD(m3_13, m2_1, m1_3);
414 m2_1 = _mm_loadu_pd(m2_p+4);
415 m1_1 = _mm_loadu_pd(m1_p+12);
416 m1_2 = _mm_loadu_pd(m1_p+14);
417 m1_3 = _mm_loadu_pd(m1_p+16);
419 CMADD(m3_11, m2_1, m1_1);
420 _mm_storeu_pd(m3_p, m3_11);
422 CMADD(m3_12, m2_1, m1_2);
423 _mm_storeu_pd(m3_p+2, m3_12);
425 CMADD(m3_13, m2_1, m1_3);
426 _mm_storeu_pd(m3_p+4, m3_13);
429 m2_2 = _mm_loadu_pd(m2_p+6);
430 m2_1 = _mm_loadu_pd(m2_p+12);
432 m1_1 = _mm_loadu_pd(m1_p);
433 m1_2 = _mm_loadu_pd(m1_p+2);
434 m1_3 = _mm_loadu_pd(m1_p+4);
436 CMUL(m3_21, m2_2, m1_1);
437 CMUL(m3_22, m2_2, m1_2);
438 CMUL(m3_23, m2_2, m1_3);
440 CMUL(m3_11, m2_1, m1_1);
441 CMUL(m3_12, m2_1, m1_2);
442 CMUL(m3_13, m2_1, m1_3);
444 m2_2 = _mm_loadu_pd(m2_p+8);
445 m2_1 = _mm_loadu_pd(m2_p+14);
447 m1_1 = _mm_loadu_pd(m1_p+6);
448 m1_2 = _mm_loadu_pd(m1_p+8);
449 m1_3 = _mm_loadu_pd(m1_p+10);
451 CMADD(m3_21, m2_2, m1_1);
452 CMADD(m3_22, m2_2, m1_2);
453 CMADD(m3_23, m2_2, m1_3);
455 CMADD(m3_11, m2_1, m1_1);
456 CMADD(m3_12, m2_1, m1_2);
457 CMADD(m3_13, m2_1, m1_3);
459 m2_2 = _mm_loadu_pd(m2_p+10);
460 m2_1 = _mm_loadu_pd(m2_p+16);
462 m1_1 = _mm_loadu_pd(m1_p+12);
463 m1_2 = _mm_loadu_pd(m1_p+14);
464 m1_3 = _mm_loadu_pd(m1_p+16);
466 CMADD(m3_21, m2_2, m1_1);
467 _mm_storeu_pd(m3_p+6, m3_21);
469 CMADD(m3_22, m2_2, m1_2);
470 _mm_storeu_pd(m3_p+8, m3_22);
472 CMADD(m3_23, m2_2, m1_3);
473 _mm_storeu_pd(m3_p+10, m3_23);
475 CMADD(m3_11, m2_1, m1_1);
476 _mm_storeu_pd(m3_p+12, m3_11);
478 CMADD(m3_12, m2_1, m1_2);
479 _mm_storeu_pd(m3_p+14, m3_12);
481 CMADD(m3_13, m2_1, m1_3);
482 _mm_storeu_pd(m3_p+16, m3_13);
485 m1_p += 18; m2_p += 18; m3_p += 18;
513 scalar = _mm_load_sd(a);
517 tmp1 = _mm_setzero_pd();
518 tmp1 = _mm_shuffle_pd(scalar, scalar, 0x1);
519 scalar = _mm_add_pd(scalar, tmp1);
528 for(
int i=0; i < n_mat; i++) {
530 m3_11 = _mm_loadu_pd(m3_p);
531 m3_12 = _mm_loadu_pd(m3_p+2);
532 m3_13 = _mm_loadu_pd(m3_p+4);
534 m2_1 = _mm_loadu_pd(m2_p);
535 m2_1 = _mm_mul_pd(m2_1,scalar);
537 m1_1 = _mm_loadu_pd(m1_p);
538 m1_2 = _mm_loadu_pd(m1_p+2);
539 m1_3 = _mm_loadu_pd(m1_p+4);
541 CMADD(m3_11, m2_1, m1_1);
542 CMADD(m3_12, m2_1, m1_2);
543 CMADD(m3_13, m2_1, m1_3);
545 m2_1 = _mm_loadu_pd(m2_p+2);
546 m2_1 = _mm_mul_pd(m2_1,scalar);
548 m1_1 = _mm_loadu_pd(m1_p+6);
549 m1_2 = _mm_loadu_pd(m1_p+8);
550 m1_3 = _mm_loadu_pd(m1_p+10);
552 CMADD(m3_11, m2_1, m1_1);
553 CMADD(m3_12, m2_1, m1_2);
554 CMADD(m3_13, m2_1, m1_3);
556 m2_1 = _mm_loadu_pd(m2_p+4);
557 m2_1 = _mm_mul_pd(m2_1,scalar);
559 m1_1 = _mm_loadu_pd(m1_p+12);
560 m1_2 = _mm_loadu_pd(m1_p+14);
561 m1_3 = _mm_loadu_pd(m1_p+16);
563 CMADD(m3_11, m2_1, m1_1);
564 _mm_storeu_pd(m3_p, m3_11);
566 CMADD(m3_12, m2_1, m1_2);
567 _mm_storeu_pd(m3_p+2, m3_12);
569 CMADD(m3_13, m2_1, m1_3);
570 _mm_storeu_pd(m3_p+4, m3_13);
573 m3_21 = _mm_loadu_pd(m3_p+6);
574 m3_22 = _mm_loadu_pd(m3_p+8);
575 m3_23 = _mm_loadu_pd(m3_p+10);
576 m3_11 = _mm_loadu_pd(m3_p+12);
577 m3_12 = _mm_loadu_pd(m3_p+14);
578 m3_13 = _mm_loadu_pd(m3_p+16);
580 m2_2 = _mm_loadu_pd(m2_p+6);
581 m2_2 = _mm_mul_pd(m2_2,scalar);
583 m2_1 = _mm_loadu_pd(m2_p+12);
584 m2_1 = _mm_mul_pd(m2_1,scalar);
586 m1_1 = _mm_loadu_pd(m1_p);
587 m1_2 = _mm_loadu_pd(m1_p+2);
588 m1_3 = _mm_loadu_pd(m1_p+4);
592 CMADD(m3_21, m2_2, m1_1)
593 CMADD(m3_22, m2_2, m1_2);
594 CMADD(m3_23, m2_2, m1_3);
597 CMADD(m3_11, m2_1, m1_1);
598 CMADD(m3_12, m2_1, m1_2);
599 CMADD(m3_13, m2_1, m1_3);
601 m2_2 = _mm_loadu_pd(m2_p+8);
602 m2_2 = _mm_mul_pd(m2_2,scalar);
604 m2_1 = _mm_loadu_pd(m2_p+14);
605 m2_1 = _mm_mul_pd(m2_1,scalar);
607 m1_1 = _mm_loadu_pd(m1_p+6);
608 m1_2 = _mm_loadu_pd(m1_p+8);
609 m1_3 = _mm_loadu_pd(m1_p+10);
611 CMADD(m3_21, m2_2, m1_1);
612 CMADD(m3_22, m2_2, m1_2);
613 CMADD(m3_23, m2_2, m1_3);
615 CMADD(m3_11, m2_1, m1_1);
616 CMADD(m3_12, m2_1, m1_2);
617 CMADD(m3_13, m2_1, m1_3);
619 m2_2 = _mm_loadu_pd(m2_p+10);
620 m2_2 = _mm_mul_pd(m2_2,scalar);
622 m2_1 = _mm_loadu_pd(m2_p+16);
623 m2_1 = _mm_mul_pd(m2_1,scalar);
625 m1_1 = _mm_loadu_pd(m1_p+12);
626 m1_2 = _mm_loadu_pd(m1_p+14);
627 m1_3 = _mm_loadu_pd(m1_p+16);
629 CMADD(m3_21, m2_2, m1_1);
630 _mm_storeu_pd(m3_p+6, m3_21);
632 CMADD(m3_22, m2_2, m1_2);
633 _mm_storeu_pd(m3_p+8, m3_22);
635 CMADD(m3_23, m2_2, m1_3);
636 _mm_storeu_pd(m3_p+10, m3_23);
638 CMADD(m3_11, m2_1, m1_1);
639 _mm_storeu_pd(m3_p+12, m3_11);
641 CMADD(m3_12, m2_1, m1_2);
642 _mm_storeu_pd(m3_p+14, m3_12);
644 CMADD(m3_13, m2_1, m1_3);
645 _mm_storeu_pd(m3_p+16, m3_13);
648 m1_p += 18; m2_p += 18; m3_p += 18;