1 /* Verify that overloaded built-ins for vec_extract() with long long
2 inputs produce the right code for a P9 target. */
3
4 /* { dg-do compile { target lp64 } } */
5 /* { dg-require-effective-target powerpc_p9vector_ok } */
6 /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
7
8 // targeting P9 (LE), six tests.
9 // p9 constants: mfvsrd
10 // p9 vars: xori, rldic, mtvsrdd, vslo, mfvsrd
11
12 /* results. */
13 /* { dg-final { scan-assembler-times {\mxori\M} 3 { target le } } } */
14 /* { dg-final { scan-assembler-times {\mrldic\M} 3 } } */
15 /* { dg-final { scan-assembler-times {\mmtvsrdd\M} 3 } } */
16 /* { dg-final { scan-assembler-times {\mvslo\M} 3 } } */
17 /* { dg-final { scan-assembler-times {\mmfvsrd\M} 6 { target le } } } */
18 /* { dg-final { scan-assembler-times {\mmfvsrd\M} 3 { target be } } } */
19 /* { dg-final { scan-assembler-times {\mmfvsrld\M} 3 { target be } } } */
20
21 #include <altivec.h>
22
23 unsigned long long
24 testbl_var (vector bool long long vbl2, signed int si)
25 {
26 return vec_extract (vbl2, si);
27 }
28
29 signed long long
30 testsl_var (vector signed long long vsl2, signed int si)
31 {
32 return vec_extract (vsl2, si);
33 }
34
35 unsigned long long
36 testul_var (vector unsigned long long vul2, signed int si)
37 {
38 return vec_extract (vul2, si);
39 }
40
41 unsigned long long
42 testbl_cst (vector bool long long vbl2)
43 {
44 return vec_extract (vbl2, 1);
45 }
46
47 signed long long
48 testsl_cst (vector signed long long vsl2)
49 {
50 return vec_extract (vsl2, 1);
51 }
52
53 unsigned long long
54 testul_cst (vector unsigned long vul2)
55 {
56 return vec_extract (vul2, 1);
57 }
58