icc doesn't like -fomit-frame-pointer without -O
[libfirm] / ir / be / test / am_test4.c
1 #include <stdio.h>
2
3 char c;
4
5 int f(int x, int y) {
6         return x + y * 8;
7 }
8
9 int f2(int x, int y) {
10         return x * 2 + y * 8;
11 }
12
13 int f3(int x) {
14         return x * 2;
15 }
16
17 char f4(char *p, int k) {
18         return p[k];
19 }
20
21 short f5(short *p, int k) {
22         return p[k];
23 }
24
25 #define TTYPE(name, type, OP, OP2) \
26 void dest_am_##name##type(type *arr, int from, int to) {  \
27         int i;                                  \
28                                             \
29         for(i = from; i < to; ++i) {            \
30                 arr[i] = OP arr[i] OP2;             \
31         }                                       \
32 }
33
34 #define T(name, OP, OP2)     \
35         TTYPE(name,int,OP,OP2)   \
36         TTYPE(name,short,OP,OP2) \
37         TTYPE(name,char,OP,OP2)
38
39 T(neg, -,)
40 T(not, ~,)
41 T(add, 3 +,)
42 T(sub, , - 42)
43 T(and, 0x12345 &,)
44 T(or, 0x12345 |,)
45 T(xor, 0x12345 ^,)
46 T(inc, 1 + ,)
47 T(dec, , - 1)
48 T(shl, , << 3)
49 T(shr, , >> 3)
50
51 int main(void) {
52         int   arrint[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
53         short arrshort[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
54         char  arrchar[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
55
56         int i;
57
58 #define CTYPE(type,name)   dest_am_##name##type(arr##type, 0, 10); \
59         for(i = 0; i < 10; ++i) {                 \
60                 printf("%d ", arr##type[i]);          \
61         }                                         \
62         printf("\n");
63
64 #define C(name) \
65         CTYPE(int,name) \
66         CTYPE(short,name) \
67         CTYPE(char,name)
68
69         C(neg);
70         C(not);
71         C(add);
72         C(sub);
73         C(and);
74         C(or);
75         C(inc);
76         C(dec);
77         C(xor);
78
79         return 0;
80 }