blob: 75697e03623e163e91ce495b3eff547aef4c1bd4 [file] [log] [blame]
/* { dg-do run { target lp64 } } */
/* { dg-require-effective-target vsx_hw } */
/* { dg-options "-O2 -mvsx" } */
#include <stdlib.h>
#include <stddef.h>
#include <altivec.h>
#define ELEMENTS -12345678L, 9L
#define SPLAT 0x0123456789ABCDE
vector long sv = (vector long) { ELEMENTS };
vector long splat = (vector long) { SPLAT, SPLAT };
vector long sv_global, sp_global;
static vector long sv_static, sp_static;
static const int expected[] = { ELEMENTS };
extern void check (vector long a)
__attribute__((__noinline__));
extern void check_splat (vector long a)
__attribute__((__noinline__));
extern vector long pack_reg (long a, long b)
__attribute__((__noinline__));
extern vector long pack_from_ptr (long *p_a, long *p_b)
__attribute__((__noinline__));
extern vector long pack_const (void)
__attribute__((__noinline__));
extern void pack_ptr (vector long *p, long a, long b)
__attribute__((__noinline__));
extern void pack_static (long a, long b)
__attribute__((__noinline__));
extern void pack_global (long a, long b)
__attribute__((__noinline__));
extern vector long splat_reg (long a)
__attribute__((__noinline__));
extern vector long splat_from_ptr (long *p)
__attribute__((__noinline__));
extern vector long splat_const (void)
__attribute__((__noinline__));
extern void splat_ptr (vector long *p, long a)
__attribute__((__noinline__));
extern void splat_static (long a)
__attribute__((__noinline__));
extern void splat_global (long a)
__attribute__((__noinline__));
void
check (vector long a)
{
size_t i;
for (i = 0; i < 2; i++)
if (vec_extract (a, i) != expected[i])
abort ();
}
void
check_splat (vector long a)
{
size_t i;
for (i = 0; i < 2; i++)
if (vec_extract (a, i) != SPLAT)
abort ();
}
vector long
pack_reg (long a, long b)
{
return (vector long) { a, b };
}
vector long
pack_from_ptr (long *p_a, long *p_b)
{
return (vector long) { *p_a, *p_b };
}
vector long
pack_const (void)
{
return (vector long) { ELEMENTS };
}
void
pack_ptr (vector long *p, long a, long b)
{
*p = (vector long) { a, b };
}
void
pack_static (long a, long b)
{
sv_static = (vector long) { a, b };
}
void
pack_global (long a, long b)
{
sv_global = (vector long) { a, b };
}
vector long
splat_reg (long a)
{
return (vector long) { a, a };
}
vector long
splat_from_ptr (long *p)
{
return (vector long) { *p, *p };
}
vector long
splat_const (void)
{
return (vector long) { SPLAT, SPLAT };
}
void
splat_ptr (vector long *p, long a)
{
*p = (vector long) { a, a };
}
void
splat_static (long a)
{
sp_static = (vector long) { a, a };
}
void
splat_global (long a)
{
sp_global = (vector long) { a, a };
}
int main (void)
{
vector long sv2, sv3;
long mem = SPLAT;
long mem2[2] = { ELEMENTS };
check (sv);
check (pack_reg (ELEMENTS));
check (pack_from_ptr (&mem2[0], &mem2[1]));
check (pack_const ());
pack_ptr (&sv2, ELEMENTS);
check (sv2);
pack_static (ELEMENTS);
check (sv_static);
pack_global (ELEMENTS);
check (sv_global);
check_splat (splat);
check_splat (splat_reg (SPLAT));
check_splat (splat_from_ptr (&mem));
check_splat (splat_const ());
splat_ptr (&sv2, SPLAT);
check_splat (sv2);
splat_static (SPLAT);
check_splat (sp_static);
splat_global (SPLAT);
check_splat (sp_global);
return 0;
}