HiRep 0.1
Loading...
Searching...
No Matches
twisted_bc.h
Go to the documentation of this file.
1/***************************************************************************\
2* Copyright (c) 2008, 2022, Claudio Pica, Sofie Martins *
3* All rights reserved. *
4\***************************************************************************/
5
11#ifndef TWISTED_BC_H
12#define TWISTED_BC_H
13
14#ifndef __cplusplus
15#define _declare_vtmp(s) \
16 register suNf_vector vtmp; \
17 register suNf_vector_flt vtmp_flt
18// clang-format off
19#define _vtmp(s) _Generic((s), suNf_vector: vtmp, suNf_vector_flt: vtmp_flt)
20// clang-format on
21#else
22#define _declare_vtmp(s) auto vtmp = (s)
23#define _vtmp(s) vtmp
24#endif
25
26#ifdef BC_T_THETA
27
37#define _suNf_theta_T_multiply(r, u, s) \
38 do { \
39 _declare_vtmp(s); \
40 _suNf_multiply(_vtmp(s), (u), (s)); \
41 _vector_mulc_f((r), eitheta[0], _vtmp(s)); \
42 } while (0)
43
44#ifdef __cplusplus
45#define _suNf_theta_T_multiply_gpu(r, u, s) \
46 do { \
47 _declare_vtmp(s); \
48 _suNf_multiply(_vtmp(s), (u), (s)); \
49 _vector_mulc_f((r), eitheta_gpu[0], _vtmp(s)); \
50 } while (0)
51#endif
52
62#define _suNf_theta_T_inverse_multiply(r, u, s) \
63 do { \
64 _declare_vtmp(s); \
65 _suNf_inverse_multiply(_vtmp(s), (u), (s)); \
66 _vector_mulc_star_f((r), eitheta[0], _vtmp(s)); \
67 } while (0)
68
69#ifdef __cplusplus
70#define _suNf_theta_T_inverse_multiply_gpu(r, u, s) \
71 do { \
72 _declare_vtmp(s); \
73 _suNf_inverse_multiply(_vtmp(s), (u), (s)); \
74 _vector_mulc_star_f((r), eitheta_gpu[0], _vtmp(s)); \
75 } while (0)
76#endif
77#else
78
87#define _suNf_theta_T_multiply(r, u, s) _suNf_multiply((r), (u), (s))
88#define _suNf_theta_T_multiply_gpu(r, u, s) _suNf_multiply((r), (u), (s))
89
99#define _suNf_theta_T_inverse_multiply(r, u, s) _suNf_inverse_multiply((r), (u), (s))
100#define _suNf_theta_T_inverse_multiply_gpu(r, u, s) _suNf_inverse_multiply((r), (u), (s))
101
102#endif
103
104#ifdef BC_X_THETA
105
115#define _suNf_theta_X_multiply(r, u, s) \
116 do { \
117 _declare_vtmp(s); \
118 _suNf_multiply(_vtmp(s), (u), (s)); \
119 _vector_mulc_f((r), eitheta[1], _vtmp(s)); \
120 } while (0)
121
122#ifdef __cplusplus
123#define _suNf_theta_X_multiply_gpu(r, u, s) \
124 do { \
125 _declare_vtmp(s); \
126 _suNf_multiply(_vtmp(s), (u), (s)); \
127 _vector_mulc_f((r), eitheta_gpu[1], _vtmp(s)); \
128 } while (0)
129#endif
139#define _suNf_theta_X_inverse_multiply(r, u, s) \
140 do { \
141 _declare_vtmp(s); \
142 _suNf_inverse_multiply(_vtmp(s), (u), (s)); \
143 _vector_mulc_star_f((r), eitheta[1], _vtmp(s)); \
144 } while (0)
145
146#ifdef __cplusplus
147#define _suNf_theta_X_inverse_multiply_gpu(r, u, s) \
148 do { \
149 _declare_vtmp(s); \
150 _suNf_inverse_multiply(_vtmp(s), (u), (s)); \
151 _vector_mulc_star_f((r), eitheta_gpu[1], _vtmp(s)); \
152 } while (0)
153#endif
154#else
155
164#define _suNf_theta_X_multiply(r, u, s) _suNf_multiply((r), (u), (s))
165#define _suNf_theta_X_multiply_gpu(r, u, s) _suNf_multiply((r), (u), (s))
166
176#define _suNf_theta_X_inverse_multiply(r, u, s) _suNf_inverse_multiply((r), (u), (s))
177#define _suNf_theta_X_inverse_multiply_gpu(r, u, s) _suNf_inverse_multiply((r), (u), (s))
178
179#endif
180
181#ifdef BC_Y_THETA
182
192#define _suNf_theta_Y_multiply(r, u, s) \
193 do { \
194 _declare_vtmp(s); \
195 _suNf_multiply(_vtmp(s), (u), (s)); \
196 _vector_mulc_f((r), eitheta[2], _vtmp(s)); \
197 } while (0)
198
199#ifdef __cplusplus
200#define _suNf_theta_Y_multiply_gpu(r, u, s) \
201 do { \
202 _declare_vtmp(s); \
203 _suNf_multiply(_vtmp(s), (u), (s)); \
204 _vector_mulc_f((r), eitheta_gpu[2], _vtmp(s)); \
205 } while (0)
206#endif
216#define _suNf_theta_Y_inverse_multiply(r, u, s) \
217 do { \
218 _declare_vtmp(s); \
219 _suNf_inverse_multiply(_vtmp(s), (u), (s)); \
220 _vector_mulc_star_f((r), eitheta[2], _vtmp(s)); \
221 } while (0)
222
223#ifdef __cplusplus
224#define _suNf_theta_Y_inverse_multiply_gpu(r, u, s) \
225 do { \
226 _declare_vtmp(s); \
227 _suNf_inverse_multiply(_vtmp(s), (u), (s)); \
228 _vector_mulc_star_f((r), eitheta_gpu[2], _vtmp(s)); \
229 } while (0)
230#endif
231#else
232
241#define _suNf_theta_Y_multiply(r, u, s) _suNf_multiply((r), (u), (s))
242#define _suNf_theta_Y_multiply_gpu(r, u, s) _suNf_multiply((r), (u), (s))
243
253#define _suNf_theta_Y_inverse_multiply(r, u, s) _suNf_inverse_multiply((r), (u), (s))
254#define _suNf_theta_Y_inverse_multiply_gpu(r, u, s) _suNf_inverse_multiply((r), (u), (s))
255
256#endif
257
258#ifdef BC_Z_THETA
259
269#define _suNf_theta_Z_multiply(r, u, s) \
270 do { \
271 _declare_vtmp(s); \
272 _suNf_multiply(_vtmp(s), (u), (s)); \
273 _vector_mulc_f((r), eitheta[3], _vtmp(s)); \
274 } while (0)
275
276#ifdef __cplusplus
277#define _suNf_theta_Z_multiply_gpu(r, u, s) \
278 do { \
279 _declare_vtmp(s); \
280 _suNf_multiply(_vtmp(s), (u), (s)); \
281 _vector_mulc_f((r), eitheta_gpu[3], _vtmp(s)); \
282 } while (0)
283#endif
284
294#define _suNf_theta_Z_inverse_multiply(r, u, s) \
295 do { \
296 _declare_vtmp(s); \
297 _suNf_inverse_multiply(_vtmp(s), (u), (s)); \
298 _vector_mulc_star_f((r), eitheta[3], _vtmp(s)); \
299 } while (0)
300
301#ifdef __cplusplus
302#define _suNf_theta_Z_inverse_multiply_gpu(r, u, s) \
303 do { \
304 _declare_vtmp(s); \
305 _suNf_inverse_multiply(_vtmp(s), (u), (s)); \
306 _vector_mulc_star_f((r), eitheta_gpu[3], _vtmp(s)); \
307 } while (0)
308#endif
309#else
310
319#define _suNf_theta_Z_multiply(r, u, s) _suNf_multiply((r), (u), (s))
320#define _suNf_theta_Z_multiply_gpu(r, u, s) _suNf_multiply((r), (u), (s))
321
331#define _suNf_theta_Z_inverse_multiply(r, u, s) _suNf_inverse_multiply((r), (u), (s))
332#define _suNf_theta_Z_inverse_multiply_gpu(r, u, s) _suNf_inverse_multiply((r), (u), (s))
333
334#endif
335#endif