apple-altivec-abi.c [plain text]
#include <stdio.h>
typedef vector signed int VSI;
VSI VI(
VSI v2,
int gpr3,
VSI v3,
int gpr4,
VSI v4,
int gpr5,
VSI v5,
int gpr6,
int gpr7,
int gpr8,
int gpr9,
VSI v6,
int gpr10,
VSI v7,
VSI v8,
VSI v9,
VSI v10,
VSI v11,
VSI v12,
VSI v13,
volatile VSI v14,
int gpr11,
int gpr12,
int gpr13,
int gpr14,
VSI v15,
VSI v16, int* sum)
{
*sum = gpr3 + gpr4 + gpr5 + gpr6 + gpr7 + gpr8 + gpr9 + gpr10 + gpr11 + gpr12 + gpr13 + gpr14;
return v2+v3+v4+v5+v6+v7+v8+v9+v10+v11+v12+v13+v14+v15+v16;
}
extern void abort();
int main()
{
union u {
VSI uv;
int val[4];
} union_var;
int i;
int sum;
union_var.uv =
VI((VSI){1,1,1,1},3,(VSI){1,1,1,1},4,(VSI){1,1,1,1},5,(VSI){1,1,1,1},6,7,8,9,
(VSI){1,1,1,1},10,(VSI){1,1,1,1},(VSI){1,1,1,1},(VSI){1,1,1,1},(VSI){1,1,1,1},
(VSI){1,1,1,1},(VSI){1,1,1,1},(VSI){1,1,1,1},(VSI){1,1,1,1},11,12,13,14,
(VSI){1,1,1,1},(VSI){1,1,1,1}, &sum);
if (sum != 102)
abort();
for (i=0; i < 4; i++)
if (union_var.val[i] != 15)
abort();
return 0;
}