QDP++
generic_blas_vcscal.h
Go to the documentation of this file.
1// $Id: generic_blas_vcscal.h,v 1.3 2009-09-15 20:48:42 bjoo Exp $
2
7
8#ifndef QDP_GENERIC_BLAS_VCSCAL
9#define QDP_GENERIC_BLAS_VCSCAL
10
11namespace QDP {
12
13inline
14void vcscal(REAL *Out, REAL *scalep, REAL *In, int n_3vec)
15{
16 double a_r =(REAL)*scalep;
17 double a_i =(REAL)*(scalep+1);
18
19 double i0r;
20 double i0i;
21 double i1r;
22 double i1i;
23 double i2r;
24 double i2i;
25
26 double o0r;
27 double o0i;
28 double o1r;
29 double o1i;
30 double o2r;
31 double o2i;
32
33 int counter=0;
34 int inptr=0;
35 int outptr=0;
36
37 if( n_3vec > 0 ) {
38 // Prefetch whole 3 vec
39 i0r = (double)In[inptr++];
40 i0i = (double)In[inptr++];
41 i1r = (double)In[inptr++];
42 i1i = (double)In[inptr++];
43 i2r = (double)In[inptr++];
44 i2i = (double)In[inptr++];
45
46 int len = 4*n_3vec;
47 for(counter = 0; counter < len-1 ; counter++) {
48 o0r = a_r * i0r;
49 o0i = a_i * i0r;
50 i0r = (double)In[inptr++]; // Done with real part get next
51 o0r -= a_i * i0i;
52 Out[outptr++] = (REAL)o0r;
53 o0i += a_r * i0i;
54 Out[outptr++] = (REAL)o0i;
55 i0i = (double)In[inptr++];
56
57 o1r = a_r * i1r;
58 o1i = a_i * i1r;
59 i1r = (double)In[inptr++];
60 o1r -= a_i * i1i;
61 Out[outptr++] = (REAL)o1r;
62 o1i += a_r * i1i;
63 Out[outptr++] = (REAL)o1i;
64 i1i = (double)In[inptr++];
65
66 o2r = a_r * i2r;
67 o2i = a_i * i2r;
68 i2r = (double)In[inptr++];
69 o2r -= a_i * i2i;
70 Out[outptr++] = (REAL)o2r;
71 o2i += a_r * i2i;
72 Out[outptr++] = (REAL)o2i;
73 i2i = (double)In[inptr++];
74 }
75
76 o0r = a_r * i0r;
77 o0i = a_i * i0r;
78 o0r -= a_i * i0i;
79 Out[outptr++] = (REAL)o0r;
80 o0i += a_r * i0i;
81 Out[outptr++] = (REAL)o0i;
82
83 o1r = a_r * i1r;
84 o1i = a_i * i1r;
85 o1r -= a_i * i1i;
86 Out[outptr++] = (REAL)o1r;
87 o1i += a_r * i1i;
88 Out[outptr++] = (REAL)o1i;
89
90 o2r = a_r * i2r;
91 o2i = a_i * i2r;
92 o2r -= a_i * i2i;
93 Out[outptr++] = (REAL)o2r;
94 o2i += a_r * i2i;
95 Out[outptr++] = (REAL)o2i;
96 }
97}
98
99} // namespace QDP;
100
101#endif // guard
REAL32 REAL
Yet another random number generator.
void vcscal(REAL *Out, REAL *scalep, REAL *In, int n_3vec)