1 /* { dg-do compile } */
2 /* { dg-options "-O" } */
3 /* { dg-final { check-function-bodies "**" "" } } */
4
5 #include <arm_sve.h>
6
7 #ifdef __cplusplus
8 extern "C" {
9 #endif
10
11 /*
12 ** dup_x0_m:
13 ** ...
14 ** add (x[0-9]+), x0, #?1
15 ** mov (p[0-7])\.b, p15\.b
16 ** mov z0\.d, \2/m, \1
17 ** ...
18 ** ret
19 */
20 svuint64_t
dup_x0_m(svuint64_t z0,uint64_t x0)21 dup_x0_m (svuint64_t z0, uint64_t x0)
22 {
23 register svbool_t pg asm ("p15");
24 asm volatile ("" : "=Upa" (pg));
25 return svdup_u64_m (z0, pg, x0 + 1);
26 }
27
28 /*
29 ** dup_d1_z:
30 ** ...
31 ** mov (p[0-7])\.b, p15\.b
32 ** mov z0\.d, \1/m, d1
33 ** ...
34 ** ret
35 */
36 svfloat64_t
dup_d1_z(svfloat64_t z0,float64_t d1)37 dup_d1_z (svfloat64_t z0, float64_t d1)
38 {
39 register svbool_t pg asm ("p15");
40 asm volatile ("" : "=Upa" (pg));
41 return svdup_f64_m (z0, pg, d1);
42 }
43
44 #ifdef __cplusplus
45 }
46 #endif
47