1 /* { dg-do compile { target lp64 } } */
2 /* { dg-require-effective-target powerpc_p9vector_ok } */
3 /* { dg-options "-mdejagnu-cpu=power9 -O2" } */
5 /* Test to make sure VEXTU{B,H,W}{L,R}X is generated for various vector extract
6 operations for ISA 3.0 (-mcpu=power9). In addition, make sure that neither
7 of the the the old methods of doing vector extracts are done either by
8 explict stores to the stack or by using direct move instructions. */
13 extract_int_0 (vector
int a
)
16 int b
= vec_extract (a
, c
);
21 extract_int_3 (vector
int a
)
24 int b
= vec_extract (a
, c
);
29 extract_uint_0 (vector
unsigned int a
)
32 unsigned int b
= vec_extract (a
, c
);
37 extract_uint_3 (vector
unsigned int a
)
40 unsigned int b
= vec_extract (a
, c
);
45 extract_short_0 (vector
short a
)
48 short b
= vec_extract (a
, c
);
53 extract_short_7 (vector
short a
)
56 short b
= vec_extract (a
, c
);
61 extract_ushort_0 (vector
unsigned short a
)
64 unsigned short b
= vec_extract (a
, c
);
69 extract_ushort_7 (vector
unsigned short a
)
72 unsigned short b
= vec_extract (a
, c
);
77 extract_schar_0 (vector
signed char a
)
80 signed char b
= vec_extract (a
, c
);
85 extract_schar_15 (vector
signed char a
)
88 signed char b
= vec_extract (a
, c
);
93 extract_uchar_0 (vector
unsigned char a
)
96 unsigned char b
= vec_extract (a
, c
);
101 extract_uchar_15 (vector
unsigned char a
)
104 signed char b
= vec_extract (a
, c
);
109 extract_bool_char_0 (vector
bool char a
)
112 unsigned char b
= vec_extract (a
, c
);
117 extract_bool_int_0 (vector
bool int a
)
120 unsigned int b
= vec_extract (a
, c
);
125 extract_bool_short_int_0 (vector
bool short int a
)
128 unsigned short int b
= vec_extract (a
, c
);
132 /* { dg-final { scan-assembler "vextub\[lr\]x " } } */
133 /* { dg-final { scan-assembler "vextuh\[lr\]x " } } */
134 /* { dg-final { scan-assembler "vextuw\[lr\]x " } } */
135 /* { dg-final { scan-assembler "extsb " } } */
136 /* { dg-final { scan-assembler "extsh " } } */
137 /* { dg-final { scan-assembler "extsw " } } */
138 /* { dg-final { scan-assembler-not "m\[ft\]vsr" } } */
139 /* { dg-final { scan-assembler-not "stxvd2x " } } */
140 /* { dg-final { scan-assembler-not "stxv " } } */
141 /* { dg-final { scan-assembler-not "lwa " } } */
142 /* { dg-final { scan-assembler-not "lwz " } } */
143 /* { dg-final { scan-assembler-not "lha " } } */
144 /* { dg-final { scan-assembler-not "lhz " } } */