1 /* { dg-do compile { target { powerpc*-*-linux* && lp64 } } } */
2 /* { dg-require-effective-target powerpc_p9vector_ok } */
3 /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
4
5 /* Check code generation for direct move for long types. */
6
7 void
test(vector double * p)8 test (vector double *p)
9 {
10 vector double v1 = *p;
11 vector double v2;
12 vector double v3;
13 vector double v4;
14
15 /* Force memory -> FPR load. */
16 __asm__ (" # reg %x0" : "+d" (v1));
17
18 /* force VSX -> GPR direct move. */
19 v2 = v1;
20 __asm__ (" # reg %0" : "+r" (v2));
21
22 /* Force GPR -> Altivec direct move. */
23 v3 = v2;
24 __asm__ (" # reg %x0" : "+v" (v3));
25 *p = v3;
26 }
27
28 /* { dg-final { scan-assembler "mfvsrd" } } */
29 /* { dg-final { scan-assembler "mfvsrld" } } */
30 /* { dg-final { scan-assembler "mtvsrdd" } } */
31
32
33