7478a5f8bbe5c92b34e6b018ef21bba6867d518c
[libfirm] / ir / be / test / optest.h
1 #ifndef TESTANZ
2 #define TESTANZ 21
3 #define IMM         23
4 #define test16_1        42
5 #define test16_2        11
6 #define test32_1        0x001200AB
7 #define test32_2        0x00341501
8 #define test32_s    7
9 #endif
10
11 T tname(test_add_) (T a, T b) {
12         return a+b;
13 }
14
15 T tname(test_addi_) (T a) {
16         return a+IMM;
17 }
18
19 T tname(test_sub_) (T a, T b) {
20         return a-b;
21 }
22
23 T tname(test_subi_) (T a) {
24         return a-IMM;
25 }
26
27 T tname(test_subfi_) (T a) {
28         return IMM-a;
29 }
30
31 T tname(test_mul_) (T a, T b) {
32         return a*b;
33 }
34
35 T tname(test_muli_) (T a) {
36         return a*IMM;
37 }
38
39 T tname(test_div_) (T a, T b) {
40         return a/b;
41 }
42
43 T tname(test_divi_) (T a) {
44         return a/IMM;
45 }
46
47 #ifndef TEST_UNSIGNED
48 T tname(test_abs_) (T a) {
49         return a < 0 ? -a : a;
50 }
51
52 T tname(test_neg_) (T a) {
53         return -a;
54 }
55 #endif
56
57 #ifndef TEST_FLOAT
58 T tname(test_shl_) (T a, T b) {
59         return a<<b;
60 }
61
62 T tname(test_shli_) (T a) {
63         return a<<IMM;
64 }
65
66 T tname(test_shr_) (T a, T b) {
67         return a>>b;
68 }
69
70 T tname(test_shri_) (T a) {
71         return a>>IMM;
72 }
73
74 T tname(test_mod_) (T a, T b) {
75         return a%b;
76 }
77 #endif
78
79 T tname(test_cmp_) (T a, T b) {
80         return (a>b) ? 1 : 0;
81 }
82
83 T tname(test_cmpi_) (T a) {
84         return (a>IMM) ? 1 : 0;
85 }
86
87 T tname(res16_) [TESTANZ];
88 T tname(res32_) [TESTANZ];
89
90 void tname(test_) () {
91         int i;
92         T *res16 = tname(res16_);
93         memset(res16, 0, TESTANZ * sizeof(res16[0]));
94         T *res32 = tname(res32_);
95         memset(res32, 0, TESTANZ * sizeof(res32[0]));
96
97         res16[ 0] = tname(test_add_)  (test16_1, test16_2);
98         res16[ 1] = tname(test_sub_)  (test16_1, test16_2);
99         res16[ 2] = tname(test_mul_)  (test16_1, test16_2);
100         res16[ 3] = tname(test_div_)  (test16_1, test16_2);
101 #ifndef TEST_FLOAT
102         res16[ 4] = tname(test_shl_)  (test16_1, test16_2);
103         res16[ 5] = tname(test_shr_)  (test16_1, test16_2);
104         res16[ 6] = tname(test_mod_)  (test16_1, test16_2);
105 #endif
106         res16[ 7] = tname(test_div_)  (test16_1, test16_2);
107         res16[ 8] = tname(test_cmp_)  (test16_1, test16_2);
108         res16[ 9] = tname(test_addi_) (test16_1);
109         res16[10] = tname(test_subi_) (test16_1);
110         res16[11] = tname(test_subfi_)(test16_1);
111         res16[12] = tname(test_muli_) (test16_1);
112         res16[13] = tname(test_divi_) (test16_1);
113 #ifndef TEST_FLOAT
114         res16[14] = tname(test_shli_) (test16_1);
115         res16[15] = tname(test_shri_) (test16_1);
116 #endif
117         res16[16] = tname(test_cmpi_) (test16_1);
118 #ifndef TEST_UNSIGNED
119         res16[17] = tname(test_neg_)  (test16_1);
120         res16[18] = tname(test_neg_)  (-test16_1);
121         res16[19] = tname(test_abs_)  (test16_1);
122         res16[20] = tname(test_abs_)  (-test16_1);
123 #endif
124
125         res32[ 0] = tname(test_add_)  (test32_1, test32_2);
126         res32[ 1] = tname(test_sub_)  (test32_1, test32_2);
127         res32[ 2] = tname(test_mul_)  (test32_1, test32_2);
128         res32[ 3] = tname(test_div_)  (test32_1, test32_2);
129 #ifndef TEST_FLOAT
130         res32[ 4] = tname(test_shl_)  (test32_1, test32_2);
131         res32[ 5] = tname(test_shr_)  (test32_1, test32_2);
132         res32[ 6] = tname(test_mod_)  (test32_1, test32_2);
133 #endif
134         res32[ 7] = tname(test_div_)  (test32_1, test32_2);
135         res32[ 8] = tname(test_cmp_)  (test32_1, test32_2);
136         res32[ 9] = tname(test_addi_) (test32_1);
137         res32[10] = tname(test_subi_) (test32_1);
138         res32[11] = tname(test_subfi_)(test32_1);
139         res32[12] = tname(test_muli_) (test32_1);
140         res32[13] = tname(test_divi_) (test32_1);
141 #ifndef TEST_FLOAT
142         res32[14] = tname(test_shli_) (test32_1);
143         res32[15] = tname(test_shri_) (test32_1);
144 #endif
145         res32[16] = tname(test_cmpi_) (test32_1);
146 #ifndef TEST_UNSIGNED
147         res32[17] = tname(test_neg_)  (test32_1);
148         res32[18] = tname(test_neg_)  (-test32_1);
149         res32[19] = tname(test_abs_)  (test32_1);
150         res32[20] = tname(test_abs_)  (-test32_1);
151 #endif
152
153         printf("Result for %s\n", __PRETTY_FUNCTION__);
154         for (i=0; i<TESTANZ; i++) {
155 #ifndef TEST_FLOAT
156                 printf("res16[%d] = %d\n", i, res16[i]);
157                 printf("res32[%d] = %d\n", i, res32[i]);
158 #else
159                 printf("res16[%d] = %f\n", i, res16[i]);
160                 printf("res32[%d] = %f\n", i, res32[i]);
161 #endif
162         }
163 }