1 /* { dg-do run { target { powerpc*-*-linux* && lp64 } } } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-O2 -mvsx" } */
9 #define ELEMENTS -12345678L, 9L
10 #define SPLAT 0x0123456789ABCDE
12 vector
long sv
= (vector
long) { ELEMENTS
};
13 vector
long splat
= (vector
long) { SPLAT
, SPLAT
};
14 vector
long sv_global
, sp_global
;
15 static vector
long sv_static
, sp_static
;
16 static const int expected
[] = { ELEMENTS
};
18 extern void check (vector
long a
)
19 __attribute__((__noinline__
));
21 extern void check_splat (vector
long a
)
22 __attribute__((__noinline__
));
24 extern vector
long pack_reg (long a
, long b
)
25 __attribute__((__noinline__
));
27 extern vector
long pack_from_ptr (long *p_a
, long *p_b
)
28 __attribute__((__noinline__
));
30 extern vector
long pack_const (void)
31 __attribute__((__noinline__
));
33 extern void pack_ptr (vector
long *p
, long a
, long b
)
34 __attribute__((__noinline__
));
36 extern void pack_static (long a
, long b
)
37 __attribute__((__noinline__
));
39 extern void pack_global (long a
, long b
)
40 __attribute__((__noinline__
));
42 extern vector
long splat_reg (long a
)
43 __attribute__((__noinline__
));
45 extern vector
long splat_from_ptr (long *p
)
46 __attribute__((__noinline__
));
48 extern vector
long splat_const (void)
49 __attribute__((__noinline__
));
51 extern void splat_ptr (vector
long *p
, long a
)
52 __attribute__((__noinline__
));
54 extern void splat_static (long a
)
55 __attribute__((__noinline__
));
57 extern void splat_global (long a
)
58 __attribute__((__noinline__
));
65 for (i
= 0; i
< 2; i
++)
66 if (vec_extract (a
, i
) != expected
[i
])
71 check_splat (vector
long a
)
75 for (i
= 0; i
< 2; i
++)
76 if (vec_extract (a
, i
) != SPLAT
)
81 pack_reg (long a
, long b
)
83 return (vector
long) { a
, b
};
87 pack_from_ptr (long *p_a
, long *p_b
)
89 return (vector
long) { *p_a
, *p_b
};
95 return (vector
long) { ELEMENTS
};
99 pack_ptr (vector
long *p
, long a
, long b
)
101 *p
= (vector
long) { a
, b
};
105 pack_static (long a
, long b
)
107 sv_static
= (vector
long) { a
, b
};
111 pack_global (long a
, long b
)
113 sv_global
= (vector
long) { a
, b
};
119 return (vector
long) { a
, a
};
123 splat_from_ptr (long *p
)
125 return (vector
long) { *p
, *p
};
131 return (vector
long) { SPLAT
, SPLAT
};
135 splat_ptr (vector
long *p
, long a
)
137 *p
= (vector
long) { a
, a
};
141 splat_static (long a
)
143 sp_static
= (vector
long) { a
, a
};
147 splat_global (long a
)
149 sp_global
= (vector
long) { a
, a
};
154 vector
long sv2
, sv3
;
156 long mem2
[2] = { ELEMENTS
};
160 check (pack_reg (ELEMENTS
));
162 check (pack_from_ptr (&mem2
[0], &mem2
[1]));
164 check (pack_const ());
166 pack_ptr (&sv2
, ELEMENTS
);
169 pack_static (ELEMENTS
);
172 pack_global (ELEMENTS
);
177 check_splat (splat_reg (SPLAT
));
179 check_splat (splat_from_ptr (&mem
));
181 check_splat (splat_const ());
183 splat_ptr (&sv2
, SPLAT
);
186 splat_static (SPLAT
);
187 check_splat (sp_static
);
189 splat_global (SPLAT
);
190 check_splat (sp_global
);