1#ifndef SSE_SPIN_RECON_INLINES_H
2#define SSE_SPIN_RECON_INLINES_H
28#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
44 const REAL32* src_shadow = src;
48 SSEVec v0, v1, v2, v3, v4, v5, v6;
54 v0.vector = _mm_load_ps(src_shadow);
55 v1.vector = _mm_load_ps(src_shadow+4);
56 v2.vector = _mm_load_ps(src_shadow+8);
58 for(
unsigned int site=0; site < n_vec-1; site++) {
61 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
81 _mm_store_ps(dst_shadow, v0.vector);
82 _mm_store_ps(dst_shadow+4, v1.vector);
83 _mm_store_ps(dst_shadow+8, v2.vector);
93 v3.vector = v1.vector;
94 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x1B);
97 v3.vector = _mm_mul_ps(v3.vector, v6.vector);
107 v4.vector = v2.vector;
108 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x1B);
111 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
121 v5.vector = v0.vector;
122 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x1B);
125 v5.vector = _mm_mul_ps(v5.vector, v6.vector);
128 _mm_store_ps(dst_shadow+12, v3.vector);
129 _mm_store_ps(dst_shadow+16, v4.vector);
130 _mm_store_ps(dst_shadow+20, v5.vector);
134 v0.vector = _mm_load_ps(src_shadow);
135 v1.vector = _mm_load_ps(src_shadow+4);
136 v2.vector = _mm_load_ps(src_shadow+8);
158 _mm_store_ps(dst_shadow, v0.vector);
159 _mm_store_ps(dst_shadow+4, v1.vector);
160 _mm_store_ps(dst_shadow+8, v2.vector);
170 v3.vector = v1.vector;
171 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x1B);
174 v3.vector = _mm_mul_ps(v3.vector, v6.vector);
184 v4.vector = v2.vector;
185 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x1B);
188 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
198 v5.vector = v0.vector;
199 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x1B);
202 v5.vector = _mm_mul_ps(v5.vector, v6.vector);
205 _mm_store_ps(dst_shadow+12, v3.vector);
206 _mm_store_ps(dst_shadow+16, v4.vector);
207 _mm_store_ps(dst_shadow+20, v5.vector);
227#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
242 const REAL32* src_shadow = src;
246 SSEVec v0, v1, v2, v3, v4, v5, v6;
252 v0.vector = _mm_load_ps(src_shadow);
253 v1.vector = _mm_load_ps(src_shadow+4);
254 v2.vector = _mm_load_ps(src_shadow+8);
256 for(
unsigned int site=0; site < n_vec-1; site++) {
258 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
278 _mm_store_ps(dst_shadow, v0.vector);
279 _mm_store_ps(dst_shadow+4, v1.vector);
280 _mm_store_ps(dst_shadow+8, v2.vector);
290 v3.vector = v1.vector;
291 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x1B);
294 v3.vector = _mm_mul_ps(v3.vector, v6.vector);
304 v4.vector = v2.vector;
305 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x1B);
308 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
318 v5.vector = v0.vector;
319 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x1B);
322 v5.vector = _mm_mul_ps(v5.vector, v6.vector);
325 _mm_store_ps(dst_shadow+12, v3.vector);
326 _mm_store_ps(dst_shadow+16, v4.vector);
327 _mm_store_ps(dst_shadow+20, v5.vector);
331 v0.vector = _mm_load_ps(src_shadow);
332 v1.vector = _mm_load_ps(src_shadow+4);
333 v2.vector = _mm_load_ps(src_shadow+8);
355 _mm_store_ps(dst_shadow, v0.vector);
356 _mm_store_ps(dst_shadow+4, v1.vector);
357 _mm_store_ps(dst_shadow+8, v2.vector);
367 v3.vector = v1.vector;
368 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x1B);
371 v3.vector = _mm_mul_ps(v3.vector, v6.vector);
381 v4.vector = v2.vector;
382 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x1B);
385 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
395 v5.vector = v0.vector;
396 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x1B);
399 v5.vector = _mm_mul_ps(v5.vector, v6.vector);
402 _mm_store_ps(dst_shadow+12, v3.vector);
403 _mm_store_ps(dst_shadow+16, v4.vector);
404 _mm_store_ps(dst_shadow+20, v5.vector);
424#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
438 const REAL32* src_shadow = src;
442 SSEVec v0, v1, v2, v3, v4, v5, v6, v7;
455 v0.vector = _mm_load_ps(src_shadow);
456 v1.vector = _mm_load_ps(src_shadow+4);
457 v2.vector = _mm_load_ps(src_shadow+8);
459 for(
unsigned int site=0; site < n_vec-1; site++) {
462 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
482 _mm_store_ps(dst_shadow, v0.vector);
483 _mm_store_ps(dst_shadow+4, v1.vector);
484 _mm_store_ps(dst_shadow+8, v2.vector);
494 v3.vector = v1.vector;
495 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x4E);
505 v4.vector = v2.vector;
506 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x4E);
509 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
519 v5.vector = v0.vector;
520 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x4E);
523 v5.vector = _mm_mul_ps(v5.vector, v7.vector);
526 _mm_store_ps(dst_shadow+12, v3.vector);
527 _mm_store_ps(dst_shadow+16, v4.vector);
528 _mm_store_ps(dst_shadow+20, v5.vector);
532 v0.vector = _mm_load_ps(src_shadow);
533 v1.vector = _mm_load_ps(src_shadow+4);
534 v2.vector = _mm_load_ps(src_shadow+8);
556 _mm_store_ps(dst_shadow, v0.vector);
557 _mm_store_ps(dst_shadow+4, v1.vector);
558 _mm_store_ps(dst_shadow+8, v2.vector);
568 v3.vector = v1.vector;
569 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x4E);
579 v4.vector = v2.vector;
580 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x4E);
583 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
593 v5.vector = v0.vector;
594 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x4E);
597 v5.vector = _mm_mul_ps(v5.vector, v7.vector);
600 _mm_store_ps(dst_shadow+12, v3.vector);
601 _mm_store_ps(dst_shadow+16, v4.vector);
602 _mm_store_ps(dst_shadow+20, v5.vector);
622#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
626 const REAL32* src_shadow = src;
630 SSEVec v0, v1, v2, v3, v4, v5, v6, v7;
642 v0.vector = _mm_load_ps(src_shadow);
643 v1.vector = _mm_load_ps(src_shadow+4);
644 v2.vector = _mm_load_ps(src_shadow+8);
646 for(
unsigned int site=0; site < n_vec-1; site++) {
649 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
669 _mm_store_ps(dst_shadow, v0.vector);
670 _mm_store_ps(dst_shadow+4, v1.vector);
671 _mm_store_ps(dst_shadow+8, v2.vector);
681 v3.vector = v1.vector;
682 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x4E);
685 v3.vector = _mm_mul_ps(v3.vector, v7.vector);
695 v4.vector = v2.vector;
696 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x4E);
699 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
709 v5.vector = v0.vector;
710 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x4E);
713 _mm_store_ps(dst_shadow+12, v3.vector);
714 _mm_store_ps(dst_shadow+16, v4.vector);
715 _mm_store_ps(dst_shadow+20, v5.vector);
719 v0.vector = _mm_load_ps(src_shadow);
720 v1.vector = _mm_load_ps(src_shadow+4);
721 v2.vector = _mm_load_ps(src_shadow+8);
744 _mm_store_ps(dst_shadow, v0.vector);
745 _mm_store_ps(dst_shadow+4, v1.vector);
746 _mm_store_ps(dst_shadow+8, v2.vector);
756 v3.vector = v1.vector;
757 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x4E);
760 v3.vector = _mm_mul_ps(v3.vector, v7.vector);
770 v4.vector = v2.vector;
771 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x4E);
774 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
784 v5.vector = v0.vector;
785 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x4E);
788 _mm_store_ps(dst_shadow+12, v3.vector);
789 _mm_store_ps(dst_shadow+16, v4.vector);
790 _mm_store_ps(dst_shadow+20, v5.vector);
811#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
825 SSEVec v0, v1, v2, v5, v6, v7;
826 const REAL32* src_shadow = src;
844 v0.vector = _mm_load_ps(src_shadow);
845 v1.vector = _mm_load_ps(src_shadow+4);
846 v2.vector = _mm_load_ps(src_shadow+8);
848 for(
unsigned int site=0; site < n_vec-1; site++) {
851 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
871 _mm_store_ps(dst_shadow, v0.vector);
872 _mm_store_ps(dst_shadow+4, v1.vector);
873 _mm_store_ps(dst_shadow+8, v2.vector);
883 v0.vector = _mm_shuffle_ps(v0.vector, v0.vector, 0xB1);
886 v0.vector = _mm_mul_ps(v0.vector, v5.vector);
896 v1.vector = _mm_shuffle_ps(v1.vector, v1.vector, 0xB1);
899 v1.vector = _mm_mul_ps(v1.vector, v6.vector);
909 v2.vector = _mm_shuffle_ps(v2.vector, v2.vector, 0xB1);
912 v2.vector = _mm_mul_ps(v2.vector, v7.vector);
915 _mm_store_ps(dst_shadow+12, v0.vector);
916 _mm_store_ps(dst_shadow+16, v1.vector);
917 _mm_store_ps(dst_shadow+20, v2.vector);
921 v0.vector = _mm_load_ps(src_shadow);
922 v1.vector = _mm_load_ps(src_shadow+4);
923 v2.vector = _mm_load_ps(src_shadow+8);
946 _mm_store_ps(dst_shadow, v0.vector);
947 _mm_store_ps(dst_shadow+4, v1.vector);
948 _mm_store_ps(dst_shadow+8, v2.vector);
958 v0.vector = _mm_shuffle_ps(v0.vector, v0.vector, 0xB1);
961 v0.vector = _mm_mul_ps(v0.vector, v5.vector);
971 v1.vector = _mm_shuffle_ps(v1.vector, v1.vector, 0xB1);
974 v1.vector = _mm_mul_ps(v1.vector, v6.vector);
984 v2.vector = _mm_shuffle_ps(v2.vector, v2.vector, 0xB1);
987 v2.vector = _mm_mul_ps(v2.vector, v7.vector);
990 _mm_store_ps(dst_shadow+12, v0.vector);
991 _mm_store_ps(dst_shadow+16, v1.vector);
992 _mm_store_ps(dst_shadow+20, v2.vector);
1013#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
1014 QDPIO::cout <<
"inlineSpinReconDir2Minus" << endl;
1017 SSEVec v0, v1, v2, v5, v6, v7;
1018 const REAL32* src_shadow = src;
1019 REAL32* dst_shadow = dst;
1036 v0.vector = _mm_load_ps(src_shadow);
1037 v1.vector = _mm_load_ps(src_shadow+4);
1038 v2.vector = _mm_load_ps(src_shadow+8);
1040 for(
unsigned int site=0; site < n_vec-1; site++) {
1043 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
1063 _mm_store_ps(dst_shadow, v0.vector);
1064 _mm_store_ps(dst_shadow+4, v1.vector);
1065 _mm_store_ps(dst_shadow+8, v2.vector);
1075 v0.vector = _mm_shuffle_ps(v0.vector, v0.vector, 0xB1);
1078 v0.vector = _mm_mul_ps(v0.vector, v5.vector);
1088 v1.vector = _mm_shuffle_ps(v1.vector, v1.vector, 0xB1);
1091 v1.vector = _mm_mul_ps(v1.vector, v6.vector);
1101 v2.vector = _mm_shuffle_ps(v2.vector, v2.vector, 0xB1);
1104 v2.vector = _mm_mul_ps(v2.vector, v7.vector);
1107 _mm_store_ps(dst_shadow+12, v0.vector);
1108 _mm_store_ps(dst_shadow+16, v1.vector);
1109 _mm_store_ps(dst_shadow+20, v2.vector);
1113 v0.vector = _mm_load_ps(src_shadow);
1114 v1.vector = _mm_load_ps(src_shadow+4);
1115 v2.vector = _mm_load_ps(src_shadow+8);
1138 _mm_store_ps(dst_shadow, v0.vector);
1139 _mm_store_ps(dst_shadow+4, v1.vector);
1140 _mm_store_ps(dst_shadow+8, v2.vector);
1150 v0.vector = _mm_shuffle_ps(v0.vector, v0.vector, 0xB1);
1153 v0.vector = _mm_mul_ps(v0.vector, v5.vector);
1163 v1.vector = _mm_shuffle_ps(v1.vector, v1.vector, 0xB1);
1166 v1.vector = _mm_mul_ps(v1.vector, v6.vector);
1176 v2.vector = _mm_shuffle_ps(v2.vector, v2.vector, 0xB1);
1179 v2.vector = _mm_mul_ps(v2.vector, v7.vector);
1182 _mm_store_ps(dst_shadow+12, v0.vector);
1183 _mm_store_ps(dst_shadow+16, v1.vector);
1184 _mm_store_ps(dst_shadow+20, v2.vector);
1205#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
1210 const REAL32* src_shadow = src;
1211 REAL32* dst_shadow = dst;
1224 v0.vector = _mm_load_ps(src_shadow);
1225 v1.vector = _mm_load_ps(src_shadow+4);
1226 v2.vector = _mm_load_ps(src_shadow+8);
1228 for(
unsigned int site=0; site < n_vec-1; site++) {
1231 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
1250 _mm_store_ps(dst_shadow, v0.vector);
1251 _mm_store_ps(dst_shadow+4, v1.vector);
1252 _mm_store_ps(dst_shadow+8, v2.vector);
1254 _mm_store_ps(dst_shadow+12, v0.vector);
1255 _mm_store_ps(dst_shadow+16, v1.vector);
1256 _mm_store_ps(dst_shadow+20, v2.vector);
1260 v0.vector = _mm_load_ps(src_shadow);
1261 v1.vector = _mm_load_ps(src_shadow+4);
1262 v2.vector = _mm_load_ps(src_shadow+8);
1286 _mm_store_ps(dst_shadow, v0.vector);
1287 _mm_store_ps(dst_shadow+4, v1.vector);
1288 _mm_store_ps(dst_shadow+8, v2.vector);
1291 _mm_store_ps(dst_shadow+12, v0.vector);
1292 _mm_store_ps(dst_shadow+16, v1.vector);
1293 _mm_store_ps(dst_shadow+20, v2.vector);
1312#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
1313 QDPIO::cout <<
"inlineSpinReconDir0Minus" << endl;
1317 const REAL32* src_shadow = src;
1318 REAL32* dst_shadow = dst;
1335 v0.vector = _mm_load_ps(src_shadow);
1336 v1.vector = _mm_load_ps(src_shadow+4);
1337 v2.vector = _mm_load_ps(src_shadow+8);
1339 for(
unsigned int site=0; site < n_vec-1; site++) {
1342 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
1359 _mm_store_ps(dst_shadow, v0.vector);
1360 _mm_store_ps(dst_shadow+4, v1.vector);
1361 _mm_store_ps(dst_shadow+8, v2.vector);
1365 v0.vector = _mm_mul_ps(v0.vector, v7.vector);
1366 v1.vector = _mm_mul_ps(v1.vector, v7.vector);
1367 v2.vector = _mm_mul_ps(v2.vector, v7.vector);
1369 _mm_store_ps(dst_shadow+12, v0.vector);
1370 _mm_store_ps(dst_shadow+16, v1.vector);
1371 _mm_store_ps(dst_shadow+20, v2.vector);
1375 v0.vector = _mm_load_ps(src_shadow);
1376 v1.vector = _mm_load_ps(src_shadow+4);
1377 v2.vector = _mm_load_ps(src_shadow+8);
1396 _mm_store_ps(dst_shadow, v0.vector);
1397 _mm_store_ps(dst_shadow+4, v1.vector);
1398 _mm_store_ps(dst_shadow+8, v2.vector);
1402 v0.vector = _mm_mul_ps(v0.vector, v7.vector);
1403 v1.vector = _mm_mul_ps(v1.vector, v7.vector);
1404 v2.vector = _mm_mul_ps(v2.vector, v7.vector);
1406 _mm_store_ps(dst_shadow+12, v0.vector);
1407 _mm_store_ps(dst_shadow+16, v1.vector);
1408 _mm_store_ps(dst_shadow+20, v2.vector);
1430#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
1431 QDPIO::cout <<
"inlinaAddSpinReconDir0Plus" << endl;
1446 const REAL32* src_shadow = src;
1447 REAL32* dst_shadow = dst;
1450 SSEVec v0, v1, v2, v3, v4, v5, v6;
1458 v0.vector = _mm_load_ps(src_shadow);
1459 v1.vector = _mm_load_ps(src_shadow+4);
1460 v2.vector = _mm_load_ps(src_shadow+8);
1463 v3.vector = _mm_load_ps(dst_shadow);
1464 v4.vector = _mm_load_ps(dst_shadow+4);
1465 v5.vector = _mm_load_ps(dst_shadow+8);
1468 v3.vector = _mm_add_ps(v3.vector, v0.vector);
1469 v4.vector = _mm_add_ps(v4.vector, v1.vector);
1470 v5.vector = _mm_add_ps(v5.vector, v2.vector);
1473 _mm_store_ps(dst_shadow, v3.vector);
1474 _mm_store_ps(dst_shadow+4, v4.vector);
1475 _mm_store_ps(dst_shadow+8, v5.vector);
1477 for(
unsigned int site=0; site < n_vec-1; site++) {
1481 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
1484 v4.vector = _mm_load_ps(dst_shadow+12);
1485 v5.vector = _mm_load_ps(dst_shadow+16);
1495 v3.vector = v1.vector;
1496 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x1B);
1499 v3.vector = _mm_mul_ps(v3.vector, v6.vector);
1502 v4.vector = _mm_add_ps(v3.vector, v4.vector);
1505 v3.vector = _mm_load_ps(dst_shadow+20);
1506 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
1508 _mm_store_ps(dst_shadow+12, v4.vector);
1520 v4.vector = v2.vector;
1521 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x1B);
1524 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
1525 v5.vector = _mm_add_ps(v5.vector, v4.vector);
1526 _mm_store_ps(dst_shadow+16, v5.vector);
1536 v5.vector = v0.vector;
1537 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x1B);
1540 v5.vector = _mm_mul_ps(v5.vector, v6.vector);
1541 v3.vector = _mm_add_ps(v3.vector, v5.vector);
1542 _mm_store_ps(dst_shadow+20, v3.vector);
1547 v0.vector = _mm_load_ps(src_shadow);
1548 v1.vector = _mm_load_ps(src_shadow+4);
1549 v2.vector = _mm_load_ps(src_shadow+8);
1552 v3.vector = _mm_load_ps(dst_shadow);
1553 v4.vector = _mm_load_ps(dst_shadow+4);
1554 v5.vector = _mm_load_ps(dst_shadow+8);
1557 v3.vector = _mm_add_ps(v3.vector, v0.vector);
1558 v4.vector = _mm_add_ps(v4.vector, v1.vector);
1559 v5.vector = _mm_add_ps(v5.vector, v2.vector);
1562 _mm_store_ps(dst_shadow, v3.vector);
1563 _mm_store_ps(dst_shadow+4, v4.vector);
1564 _mm_store_ps(dst_shadow+8, v5.vector);
1569 v4.vector = _mm_load_ps(dst_shadow+12);
1570 v5.vector = _mm_load_ps(dst_shadow+16);
1580 v3.vector = v1.vector;
1581 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x1B);
1584 v3.vector = _mm_mul_ps(v3.vector, v6.vector);
1587 v4.vector = _mm_add_ps(v3.vector, v4.vector);
1590 v3.vector = _mm_load_ps(dst_shadow+20);
1591 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
1594 _mm_store_ps(dst_shadow+12, v4.vector);
1606 v4.vector = v2.vector;
1607 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x1B);
1610 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
1611 v5.vector = _mm_add_ps(v5.vector, v4.vector);
1612 _mm_store_ps(dst_shadow+16, v5.vector);
1622 v5.vector = v0.vector;
1623 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x1B);
1626 v5.vector = _mm_mul_ps(v5.vector, v6.vector);
1627 v3.vector = _mm_add_ps(v3.vector, v5.vector);
1628 _mm_store_ps(dst_shadow+20, v3.vector);
1648#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
1649 QDPIO::cout <<
"inlinaAddSpinReconDir0Minus" << endl;
1663 const REAL32* src_shadow = src;
1664 REAL32* dst_shadow = dst;
1667 SSEVec v0, v1, v2, v3, v4, v5, v6;
1675 v0.vector = _mm_load_ps(src_shadow);
1676 v1.vector = _mm_load_ps(src_shadow+4);
1677 v2.vector = _mm_load_ps(src_shadow+8);
1680 v3.vector = _mm_load_ps(dst_shadow);
1681 v4.vector = _mm_load_ps(dst_shadow+4);
1682 v5.vector = _mm_load_ps(dst_shadow+8);
1685 v3.vector = _mm_add_ps(v3.vector, v0.vector);
1686 v4.vector = _mm_add_ps(v4.vector, v1.vector);
1687 v5.vector = _mm_add_ps(v5.vector, v2.vector);
1690 _mm_store_ps(dst_shadow, v3.vector);
1691 _mm_store_ps(dst_shadow+4, v4.vector);
1692 _mm_store_ps(dst_shadow+8, v5.vector);
1694 for(
unsigned int site=0; site < n_vec-1; site++) {
1698 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
1701 v4.vector = _mm_load_ps(dst_shadow+12);
1702 v5.vector = _mm_load_ps(dst_shadow+16);
1712 v3.vector = v1.vector;
1713 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x1B);
1716 v3.vector = _mm_mul_ps(v3.vector, v6.vector);
1719 v4.vector = _mm_add_ps(v3.vector, v4.vector);
1722 v3.vector = _mm_load_ps(dst_shadow+20);
1723 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
1726 _mm_store_ps(dst_shadow+12, v4.vector);
1738 v4.vector = v2.vector;
1739 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x1B);
1742 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
1743 v5.vector = _mm_add_ps(v5.vector, v4.vector);
1744 _mm_store_ps(dst_shadow+16, v5.vector);
1754 v5.vector = v0.vector;
1755 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x1B);
1758 v5.vector = _mm_mul_ps(v5.vector, v6.vector);
1759 v3.vector = _mm_add_ps(v3.vector, v5.vector);
1760 _mm_store_ps(dst_shadow+20, v3.vector);
1765 v0.vector = _mm_load_ps(src_shadow);
1766 v1.vector = _mm_load_ps(src_shadow+4);
1767 v2.vector = _mm_load_ps(src_shadow+8);
1770 v3.vector = _mm_load_ps(dst_shadow);
1771 v4.vector = _mm_load_ps(dst_shadow+4);
1772 v5.vector = _mm_load_ps(dst_shadow+8);
1775 v3.vector = _mm_add_ps(v3.vector, v0.vector);
1776 v4.vector = _mm_add_ps(v4.vector, v1.vector);
1777 v5.vector = _mm_add_ps(v5.vector, v2.vector);
1780 _mm_store_ps(dst_shadow, v3.vector);
1781 _mm_store_ps(dst_shadow+4, v4.vector);
1782 _mm_store_ps(dst_shadow+8, v5.vector);
1787 v4.vector = _mm_load_ps(dst_shadow+12);
1788 v5.vector = _mm_load_ps(dst_shadow+16);
1798 v3.vector = v1.vector;
1799 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x1B);
1802 v3.vector = _mm_mul_ps(v3.vector, v6.vector);
1805 v4.vector = _mm_add_ps(v3.vector, v4.vector);
1808 v3.vector = _mm_load_ps(dst_shadow+20);
1809 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
1812 _mm_store_ps(dst_shadow+12, v4.vector);
1824 v4.vector = v2.vector;
1825 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x1B);
1828 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
1829 v5.vector = _mm_add_ps(v5.vector, v4.vector);
1830 _mm_store_ps(dst_shadow+16, v5.vector);
1840 v5.vector = v0.vector;
1841 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x1B);
1844 v5.vector = _mm_mul_ps(v5.vector, v6.vector);
1845 v3.vector = _mm_add_ps(v3.vector, v5.vector);
1846 _mm_store_ps(dst_shadow+20, v3.vector);
1868#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
1869 QDPIO::cout <<
"inlinaAddSpinReconDir0Plus" << endl;
1872 const REAL32* src_shadow = src;
1873 REAL32* dst_shadow = dst;
1886 SSEVec v0, v1, v2, v3, v4, v5, v6;
1894 v0.vector = _mm_load_ps(src_shadow);
1895 v1.vector = _mm_load_ps(src_shadow+4);
1896 v2.vector = _mm_load_ps(src_shadow+8);
1899 v3.vector = _mm_load_ps(dst_shadow);
1900 v4.vector = _mm_load_ps(dst_shadow+4);
1901 v5.vector = _mm_load_ps(dst_shadow+8);
1904 v3.vector = _mm_add_ps(v3.vector, v0.vector);
1905 v4.vector = _mm_add_ps(v4.vector, v1.vector);
1906 v5.vector = _mm_add_ps(v5.vector, v2.vector);
1909 _mm_store_ps(dst_shadow, v3.vector);
1910 _mm_store_ps(dst_shadow+4, v4.vector);
1911 _mm_store_ps(dst_shadow+8, v5.vector);
1913 for(
unsigned int site=0; site < n_vec-1; site++) {
1917 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
1920 v4.vector = _mm_load_ps(dst_shadow+12);
1921 v5.vector = _mm_load_ps(dst_shadow+16);
1931 v3.vector = v1.vector;
1932 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x4E);
1935 v4.vector = _mm_add_ps(v4.vector, v3.vector);
1936 _mm_store_ps( dst_shadow+12, v4.vector);
1938 v3.vector = _mm_load_ps(dst_shadow+20);
1939 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
1949 v4.vector = v2.vector;
1950 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x4E);
1953 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
1956 v5.vector = _mm_add_ps(v5.vector, v4.vector);
1957 _mm_store_ps( dst_shadow+16, v5.vector);
1967 v5.vector = v0.vector;
1968 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x4E);
1971 v3.vector = _mm_sub_ps(v3.vector, v5.vector);
1974 _mm_store_ps(dst_shadow+20, v3.vector);
1979 v0.vector = _mm_load_ps(src_shadow);
1980 v1.vector = _mm_load_ps(src_shadow+4);
1981 v2.vector = _mm_load_ps(src_shadow+8);
1984 v3.vector = _mm_load_ps(dst_shadow);
1985 v4.vector = _mm_load_ps(dst_shadow+4);
1986 v5.vector = _mm_load_ps(dst_shadow+8);
1989 v3.vector = _mm_add_ps(v3.vector, v0.vector);
1990 v4.vector = _mm_add_ps(v4.vector, v1.vector);
1991 v5.vector = _mm_add_ps(v5.vector, v2.vector);
1994 _mm_store_ps(dst_shadow, v3.vector);
1995 _mm_store_ps(dst_shadow+4, v4.vector);
1996 _mm_store_ps(dst_shadow+8, v5.vector);
2001 v4.vector = _mm_load_ps(dst_shadow+12);
2002 v5.vector = _mm_load_ps(dst_shadow+16);
2012 v3.vector = v1.vector;
2013 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x4E);
2016 v4.vector = _mm_add_ps(v4.vector, v3.vector);
2017 _mm_store_ps( dst_shadow+12, v4.vector);
2019 v3.vector = _mm_load_ps(dst_shadow+20);
2020 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
2029 v4.vector = v2.vector;
2030 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x4E);
2033 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
2036 v5.vector = _mm_add_ps(v5.vector, v4.vector);
2037 _mm_store_ps( dst_shadow+16, v5.vector);
2047 v5.vector = v0.vector;
2048 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x4E);
2051 v3.vector = _mm_sub_ps(v3.vector, v5.vector);
2054 _mm_store_ps(dst_shadow+20, v3.vector);
2058 REAL32 tmp_hspinor[4][3][2];
2060 const REAL32* src_shadow = src;
2061 REAL32* dst_shadow = dst;
2065 const int Ncmpx = 2;
2066 const int Nsby2 = 2;
2068 for(
int site=0; site < n_vec; site++) {
2069 REAL32* tmp_shadow = &(tmp_hspinor[0][0][0]);
2072 for(
int store=0; store < Nsby2*
Nc*Ncmpx; store++) {
2073 REAL32 tmp = *(src_shadow++);
2074 *(tmp_shadow++) = tmp;
2075 *(dst_shadow++) += tmp;
2079 for(
int col=0; col <
Nc; col++) {
2080 *(dst_shadow++) += tmp_hspinor[1][col][re];
2081 *(dst_shadow++) += tmp_hspinor[1][col][im];
2085 for(
int col=0; col <
Nc; col++) {
2086 *(dst_shadow++) -= tmp_hspinor[0][col][re];
2087 *(dst_shadow++) -= tmp_hspinor[0][col][im];
2111#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
2112 QDPIO::cout <<
"inlinaAddSpinReconDir0Minus" << endl;
2115 const REAL32* src_shadow = src;
2116 REAL32* dst_shadow = dst;
2129 SSEVec v0, v1, v2, v3, v4, v5, v6;
2137 v0.vector = _mm_load_ps(src_shadow);
2138 v1.vector = _mm_load_ps(src_shadow+4);
2139 v2.vector = _mm_load_ps(src_shadow+8);
2142 v3.vector = _mm_load_ps(dst_shadow);
2143 v4.vector = _mm_load_ps(dst_shadow+4);
2144 v5.vector = _mm_load_ps(dst_shadow+8);
2147 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2148 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2149 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2152 _mm_store_ps(dst_shadow, v3.vector);
2153 _mm_store_ps(dst_shadow+4, v4.vector);
2154 _mm_store_ps(dst_shadow+8, v5.vector);
2156 for(
unsigned int site=0; site < n_vec-1; site++) {
2159 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
2162 v4.vector = _mm_load_ps(dst_shadow+12);
2163 v5.vector = _mm_load_ps(dst_shadow+16);
2173 v3.vector = v1.vector;
2174 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x4E);
2177 v4.vector = _mm_sub_ps(v4.vector, v3.vector);
2178 _mm_store_ps( dst_shadow+12, v4.vector);
2180 v3.vector = _mm_load_ps(dst_shadow+20);
2181 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
2190 v4.vector = v2.vector;
2191 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x4E);
2194 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
2197 v5.vector = _mm_add_ps(v5.vector, v4.vector);
2198 _mm_store_ps( dst_shadow+16, v5.vector);
2208 v5.vector = v0.vector;
2209 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x4E);
2212 v3.vector = _mm_add_ps(v3.vector, v5.vector);
2215 _mm_store_ps(dst_shadow+20, v3.vector);
2220 v0.vector = _mm_load_ps(src_shadow);
2221 v1.vector = _mm_load_ps(src_shadow+4);
2222 v2.vector = _mm_load_ps(src_shadow+8);
2225 v3.vector = _mm_load_ps(dst_shadow);
2226 v4.vector = _mm_load_ps(dst_shadow+4);
2227 v5.vector = _mm_load_ps(dst_shadow+8);
2230 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2231 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2232 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2235 _mm_store_ps(dst_shadow, v3.vector);
2236 _mm_store_ps(dst_shadow+4, v4.vector);
2237 _mm_store_ps(dst_shadow+8, v5.vector);
2242 v4.vector = _mm_load_ps(dst_shadow+12);
2243 v5.vector = _mm_load_ps(dst_shadow+16);
2253 v3.vector = v1.vector;
2254 v3.vector = _mm_shuffle_ps(v3.vector, v2.vector, 0x4E);
2257 v4.vector = _mm_sub_ps(v4.vector, v3.vector);
2258 _mm_store_ps( dst_shadow+12, v4.vector);
2260 v3.vector = _mm_load_ps(dst_shadow+20);
2261 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
2270 v4.vector = v2.vector;
2271 v4.vector = _mm_shuffle_ps(v4.vector, v0.vector, 0x4E);
2274 v4.vector = _mm_mul_ps(v4.vector, v6.vector);
2277 v5.vector = _mm_add_ps(v5.vector, v4.vector);
2278 _mm_store_ps( dst_shadow+16, v5.vector);
2288 v5.vector = v0.vector;
2289 v5.vector = _mm_shuffle_ps(v5.vector, v1.vector, 0x4E);
2292 v3.vector = _mm_add_ps(v3.vector, v5.vector);
2295 _mm_store_ps(dst_shadow+20, v3.vector);
2316#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
2317 QDPIO::cout <<
"inlinaAddSpinReconDir0Plus" << endl;
2321 const REAL32* src_shadow = src;
2322 REAL32* dst_shadow = dst;
2333 SSEVec v0, v1, v2, v3, v4, v5, v6, v7;
2345 v0.vector = _mm_load_ps(src_shadow);
2346 v1.vector = _mm_load_ps(src_shadow+4);
2347 v2.vector = _mm_load_ps(src_shadow+8);
2350 v3.vector = _mm_load_ps(dst_shadow);
2351 v4.vector = _mm_load_ps(dst_shadow+4);
2352 v5.vector = _mm_load_ps(dst_shadow+8);
2355 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2356 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2357 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2360 _mm_store_ps(dst_shadow, v3.vector);
2361 _mm_store_ps(dst_shadow+4, v4.vector);
2362 _mm_store_ps(dst_shadow+8, v5.vector);
2364 for(
unsigned int site=0; site < n_vec-1; site++) {
2367 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
2370 v3.vector = _mm_load_ps(dst_shadow+12);
2371 v4.vector = _mm_load_ps(dst_shadow+16);
2372 v5.vector = _mm_load_ps(dst_shadow+20);
2373 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
2383 v0.vector = _mm_shuffle_ps(v0.vector, v0.vector, 0xB1);
2386 v0.vector = _mm_mul_ps(v0.vector, v6.vector);
2387 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2388 _mm_store_ps(dst_shadow+12, v3.vector);
2399 v1.vector = _mm_shuffle_ps(v1.vector, v1.vector, 0xB1);
2402 v1.vector = _mm_mul_ps(v1.vector, v7.vector);
2403 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2404 _mm_store_ps(dst_shadow+16, v4.vector);
2414 v2.vector = _mm_shuffle_ps(v2.vector, v2.vector, 0xB1);
2417 v2.vector = _mm_mul_ps(v2.vector, v6.vector);
2418 v5.vector = _mm_sub_ps(v5.vector, v2.vector);
2419 _mm_store_ps(dst_shadow+20, v5.vector);
2424 v0.vector = _mm_load_ps(src_shadow);
2425 v1.vector = _mm_load_ps(src_shadow+4);
2426 v2.vector = _mm_load_ps(src_shadow+8);
2429 v3.vector = _mm_load_ps(dst_shadow);
2430 v4.vector = _mm_load_ps(dst_shadow+4);
2431 v5.vector = _mm_load_ps(dst_shadow+8);
2434 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2435 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2436 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2439 _mm_store_ps(dst_shadow, v3.vector);
2440 _mm_store_ps(dst_shadow+4, v4.vector);
2441 _mm_store_ps(dst_shadow+8, v5.vector);
2447 v3.vector = _mm_load_ps(dst_shadow+12);
2448 v4.vector = _mm_load_ps(dst_shadow+16);
2449 v5.vector = _mm_load_ps(dst_shadow+20);
2450 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
2460 v0.vector = _mm_shuffle_ps(v0.vector, v0.vector, 0xB1);
2463 v0.vector = _mm_mul_ps(v0.vector, v6.vector);
2464 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2465 _mm_store_ps(dst_shadow+12,v3.vector);
2476 v1.vector = _mm_shuffle_ps(v1.vector, v1.vector, 0xB1);
2479 v1.vector = _mm_mul_ps(v1.vector, v7.vector);
2480 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2481 _mm_store_ps(dst_shadow+16, v4.vector);
2491 v2.vector = _mm_shuffle_ps(v2.vector, v2.vector, 0xB1);
2494 v2.vector = _mm_mul_ps(v2.vector, v6.vector);
2495 v5.vector = _mm_sub_ps(v5.vector, v2.vector);
2496 _mm_store_ps(dst_shadow+20, v5.vector);
2516#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
2517 QDPIO::cout <<
"inlinaAddSpinReconDir0Minus" << endl;
2530 const REAL32* src_shadow = src;
2531 REAL32* dst_shadow = dst;
2533 SSEVec v0, v1, v2, v3, v4, v5, v6, v7;
2545 v0.vector = _mm_load_ps(src_shadow);
2546 v1.vector = _mm_load_ps(src_shadow+4);
2547 v2.vector = _mm_load_ps(src_shadow+8);
2550 v3.vector = _mm_load_ps(dst_shadow);
2551 v4.vector = _mm_load_ps(dst_shadow+4);
2552 v5.vector = _mm_load_ps(dst_shadow+8);
2555 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2556 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2557 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2560 _mm_store_ps(dst_shadow, v3.vector);
2561 _mm_store_ps(dst_shadow+4, v4.vector);
2562 _mm_store_ps(dst_shadow+8, v5.vector);
2564 for(
unsigned int site=0; site < n_vec-1; site++) {
2567 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
2570 v3.vector = _mm_load_ps(dst_shadow+12);
2571 v4.vector = _mm_load_ps(dst_shadow+16);
2572 v5.vector = _mm_load_ps(dst_shadow+20);
2573 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
2583 v0.vector = _mm_shuffle_ps(v0.vector, v0.vector, 0xB1);
2586 v0.vector = _mm_mul_ps(v0.vector, v6.vector);
2587 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2588 _mm_store_ps(dst_shadow+12, v3.vector);
2599 v1.vector = _mm_shuffle_ps(v1.vector, v1.vector, 0xB1);
2602 v1.vector = _mm_mul_ps(v1.vector, v7.vector);
2603 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2604 _mm_store_ps(dst_shadow+16, v4.vector);
2614 v2.vector = _mm_shuffle_ps(v2.vector, v2.vector, 0xB1);
2617 v2.vector = _mm_mul_ps(v2.vector, v6.vector);
2618 v5.vector = _mm_sub_ps(v5.vector, v2.vector);
2619 _mm_store_ps(dst_shadow+20, v5.vector);
2624 v0.vector = _mm_load_ps(src_shadow);
2625 v1.vector = _mm_load_ps(src_shadow+4);
2626 v2.vector = _mm_load_ps(src_shadow+8);
2629 v3.vector = _mm_load_ps(dst_shadow);
2630 v4.vector = _mm_load_ps(dst_shadow+4);
2631 v5.vector = _mm_load_ps(dst_shadow+8);
2634 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2635 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2636 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2639 _mm_store_ps(dst_shadow, v3.vector);
2640 _mm_store_ps(dst_shadow+4, v4.vector);
2641 _mm_store_ps(dst_shadow+8, v5.vector);
2647 v3.vector = _mm_load_ps(dst_shadow+12);
2648 v4.vector = _mm_load_ps(dst_shadow+16);
2649 v5.vector = _mm_load_ps(dst_shadow+20);
2650 _mm_prefetch((
const char *) dst_shadow+20, _MM_HINT_T0);
2660 v0.vector = _mm_shuffle_ps(v0.vector, v0.vector, 0xB1);
2663 v0.vector = _mm_mul_ps(v0.vector, v6.vector);
2664 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2665 _mm_store_ps(dst_shadow+12, v3.vector);
2676 v1.vector = _mm_shuffle_ps(v1.vector, v1.vector, 0xB1);
2679 v1.vector = _mm_mul_ps(v1.vector, v7.vector);
2680 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2681 _mm_store_ps(dst_shadow+16, v4.vector);
2691 v2.vector = _mm_shuffle_ps(v2.vector, v2.vector, 0xB1);
2694 v2.vector = _mm_mul_ps(v2.vector, v6.vector);
2695 v5.vector = _mm_sub_ps(v5.vector, v2.vector);
2696 _mm_store_ps(dst_shadow+20, v5.vector);
2719#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
2720 QDPIO::cout <<
"inlinaAddSpinReconDir0Plus" << endl;
2735 const REAL32* src_shadow = src;
2736 REAL32* dst_shadow = dst;
2738 SSEVec v0, v1, v2, v3, v4, v5;
2741 v0.
vector = _mm_load_ps(src_shadow);
2742 v1.vector = _mm_load_ps(src_shadow+4);
2743 v2.vector = _mm_load_ps(src_shadow+8);
2746 v3.vector = _mm_load_ps(dst_shadow);
2747 v4.vector = _mm_load_ps(dst_shadow+4);
2748 v5.vector = _mm_load_ps(dst_shadow+8);
2751 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2752 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2753 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2756 _mm_store_ps(dst_shadow, v3.vector);
2757 _mm_store_ps(dst_shadow+4, v4.vector);
2758 _mm_store_ps(dst_shadow+8, v5.vector);
2760 for(
unsigned int site=0; site < n_vec-1; site++) {
2763 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
2767 v3.vector = _mm_load_ps(dst_shadow+12);
2768 v4.vector = _mm_load_ps(dst_shadow+16);
2769 v5.vector = _mm_load_ps(dst_shadow+20);
2771 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2772 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2773 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2775 _mm_store_ps(dst_shadow+12, v3.vector);
2776 _mm_store_ps(dst_shadow+16, v4.vector);
2777 _mm_store_ps(dst_shadow+20, v5.vector);
2782 v0.vector = _mm_load_ps(src_shadow);
2783 v1.vector = _mm_load_ps(src_shadow+4);
2784 v2.vector = _mm_load_ps(src_shadow+8);
2787 v3.vector = _mm_load_ps(dst_shadow);
2788 v4.vector = _mm_load_ps(dst_shadow+4);
2789 v5.vector = _mm_load_ps(dst_shadow+8);
2792 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2793 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2794 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2797 _mm_store_ps(dst_shadow, v3.vector);
2798 _mm_store_ps(dst_shadow+4, v4.vector);
2799 _mm_store_ps(dst_shadow+8, v5.vector);
2805 v3.vector = _mm_load_ps(dst_shadow+12);
2806 v4.vector = _mm_load_ps(dst_shadow+16);
2807 v5.vector = _mm_load_ps(dst_shadow+20);
2809 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2810 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2811 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2813 _mm_store_ps(dst_shadow+12, v3.vector);
2814 _mm_store_ps(dst_shadow+16, v4.vector);
2815 _mm_store_ps(dst_shadow+20, v5.vector);
2835#ifdef DEBUG_GENERIC_SPIN_RECON_INLINES
2836 QDPIO::cout <<
"inlinaAddSpinReconDir0Minus" << endl;
2849 const REAL32* src_shadow = src;
2850 REAL32* dst_shadow = dst;
2852 SSEVec v0, v1, v2, v3, v4, v5;
2855 v0.
vector = _mm_load_ps(src_shadow);
2856 v1.vector = _mm_load_ps(src_shadow+4);
2857 v2.vector = _mm_load_ps(src_shadow+8);
2860 v3.vector = _mm_load_ps(dst_shadow);
2861 v4.vector = _mm_load_ps(dst_shadow+4);
2862 v5.vector = _mm_load_ps(dst_shadow+8);
2865 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2866 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2867 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2870 _mm_store_ps(dst_shadow, v3.vector);
2871 _mm_store_ps(dst_shadow+4, v4.vector);
2872 _mm_store_ps(dst_shadow+8, v5.vector);
2874 for(
unsigned int site=0; site < n_vec-1; site++) {
2877 _mm_prefetch((
const char *)src_shadow, _MM_HINT_T0);
2880 v3.vector = _mm_load_ps(dst_shadow+12);
2881 v4.vector = _mm_load_ps(dst_shadow+16);
2882 v5.vector = _mm_load_ps(dst_shadow+20);
2884 v3.vector = _mm_sub_ps(v3.vector, v0.vector);
2885 v4.vector = _mm_sub_ps(v4.vector, v1.vector);
2886 v5.vector = _mm_sub_ps(v5.vector, v2.vector);
2888 _mm_store_ps(dst_shadow+12, v3.vector);
2889 _mm_store_ps(dst_shadow+16, v4.vector);
2890 _mm_store_ps(dst_shadow+20, v5.vector);
2895 v0.vector = _mm_load_ps(src_shadow);
2896 v1.vector = _mm_load_ps(src_shadow+4);
2897 v2.vector = _mm_load_ps(src_shadow+8);
2900 v3.vector = _mm_load_ps(dst_shadow);
2901 v4.vector = _mm_load_ps(dst_shadow+4);
2902 v5.vector = _mm_load_ps(dst_shadow+8);
2905 v3.vector = _mm_add_ps(v3.vector, v0.vector);
2906 v4.vector = _mm_add_ps(v4.vector, v1.vector);
2907 v5.vector = _mm_add_ps(v5.vector, v2.vector);
2910 _mm_store_ps(dst_shadow, v3.vector);
2911 _mm_store_ps(dst_shadow+4, v4.vector);
2912 _mm_store_ps(dst_shadow+8, v5.vector);
2918 v3.vector = _mm_load_ps(dst_shadow+12);
2919 v4.vector = _mm_load_ps(dst_shadow+16);
2920 v5.vector = _mm_load_ps(dst_shadow+20);
2922 v3.vector = _mm_sub_ps(v3.vector, v0.vector);
2923 v4.vector = _mm_sub_ps(v4.vector, v1.vector);
2924 v5.vector = _mm_sub_ps(v5.vector, v2.vector);
2926 _mm_store_ps(dst_shadow+12, v3.vector);
2927 _mm_store_ps(dst_shadow+16, v4.vector);
2928 _mm_store_ps(dst_shadow+20, v5.vector);
StandardOutputStream cout
Yet another random number generator.
void inlineSpinReconDir0Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_0).
void inlineAddSpinReconDir1Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_1).
void inlineAddSpinReconDir2Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_2).
void inlineAddSpinReconDir1Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_1).
void inlineSpinReconDir2Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_2).
void inlineSpinReconDir1Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_1).
void inlineAddSpinReconDir3Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma3).
void inlineSpinReconDir2Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_2).
void inlineAddSpinReconDir3Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma3).
void inlineSpinReconDir3Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma3).
void inlineAddSpinReconDir0Minus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1-\gamma_0).
void inlineAddSpinReconDir2Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_2).
void inlineSpinReconDir3Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma3).
void inlineAddSpinReconDir0Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_0).
void inlineSpinReconDir1Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_1).
void inlineSpinReconDir0Plus(const REAL *src, REAL *dst, unsigned int n_vec)
Spin recon (1/2)(1+\gamma_0).