diff options
Diffstat (limited to 'deps/lightning/check/call.tst')
-rw-r--r-- | deps/lightning/check/call.tst | 272 |
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 |