another long long test
authorChristian Würdig <chriswue@ipd.info.uni-karlsruhe.de>
Fri, 18 Aug 2006 14:14:00 +0000 (14:14 +0000)
committerChristian Würdig <chriswue@ipd.info.uni-karlsruhe.de>
Fri, 18 Aug 2006 14:14:00 +0000 (14:14 +0000)
ir/be/test/ll.c [new file with mode: 0644]

diff --git a/ir/be/test/ll.c b/ir/be/test/ll.c
new file mode 100644 (file)
index 0000000..72fdfee
--- /dev/null
@@ -0,0 +1,87 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+typedef long long int ll_t;
+
+#ifndef _WIN32
+ll_t mul_ll(ll_t a, ll_t b) __attribute__((noinline));
+ll_t shl_ll(ll_t a, ll_t b) __attribute__((noinline));
+ll_t shr_ll(ll_t a, ll_t b) __attribute__((noinline));
+ll_t add_ll(ll_t a, ll_t b) __attribute__((noinline));
+ll_t sub_ll(ll_t a, ll_t b) __attribute__((noinline));
+ll_t div_ll(ll_t a, ll_t b) __attribute__((noinline));
+ll_t mod_ll(ll_t a, ll_t b) __attribute__((noinline));
+ll_t divmod_ll(ll_t a, ll_t b) __attribute__((noinline));
+ll_t abs_ll(ll_t a) __attribute__((noinline));
+ll_t neg_ll(ll_t a) __attribute__((noinline));
+#endif
+
+ll_t mul_ll(ll_t a, ll_t b) {
+       return a * b;
+}
+
+ll_t shl_ll(ll_t a, ll_t b) {
+       return a << b;
+}
+
+ll_t shr_ll(ll_t a, ll_t b) {
+       return a >> b;
+}
+
+ll_t add_ll(ll_t a, ll_t b) {
+       return a + b;
+}
+
+ll_t sub_ll(ll_t a, ll_t b) {
+       return a - b;
+}
+
+ll_t div_ll(ll_t a, ll_t b) {
+       return a / b;
+}
+
+ll_t mod_ll(ll_t a, ll_t b) {
+       return a % b;
+}
+
+ll_t divmod_ll(ll_t a, ll_t b) {
+       return (a / b) + (a % b);
+}
+
+ll_t neg_ll(ll_t a) {
+       return -a;
+}
+
+ll_t abs_ll(ll_t a) {
+       return llabs(a);
+}
+
+double conv_ll_d(ll_t a) {
+       return (double)a;
+}
+
+ll_t conv_d_ll(double a) {
+       return (ll_t)a;
+}
+
+int main(void) {
+       ll_t a = 0xff;
+       ll_t b = 0x123456789;
+       ll_t c = 0x8001023000002460;
+       double d = (double)c;
+
+       printf("%lld * %lld  = %lld\n", a, b, mul_ll(a, b));
+       printf("%lld + %lld  = %lld\n", a, b, add_ll(a, b));
+       printf("%lld - %lld  = %lld\n", a, b, sub_ll(a, b));
+       printf("%lld / %lld  = %lld\n", a, b, div_ll(a, b));
+       printf("%lld % %lld  = %lld\n", a, b, mod_ll(a, b));
+       printf("%lld / + % %lld  = %lld\n", a, b, divmod_ll(a, b));
+       printf("%lld << %lld = %lld\n", a, 2, shl_ll(a, 2));
+       printf("%lld >> %lld = %lld\n", a, 2, shr_ll(a, 2));
+       printf("abs(%lld)    = %lld\n", c, abs_ll(c));
+       printf("neg(%lld)    = %lld\n", b, neg_ll(b));
+       printf("conv(%lld)   = %lf\n",  c, conv_ll_d(c));
+       printf("conv(%lf)    = %lld\n", d, conv_d_ll(d));
+
+       return 0;
+}