1 /* Verify that overloaded built-ins for vec_merge* with char
2    inputs produce the right code.  */
3 
4 /* { dg-do compile } */
5 /* { dg-require-effective-target powerpc_altivec_ok } */
6 /* { dg-options "-maltivec -O2" } */
7 
8 #include <altivec.h>
9 
10 vector signed char
test_misc()11 test_misc () {
12 	vector signed char vsc1c = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
13 	vector signed char vsc2c = {9,10,11,12,13,14,15,16,0,1,2,3,4,5,6,7};
14 	return vec_mergel (vsc1c, vsc2c);
15 }
16 
17 vector bool char
testbc_l(vector bool char vbc2,vector bool char vbc3)18 testbc_l (vector bool char vbc2, vector bool char vbc3)
19 {
20   return vec_mergel (vbc2, vbc3);
21 }
22 
23 vector signed char
testsc_l(vector signed char vsc2,vector signed char vsc3)24 testsc_l (vector signed char vsc2, vector signed char vsc3)
25 {
26   return vec_mergel (vsc2, vsc3);
27 }
28 
29 vector unsigned char
testuc_l(vector unsigned char vuc2,vector unsigned char vuc3)30 testuc_l (vector unsigned char vuc2, vector unsigned char vuc3)
31 {
32   return vec_mergel (vuc2, vuc3);
33 }
34 
35 vector bool char
testbc_h(vector bool char vbc2,vector bool char vbc3)36 testbc_h (vector bool char vbc2, vector bool char vbc3)
37 {
38   return vec_mergeh (vbc2, vbc3);
39 }
40 
41 vector signed char
testsc_h(vector signed char vsc2,vector signed char vsc3)42 testsc_h (vector signed char vsc2, vector signed char vsc3)
43 {
44   return vec_mergeh (vsc2, vsc3);
45 }
46 
47 vector unsigned char
testuc_h(vector unsigned char vuc2,vector unsigned char vuc3)48 testuc_h (vector unsigned char vuc2, vector unsigned char vuc3)
49 {
50   return vec_mergeh (vuc2, vuc3);
51 }
52 
53 /* { dg-final { scan-assembler-times "vmrghb" 3 } } */
54 /* { dg-final { scan-assembler-times "vmrglb" 3 } } */
55 
56