1 /* { dg-do compile { target { powerpc64*-*-* && lp64 } } } */
2 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
3 /* { dg-require-effective-target powerpc_p9vector_ok } */
4 /* { dg-options "-mcpu=power9 -O2" } */
6 /* Test to make sure VEXTU{B,H,W}{L,R}X is generated for various vector extract
7 operations for ISA 3.0 (-mcpu=power9). In addition, make sure that neither
8 of the the the old methods of doing vector extracts are done either by
9 explict stores to the stack or by using direct move instructions. */
14 extract_int_0 (vector
int a
)
17 int b
= vec_extract (a
, c
);
22 extract_int_3 (vector
int a
)
25 int b
= vec_extract (a
, c
);
30 extract_uint_0 (vector
unsigned int a
)
33 unsigned int b
= vec_extract (a
, c
);
38 extract_uint_3 (vector
unsigned int a
)
41 unsigned int b
= vec_extract (a
, c
);
46 extract_short_0 (vector
short a
)
49 short b
= vec_extract (a
, c
);
54 extract_short_7 (vector
short a
)
57 short b
= vec_extract (a
, c
);
62 extract_ushort_0 (vector
unsigned short a
)
65 unsigned short b
= vec_extract (a
, c
);
70 extract_ushort_7 (vector
unsigned short a
)
73 unsigned short b
= vec_extract (a
, c
);
78 extract_schar_0 (vector
signed char a
)
81 signed char b
= vec_extract (a
, c
);
86 extract_schar_15 (vector
signed char a
)
89 signed char b
= vec_extract (a
, c
);
94 extract_uchar_0 (vector
unsigned char a
)
97 unsigned char b
= vec_extract (a
, c
);
102 extract_uchar_15 (vector
unsigned char a
)
105 signed char b
= vec_extract (a
, c
);
110 extract_bool_char_0 (vector
bool char a
)
113 unsigned char b
= vec_extract (a
, c
);
118 extract_bool_int_0 (vector
bool int a
)
121 unsigned int b
= vec_extract (a
, c
);
126 extract_bool_short_int_0 (vector
bool short int a
)
129 unsigned short int b
= vec_extract (a
, c
);
133 /* { dg-final { scan-assembler "vextub\[lr\]x " } } */
134 /* { dg-final { scan-assembler "vextuh\[lr\]x " } } */
135 /* { dg-final { scan-assembler "vextuw\[lr\]x " } } */
136 /* { dg-final { scan-assembler "extsb " } } */
137 /* { dg-final { scan-assembler "extsh " } } */
138 /* { dg-final { scan-assembler "extsw " } } */
139 /* { dg-final { scan-assembler-not "m\[ft\]vsr" } } */
140 /* { dg-final { scan-assembler-not "stxvd2x " } } */
141 /* { dg-final { scan-assembler-not "stxv " } } */
142 /* { dg-final { scan-assembler-not "lwa " } } */
143 /* { dg-final { scan-assembler-not "lwz " } } */
144 /* { dg-final { scan-assembler-not "lha " } } */
145 /* { dg-final { scan-assembler-not "lhz " } } */