altivec-varargs-1.c [plain text]
#include <stdarg.h>
#include <signal.h>
#include "altivec_check.h"
#define vector __attribute__((vector_size (16)))
const vector unsigned int v1 = {10,11,12,13};
const vector unsigned int v2 = {20,21,22,23};
const vector unsigned int v3 = {30,31,32,33};
const vector unsigned int v4 = {40,41,42,43};
void foo(vector unsigned int a, ...)
{
va_list args;
vector unsigned int v;
va_start (args, a);
if (memcmp (&a, &v1, sizeof (v)) != 0)
abort ();
v = va_arg (args, vector unsigned int);
if (memcmp (&v, &v2, sizeof (v)) != 0)
abort ();
v = va_arg (args, vector unsigned int);
if (memcmp (&v, &v3, sizeof (v)) != 0)
abort ();
v = va_arg (args, vector unsigned int);
if (memcmp (&v, &v4, sizeof (v)) != 0)
abort ();
va_end (args);
}
void bar(vector unsigned int a, ...)
{
va_list args;
vector unsigned int v;
int b;
va_start (args, a);
if (memcmp (&a, &v1, sizeof (v)) != 0)
abort ();
b = va_arg (args, int);
if (b != 2)
abort ();
v = va_arg (args, vector unsigned int);
if (memcmp (&v, &v2, sizeof (v)) != 0)
abort ();
v = va_arg (args, vector unsigned int);
if (memcmp (&v, &v3, sizeof (v)) != 0)
abort ();
va_end (args);
}
int main1(void)
{
foo ((vector unsigned int){10,11,12,13},
(vector unsigned int){20,21,22,23},
(vector unsigned int){30,31,32,33},
(vector unsigned int){40,41,42,43});
bar ((vector unsigned int){10,11,12,13}, 2,
(vector unsigned int){20,21,22,23},
(vector unsigned int){30,31,32,33});
return 0;
}
int main (void)
{
altivec_check ();
return main1 ();
}