| |
| /* { dg-do run } */ |
| /* { dg-options "-O3" } */ |
| |
| extern void abort (void); |
| |
| #include "vect-fp.x" |
| |
| |
| #define DEFN_SETV(type) \ |
| void set_vector_##type (pR##type a, type n) \ |
| { \ |
| int i; \ |
| for (i=0; i<16; i++) \ |
| a[i] = n; \ |
| } |
| |
| #define DEFN_CHECKV(type) \ |
| void check_vector_##type (pR##type a, pR##type vec) \ |
| { \ |
| int i; \ |
| for (i=0; i<16; i++) \ |
| if (a[i] != vec[i]) \ |
| abort (); \ |
| } |
| |
| #define TEST2(fname, type) \ |
| set_vector_##type (a##type, 0.0); \ |
| fname##_##type (a##type, b##type); \ |
| check_vector_##type (a##type, fname##_##type##_vector); |
| |
| #define TEST3(fname, type) \ |
| set_vector_##type (a##type, 0.0); \ |
| fname##_##type (a##type, b##type, c##type); \ |
| check_vector_##type (a##type, fname##_##type##_vector); |
| |
| #define TEST(fname, N) \ |
| TEST##N(fname, F32); \ |
| TEST##N(fname, F64); |
| |
| DEFN_SETV (F32) |
| DEFN_SETV (F64) |
| |
| DEFN_CHECKV (F32) |
| DEFN_CHECKV (F64) |
| |
| int main (void) |
| { |
| F32 aF32[16]; |
| F32 bF32[16]; |
| F32 cF32[16]; |
| |
| F64 aF64[16]; |
| F64 bF64[16]; |
| F64 cF64[16]; |
| int i; |
| |
| F32 add_F32_vector[] = { 3.0f, 5.0f, 7.0f, 9.0f, 11.0f, |
| 13.0f, 15.0f, 17.0f, 19.0f, |
| 21.0f, 23.0f, 25.0f, 27.0f, |
| 29.0f, 31.0f, 33.0f }; |
| |
| F64 add_F64_vector[] = { 3.0, 5.0, 7.0, 9.0, 11.0, |
| 13.0, 15.0, 17.0, 19.0, |
| 21.0, 23.0, 25.0, 27.0, |
| 29.0, 31.0, 33.0 }; |
| |
| F32 sub_F32_vector[] = { -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, |
| -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, |
| -1.0f, -1.0f, -1.0f, -1.0f, -1.0f, |
| -1.0f }; |
| |
| F64 sub_F64_vector[] = { -1.0, -1.0, -1.0, -1.0, -1.0, |
| -1.0, -1.0, -1.0, -1.0, -1.0, |
| -1.0, -1.0, -1.0, -1.0, -1.0, |
| -1.0 }; |
| |
| F32 mul_F32_vector[] = { 2.0f, 6.0f, 12.0f, 20.0f, 30.0f, |
| 42.0f, 56.0f, 72.0f, 90.0f, |
| 110.0f, 132.0f, 156.0f, 182.0f, |
| 210.0f, 240.0f, 272.0f }; |
| |
| F64 mul_F64_vector[] = { 2.0, 6.0, 12.0, 20.0, 30.0, |
| 42.0, 56.0, 72.0, 90.0, |
| 110.0, 132.0, 156.0, 182.0, |
| 210.0, 240.0, 272.0 }; |
| |
| F32 div_F32_vector[] = { 0.5f, (float)(2.0/3.0), 0.75f, 0.8f, |
| (float)(5.0/6.0), (float)(6.0/7.0), 0.875000f, |
| (float)(8.0/9.0), 0.900000f, (float)(10.0/11.0), |
| (float)(11.0/12.0), (float)(12.0/13.0), |
| (float)(13.0/14.0), (float)(14.0/15.0), 0.937500f, |
| (float)(16.0/17.0) }; |
| |
| F64 div_F64_vector[] = { 0.5, (2.0/3.0), 0.75, 0.8, (5.0/6.0), |
| (6.0/7.0), 0.875000, (8.0/9.0), 0.900000, |
| (10.0/11.0), (11.0/12.0), (12.0/13.0), (13.0/14.0), |
| (14.0/15.0), 0.937500, (16.0/17.0) }; |
| |
| F32 neg_F32_vector[] = { -1.0f, -2.0f, -3.0f, -4.0f, |
| -5.0f, -6.0f, -7.0f, -8.0f, |
| -9.0f, -10.0f, -11.0f, -12.0f, |
| -13.0f, -14.0f, -15.0f, -16.0f }; |
| |
| F64 neg_F64_vector[] = { -1.0, -2.0, -3.0, -4.0, |
| -5.0, -6.0, -7.0, -8.0, |
| -9.0, -10.0, -11.0, -12.0, |
| -13.0, -14.0, -15.0, -16.0 }; |
| |
| F32 abs_F32_vector[] = { 1.0f, 2.0f, 3.0f, 4.0f, |
| 5.0f, 6.0f, 7.0f, 8.0f, |
| 9.0f, 10.0f, 11.0f, 12.0f, |
| 13.0f, 14.0f, 15.0f, 16.0f }; |
| |
| F64 abs_F64_vector[] = { 1.0, 2.0, 3.0, 4.0, |
| 5.0, 6.0, 7.0, 8.0, |
| 9.0, 10.0, 11.0, 12.0, |
| 13.0, 14.0, 15.0, 16.0 }; |
| |
| F32 fabd_F32_vector[] = { 1.0f, 1.0f, 1.0f, 1.0f, |
| 1.0f, 1.0f, 1.0f, 1.0f, |
| 1.0f, 1.0f, 1.0f, 1.0f, |
| 1.0f, 1.0f, 1.0f, 1.0f }; |
| |
| F64 fabd_F64_vector[] = { 1.0, 1.0, 1.0, 1.0, |
| 1.0, 1.0, 1.0, 1.0, |
| 1.0, 1.0, 1.0, 1.0, |
| 1.0, 1.0, 1.0, 1.0 }; |
| |
| /* Setup input vectors. */ |
| for (i=1; i<=16; i++) |
| { |
| bF32[i-1] = (float)i; |
| cF32[i-1] = (float)(i+1); |
| bF64[i-1] = (double)i; |
| cF64[i-1] = (double)(i+1); |
| } |
| |
| TEST (add, 3); |
| TEST (sub, 3); |
| TEST (mul, 3); |
| TEST (div, 3); |
| TEST (neg, 2); |
| TEST (abs, 2); |
| TEST (fabd, 3); |
| |
| return 0; |
| } |