1 /* Verify that overloaded built-ins for vec_splat with char
2 inputs produce the right code. */
4 /* { dg-do compile } */
5 /* { dg-options "-maltivec -O2" } */
6 /* { dg-require-effective-target powerpc_altivec } */
10 vector
bool char testb_0 (vector
bool char x
) { return vec_splat (x
, 0b00000); }
11 vector
bool char testb_1 (vector
bool char x
) { return vec_splat (x
, 0b00001); }
12 vector
bool char testb_2 (vector
bool char x
) { return vec_splat (x
, 0b00010); }
13 vector
bool char testb_4 (vector
bool char x
) { return vec_splat (x
, 0b00100); }
14 vector
bool char testb_8 (vector
bool char x
) { return vec_splat (x
, 0b01000); }
16 vector
signed char tests_0 (vector
signed char x
) { return vec_splat (x
, 0b00000); }
17 vector
signed char tests_1 (vector
signed char x
) { return vec_splat (x
, 0b00001); }
18 vector
signed char tests_2 (vector
signed char x
) { return vec_splat (x
, 0b00010); }
19 vector
signed char tests_4 (vector
signed char x
) { return vec_splat (x
, 0b00100); }
20 vector
signed char tests_8 (vector
signed char x
) { return vec_splat (x
, 0b01000); }
22 vector
unsigned char testu_0 (vector
unsigned char x
) { return vec_splat (x
, 0b00000); }
23 vector
unsigned char testu_1 (vector
unsigned char x
) { return vec_splat (x
, 0b00001); }
24 vector
unsigned char testu_2 (vector
unsigned char x
) { return vec_splat (x
, 0b00010); }
25 vector
unsigned char testu_4 (vector
unsigned char x
) { return vec_splat (x
, 0b00100); }
26 vector
unsigned char testu_8 (vector
unsigned char x
) { return vec_splat (x
, 0b01000); }
28 /* Similar tests as above, but the source vector is a known constant. */
29 const vector
bool char by
= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};
30 const vector
signed char sy
= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};
31 const vector
unsigned char uy
= {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p'};
33 vector
bool char test_bc (vector
bool char x
) { return vec_splat (by
, 0b00010); }
34 vector
signed char test_sc (vector
signed char x
) { return vec_splat (sy
, 0b00011); }
35 vector
unsigned char test_uc (vector
unsigned char x
) { return vec_splat (uy
, 0b00110); }
37 // vec_splat() using variable vectors should generate the vspltb instruction.
38 /* { dg-final { scan-assembler-times "vspltb" 15 } } */
39 // vec_splat() using a constant vector will generate a load or a splat immediate byte.
40 /* { dg-final { scan-assembler-times {\mlvx\M|\mlxvw4x\M|\mxxspltib\M} 3 } } */