1 2#ifndef l_fma_main 3#define l_fma_main 4 5#if DEBUG 6#include <stdio.h> 7#endif 8 9TYPE m1[32] = { 10 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 11 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32 12 }; 13TYPE m2[32] = { 14 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 15 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33 16 }; 17TYPE m3[32] = { 18 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34 20 }; 21TYPE m4[32]; 22int test_fails = 0; 23 24void 25compare_result(char *title, TYPE *res) 26{ 27 int i; 28 int good = 1; 29 for (i =0; i < 32; i++) 30 if (m4[i] != res[i]) 31 { 32 if (good) 33 { 34#if DEBUG 35 printf ("!!!! %s miscompare\n", title); 36#endif 37 good = 0; 38 } 39#if DEBUG 40 printf ("res[%d] = %d, must be %d\n", i, (int)res[i], (int) m4[i]); 41#endif 42 } 43 if (!good) 44 test_fails = 1; 45} 46 47static void fma_test () 48{ 49 test_noneg_add_noneg_add (m1, m2, m3, m4, 32); 50 compare_result ("test0000", res_test0000); 51 52 test_noneg_add_noneg_sub (m1, m2, m3, m4, 32); 53 compare_result ("test0001", res_test0001); 54 55 test_noneg_add_neg_add (m1, m2, m3, m4, 32); 56 compare_result ("test0010", res_test0010); 57 58 test_noneg_add_neg_sub (m1, m2, m3, m4, 32); 59 compare_result ("test0011", res_test0011); 60 61 test_noneg_sub_noneg_add (m1, m2, m3, m4, 32); 62 compare_result ("test0100", res_test0100); 63 64 test_noneg_sub_noneg_sub (m1, m2, m3, m4, 32); 65 compare_result ("test0101", res_test0101); 66 67 test_noneg_sub_neg_add (m1, m2, m3, m4, 32); 68 compare_result ("test0110", res_test0110); 69 70 test_noneg_sub_neg_sub (m1, m2, m3, m4, 32); 71 compare_result ("test0111", res_test0111); 72 73 test_neg_add_noneg_add (m1, m2, m3, m4, 32); 74 compare_result ("test1000", res_test1000); 75 76 test_neg_add_noneg_sub (m1, m2, m3, m4, 32); 77 compare_result ("test1001", res_test1001); 78 79 test_neg_add_neg_add (m1, m2, m3, m4, 32); 80 compare_result ("test1010", res_test1010); 81 82 test_neg_add_neg_sub (m1, m2, m3, m4, 32); 83 compare_result ("test1011", res_test1011); 84 85 test_neg_sub_noneg_add (m1, m2, m3, m4, 32); 86 compare_result ("test1100", res_test1100); 87 88 test_neg_sub_noneg_sub (m1, m2, m3, m4, 32); 89 compare_result ("test1101", res_test1101); 90 91 test_neg_sub_neg_add (m1, m2, m3, m4, 32); 92 compare_result ("test1110", res_test1110); 93 94 test_neg_sub_neg_sub (m1, m2, m3, m4, 32); 95 compare_result ("test1111", res_test1111); 96 97 if (test_fails) abort (); 98} 99 100#endif 101