Bridge++  Ver. 2.0.2
mult_common_parts_qxs-inc.h
Go to the documentation of this file.
1 
10 #ifndef MULT_COMMON_PATRS_QXS_H
11 #define MULT_COMMON_PATRS_QXS_H
12 
13 
14 //====================================================================
15 namespace {
16  inline void load_udag_xm(svbool_t pg1, svbool_t pg2,
17  svreal_t& u0, svreal_t& u1,
18  svreal_t& u2, svreal_t& u3,
19  svreal_t& u4, svreal_t& u5,
20  real_t *ux, real_t *un)
21  {
22  load_vec(pg1, u0, &ux[VLEN * 0 - 1]);
23  load_add(pg2, u0, &un[VLEN * 0 + VLENX - 1]);
24 
25  load_vec(pg1, u1, &ux[VLEN * 1 - 1]);
26  load_add(pg2, u1, &un[VLEN * 1 + VLENX - 1]);
27 
28  load_vec(pg1, u2, &ux[VLEN * 2 - 1]);
29  load_add(pg2, u2, &un[VLEN * 2 + VLENX - 1]);
30 
31  load_vec(pg1, u3, &ux[VLEN * 3 - 1]);
32  load_add(pg2, u3, &un[VLEN * 3 + VLENX - 1]);
33 
34  load_vec(pg1, u4, &ux[VLEN * 4 - 1]);
35  load_add(pg2, u4, &un[VLEN * 4 + VLENX - 1]);
36 
37  load_vec(pg1, u5, &ux[VLEN * 5 - 1]);
38  load_add(pg2, u5, &un[VLEN * 5 + VLENX - 1]);
39  }
40 
41 
42  inline void load_udag_ym(svbool_t pg1, svbool_t pg2,
43  svreal_t& u0, svreal_t& u1,
44  svreal_t& u2, svreal_t& u3,
45  svreal_t& u4, svreal_t& u5,
46  real_t *ux, real_t *un)
47  {
48 #if VLENY > 1
49  load_vec(pg1, u0, &ux[VLEN * 0 - VLENX]);
50  load_add(pg2, u0, &un[VLEN * 0 + VLENX * (VLENY - 1)]);
51 
52  load_vec(pg1, u1, &ux[VLEN * 1 - VLENX]);
53  load_add(pg2, u1, &un[VLEN * 1 + VLENX * (VLENY - 1)]);
54 
55  load_vec(pg1, u2, &ux[VLEN * 2 - VLENX]);
56  load_add(pg2, u2, &un[VLEN * 2 + VLENX * (VLENY - 1)]);
57 
58  load_vec(pg1, u3, &ux[VLEN * 3 - VLENX]);
59  load_add(pg2, u3, &un[VLEN * 3 + VLENX * (VLENY - 1)]);
60 
61  load_vec(pg1, u4, &ux[VLEN * 4 - VLENX]);
62  load_add(pg2, u4, &un[VLEN * 4 + VLENX * (VLENY - 1)]);
63 
64  load_vec(pg1, u5, &ux[VLEN * 5 - VLENX]);
65  load_add(pg2, u5, &un[VLEN * 5 + VLENX * (VLENY - 1)]);
66 #else
67  svbool_t pg = set_predicate();
68  load_vec(pg, u0, &un[VLEN * 0]);
69  load_vec(pg, u1, &un[VLEN * 1]);
70  load_vec(pg, u2, &un[VLEN * 2]);
71  load_vec(pg, u3, &un[VLEN * 3]);
72  load_vec(pg, u4, &un[VLEN * 4]);
73  load_vec(pg, u5, &un[VLEN * 5]);
74 #endif
75  }
76 
77 
78  inline void load_udag_ym(svreal_t& u0, svreal_t& u1,
79  svreal_t& u2, svreal_t& u3,
80  svreal_t& u4, svreal_t& u5,
81  real_t *ux, real_t *un)
82  {
83 #if VLENY > 1
84  shift_vec_yfw(u0, &ux[VLEN * 0], &un[VLEN * 0]);
85  shift_vec_yfw(u1, &ux[VLEN * 1], &un[VLEN * 1]);
86  shift_vec_yfw(u2, &ux[VLEN * 2], &un[VLEN * 2]);
87  shift_vec_yfw(u3, &ux[VLEN * 3], &un[VLEN * 3]);
88  shift_vec_yfw(u4, &ux[VLEN * 4], &un[VLEN * 4]);
89  shift_vec_yfw(u5, &ux[VLEN * 5], &un[VLEN * 5]);
90 #else
91  svbool_t pg = set_predicate();
92  load_vec(pg, u0, &un[VLEN * 0]);
93  load_vec(pg, u1, &un[VLEN * 1]);
94  load_vec(pg, u2, &un[VLEN * 2]);
95  load_vec(pg, u3, &un[VLEN * 3]);
96  load_vec(pg, u4, &un[VLEN * 4]);
97  load_vec(pg, u5, &un[VLEN * 5]);
98 #endif
99  }
100 
101 
102  inline void load_udag_xm2_eo(svbool_t pg1, svbool_t pg3,
103  svreal_t& u0, svreal_t& u1,
104  svreal_t& u2, svreal_t& u3,
105  svreal_t& u4, svreal_t& u5,
106  real_t *ux)
107  {
108  load_vec(pg3, u0, &ux[VLEN * 0]);
109  load_add(pg1, u0, &ux[VLEN * 0 - 1]);
110 
111  load_vec(pg3, u1, &ux[VLEN * 1]);
112  load_add(pg1, u1, &ux[VLEN * 1 - 1]);
113 
114  load_vec(pg3, u2, &ux[VLEN * 2]);
115  load_add(pg1, u2, &ux[VLEN * 2 - 1]);
116 
117  load_vec(pg3, u3, &ux[VLEN * 3]);
118  load_add(pg1, u3, &ux[VLEN * 3 - 1]);
119 
120  load_vec(pg3, u4, &ux[VLEN * 4]);
121  load_add(pg1, u4, &ux[VLEN * 4 - 1]);
122 
123  load_vec(pg3, u5, &ux[VLEN * 5]);
124  load_add(pg1, u5, &ux[VLEN * 5 - 1]);
125  }
126 
127 
128  inline void load_udag_xm_eo(svbool_t pg1, svbool_t pg2, svbool_t pg3,
129  svreal_t& u0, svreal_t& u1,
130  svreal_t& u2, svreal_t& u3,
131  svreal_t& u4, svreal_t& u5,
132  real_t *ux, real_t *un)
133  {
134  load_vec(pg3, u0, &ux[VLEN * 0]);
135  load_add(pg1, u0, &ux[VLEN * 0 - 1]);
136  load_add(pg2, u0, &un[VLEN * 0 + VLENX - 1]);
137 
138  load_vec(pg3, u1, &ux[VLEN * 1]);
139  load_add(pg1, u1, &ux[VLEN * 1 - 1]);
140  load_add(pg2, u1, &un[VLEN * 1 + VLENX - 1]);
141 
142  load_vec(pg3, u2, &ux[VLEN * 2]);
143  load_add(pg1, u2, &ux[VLEN * 2 - 1]);
144  load_add(pg2, u2, &un[VLEN * 2 + VLENX - 1]);
145 
146  load_vec(pg3, u3, &ux[VLEN * 3]);
147  load_add(pg1, u3, &ux[VLEN * 3 - 1]);
148  load_add(pg2, u3, &un[VLEN * 3 + VLENX - 1]);
149 
150  load_vec(pg3, u4, &ux[VLEN * 4]);
151  load_add(pg1, u4, &ux[VLEN * 4 - 1]);
152  load_add(pg2, u4, &un[VLEN * 4 + VLENX - 1]);
153 
154  load_vec(pg3, u5, &ux[VLEN * 5]);
155  load_add(pg1, u5, &ux[VLEN * 5 - 1]);
156  load_add(pg2, u5, &un[VLEN * 5 + VLENX - 1]);
157  }
158 
159 
160  inline void load_udag(svbool_t pg1, svuint_t idx1,
161  svreal_t& u0, svreal_t& u1,
162  svreal_t& u2, svreal_t& u3,
163  svreal_t& u4, svreal_t& u5,
164  real_t *ux, real_t *un)
165  {
166  shift_vec(pg1, idx1, u0, &ux[VLEN * 0], &un[VLEN * 0]);
167  shift_vec(pg1, idx1, u1, &ux[VLEN * 1], &un[VLEN * 1]);
168  shift_vec(pg1, idx1, u2, &ux[VLEN * 2], &un[VLEN * 2]);
169  shift_vec(pg1, idx1, u3, &ux[VLEN * 3], &un[VLEN * 3]);
170  shift_vec(pg1, idx1, u4, &ux[VLEN * 4], &un[VLEN * 4]);
171  shift_vec(pg1, idx1, u5, &ux[VLEN * 5], &un[VLEN * 5]);
172  }
173 } // nameless namespace end
174 
175 #endif
176 //============================================================END=====
VLEN
#define VLEN
Definition: bridgeQXS_Clover_coarse_double.cpp:12
Vsimd_t
Definition: vsimd_double-inc.h:13
real_t
double real_t
Definition: bridgeQXS_Clover_coarse_double.cpp:16
Usimd_t
Definition: vsimd_double-inc.h:25
VLENY
#define VLENY
Definition: bridgeQXS_Clover_coarse_double.cpp:14
svbool_t
Definition: vsimd_double-inc.h:30
VLENX
#define VLENX
Definition: bridgeQXS_Clover_coarse_double.cpp:13