1 /* { dg-do compile } */
2 /* { dg-additional-options "-Ofast" } */
3 /* { dg-additional-options "-march=armv8.2-a+sve" { target aarch64-*-* } } */
9 typedef float rvec_
[3];
11 static rvec_ v0
[NK
] = {
12 { 1, 0, 0 }, { 0, 1, 0 }, { 0, 0, 1 }, { 1, 1, 0 }, { 1, -1, 0 },
13 { 1, 0, 1 }, { 1, 0, -1 }, { 0, 1, 1 }, { 0, 1, -1 }, { 1, 1, 1 },
14 { 1, 1, -1 }, { 1, -1, 1 }, { -1, 1, 1 }, { 2, 0, 0 }, { 0, 2, 0 },
15 { 0, 0, 2 }, { 3, 0, 0 }, { 0, 3, 0 }, { 0, 0, 3 }, { 4, 0, 0 },
16 { 0, 4, 0 }, { 0, 0, 4 } };
18 static inline float iprod__(const rvec_ a
, const rvec_ b
)
20 return (a
[0] * b
[0] + a
[1] * b
[1] + a
[2] * b
[2]);
23 int badaboum(rvec_ cm_mol
, float **tc
)
29 for (k
= 0; k
< DIM
; k
++)
30 for (d
= 0; d
< DIM
; d
++)
31 kfac
[k
][d
] = M_PI
* v0
[k
][d
] / v0
[d
][d
];
33 for (k
= 0; k
< DIM
; k
++)
35 sx
= __builtin_sinf(iprod__(kfac
[k
], cm_mol
));
36 tc
[k
][0] += sx
* iprod__(v0
[k
], cm_mol
);