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