aboutsummaryrefslogtreecommitdiff
path: root/deps/lightning/check/call.tst
diff options
context:
space:
mode:
Diffstat (limited to 'deps/lightning/check/call.tst')
-rw-r--r--deps/lightning/check/call.tst272
1 files changed, 272 insertions, 0 deletions
diff --git a/deps/lightning/check/call.tst b/deps/lightning/check/call.tst
new file mode 100644
index 0000000..21068b6
--- /dev/null
+++ b/deps/lightning/check/call.tst
@@ -0,0 +1,272 @@
+#define def_wi(i) \
+ name _w##i \
+_w##i: \
+ prolog \
+ arg $arg##i \
+ getarg##i %r0 $arg##i \
+ retr %r0 \
+ epilog
+#define def_wf(f) \
+ name _w##f \
+_w##f: \
+ prolog \
+ arg##f $arg##f \
+ getarg##f %f0 $arg##f \
+ truncr##f %r0 %f0 \
+ retr %r0 \
+ epilog
+#define def_fi(f, i) \
+ name f##i \
+f##i: \
+ prolog \
+ arg $arg##i \
+ getarg##i %r0 $arg##i \
+ extr##f %f0 %r0 \
+ retr##f %f0 \
+ epilog
+#define def_f(f) \
+ name f##f \
+f##f: \
+ prolog \
+ arg##f $arg##f \
+ getarg##f %f0 $arg##f \
+ retr##f %f0 \
+ epilog
+#define def_ff(f, g) \
+ name f##g \
+ name f##g \
+f##g: \
+ prolog \
+ arg##g $arg##g \
+ getarg##g %f0 $arg##g \
+ extr##g##f %f0 %f0 \
+ retr##f %f0 \
+ epilog
+
+.data 32
+fstr:
+.c "forward"
+bstr:
+.c "backward"
+
+.code
+ jmpi main
+
+ def_wi(_c)
+ def_wi(_uc)
+ def_wi(_s)
+ def_wi(_us)
+#if __WORDSIZE == 64
+ def_wi(_i)
+ def_wi(_ui)
+#endif
+ def_wf(_f)
+ def_wf(_d)
+ def_fi(_f, _c)
+ def_fi(_f, _uc)
+ def_fi(_f, _s)
+ def_fi(_f, _us)
+ def_fi(_f, _i)
+#if __WORDSIZE == 64
+ def_fi(_f, _ui)
+ def_fi(_f, _l)
+#endif
+ def_fi(_d, _c)
+ def_fi(_d, _uc)
+ def_fi(_d, _s)
+ def_fi(_d, _us)
+ def_fi(_d, _i)
+#if __WORDSIZE == 64
+ def_fi(_d, _ui)
+ def_fi(_d, _l)
+#endif
+ def_f(_f)
+ def_f(_d)
+ def_ff(_f, _d)
+ def_ff(_d, _f)
+
+ name main
+main:
+ prolog
+
+#define _call_w(n, i, a, r) \
+ prepare \
+ pushargi a \
+ finishi _w##i \
+ retval %r0 \
+ extr##i %r0 %r0 \
+ beqi _w##i##_##n %r0 r \
+ calli @abort \
+_w##i##_##n:
+#define call_w(n, i, a, r) _call_w(n, i, a, r)
+#define _call_wf(n, f, a, r) \
+ prepare \
+ pushargi##f a \
+ finishi _w##f \
+ retval %r0 \
+ extr##f %f0 %r0 \
+ beqi##f _w##f##_##n %f0 r \
+ calli @abort \
+_w##f##_##n:
+#define call_wf(n, f, a, r) _call_wf(n, f, a, r)
+#define _call_fi(n, f, i, a, r) \
+ prepare \
+ pushargi a \
+ finishi f##i \
+ retval##f %f0 \
+ beqi##f f##i##n %f0 r \
+ calli @abort \
+f##i##n:
+#define call_fi(n, f, i, a, r) _call_fi(n, f, i, a, r)
+#define _call_f(n, f, a, r) \
+ prepare \
+ pushargi##f a \
+ finishi f##f \
+ retval##f %f0 \
+ beqi##f f##f##n %f0 r \
+ calli @abort \
+f##f##n:
+#define call_f(n, f, a, r) _call_f(n, f, a, r)
+#define _call_ff(n, f, g, a, r) \
+ prepare \
+ pushargi##g a \
+ finishi f##g \
+ retval##f %f0 \
+ beqi##f f##g##n %f0 r \
+ calli @abort \
+f##g##n:
+#define call_ff(n, f, g, a, r) _call_ff(n, f, g, a, r)
+
+#define c7f 0x7f
+#define c80 0x80
+#define c81 0x81
+#define cff 0xff
+#define s7f 0x7fff
+#define s80 0x8000
+#define s81 0x8001
+#define i7f 0x7fffffff
+#define i80 0x80000000
+#define i81 0x80000001
+#define iff 0xffffffff
+#define l7f 0x7fffffffffffffff
+#define l80 0x8000000000000000
+#define l81 0x8000000000000001
+#define f7f 127.0
+#define f80 -128.0
+#define f81 -127.0
+#define uf80 128.0
+#define uf81 127.0
+#if __WORDSIZE == 32
+# define wc80 0xffffff80
+# define wc81 0xffffff81
+# define ws80 0xffff8000
+# define ws81 0xffff8001
+#else
+# define wc80 0xffffffffffffff80
+# define wc81 0xffffffffffffff81
+# define ws80 0xffffffffffff8000
+# define ws81 0xffffffffffff8001
+# define wi80 0xffffffff80000000
+# define wi81 0xffffffff80000001
+#endif
+
+ call_w(__LINE__, _c, c7f, c7f)
+ call_w(__LINE__, _c, c80, wc80)
+ call_w(__LINE__, _c, c81, wc81)
+ call_w(__LINE__, _uc, c7f, c7f)
+ call_w(__LINE__, _uc, c80, c80)
+ call_w(__LINE__, _uc, c81, c81)
+ call_w(__LINE__, _s, s7f, s7f)
+ call_w(__LINE__, _s, s80, ws80)
+ call_w(__LINE__, _s, s81, ws81)
+ call_w(__LINE__, _us, s7f, s7f)
+ call_w(__LINE__, _us, s80, s80)
+ call_w(__LINE__, _us, s81, s81)
+#if __WORDSIZE == 64
+ call_w(__LINE__, _i, i7f, i7f)
+ call_w(__LINE__, _i, i80, wi80)
+ call_w(__LINE__, _i, i81, wi81)
+ call_w(__LINE__, _ui, i7f, i7f)
+ call_w(__LINE__, _ui, i80, i80)
+ call_w(__LINE__, _ui, i81, i81)
+#endif
+ call_wf(__LINE__, _f, c7f, f7f)
+ call_wf(__LINE__, _f, wc80, f80)
+ call_wf(__LINE__, _f, wc81, f81)
+ call_wf(__LINE__, _d, c7f, f7f)
+ call_wf(__LINE__, _d, wc80, f80)
+ call_wf(__LINE__, _d, wc81, f81)
+ call_fi(__LINE__, _f, _c, c7f, f7f)
+ call_fi(__LINE__, _f, _c, c80, f80)
+ call_fi(__LINE__, _f, _uc, c7f, f7f)
+ call_fi(__LINE__, _f, _uc, c80, uf80)
+ call_fi(__LINE__, _f, _s, c7f, f7f)
+ call_fi(__LINE__, _f, _s, c80, uf80)
+ call_fi(__LINE__, _f, _us, c7f, f7f)
+ call_fi(__LINE__, _f, _us, c80, uf80)
+ call_fi(__LINE__, _f, _i, c7f, f7f)
+ call_fi(__LINE__, _f, _i, c80, uf80)
+#if __WORDSIZE == 64
+ call_fi(__LINE__, _f, _ui, c7f, f7f)
+ call_fi(__LINE__, _f, _ui, c80, uf80)
+ call_fi(__LINE__, _f, _l, c7f, f7f)
+ call_fi(__LINE__, _f, _l, c80, uf80)
+#endif
+ call_fi(__LINE__, _d, _c, c7f, f7f)
+ call_fi(__LINE__, _d, _c, c80, f80)
+ call_fi(__LINE__, _d, _uc, c7f, f7f)
+ call_fi(__LINE__, _d, _uc, c80, uf80)
+ call_fi(__LINE__, _d, _s, c7f, f7f)
+ call_fi(__LINE__, _d, _s, c80, uf80)
+ call_fi(__LINE__, _d, _us, c7f, f7f)
+ call_fi(__LINE__, _d, _us, c80, uf80)
+ call_fi(__LINE__, _d, _i, c7f, f7f)
+ call_fi(__LINE__, _d, _i, c80, uf80)
+#if __WORDSIZE == 64
+ call_fi(__LINE__, _d, _ui, c7f, f7f)
+ call_fi(__LINE__, _d, _ui, c80, uf80)
+ call_fi(__LINE__, _d, _l, c7f, f7f)
+ call_fi(__LINE__, _d, _l, c80, uf80)
+#endif
+ call_f(__LINE__, _f, f7f, f7f)
+ call_f(__LINE__, _d, f7f, f7f)
+ call_ff(__LINE__, _f, _d, f80, f80)
+ call_ff(__LINE__, _d, _f, f81, f81)
+
+ movi %r0 forward
+ callr %r0
+
+ calli iforward
+
+ ret
+ epilog
+
+ name backward
+backward:
+ prolog
+ prepare
+ pushargi bstr
+ finishi @puts
+ ret
+ epilog
+
+ name forward
+forward:
+ prolog
+ prepare
+ pushargi fstr
+ finishi @puts
+ movi %r0 backward
+ callr %r0
+ ret
+ epilog
+
+ name iforward
+iforward:
+ prolog
+ prepare
+ pushargi fstr
+ finishi @puts
+ calli backward
+ ret
+ epilog