1 /* { dg-do compile { target { powerpc*-*-* } } } */
2 /* { dg-skip-if "" { powerpc*-*-darwin* } { "*" } { "" } } */
3 /* { dg-require-effective-target powerpc_vsx_ok } */
4 /* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power7" } } */
5 /* { dg-options "-O2 -mcpu=power7" } */
7 /* Test simple extract/insert/slat operations. Make sure all types are
8 supported with various options. */
12 double extract_df_0_reg (vector
double p
) { return vec_extract (p
, 0); }
13 double extract_df_1_reg (vector
double p
) { return vec_extract (p
, 1); }
14 double extract_df_n_reg (vector
double p
, int n
) { return vec_extract (p
, n
); }
16 double extract_df_0_mem (vector
double *p
) { return vec_extract (*p
, 0); }
17 double extract_df_1_mem (vector
double *p
) { return vec_extract (*p
, 1); }
18 double extract_df_n_mem (vector
double *p
, int n
) { return vec_extract (*p
, n
); }
20 vector
double insert_df_0 (vector
double p
, double x
) { return vec_insert (x
, p
, 0); }
21 vector
double insert_df_1 (vector
double p
, double x
) { return vec_insert (x
, p
, 1); }
22 vector
double insert_df_n (vector
double p
, double x
, int n
) { return vec_insert (x
, p
, n
); }
24 vector
double splat_df_reg (double x
) { return vec_splats (x
); }
25 vector
double splat_df_mem (double *x
) { return vec_splats (*x
); }
33 ll
extract_di_0_reg (vector ll p
) { return vec_extract (p
, 0); }
34 ll
extract_di_1_reg (vector ll p
) { return vec_extract (p
, 1); }
35 ll
extract_di_n_reg (vector ll p
, int n
) { return vec_extract (p
, n
); }
37 ll
extract_di_0_mem (vector ll
*p
) { return vec_extract (*p
, 0); }
38 ll
extract_di_1_mem (vector ll
*p
) { return vec_extract (*p
, 1); }
39 ll
extract_di_n_mem (vector ll
*p
, int n
) { return vec_extract (*p
, n
); }
41 vector ll
insert_di_0 (vector ll p
, ll x
) { return vec_insert (x
, p
, 0); }
42 vector ll
insert_di_1 (vector ll p
, ll x
) { return vec_insert (x
, p
, 1); }
43 vector ll
insert_di_n (vector ll p
, ll x
, int n
) { return vec_insert (x
, p
, n
); }
45 vector ll
splat_di_reg (ll x
) { return vec_splats (x
); }
46 vector ll
splat_di_mem (ll
*x
) { return vec_splats (*x
); }
48 float extract_sf_0_reg (vector
float p
) { return vec_extract (p
, 0); }
49 float extract_sf_3_reg (vector
float p
) { return vec_extract (p
, 3); }
50 float extract_sf_n_reg (vector
float p
, int n
) { return vec_extract (p
, n
); }
52 float extract_sf_0_mem (vector
float *p
) { return vec_extract (*p
, 0); }
53 float extract_sf_3_mem (vector
float *p
) { return vec_extract (*p
, 3); }
54 float extract_sf_n_mem (vector
float *p
, int n
) { return vec_extract (*p
, n
); }
56 vector
float insert_sf_0 (vector
float p
, float x
) { return vec_insert (x
, p
, 0); }
57 vector
float insert_sf_3 (vector
float p
, float x
) { return vec_insert (x
, p
, 3); }
58 vector
float insert_sf_n (vector
float p
, float x
, int n
) { return vec_insert (x
, p
, n
); }
60 vector
float splat_sf_reg (float x
) { return vec_splats (x
); }
61 vector
float splat_sf_mem (float *x
) { return vec_splats (*x
); }
63 int extract_si_0_reg (vector
int p
) { return vec_extract (p
, 0); }
64 int extract_si_3_reg (vector
int p
) { return vec_extract (p
, 3); }
65 int extract_si_n_reg (vector
int p
, int n
) { return vec_extract (p
, n
); }
67 int extract_si_0_mem (vector
int *p
) { return vec_extract (*p
, 0); }
68 int extract_si_3_mem (vector
int *p
) { return vec_extract (*p
, 3); }
69 int extract_si_n_mem (vector
int *p
, int n
) { return vec_extract (*p
, n
); }
71 vector
int insert_si_0 (vector
int p
, int x
) { return vec_insert (x
, p
, 0); }
72 vector
int insert_si_3 (vector
int p
, int x
) { return vec_insert (x
, p
, 3); }
73 vector
int insert_si_n (vector
int p
, int x
, int n
) { return vec_insert (x
, p
, n
); }
75 vector
int splat_si_reg (int x
) { return vec_splats (x
); }
76 vector
int splat_si_mem (int *x
) { return vec_splats (*x
); }
78 unsigned int extract_usi_0_reg (vector
unsigned int p
) { return vec_extract (p
, 0); }
79 unsigned int extract_usi_3_reg (vector
unsigned int p
) { return vec_extract (p
, 3); }
80 unsigned int extract_usi_n_reg (vector
unsigned int p
, int n
) { return vec_extract (p
, n
); }
82 unsigned int extract_usi_0_mem (vector
unsigned int *p
) { return vec_extract (*p
, 0); }
83 unsigned int extract_usi_3_mem (vector
unsigned int *p
) { return vec_extract (*p
, 3); }
84 unsigned int extract_usi_n_mem (vector
unsigned int *p
, int n
) { return vec_extract (*p
, n
); }
86 vector
unsigned int insert_usi_0 (vector
unsigned int p
, unsigned int x
) { return vec_insert (x
, p
, 0); }
87 vector
unsigned int insert_usi_3 (vector
unsigned int p
, unsigned int x
) { return vec_insert (x
, p
, 3); }
88 vector
unsigned int insert_usi_n (vector
unsigned int p
, unsigned int x
, int n
) { return vec_insert (x
, p
, n
); }
90 vector
unsigned int splat_usi_reg (unsigned int x
) { return vec_splats (x
); }
91 vector
unsigned int splat_usi_mem (unsigned int *x
) { return vec_splats (*x
); }
93 short extract_hi_0_reg (vector
short p
) { return vec_extract (p
, 0); }
94 short extract_hi_7_reg (vector
short p
) { return vec_extract (p
, 7); }
95 short extract_hi_n_reg (vector
short p
, int n
) { return vec_extract (p
, n
); }
97 short extract_hi_0_mem (vector
short *p
) { return vec_extract (*p
, 0); }
98 short extract_hi_7_mem (vector
short *p
) { return vec_extract (*p
, 7); }
99 short extract_hi_n_mem (vector
short *p
, int n
) { return vec_extract (*p
, n
); }
101 vector
short insert_hi_0 (vector
short p
, short x
) { return vec_insert (x
, p
, 0); }
102 vector
short insert_hi_7 (vector
short p
, short x
) { return vec_insert (x
, p
, 7); }
103 vector
short insert_hi_n (vector
short p
, short x
, int n
) { return vec_insert (x
, p
, n
); }
105 vector
short splat_hi_reg (short x
) { return vec_splats (x
); }
106 vector
short splat_hi_mem (short *x
) { return vec_splats (*x
); }
108 unsigned short extract_uhi_0_reg (vector
unsigned short p
) { return vec_extract (p
, 0); }
109 unsigned short extract_uhi_7_reg (vector
unsigned short p
) { return vec_extract (p
, 7); }
110 unsigned short extract_uhi_n_reg (vector
unsigned short p
, int n
) { return vec_extract (p
, n
); }
112 unsigned short extract_uhi_0_mem (vector
unsigned short *p
) { return vec_extract (*p
, 0); }
113 unsigned short extract_uhi_7_mem (vector
unsigned short *p
) { return vec_extract (*p
, 7); }
114 unsigned short extract_uhi_n_mem (vector
unsigned short *p
, int n
) { return vec_extract (*p
, n
); }
116 vector
unsigned short insert_uhi_0 (vector
unsigned short p
, unsigned short x
) { return vec_insert (x
, p
, 0); }
117 vector
unsigned short insert_uhi_7 (vector
unsigned short p
, unsigned short x
) { return vec_insert (x
, p
, 7); }
118 vector
unsigned short insert_uhi_n (vector
unsigned short p
, unsigned short x
, int n
) { return vec_insert (x
, p
, n
); }
120 vector
unsigned short splat_uhi_reg (unsigned short x
) { return vec_splats (x
); }
121 vector
unsigned short splat_uhi_mem (unsigned short *x
) { return vec_splats (*x
); }
123 signed char extract_qi_0_reg (vector
signed char p
) { return vec_extract (p
, 0); }
124 signed char extract_qi_1_reg5 (vector
signed char p
) { return vec_extract (p
, 15); }
125 signed char extract_qi_n_reg (vector
signed char p
, int n
) { return vec_extract (p
, n
); }
127 signed char extract_qi_0_mem (vector
signed char *p
) { return vec_extract (*p
, 0); }
128 signed char extract_qi_1_mem5 (vector
signed char *p
) { return vec_extract (*p
, 15); }
129 signed char extract_qi_n_mem (vector
signed char *p
, int n
) { return vec_extract (*p
, n
); }
131 vector
signed char insert_qi_0 (vector
signed char p
, signed char x
) { return vec_insert (x
, p
, 0); }
132 vector
signed char insert_qi_15 (vector
signed char p
, signed char x
) { return vec_insert (x
, p
, 15); }
133 vector
signed char insert_qi_n (vector
signed char p
, signed char x
, int n
) { return vec_insert (x
, p
, n
); }
135 vector
signed char splat_qi_reg (signed char x
) { return vec_splats (x
); }
136 vector
signed char splat_qi_mem (signed char *x
) { return vec_splats (*x
); }
138 unsigned char extract_uqi_0_reg (vector
unsigned char p
) { return vec_extract (p
, 0); }
139 unsigned char extract_uqi_1_reg5 (vector
unsigned char p
) { return vec_extract (p
, 15); }
140 unsigned char extract_uqi_n_reg (vector
unsigned char p
, int n
) { return vec_extract (p
, n
); }
142 unsigned char extract_uqi_0_mem (vector
unsigned char *p
) { return vec_extract (*p
, 0); }
143 unsigned char extract_uqi_1_mem5 (vector
unsigned char *p
) { return vec_extract (*p
, 15); }
144 unsigned char extract_uqi_n_mem (vector
unsigned char *p
, int n
) { return vec_extract (*p
, n
); }
146 vector
unsigned char insert_uqi_0 (vector
unsigned char p
, unsigned char x
) { return vec_insert (x
, p
, 0); }
147 vector
unsigned char insert_uqi_15 (vector
unsigned char p
, unsigned char x
) { return vec_insert (x
, p
, 15); }
148 vector
unsigned char insert_uqi_n (vector
unsigned char p
, unsigned char x
, int n
) { return vec_insert (x
, p
, n
); }
150 vector
unsigned char splat_uqi_reg (unsigned char x
) { return vec_splats (x
); }
151 vector
unsigned char splat_uqi_mem (unsigned char *x
) { return vec_splats (*x
); }