diff options
Diffstat (limited to 'gcc/testsuite/gcc.apple/apple-altivec-abi.c')
-rw-r--r-- | gcc/testsuite/gcc.apple/apple-altivec-abi.c | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/gcc/testsuite/gcc.apple/apple-altivec-abi.c b/gcc/testsuite/gcc.apple/apple-altivec-abi.c new file mode 100644 index 00000000000..264791801c9 --- /dev/null +++ b/gcc/testsuite/gcc.apple/apple-altivec-abi.c @@ -0,0 +1,66 @@ +/* APPLE LOCAL file AltiVec */ +/* { dg-do run { target powerpc*-*-* } } */ +/* { dg-options "-faltivec" } */ + +#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, /* gpr3-gpr10 in registers */ + VSI v7, + VSI v8, + VSI v9, + VSI v10, + VSI v11, + VSI v12, + VSI v13, /* All in v2-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; +} |