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