xref: /openbsd-src/gnu/usr.bin/binutils/gdb/testsuite/gdb.arch/e500-abi.c (revision b725ae7711052a2233e31a66fefb8a752c388d7a)
1*b725ae77Skettenis #include <spe.h>
2*b725ae77Skettenis 
3*b725ae77Skettenis /* Test PowerPC SPU extensions.  */
4*b725ae77Skettenis 
5*b725ae77Skettenis #define vector __attribute__((vector_size(8)))
6*b725ae77Skettenis 
7*b725ae77Skettenis vector unsigned short f_vec;
8*b725ae77Skettenis vector short g_vec;
9*b725ae77Skettenis vector float h_vec;
10*b725ae77Skettenis vector float i_vec;
11*b725ae77Skettenis vector unsigned int l_vec;
12*b725ae77Skettenis vector int m_vec;
13*b725ae77Skettenis vector int n_vec;
14*b725ae77Skettenis 
15*b725ae77Skettenis /* dummy variables used in the testfile */
16*b725ae77Skettenis vector unsigned int a_vec_d = {1, 1};
17*b725ae77Skettenis vector int b_vec_d = {0, 0};
18*b725ae77Skettenis vector float c_vec_d = {1.0, 1.0};
19*b725ae77Skettenis vector unsigned int d_vec_d = {0, 0};
20*b725ae77Skettenis vector int e_vec_d = {1, 1};
21*b725ae77Skettenis vector unsigned short f_vec_d = {1, 1, 1, 1};
22*b725ae77Skettenis vector short g_vec_d = {1, 1, 1, 1};
23*b725ae77Skettenis vector float h_vec_d = {1.0, 1.0};
24*b725ae77Skettenis vector float i_vec_d = {2.0, 2.0};
25*b725ae77Skettenis vector unsigned int l_vec_d = {0, 0};
26*b725ae77Skettenis vector int m_vec_d = {0, 0};
27*b725ae77Skettenis 
28*b725ae77Skettenis 
29*b725ae77Skettenis vector int
vec_func(vector unsigned int a_vec_f,vector int b_vec_f,vector float c_vec_f,vector unsigned int d_vec_f,vector int e_vec_f,vector unsigned short f_vec_f,vector short g_vec_f,vector float h_vec_f,vector float i_vec_f,vector unsigned int l_vec_f,vector int m_vec_f)30*b725ae77Skettenis vec_func (vector unsigned int a_vec_f,
31*b725ae77Skettenis           vector int b_vec_f,
32*b725ae77Skettenis           vector float c_vec_f,
33*b725ae77Skettenis           vector unsigned int d_vec_f,
34*b725ae77Skettenis           vector int e_vec_f,
35*b725ae77Skettenis           vector unsigned short f_vec_f,
36*b725ae77Skettenis           vector short g_vec_f,
37*b725ae77Skettenis           vector float h_vec_f,
38*b725ae77Skettenis           vector float i_vec_f,
39*b725ae77Skettenis           vector unsigned int l_vec_f,
40*b725ae77Skettenis           vector int m_vec_f)
41*b725ae77Skettenis {
42*b725ae77Skettenis   vector int n_vec;
43*b725ae77Skettenis 
44*b725ae77Skettenis 
45*b725ae77Skettenis   int x,y,z;
46*b725ae77Skettenis   x = 2;
47*b725ae77Skettenis   y = 3;
48*b725ae77Skettenis 
49*b725ae77Skettenis   z = x + y;
50*b725ae77Skettenis   z++;
51*b725ae77Skettenis   n_vec = __ev_and(a_vec_f, b_vec_f);
52*b725ae77Skettenis   n_vec = __ev_or(c_vec_f, d_vec_f);
53*b725ae77Skettenis   n_vec = __ev_or(e_vec_f, f_vec_f);
54*b725ae77Skettenis   n_vec = __ev_and(g_vec_f, h_vec_f);
55*b725ae77Skettenis   n_vec = __ev_and(i_vec_f, l_vec_f);
56*b725ae77Skettenis   n_vec = __ev_or(m_vec_f, a_vec_f);
57*b725ae77Skettenis 
58*b725ae77Skettenis   return n_vec;
59*b725ae77Skettenis }
60*b725ae77Skettenis 
marker(void)61*b725ae77Skettenis void marker(void) {};
62*b725ae77Skettenis 
63*b725ae77Skettenis int
main(void)64*b725ae77Skettenis main (void)
65*b725ae77Skettenis {
66*b725ae77Skettenis   vector unsigned int a_vec;
67*b725ae77Skettenis   vector int b_vec;
68*b725ae77Skettenis   vector float c_vec;
69*b725ae77Skettenis   vector unsigned int d_vec;
70*b725ae77Skettenis   vector int e_vec;
71*b725ae77Skettenis 
72*b725ae77Skettenis   vector int res_vec;
73*b725ae77Skettenis 
74*b725ae77Skettenis   a_vec = (vector unsigned int)__ev_create_u64 ((uint64_t) 55);
75*b725ae77Skettenis   b_vec = __ev_create_s64 ((int64_t) 66);
76*b725ae77Skettenis   c_vec = (vector float) __ev_create_fs (3.14F, 2.18F);
77*b725ae77Skettenis   d_vec = (vector unsigned int) __ev_create_u32 ((uint32_t) 5, (uint32_t) 4);
78*b725ae77Skettenis   e_vec = (vector int) __ev_create_s32 ((int32_t) 5, (int32_t) 6);
79*b725ae77Skettenis   f_vec = (vector unsigned short) __ev_create_u16 ((uint16_t) 6, (uint16_t) 6, (uint16_t) 7, (uint16_t) 1);
80*b725ae77Skettenis   g_vec = (vector short) __ev_create_s16 ((int16_t) 6, (int16_t) 6, (int16_t) 7, (int16_t) 9);
81*b725ae77Skettenis   h_vec = (vector float) __ev_create_sfix32_fs (3.0F, 2.0F);
82*b725ae77Skettenis   i_vec = (vector float) __ev_create_ufix32_fs (3.0F, 2.0F);
83*b725ae77Skettenis   l_vec = (vector unsigned int) __ev_create_ufix32_u32 (3U, 5U);
84*b725ae77Skettenis   m_vec = (vector int) __ev_create_sfix32_s32 (6, 9);
85*b725ae77Skettenis 
86*b725ae77Skettenis   marker ();
87*b725ae77Skettenis 
88*b725ae77Skettenis #if 0
89*b725ae77Skettenis /* This line is useful for cut-n-paste from a gdb session. */
90*b725ae77Skettenis vec_func(a_vec,b_vec,c_vec,d_vec,e_vec,f_vec,g_vec,h_vec,i_vec,l_vec,m_vec)
91*b725ae77Skettenis #endif
92*b725ae77Skettenis 
93*b725ae77Skettenis   res_vec = vec_func (a_vec,  /* goes in r3 */
94*b725ae77Skettenis                       b_vec,  /* goes in r4 */
95*b725ae77Skettenis                       c_vec,  /* goes in r5 */
96*b725ae77Skettenis                       d_vec,  /* goes in r6 */
97*b725ae77Skettenis                       e_vec,  /* goes in r7 */
98*b725ae77Skettenis                       f_vec,  /* goes in r8 */
99*b725ae77Skettenis                       g_vec,  /* goes in r9 */
100*b725ae77Skettenis                       h_vec,  /* goes in r10 */
101*b725ae77Skettenis                       i_vec,  /* goes in stack */
102*b725ae77Skettenis                       l_vec,  /* goes in stack */
103*b725ae77Skettenis                       m_vec);  /* goes in stack */
104*b725ae77Skettenis 
105*b725ae77Skettenis   return 0;
106*b725ae77Skettenis }
107