9c7e334a928eed268270f04a8aadbd8ffa37af9b
[libfirm] / ir / be / test / ll.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 typedef long long int ll_t;
5
6 #ifndef _WIN32
7 ll_t mul_ll(ll_t a, ll_t b) __attribute__((noinline));
8 ll_t shl_ll(ll_t a, ll_t b) __attribute__((noinline));
9 ll_t shr_ll(ll_t a, ll_t b) __attribute__((noinline));
10 ll_t add_ll(ll_t a, ll_t b) __attribute__((noinline));
11 ll_t sub_ll(ll_t a, ll_t b) __attribute__((noinline));
12 ll_t div_ll(ll_t a, ll_t b) __attribute__((noinline));
13 ll_t mod_ll(ll_t a, ll_t b) __attribute__((noinline));
14 ll_t divmod_ll(ll_t a, ll_t b) __attribute__((noinline));
15 ll_t abs_ll(ll_t a) __attribute__((noinline));
16 ll_t neg_ll(ll_t a) __attribute__((noinline));
17 #endif
18
19 ll_t mul_ll(ll_t a, ll_t b) {
20         return a * b;
21 }
22
23 ll_t shl_ll(ll_t a, ll_t b) {
24         return a << b;
25 }
26
27 ll_t shr_ll(ll_t a, ll_t b) {
28         return a >> b;
29 }
30
31 ll_t add_ll(ll_t a, ll_t b) {
32         return a + b;
33 }
34
35 ll_t sub_ll(ll_t a, ll_t b) {
36         return a - b;
37 }
38
39 #if 0
40 ll_t div_ll(ll_t a, ll_t b) {
41         return a / b;
42 }
43
44 ll_t mod_ll(ll_t a, ll_t b) {
45         return a % b;
46 }
47
48 ll_t divmod_ll(ll_t a, ll_t b) {
49         return (a / b) + (a % b);
50 }
51 #endif
52
53 ll_t neg_ll(ll_t a) {
54         return -a;
55 }
56
57 ll_t abs_ll(ll_t a) {
58         return llabs(a);
59 }
60
61 #if 0
62 double conv_ll_d(ll_t a) {
63         return (double)a;
64 }
65
66 ll_t conv_d_ll(double a) {
67         return (ll_t)a;
68 }
69 #endif
70
71 int main(void) {
72         ll_t a = 0xff;
73         ll_t b = 0x123456789;
74         ll_t c = 0x8001023000002460;
75         double d = (double)c;
76
77         printf("%lld * %lld  = %lld\n", a, b, mul_ll(a, b));
78         printf("%lld + %lld  = %lld\n", a, b, add_ll(a, b));
79         printf("%lld - %lld  = %lld\n", a, b, sub_ll(a, b));
80 #if 0
81         printf("%lld / %lld  = %lld\n", a, b, div_ll(a, b));
82         printf("%lld % %lld  = %lld\n", a, b, mod_ll(a, b));
83         printf("%lld / + % %lld  = %lld\n", a, b, divmod_ll(a, b));
84 #endif
85         printf("%lld << %lld = %lld\n", a, 2, shl_ll(a, 2));
86         printf("%lld >> %lld = %lld\n", a, 2, shr_ll(a, 2));
87         printf("abs(%lld)    = %lld\n", c, abs_ll(c));
88         printf("neg(%lld)    = %lld\n", b, neg_ll(b));
89 #if 0
90         printf("conv(%lld)   = %lf\n",  c, conv_ll_d(c));
91         printf("conv(%lf)    = %lld\n", d, conv_d_ll(d));
92 #endif
93
94         return 0;
95 }