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