1 /* { dg-do run { target int128 } } */
2 /* { dg-require-effective-target vsx_hw } */
3 /* { dg-options "-mvsx" } */
5 /* This test should run the same on any target that supports vsx
6 instructions. Intentionally not specifying cpu in order to test
7 all code generation paths. */
11 extern void abort (void);
13 #define CONST0 (31415926539LL)
14 #define CONST1 (2 * 31415926539LL)
15 #define CONST2 (3 * 31415926539LL)
16 #define CONST3 (4 * 31415926539LL)
17 #define CONST4 (5 * 31415926539LL)
18 #define CONST5 (6 * 31415926539LL)
19 #define CONST6 (7 * 31415926539LL)
20 #define CONST7 (8 * 31415926539LL)
22 /* Test that indices > length of vector are applied modulo the vector
25 /* Test for vector residing in register. */
26 vector
unsigned long long int
27 e0 (vector
unsigned long long int v
, unsigned long long int x
)
29 return vec_insert (x
, v
, 0);
32 vector
unsigned long long int
33 e3 (vector
unsigned long long int v
, unsigned long long int x
)
35 return vec_insert (x
, v
, 3);
38 /* Test for vector residing in memory. */
39 vector
unsigned long long int
40 me0 (vector
unsigned long long int *vp
, unsigned long long int x
)
42 return vec_insert (x
, *vp
, 0);
45 vector
unsigned long long int
46 me3 (vector
unsigned long long int *vp
, unsigned long long int x
)
48 return vec_insert (x
, *vp
, 3);
51 /* Test the same with variable indices. */
53 /* Test for variable selector and vector residing in register. */
54 __attribute__((noinline
))
55 vector
unsigned long long int
56 ei (vector
unsigned long long int v
, int i
, unsigned long long int x
)
58 return vec_insert (x
, v
, i
);
61 /* Test for variable selector and vector residing in memory. */
62 __attribute__((noinline
))
63 vector
unsigned long long int
64 mei (vector
unsigned long long int *vp
, int i
, unsigned long long int x
)
66 return vec_insert (x
, *vp
, i
);
69 int main (int argc
, char *argv
[]) {
70 vector
unsigned long long int dv
= { CONST0
, CONST1
};
71 unsigned long long int d
;
81 dv
= me0 (&dv
, CONST4
);
85 dv
= me3 (&dv
, CONST3
);
89 dv
= ei (dv
, 0, CONST5
);
93 dv
= ei (dv
, 1, CONST2
);
97 dv
= ei (dv
, 2, CONST3
);
101 dv
= ei (dv
, 3, CONST6
);
102 if (dv
[1] != CONST6
)
105 dv
= mei (&dv
, 0, CONST1
);
106 if (dv
[0] != CONST1
)
109 dv
= mei (&dv
, 1, CONST3
);
110 if (dv
[1] != CONST3
)
113 dv
= mei (&dv
, 2, CONST1
);
114 if (dv
[0] != CONST1
)
117 dv
= mei (&dv
, 3, CONST2
);
118 if (dv
[1] != CONST2
)