aboutsummaryrefslogtreecommitdiff
path: root/deps/lightning/check/float.tst
diff options
context:
space:
mode:
Diffstat (limited to 'deps/lightning/check/float.tst')
-rw-r--r--deps/lightning/check/float.tst367
1 files changed, 367 insertions, 0 deletions
diff --git a/deps/lightning/check/float.tst b/deps/lightning/check/float.tst
new file mode 100644
index 0000000..ff5606a
--- /dev/null
+++ b/deps/lightning/check/float.tst
@@ -0,0 +1,367 @@
+
+.data 4
+ok:
+.c "ok"
+
+. $($NaN = 0.0 / 0.0)
+. $($pInf = 1.0 / 0.0)
+. $($nInf = -1.0 / 0.0)
+#if __WORDSIZE == 32
+# define x7f 0x7fffffff
+# define x80 0x80000000
+#else
+# define x7f 0x7fffffffffffffff
+# define x80 0x8000000000000000
+#endif
+
+#if __mips__ || __sparc__ || __hppa__ || __riscv
+# define wnan x7f
+#elif __arm__ || __aarch64__ || __alpha__
+# define wnan 0
+#else
+# define wnan x80
+#endif
+#if __mips__ || __arm__ || __ppc__ || __sparc__ || __hppa__ || __aarch64__ || __s390__ || __riscv
+# define wpinf x7f
+#elif __alpha__
+/* (at least) bug compatible with gcc 4.2.3 -ieee */
+# define wpinf 0
+#else
+# define wpinf x80
+#endif
+#if __alpha__
+/* (at least) bug compatible with gcc 4.2.3 -ieee */
+# define wninf 0
+#else
+# define wninf x80
+#endif
+
+/* ensure result is correct and 0 or 1 in the result register */
+#define xtcmp(l, t, op, r0, f0, f1, li, ri) \
+ movi##t %f0 li \
+ movi##t %f1 ri \
+ op##r##t %r0 %f0 %f1 \
+ bnei T##op##r##t##r0##f0##f1##l %r0 0 \
+ calli @abort \
+T##op##r##t##r0##f0##f1##l: \
+ movi##t %f0 li \
+ movi##t %f1 ri \
+ b##op##r##t bT##op##r##t##r0##f0##f1##l %f0 %f1 \
+ calli @abort \
+bT##op##r##t##r0##f0##f1##l: \
+ movi##t %f1 li \
+ op##i##t %r0 %f0 ri \
+ bnei T##op##i##t##r0##f0##f1##l %r0 0 \
+ calli @abort \
+T##op##i##t##r0##f0##f1##l: \
+ movi##t %f1 li \
+ b##op##i##t bT##op##i##t##r0##f0##f1##l %f0 ri \
+ calli @abort \
+bT##op##i##t##r0##f0##f1##l: \
+ movi##t %f0 li \
+ movi##t %f1 ri \
+ op##r##t %r0 %f0 %f1 \
+ beqi F##op##r##t##r0##f0##f1##l %r0 1 \
+ calli @abort \
+F##op##r##t##r0##f0##f1##l: \
+ movi##t %f1 li \
+ op##i##t %r0 %f0 ri \
+ beqi F##op##i##t##r0##f0##f1##l %r0 1 \
+ calli @abort \
+F##op##i##t##r0##f0##f1##l:
+#define tcmp1(l, t, op, r0, li, ri) \
+ xtcmp(l, t, op, r0, f0, f1, li, ri) \
+ xtcmp(l, t, op, r0, f1, f2, li, ri) \
+ xtcmp(l, t, op, r0, f2, f3, li, ri) \
+ xtcmp(l, t, op, r0, f3, f4, li, ri) \
+ xtcmp(l, t, op, r0, f4, f5, li, ri)
+#define tcmp0(l, t, op, li, ri) \
+ tcmp1(l, t, op, v0, li, ri) \
+ tcmp1(l, t, op, v1, li, ri) \
+ tcmp1(l, t, op, v2, li, ri) \
+ tcmp1(l, t, op, r0, li, ri) \
+ tcmp1(l, t, op, r1, li, ri) \
+ tcmp1(l, t, op, r2, li, ri)
+#if __ia64__
+# define tcmp(l, op, li, ri) \
+ xtcmp(l, _f, op, r0, f0, f1, li, ri) \
+ xtcmp(l, _d, op, r0, f0, f1, li, ri)
+#else
+# define tcmp(l, op, li, ri) \
+ tcmp0(l, _f, op, li, ri) \
+ tcmp0(l, _d, op, li, ri)
+#endif
+
+#define xfcmp(l, t, op, r0, f0, f1, li, ri) \
+ movi##t %f0 li \
+ movi##t %f1 ri \
+ op##r##t %r0 %f0 %f1 \
+ beqi T##op##r##t##r0##f0##f1##l %r0 0 \
+ calli @abort \
+T##op##r##t##r0##f0##f1##l: \
+ movi##t %f1 li \
+ op##i##t %r0 %f0 ri \
+ beqi T##op##i##t##r0##f0##f1##l %r0 0 \
+ calli @abort \
+T##op##i##t##r0##f0##f1##l: \
+ movi##t %f0 li \
+ movi##t %f1 ri \
+ op##r##t %r0 %f0 %f1 \
+ bnei F##op##r##t##r0##f0##f1##l %r0 1 \
+ calli @abort \
+F##op##r##t##r0##f0##f1##l: \
+ movi##t %f1 li \
+ op##i##t %r0 %f0 ri \
+ bnei F##op##i##t##r0##f0##f1##l %r0 1 \
+ calli @abort \
+F##op##i##t##r0##f0##f1##l:
+#define fcmp1(l, t, op, r0, li, ri) \
+ xfcmp(l, t, op, r0, f0, f1, li, ri) \
+ xfcmp(l, t, op, r0, f1, f2, li, ri) \
+ xfcmp(l, t, op, r0, f2, f3, li, ri) \
+ xfcmp(l, t, op, r0, f3, f4, li, ri) \
+ xfcmp(l, t, op, r0, f4, f5, li, ri)
+#define fcmp0(l, t, op, li, ri) \
+ fcmp1(l, t, op, v0, li, ri) \
+ fcmp1(l, t, op, v1, li, ri) \
+ fcmp1(l, t, op, v2, li, ri) \
+ fcmp1(l, t, op, r0, li, ri) \
+ fcmp1(l, t, op, r1, li, ri) \
+ fcmp1(l, t, op, r2, li, ri)
+#if __ia64__
+# define fcmp(l, op, li, ri) \
+ xfcmp(l, _f, op, r0, f0, f1, li, ri) \
+ xfcmp(l, _d, op, r0, f0, f1, li, ri)
+#else
+# define fcmp(l, op, li, ri) \
+ fcmp0(l, _f, op, li, ri) \
+ fcmp0(l, _d, op, li, ri)
+#endif
+
+#define xf2w(l, f, r0, f0, iv, fv) \
+ movi##f %f0 fv \
+ truncr##f %r0 %f0 \
+ beqi W##f##r0##f0##l %r0 iv \
+ calli @abort \
+W##f##r0##f0##l:
+#define f2w1(l, t, r0, iv, fv) \
+ xf2w(l, t, r0, f0, iv, fv) \
+ xf2w(l, t, r0, f1, iv, fv) \
+ xf2w(l, t, r0, f2, iv, fv) \
+ xf2w(l, t, r0, f3, iv, fv) \
+ xf2w(l, t, r0, f4, iv, fv) \
+ xf2w(l, t, r0, f5, iv, fv)
+#define f2w0(l, t, iv, fv) \
+ f2w1(l, t, v0, iv, fv) \
+ f2w1(l, t, v1, iv, fv) \
+ f2w1(l, t, v2, iv, fv) \
+ f2w1(l, t, r0, iv, fv) \
+ f2w1(l, t, r1, iv, fv) \
+ f2w1(l, t, r2, iv, fv)
+#if __ia64__
+# define f2w(l, iv, fv) \
+ xf2w(l, _f, r0, f0, iv, fv) \
+ xf2w(l, _d, r0, f0, iv, fv)
+#else
+# define f2w(l, iv, fv) \
+ f2w0(l, _f, iv, fv) \
+ f2w0(l, _d, iv, fv)
+#endif
+
+.code
+ prolog
+
+ tcmp(__LINE__, lt, 0, 1)
+ tcmp(__LINE__, lt, $nInf, $pInf)
+ tcmp(__LINE__, lt, $nInf, 0)
+ tcmp(__LINE__, lt, 0, $pInf)
+ fcmp(__LINE__, lt, $NaN, 0)
+ fcmp(__LINE__, lt, $NaN, $NaN)
+ fcmp(__LINE__, lt, $nInf, $NaN)
+ fcmp(__LINE__, lt, 1, 0)
+ fcmp(__LINE__, lt, 0, 0)
+ fcmp(__LINE__, lt, $pInf, $nInf)
+ fcmp(__LINE__, lt, 0, $nInf)
+ fcmp(__LINE__, lt, 0, $NaN)
+
+ tcmp(__LINE__, le, 0, 1)
+ tcmp(__LINE__, le, 0, 0)
+ tcmp(__LINE__, le, 1, 1)
+ tcmp(__LINE__, le, $nInf, $pInf)
+ tcmp(__LINE__, le, $nInf, 0)
+ tcmp(__LINE__, le, 0, $pInf)
+ fcmp(__LINE__, le, $NaN, 0)
+ fcmp(__LINE__, le, $NaN, $NaN)
+ fcmp(__LINE__, le, $nInf, $NaN)
+ fcmp(__LINE__, le, 1, 0)
+ fcmp(__LINE__, le, $pInf, $nInf)
+ fcmp(__LINE__, le, 0, $nInf)
+ fcmp(__LINE__, le, 0, $NaN)
+
+ tcmp(__LINE__, eq, 0, 0)
+ tcmp(__LINE__, eq, 1, 1)
+ fcmp(__LINE__, eq, $NaN, 0)
+ fcmp(__LINE__, eq, $NaN, $NaN)
+ fcmp(__LINE__, eq, $nInf, $NaN)
+ fcmp(__LINE__, eq, 0, 1)
+ fcmp(__LINE__, eq, 1, 0)
+ fcmp(__LINE__, eq, $pInf, $nInf)
+ fcmp(__LINE__, eq, 0, $nInf)
+ fcmp(__LINE__, eq, 0, $NaN)
+
+ tcmp(__LINE__, ge, 1, 0)
+ tcmp(__LINE__, ge, 0, 0)
+ tcmp(__LINE__, ge, 1, 1)
+ tcmp(__LINE__, ge, $pInf, $nInf)
+ tcmp(__LINE__, ge, 0, $nInf)
+ tcmp(__LINE__, ge, $pInf, 0)
+ fcmp(__LINE__, ge, $NaN, 0)
+ fcmp(__LINE__, ge, $NaN, $NaN)
+ fcmp(__LINE__, ge, $nInf, $NaN)
+ fcmp(__LINE__, ge, 0, 1)
+ fcmp(__LINE__, ge, $nInf, $pInf)
+ fcmp(__LINE__, ge, $nInf, 0)
+ fcmp(__LINE__, ge, 0, $NaN)
+
+ tcmp(__LINE__, gt, 1, 0)
+ tcmp(__LINE__, gt, $pInf, $nInf)
+ tcmp(__LINE__, gt, 0, $nInf)
+ tcmp(__LINE__, gt, $pInf, 0)
+ fcmp(__LINE__, gt, $NaN, 0)
+ fcmp(__LINE__, gt, $NaN, $NaN)
+ fcmp(__LINE__, gt, $nInf, $NaN)
+ fcmp(__LINE__, gt, 0, 1)
+ fcmp(__LINE__, gt, 0, 0)
+ fcmp(__LINE__, gt, $nInf, $pInf)
+ fcmp(__LINE__, gt, $nInf, 0)
+ fcmp(__LINE__, gt, 0, $NaN)
+
+ tcmp(__LINE__, ne, 0, 1)
+ tcmp(__LINE__, ne, 1, 0)
+ tcmp(__LINE__, ne, $NaN, $NaN)
+ tcmp(__LINE__, ne, $nInf, $pInf)
+ tcmp(__LINE__, ne, $NaN, 0)
+ tcmp(__LINE__, ne, $nInf, $NaN)
+ tcmp(__LINE__, ne, $pInf, $nInf)
+ tcmp(__LINE__, ne, 0, $nInf)
+ tcmp(__LINE__, ne, 0, $NaN)
+ fcmp(__LINE__, ne, 0, 0)
+ fcmp(__LINE__, ne, 1, 1)
+
+ tcmp(__LINE__, unlt, 0, 1)
+ tcmp(__LINE__, unlt, $nInf, $pInf)
+ tcmp(__LINE__, unlt, $nInf, 0)
+ tcmp(__LINE__, unlt, 0, $pInf)
+ tcmp(__LINE__, unlt, $NaN, 0)
+ tcmp(__LINE__, unlt, $NaN, $NaN)
+ tcmp(__LINE__, unlt, $nInf, $NaN)
+ tcmp(__LINE__, unlt, 0, $NaN)
+ fcmp(__LINE__, unlt, 1, 0)
+ fcmp(__LINE__, unlt, 0, 0)
+ fcmp(__LINE__, unlt, $pInf, $nInf)
+ fcmp(__LINE__, unlt, 0, $nInf)
+
+ tcmp(__LINE__, unle, 0, 1)
+ tcmp(__LINE__, unle, 0, 0)
+ tcmp(__LINE__, unle, 1, 1)
+ tcmp(__LINE__, unle, $nInf, $pInf)
+ tcmp(__LINE__, unle, $nInf, 0)
+ tcmp(__LINE__, unle, 0, $pInf)
+ tcmp(__LINE__, unle, $NaN, 0)
+ tcmp(__LINE__, unle, $NaN, $NaN)
+ tcmp(__LINE__, unle, $nInf, $NaN)
+ tcmp(__LINE__, unle, 0, $NaN)
+ fcmp(__LINE__, unle, 1, 0)
+ fcmp(__LINE__, unle, $pInf, $nInf)
+ fcmp(__LINE__, unle, 0, $nInf)
+
+ tcmp(__LINE__, uneq, 0, 0)
+ tcmp(__LINE__, uneq, 1, 1)
+ tcmp(__LINE__, uneq, $NaN, 0)
+ tcmp(__LINE__, uneq, $NaN, $NaN)
+ tcmp(__LINE__, uneq, $nInf, $NaN)
+ tcmp(__LINE__, uneq, 0, $NaN)
+ fcmp(__LINE__, uneq, 0, 1)
+ fcmp(__LINE__, uneq, 1, 0)
+ fcmp(__LINE__, uneq, $pInf, $nInf)
+ fcmp(__LINE__, uneq, 0, $nInf)
+
+ tcmp(__LINE__, unge, 1, 0)
+ tcmp(__LINE__, unge, 0, 0)
+ tcmp(__LINE__, unge, 1, 1)
+ tcmp(__LINE__, unge, $pInf, $nInf)
+ tcmp(__LINE__, unge, 0, $nInf)
+ tcmp(__LINE__, unge, $pInf, 0)
+ tcmp(__LINE__, unge, $NaN, 0)
+ tcmp(__LINE__, unge, $NaN, $NaN)
+ tcmp(__LINE__, unge, $nInf, $NaN)
+ tcmp(__LINE__, unge, 0, $NaN)
+ fcmp(__LINE__, unge, 0, 1)
+ fcmp(__LINE__, unge, $nInf, $pInf)
+ fcmp(__LINE__, unge, $nInf, 0)
+
+ tcmp(__LINE__, ungt, 1, 0)
+ tcmp(__LINE__, ungt, $pInf, $nInf)
+ tcmp(__LINE__, ungt, 0, $nInf)
+ tcmp(__LINE__, ungt, $pInf, 0)
+ tcmp(__LINE__, ungt, $NaN, 0)
+ tcmp(__LINE__, ungt, $NaN, $NaN)
+ tcmp(__LINE__, ungt, $nInf, $NaN)
+ tcmp(__LINE__, ungt, 0, $NaN)
+ fcmp(__LINE__, ungt, 0, 1)
+ fcmp(__LINE__, ungt, 0, 0)
+ fcmp(__LINE__, ungt, $nInf, $pInf)
+ fcmp(__LINE__, ungt, $nInf, 0)
+
+ tcmp(__LINE__, ltgt, 0, 1)
+ tcmp(__LINE__, ltgt, 1, 0)
+ tcmp(__LINE__, ltgt, $nInf, $pInf)
+ tcmp(__LINE__, ltgt, $pInf, $nInf)
+ tcmp(__LINE__, ltgt, 0, $nInf)
+ fcmp(__LINE__, ltgt, $NaN, $NaN)
+ fcmp(__LINE__, ltgt, $NaN, 0)
+ fcmp(__LINE__, ltgt, $nInf, $NaN)
+ fcmp(__LINE__, ltgt, 0, $NaN)
+ fcmp(__LINE__, ltgt, 0, 0)
+ fcmp(__LINE__, ltgt, 1, 1)
+
+ tcmp(__LINE__, ord, 0, 1)
+ tcmp(__LINE__, ord, 1, 0)
+ tcmp(__LINE__, ord, $nInf, $pInf)
+ tcmp(__LINE__, ord, $pInf, $nInf)
+ tcmp(__LINE__, ord, 0, $nInf)
+ tcmp(__LINE__, ord, 0, 0)
+ tcmp(__LINE__, ord, 1, 1)
+ fcmp(__LINE__, ord, $NaN, $NaN)
+ fcmp(__LINE__, ord, $NaN, 0)
+ fcmp(__LINE__, ord, $nInf, $NaN)
+ fcmp(__LINE__, ord, 0, $NaN)
+
+ tcmp(__LINE__, unord, $NaN, $NaN)
+ tcmp(__LINE__, unord, $NaN, 0)
+ tcmp(__LINE__, unord, $nInf, $NaN)
+ tcmp(__LINE__, unord, 0, $NaN)
+ fcmp(__LINE__, unord, 0, 1)
+ fcmp(__LINE__, unord, 1, 0)
+ fcmp(__LINE__, unord, $nInf, $pInf)
+ fcmp(__LINE__, unord, $pInf, $nInf)
+ fcmp(__LINE__, unord, 0, $nInf)
+ fcmp(__LINE__, unord, 0, 0)
+ fcmp(__LINE__, unord, 1, 1)
+
+ f2w(__LINE__, 0, 0)
+ f2w(__LINE__, 1, 1)
+ /* not all loongson agree on it */
+#if !__mips__
+ f2w(__LINE__, wninf, $nInf)
+#endif
+ f2w(__LINE__, wpinf, $pInf)
+ f2w(__LINE__, wnan, $NaN)
+
+ prepare
+ pushargi ok
+ ellipsis
+ finishi @puts
+
+ ret
+ epilog