1 /* { dg-do run { target powerpc*-*-* } } */
2 /* { dg-require-effective-target powerpc_altivec_ok } */
3 /* { dg-options "-maltivec" } */
4 /* Test the vec_extract VMX intrinsics. */
6 #include "altivec_check.h"
8 extern void abort (void);
10 vector int a = {0, 1, 2, 3};
11 vector short b = {0, 1, 2, 3, 4, 5, 6, 7};
13 int f(vector int a, int b)
15 return vec_extract (a, b);
20 return vec_extract (a, 0);
24 return vec_extract (a, 1);
28 return vec_extract (a, 2);
32 return vec_extract (a, 3);
36 return vec_extract (a, 4);
39 int g(vector short a, int b)
41 return vec_extract (a, b);
44 int g0 (vector short a)
46 return vec_extract (a, 0);
48 int g1 (vector short a)
50 return vec_extract (a, 1);
52 int g2 (vector short a)
54 return vec_extract (a, 2);
56 int g3 (vector short a)
58 return vec_extract (a, 3);
61 int g4 (vector short a)
63 return vec_extract (a, 4);
65 int g5 (vector short a)
67 return vec_extract (a, 5);
69 int g6 (vector short a)
71 return vec_extract (a, 6);
73 int g7 (vector short a)
75 return vec_extract (a, 7);
77 int g8 (vector short a)
79 return vec_extract (a, 8);
81 int main1(void) __attribute__((noinline));
85 /* Check vec_extract with a non constant element numbering */
88 if (f(a, i) != (i&0x3))
92 /* Check vec_extract with a constant element numbering */
101 /* Check that vec_extract works with a constant element higher than
102 the number of elements. */
106 /* Check vec_extract with a non constant element numbering */
109 if (g(b, i) != (i&0x7))
113 /* Check vec_extract with a constant element numbering */
130 /* Check that vec_extract works with a constant element higher than
131 the number of elements. */
140 altivec_check(); /* Exits if AltiVec not supported */