QDP++
ssevec_mult_nn.h
Go to the documentation of this file.
1#if 1
2#define PREFETCH(addr) __asm__ __volatile__("prefetcht0 %0"::"m"(*(addr)))
3#else
4#define PREFETCH(addr)
5#endif
6
7#define _inline_ssevec_mult_su3_nn(cc,aa,bb,j) \
8{ \
9__asm__ __volatile__ ( \
10 "movaps %0,%%xmm0\n\t" \
11 "movaps %%xmm0,%%xmm1\n\t" \
12 "mulps %2,%%xmm1\n\t" \
13 "movaps %%xmm0,%%xmm2\n\t" \
14 "mulps %3,%%xmm2\n\t" \
15 "movaps %%xmm0,%%xmm3\n\t" \
16 "mulps %4,%%xmm3\n\t" \
17 "movaps %%xmm0,%%xmm4\n\t" \
18 "mulps %5,%%xmm4\n\t" \
19 "movaps %%xmm0,%%xmm5\n\t" \
20 "mulps %6,%%xmm5\n\t" \
21 "mulps %1,%%xmm0\n\t" \
22 : \
23 : "m" (*(bb+0+8*j)), \
24 "m" (*(aa+0)), \
25 "m" (*(aa+4)), \
26 "m" (*(aa+24)), \
27 "m" (*(aa+28)), \
28 "m" (*(aa+48)), \
29 "m" (*(aa+52))); \
30__asm__ __volatile__ ( \
31 "movaps %0,%%xmm6\n\t" \
32 "movaps %%xmm6,%%xmm7\n\t" \
33 "mulps %2,%%xmm7\n\t" \
34 "subps %%xmm7,%%xmm0\n\t" \
35 "movaps %%xmm6,%%xmm7\n\t" \
36 "mulps %1,%%xmm7\n\t" \
37 "addps %%xmm7,%%xmm1\n\t" \
38 "movaps %%xmm6,%%xmm7\n\t" \
39 "mulps %4,%%xmm7\n\t" \
40 "subps %%xmm7,%%xmm2\n\t" \
41 "movaps %%xmm6,%%xmm7\n\t" \
42 "mulps %3,%%xmm7\n\t" \
43 "addps %%xmm7,%%xmm3\n\t" \
44 "movaps %%xmm6,%%xmm7\n\t" \
45 "mulps %6,%%xmm7\n\t" \
46 "subps %%xmm7,%%xmm4\n\t" \
47 "mulps %5,%%xmm6\n\t" \
48 "addps %%xmm6,%%xmm5\n\t" \
49 : \
50 : "m" (*(bb+4+8*j)), \
51 "m" (*(aa+0)), \
52 "m" (*(aa+4)), \
53 "m" (*(aa+24)), \
54 "m" (*(aa+28)), \
55 "m" (*(aa+48)), \
56 "m" (*(aa+52))); \
57__asm__ __volatile__ ( \
58 "movaps %0,%%xmm6\n\t" \
59 "movaps %%xmm6,%%xmm7\n\t" \
60 "mulps %1,%%xmm7\n\t" \
61 "addps %%xmm7,%%xmm0\n\t" \
62 "movaps %%xmm6,%%xmm7\n\t" \
63 "mulps %2,%%xmm7\n\t" \
64 "addps %%xmm7,%%xmm1\n\t" \
65 "movaps %%xmm6,%%xmm7\n\t" \
66 "mulps %3,%%xmm7\n\t" \
67 "addps %%xmm7,%%xmm2\n\t" \
68 "movaps %%xmm6,%%xmm7\n\t" \
69 "mulps %4,%%xmm7\n\t" \
70 "addps %%xmm7,%%xmm3\n\t" \
71 "movaps %%xmm6,%%xmm7\n\t" \
72 "mulps %5,%%xmm7\n\t" \
73 "addps %%xmm7,%%xmm4\n\t" \
74 "mulps %6,%%xmm6\n\t" \
75 "addps %%xmm6,%%xmm5\n\t" \
76 : \
77 : "m" (*(bb+24+8*j)), \
78 "m" (*(aa+8)), \
79 "m" (*(aa+12)), \
80 "m" (*(aa+32)), \
81 "m" (*(aa+36)), \
82 "m" (*(aa+56)), \
83 "m" (*(aa+60))); \
84__asm__ __volatile__ ( \
85 "movaps %0,%%xmm6\n\t" \
86 "movaps %%xmm6,%%xmm7\n\t" \
87 "mulps %2,%%xmm7\n\t" \
88 "subps %%xmm7,%%xmm0\n\t" \
89 "movaps %%xmm6,%%xmm7\n\t" \
90 "mulps %1,%%xmm7\n\t" \
91 "addps %%xmm7,%%xmm1\n\t" \
92 "movaps %%xmm6,%%xmm7\n\t" \
93 "mulps %4,%%xmm7\n\t" \
94 "subps %%xmm7,%%xmm2\n\t" \
95 "movaps %%xmm6,%%xmm7\n\t" \
96 "mulps %3,%%xmm7\n\t" \
97 "addps %%xmm7,%%xmm3\n\t" \
98 "movaps %%xmm6,%%xmm7\n\t" \
99 "mulps %6,%%xmm7\n\t" \
100 "subps %%xmm7,%%xmm4\n\t" \
101 "mulps %5,%%xmm6\n\t" \
102 "addps %%xmm6,%%xmm5\n\t" \
103 : \
104 : "m" (*(bb+28+8*j)), \
105 "m" (*(aa+8)), \
106 "m" (*(aa+12)), \
107 "m" (*(aa+32)), \
108 "m" (*(aa+36)), \
109 "m" (*(aa+56)), \
110 "m" (*(aa+60))); \
111__asm__ __volatile__ ( \
112 "movaps %0,%%xmm6\n\t" \
113 "movaps %%xmm6,%%xmm7\n\t" \
114 "mulps %1,%%xmm7\n\t" \
115 "addps %%xmm7,%%xmm0\n\t" \
116 "movaps %%xmm6,%%xmm7\n\t" \
117 "mulps %2,%%xmm7\n\t" \
118 "addps %%xmm7,%%xmm1\n\t" \
119 "movaps %%xmm6,%%xmm7\n\t" \
120 "mulps %3,%%xmm7\n\t" \
121 "addps %%xmm7,%%xmm2\n\t" \
122 "movaps %%xmm6,%%xmm7\n\t" \
123 "mulps %4,%%xmm7\n\t" \
124 "addps %%xmm7,%%xmm3\n\t" \
125 "movaps %%xmm6,%%xmm7\n\t" \
126 "mulps %5,%%xmm7\n\t" \
127 "addps %%xmm7,%%xmm4\n\t" \
128 "mulps %6,%%xmm6\n\t" \
129 "addps %%xmm6,%%xmm5\n\t" \
130 : \
131 : "m" (*(bb+48+8*j)), \
132 "m" (*(aa+16)), \
133 "m" (*(aa+20)), \
134 "m" (*(aa+40)), \
135 "m" (*(aa+44)), \
136 "m" (*(aa+64)), \
137 "m" (*(aa+68))); \
138__asm__ __volatile__ ( \
139 "movaps %0,%%xmm6\n\t" \
140 "movaps %%xmm6,%%xmm7\n\t" \
141 "mulps %2,%%xmm7\n\t" \
142 "subps %%xmm7,%%xmm0\n\t" \
143 "movaps %%xmm6,%%xmm7\n\t" \
144 "mulps %1,%%xmm7\n\t" \
145 "addps %%xmm7,%%xmm1\n\t" \
146 "movaps %%xmm6,%%xmm7\n\t" \
147 "mulps %4,%%xmm7\n\t" \
148 "subps %%xmm7,%%xmm2\n\t" \
149 "movaps %%xmm6,%%xmm7\n\t" \
150 "mulps %3,%%xmm7\n\t" \
151 "addps %%xmm7,%%xmm3\n\t" \
152 "movaps %%xmm6,%%xmm7\n\t" \
153 "mulps %6,%%xmm7\n\t" \
154 "subps %%xmm7,%%xmm4\n\t" \
155 "mulps %5,%%xmm6\n\t" \
156 "addps %%xmm6,%%xmm5\n\t" \
157 : \
158 : "m" (*(bb+52+8*j)), \
159 "m" (*(aa+16)), \
160 "m" (*(aa+20)), \
161 "m" (*(aa+40)), \
162 "m" (*(aa+44)), \
163 "m" (*(aa+64)), \
164 "m" (*(aa+68))); \
165__asm__ __volatile__ ( \
166 "movaps %%xmm0,%0\n\t" \
167 "movaps %%xmm1,%1\n\t" \
168 "movaps %%xmm2,%2\n\t" \
169 "movaps %%xmm3,%3\n\t" \
170 "movaps %%xmm4,%4\n\t" \
171 "movaps %%xmm5,%5\n\t" \
172 : "=m" (*(cc+0+8*j)), \
173 "=m" (*(cc+4+8*j)), \
174 "=m" (*(cc+24+8*j)), \
175 "=m" (*(cc+28+8*j)), \
176 "=m" (*(cc+48+8*j)), \
177 "=m" (*(cc+52+8*j))); \
178}
179