1 /* { dg-do run { target { powerpc*-*-linux* } } } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-O2 -mvsx" } */
9 #define ELEMENTS -1.0f, 2.0f, 0.0f, -1234.0f
12 vector
float sv
= (vector
float) { ELEMENTS
};
13 vector
float splat
= (vector
float) { SPLAT
, SPLAT
, SPLAT
, SPLAT
};
14 vector
float sv_global
, sp_global
;
15 static vector
float sv_static
, sp_static
;
16 static const float expected
[] = { ELEMENTS
};
18 extern void check (vector
float a
)
19 __attribute__((__noinline__
));
21 extern void check_splat (vector
float a
)
22 __attribute__((__noinline__
));
24 extern vector
float pack_reg (float a
, float b
, float c
, float d
)
25 __attribute__((__noinline__
));
27 extern vector
float pack_from_ptr (float *p_a
, float *p_b
,
28 float *p_c
, float *p_d
)
29 __attribute__((__noinline__
));
31 extern vector
float pack_const (void)
32 __attribute__((__noinline__
));
34 extern void pack_ptr (vector
float *p
, float a
, float b
, float c
, float d
)
35 __attribute__((__noinline__
));
37 extern void pack_static (float a
, float b
, float c
, float d
)
38 __attribute__((__noinline__
));
40 extern void pack_global (float a
, float b
, float c
, float d
)
41 __attribute__((__noinline__
));
43 extern vector
float splat_reg (float a
)
44 __attribute__((__noinline__
));
46 extern vector
float splat_from_ptr (float *p
)
47 __attribute__((__noinline__
));
49 extern vector
float splat_const (void)
50 __attribute__((__noinline__
));
52 extern void splat_ptr (vector
float *p
, float a
)
53 __attribute__((__noinline__
));
55 extern void splat_static (float a
)
56 __attribute__((__noinline__
));
58 extern void splat_global (float a
)
59 __attribute__((__noinline__
));
62 check (vector
float a
)
66 for (i
= 0; i
< 4; i
++)
67 if (vec_extract (a
, i
) != expected
[i
])
72 check_splat (vector
float a
)
76 for (i
= 0; i
< 4; i
++)
77 if (vec_extract (a
, i
) != SPLAT
)
82 pack_reg (float a
, float b
, float c
, float d
)
84 return (vector
float) { a
, b
, c
, d
};
88 pack_from_ptr (float *p_a
, float *p_b
, float *p_c
, float *p_d
)
90 return (vector
float) { *p_a
, *p_b
, *p_c
, *p_d
};
96 return (vector
float) { ELEMENTS
};
100 pack_ptr (vector
float *p
, float a
, float b
, float c
, float d
)
102 *p
= (vector
float) { a
, b
, c
, d
};
106 pack_static (float a
, float b
, float c
, float d
)
108 sv_static
= (vector
float) { a
, b
, c
, d
};
112 pack_global (float a
, float b
, float c
, float d
)
114 sv_global
= (vector
float) { a
, b
, c
, d
};
120 return (vector
float) { a
, a
, a
, a
};
124 splat_from_ptr (float *p
)
126 return (vector
float) { *p
, *p
, *p
, *p
};
132 return (vector
float) { SPLAT
, SPLAT
, SPLAT
, SPLAT
};
136 splat_ptr (vector
float *p
, float a
)
138 *p
= (vector
float) { a
, a
, a
, a
};
142 splat_static (float a
)
144 sp_static
= (vector
float) { a
, a
, a
, a
};
148 splat_global (float a
)
150 sp_global
= (vector
float) { a
, a
, a
, a
};
155 vector
float sv2
, sv3
;
157 float mem2
[4] = { ELEMENTS
};
161 check (pack_reg (ELEMENTS
));
163 check (pack_from_ptr (&mem2
[0], &mem2
[1], &mem2
[2], &mem2
[3]));
165 check (pack_const ());
167 pack_ptr (&sv2
, ELEMENTS
);
170 pack_static (ELEMENTS
);
173 pack_global (ELEMENTS
);
178 check_splat (splat_reg (SPLAT
));
180 check_splat (splat_from_ptr (&mem
));
182 check_splat (splat_const ());
184 splat_ptr (&sv2
, SPLAT
);
187 splat_static (SPLAT
);
188 check_splat (sp_static
);
190 splat_global (SPLAT
);
191 check_splat (sp_global
);