QDP++
generic_blas_vadd3_g5.h
Go to the documentation of this file.
1// $Id: generic_blas_vadd3_g5.h,v 1.2 2007-06-10 14:32:10 edwards Exp $
2
7
8#ifndef QDP_GENERIC_BLAS_VADD_G5
9#define QDP_GENERIC_BLAS_VADD_G5
10
11namespace QDP {
12
13// (Vector) out = (Vector) X + (Vector) P{+} Y
14inline
15void add_g5ProjPlus(REAL *Out, REAL *X, REAL *Y, int n_4vec)
16{
17 double x0r;
18 double x0i;
19
20 double x1r;
21 double x1i;
22
23 double x2r;
24 double x2i;
25
26 double y0r;
27 double y0i;
28
29 double y1r;
30 double y1i;
31
32 double y2r;
33 double y2i;
34
35 double z0r;
36 double z0i;
37
38 double z1r;
39 double z1i;
40
41 double z2r;
42 double z2i;
43
44
45 int index_x = 0;
46 int index_y = 0;
47 int index_z = 0;
48
49 int counter;
50
51 for( counter = 0; counter < n_4vec; counter++) {
52 // Spin Component 0 (AYPX)
53 x0r = (double)X[index_x++];
54 y0r = (double)Y[index_y++];
55 z0r = x0r + y0r;
56 Out[index_z++] =(REAL) z0r;
57
58 x0i = (double)X[index_x++];
59 y0i = (double)Y[index_y++];
60 z0i = x0i + y0i;
61 Out[index_z++] =(REAL) z0i;
62
63 x1r = (double)X[index_x++];
64 y1r = (double)Y[index_y++];
65 z1r = x1r + y1r;
66 Out[index_z++] = (REAL)z1r;
67
68 x1i = (double)X[index_x++];
69 y1i = (double)Y[index_y++];
70 z1i = x1i + y1i;
71 Out[index_z++] = (REAL)z1i;
72
73 x2r = (double)X[index_x++];
74 y2r = (double)Y[index_y++];
75 z2r = x2r + y2r;
76 Out[index_z++] = (REAL)z2r;
77
78 x2i = (double)X[index_x++];
79 y2i = (double)Y[index_y++];
80 z2i = x2i + y2i;
81 Out[index_z++] = (REAL)z2i;
82
83 // Spin Component 1 (AYPX)
84 x0r = (double)X[index_x++];
85 y0r = (double)Y[index_y++];
86 z0r = x0r + y0r;
87 Out[index_z++] =(REAL) z0r;
88
89 x0i = (double)X[index_x++];
90 y0i = (double)Y[index_y++];
91 z0i = x0i + y0i;
92 Out[index_z++] =(REAL) z0i;
93
94 x1r = (double)X[index_x++];
95 y1r = (double)Y[index_y++];
96 z1r = x1r + y1r;
97 Out[index_z++] = (REAL)z1r;
98
99 x1i = (double)X[index_x++];
100 y1i = (double)Y[index_y++];
101 z1i = x1i + y1i;
102 Out[index_z++] = (REAL)z1i;
103
104 x2r = (double)X[index_x++];
105 y2r = (double)Y[index_y++];
106 z2r = x2r + y2r;
107 Out[index_z++] = (REAL)z2r;
108
109 x2i = (double)X[index_x++];
110 y2i = (double)Y[index_y++];
111 z2i = x2i + y2i;
112 Out[index_z++] = (REAL)z2i;
113
114 index_y +=12; // Skip 2 color vecs (3x2x2=12)
115
116 // 2 spin components: Copy...
117
118 x0r = (double)X[index_x++];
119 x0i = (double)X[index_x++];
120 x1r = (double)X[index_x++];
121 Out[index_z++] =(REAL) x0r;
122 x1i = (double)X[index_x++];
123 Out[index_z++] =(REAL) x0i;
124 x2r = (double)X[index_x++];
125 Out[index_z++] =(REAL) x1r;
126 x2i = (double)X[index_x++];
127 Out[index_z++] =(REAL) x1i;
128 x0r = (double)X[index_x++];
129 Out[index_z++] =(REAL) x2r;
130 x0i = (double)X[index_x++];
131 Out[index_z++] =(REAL) x2i;
132 x1r = (double)X[index_x++];
133 Out[index_z++] =(REAL) x0r;
134 x1i = (double)X[index_x++];
135 Out[index_z++] =(REAL) x0i;
136 x2r = (double)X[index_x++];
137 Out[index_z++] =(REAL) x1r;
138 x2i = (double)X[index_x++];
139 Out[index_z++] =(REAL) x1i;
140
141 // Cache pulls
142 x0r = (double)X[index_x];
143 Out[index_z++] =(REAL) x2r;
144 x0i = (double)X[index_x+1];
145 Out[index_z++] =(REAL) x2i;
146
147
148 }
149}
150
151// (Vector) out = (Vector) X + (Vector) P{-} Y
152inline
153void add_g5ProjMinus(REAL *Out, REAL *X, REAL *Y,int n_4vec)
154{
155 double x0r;
156 double x0i;
157
158 double x1r;
159 double x1i;
160
161 double x2r;
162 double x2i;
163
164 double y0r;
165 double y0i;
166
167 double y1r;
168 double y1i;
169
170 double y2r;
171 double y2i;
172
173 double z0r;
174 double z0i;
175
176 double z1r;
177 double z1i;
178
179 double z2r;
180 double z2i;
181
182 int index_x = 0;
183 int index_y = 0;
184 int index_z = 0;
185
186 int counter;
187
188 for( counter = 0; counter < n_4vec; counter++) {
189 index_y += 12;
190
191 // 2 spin components: Copy...
192 x0r = (double)X[index_x++];
193 x0i = (double)X[index_x++];
194 x1r = (double)X[index_x++];
195 Out[index_z++] =(REAL) x0r;
196 x1i = (double)X[index_x++];
197 Out[index_z++] =(REAL) x0i;
198 x2r = (double)X[index_x++];
199 Out[index_z++] =(REAL) x1r;
200 x2i = (double)X[index_x++];
201 Out[index_z++] =(REAL) x1i;
202 x0r = (double)X[index_x++];
203 Out[index_z++] =(REAL) x2r;
204 x0i = (double)X[index_x++];
205 Out[index_z++] =(REAL) x2i;
206 x1r = (double)X[index_x++];
207 Out[index_z++] =(REAL) x0r;
208 x1i = (double)X[index_x++];
209 Out[index_z++] =(REAL) x0i;
210 x2r = (double)X[index_x++];
211 Out[index_z++] =(REAL) x1r;
212 x2i = (double)X[index_x++];
213 Out[index_z++] =(REAL) x1i;
214
215 // Prefetch
216 x0r = (double)X[index_x++];
217 Out[index_z++] =(REAL) x2r;
218 x0i = (double)X[index_x++];
219 Out[index_z++] =(REAL) x2i;
220
221 // Spin Component 0 (AYPX)
222 y0r = (double)Y[index_y++];
223 z0r = x0r + y0r;
224 Out[index_z++] =(REAL) z0r;
225
226 y0i = (double)Y[index_y++];
227 z0i = x0i + y0i;
228 Out[index_z++] =(REAL) z0i;
229
230 x1r = (double)X[index_x++];
231 y1r = (double)Y[index_y++];
232 z1r = x1r + y1r;
233 Out[index_z++] = (REAL)z1r;
234
235 x1i = (double)X[index_x++];
236 y1i = (double)Y[index_y++];
237 z1i = x1i + y1i;
238 Out[index_z++] = (REAL)z1i;
239
240 x2r = (double)X[index_x++];
241 y2r = (double)Y[index_y++];
242 z2r = x2r + y2r;
243 Out[index_z++] = (REAL)z2r;
244
245 x2i = (double)X[index_x++];
246 y2i = (double)Y[index_y++];
247 z2i = x2i + y2i;
248 Out[index_z++] = (REAL)z2i;
249
250 // Spin Component 1 (AYPX)
251 x0r = (double)X[index_x++];
252 y0r = (double)Y[index_y++];
253 z0r = x0r + y0r;
254 Out[index_z++] =(REAL) z0r;
255
256 x0i = (double)X[index_x++];
257 y0i = (double)Y[index_y++];
258 z0i = x0i + y0i;
259 Out[index_z++] =(REAL) z0i;
260
261 x1r = (double)X[index_x++];
262 y1r = (double)Y[index_y++];
263 z1r = x1r + y1r;
264 Out[index_z++] = (REAL)z1r;
265
266 x1i = (double)X[index_x++];
267 y1i = (double)Y[index_y++];
268 z1i = x1i + y1i;
269 Out[index_z++] = (REAL)z1i;
270
271 x2r = (double)X[index_x++];
272 y2r = (double)Y[index_y++];
273 z2r = x2r + y2r;
274 Out[index_z++] = (REAL)z2r;
275
276 x2i = (double)X[index_x++];
277 y2i = (double)Y[index_y++];
278 z2i = x2i + y2i;
279 Out[index_z++] = (REAL)z2i;
280
281
282 }
283}
284
285
286// (Vector) out = (Vector) X - (Vector) P{+} Y
287inline
288void sub_g5ProjPlus(REAL *Out, REAL *X, REAL *Y,int n_4vec)
289{
290 double x0r;
291 double x0i;
292
293 double x1r;
294 double x1i;
295
296 double x2r;
297 double x2i;
298
299 double y0r;
300 double y0i;
301
302 double y1r;
303 double y1i;
304
305 double y2r;
306 double y2i;
307
308 double z0r;
309 double z0i;
310
311 double z1r;
312 double z1i;
313
314 double z2r;
315 double z2i;
316
317 int index_x = 0;
318 int index_y = 0;
319 int index_z = 0;
320
321 int counter;
322
323 for( counter = 0; counter < n_4vec; counter++) {
324 // Spin Component 0 (AYPX)
325 x0r = (double)X[index_x++];
326 y0r = (double)Y[index_y++];
327 z0r = x0r - y0r;
328 Out[index_z++] =(REAL) z0r;
329
330 x0i = (double)X[index_x++];
331 y0i = (double)Y[index_y++];
332 z0i = x0i - y0i;
333 Out[index_z++] =(REAL) z0i;
334
335 x1r = (double)X[index_x++];
336 y1r = (double)Y[index_y++];
337 z1r = x1r - y1r;
338 Out[index_z++] = (REAL)z1r;
339
340 x1i = (double)X[index_x++];
341 y1i = (double)Y[index_y++];
342 z1i = x1i - y1i;
343 Out[index_z++] = (REAL)z1i;
344
345 x2r = (double)X[index_x++];
346 y2r = (double)Y[index_y++];
347 z2r = x2r - y2r;
348 Out[index_z++] = (REAL)z2r;
349
350 x2i = (double)X[index_x++];
351 y2i = (double)Y[index_y++];
352 z2i = x2i - y2i;
353 Out[index_z++] = (REAL)z2i;
354
355 // Spin Component 1 (AYPX)
356 x0r = (double)X[index_x++];
357 y0r = (double)Y[index_y++];
358 z0r = x0r - y0r;
359 Out[index_z++] =(REAL) z0r;
360
361 x0i = (double)X[index_x++];
362 y0i = (double)Y[index_y++];
363 z0i = x0i - y0i;
364 Out[index_z++] =(REAL) z0i;
365
366 x1r = (double)X[index_x++];
367 y1r = (double)Y[index_y++];
368 z1r = x1r - y1r;
369 Out[index_z++] = (REAL)z1r;
370
371 x1i = (double)X[index_x++];
372 y1i = (double)Y[index_y++];
373 z1i = x1i - y1i;
374 Out[index_z++] = (REAL)z1i;
375
376 x2r = (double)X[index_x++];
377 y2r = (double)Y[index_y++];
378 z2r = x2r - y2r;
379 Out[index_z++] = (REAL)z2r;
380
381 x2i = (double)X[index_x++];
382 y2i = (double)Y[index_y++];
383 z2i = x2i - y2i;
384 Out[index_z++] = (REAL)z2i;
385
386 index_y +=12; // Skip 2 color vecs (3x2x2=12)
387
388 // 2 spin components: Copy...
389
390 x0r = (double)X[index_x++];
391 x0i = (double)X[index_x++];
392 x1r = (double)X[index_x++];
393 Out[index_z++] =(REAL) x0r;
394 x1i = (double)X[index_x++];
395 Out[index_z++] =(REAL) x0i;
396 x2r = (double)X[index_x++];
397 Out[index_z++] =(REAL) x1r;
398 x2i = (double)X[index_x++];
399 Out[index_z++] =(REAL) x1i;
400 x0r = (double)X[index_x++];
401 Out[index_z++] =(REAL) x2r;
402 x0i = (double)X[index_x++];
403 Out[index_z++] =(REAL) x2i;
404 x1r = (double)X[index_x++];
405 Out[index_z++] =(REAL) x0r;
406 x1i = (double)X[index_x++];
407 Out[index_z++] =(REAL) x0i;
408 x2r = (double)X[index_x++];
409 Out[index_z++] =(REAL) x1r;
410 x2i = (double)X[index_x++];
411 Out[index_z++] =(REAL) x1i;
412
413 // Cache pulls
414 x0r = (double)X[index_x];
415 Out[index_z++] =(REAL) x2r;
416 x0i = (double)X[index_x+1];
417 Out[index_z++] =(REAL) x2i;
418
419
420 }
421}
422
423// (Vector) out = (Vector) X - (Vector) P{-} Y
424inline
425void sub_g5ProjMinus(REAL *Out, REAL *X, REAL *Y,int n_4vec)
426{
427 double x0r;
428 double x0i;
429
430 double x1r;
431 double x1i;
432
433 double x2r;
434 double x2i;
435
436 double y0r;
437 double y0i;
438
439 double y1r;
440 double y1i;
441
442 double y2r;
443 double y2i;
444
445 double z0r;
446 double z0i;
447
448 double z1r;
449 double z1i;
450
451 double z2r;
452 double z2i;
453
454
455 int index_x = 0;
456 int index_y = 0;
457 int index_z = 0;
458
459 int counter;
460
461 for( counter = 0; counter < n_4vec; counter++) {
462 index_y += 12;
463
464 // 2 spin components: Copy...
465 x0r = (double)X[index_x++];
466 x0i = (double)X[index_x++];
467 x1r = (double)X[index_x++];
468 Out[index_z++] =(REAL) x0r;
469 x1i = (double)X[index_x++];
470 Out[index_z++] =(REAL) x0i;
471 x2r = (double)X[index_x++];
472 Out[index_z++] =(REAL) x1r;
473 x2i = (double)X[index_x++];
474 Out[index_z++] =(REAL) x1i;
475 x0r = (double)X[index_x++];
476 Out[index_z++] =(REAL) x2r;
477 x0i = (double)X[index_x++];
478 Out[index_z++] =(REAL) x2i;
479 x1r = (double)X[index_x++];
480 Out[index_z++] =(REAL) x0r;
481 x1i = (double)X[index_x++];
482 Out[index_z++] =(REAL) x0i;
483 x2r = (double)X[index_x++];
484 Out[index_z++] =(REAL) x1r;
485 x2i = (double)X[index_x++];
486 Out[index_z++] =(REAL) x1i;
487
488 // Prefetch
489 x0r = (double)X[index_x++];
490 Out[index_z++] =(REAL) x2r;
491 x0i = (double)X[index_x++];
492 Out[index_z++] =(REAL) x2i;
493
494 // Spin Component 0 (AYPX)
495 y0r = (double)Y[index_y++];
496 z0r = x0r - y0r;
497 Out[index_z++] =(REAL) z0r;
498
499 y0i = (double)Y[index_y++];
500 z0i = x0i - y0i;
501 Out[index_z++] =(REAL) z0i;
502
503 x1r = (double)X[index_x++];
504 y1r = (double)Y[index_y++];
505 z1r = x1r - y1r;
506 Out[index_z++] = (REAL)z1r;
507
508 x1i = (double)X[index_x++];
509 y1i = (double)Y[index_y++];
510 z1i = x1i - y1i;
511 Out[index_z++] = (REAL)z1i;
512
513 x2r = (double)X[index_x++];
514 y2r = (double)Y[index_y++];
515 z2r = x2r - y2r;
516 Out[index_z++] = (REAL)z2r;
517
518 x2i = (double)X[index_x++];
519 y2i = (double)Y[index_y++];
520 z2i = x2i - y2i;
521 Out[index_z++] = (REAL)z2i;
522
523 // Spin Component 1 (AYPX)
524 x0r = (double)X[index_x++];
525 y0r = (double)Y[index_y++];
526 z0r = x0r - y0r;
527 Out[index_z++] =(REAL) z0r;
528
529 x0i = (double)X[index_x++];
530 y0i = (double)Y[index_y++];
531 z0i = x0i - y0i;
532 Out[index_z++] =(REAL) z0i;
533
534 x1r = (double)X[index_x++];
535 y1r = (double)Y[index_y++];
536 z1r = x1r - y1r;
537 Out[index_z++] = (REAL)z1r;
538
539 x1i = (double)X[index_x++];
540 y1i = (double)Y[index_y++];
541 z1i = x1i - y1i;
542 Out[index_z++] = (REAL)z1i;
543
544 x2r = (double)X[index_x++];
545 y2r = (double)Y[index_y++];
546 z2r = x2r - y2r;
547 Out[index_z++] = (REAL)z2r;
548
549 x2i = (double)X[index_x++];
550 y2i = (double)Y[index_y++];
551 z2i = x2i - y2i;
552 Out[index_z++] = (REAL)z2i;
553
554
555 }
556}
557
558
559
560
561} // namespace QDP;
562
563#endif // guard
REAL32 REAL
Yet another random number generator.
void add_g5ProjPlus(REAL *Out, REAL *X, REAL *Y, int n_4vec)
void add_g5ProjMinus(REAL *Out, REAL *X, REAL *Y, int n_4vec)
void sub_g5ProjPlus(REAL *Out, REAL *X, REAL *Y, int n_4vec)
void sub_g5ProjMinus(REAL *Out, REAL *X, REAL *Y, int n_4vec)