97d4e63c06e13369e779ae7f64b3f29b740ff9bb
[libfirm] / ir / be / test / am_test4.c
1 char c;
2
3 int f(int x, int y) {
4         return x + y * 8;
5 }
6
7 int f2(int x, int y) {
8         return x * 2 + y * 8;
9 }
10
11 int f3(int x) {
12         return x * 2;
13 }
14
15 char f4(char *p, int k) {
16         return p[k];
17 }
18
19 #define T(name, OP, OP2) \
20 void dest_am_##name(int *arr, int from, int to) {  \
21         int i;                                  \
22                                             \
23         for(i = from; i < to; ++i) {            \
24                 arr[i] = OP arr[i] OP2;             \
25         }                                       \
26 }
27
28 T(neg, -,)
29 T(not, ~,)
30 T(add, 3 +,)
31 T(sub, , - 42)
32 T(and, 0x12345 &,)
33 T(or, 0x12345 |,)
34 T(xor, 0x12345 ^,)
35 T(inc, 1 + ,)
36 T(dec, , - 1)
37 T(shl, , << 3)
38 T(shr, , >> 3)
39
40 int main(void) {
41         int arr[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
42         int i;
43
44 #define C(name)   dest_am_##name(arr, 0, 10); \
45         for(i = 0; i < 10; ++i) {                 \
46                 printf("%d ", arr[i]);                \
47         }                                         \
48         printf("\n");
49
50         C(neg);
51         C(not);
52         C(add);
53         C(sub);
54         C(and);
55         C(or);
56         C(inc);
57         C(dec);
58         C(xor);
59
60         return 0;
61 }