aboutsummaryrefslogtreecommitdiffstats
path: root/test/regression
diff options
context:
space:
mode:
authorCyril SIX <cyril.six@kalray.eu>2019-10-16 17:13:05 +0200
committerCyril SIX <cyril.six@kalray.eu>2019-10-16 17:13:23 +0200
commit9ee131bd329d1941eb37eb347f36a0c613a719a9 (patch)
tree25760a2f9e796a0f3436463852bb819c288f0a50 /test/regression
parent72378d9371bc5da342266bcf14231ab568e0f919 (diff)
parente1725209b2b4401adc63ce5238fa5db7c134609c (diff)
downloadcompcert-kvx-9ee131bd329d1941eb37eb347f36a0c613a719a9.tar.gz
compcert-kvx-9ee131bd329d1941eb37eb347f36a0c613a719a9.zip
[regression to check!] Merge tag 'v3.6' into mppa-work
Conflicts: .gitignore backend/Lineartyping.v common/Values.v configure cparser/Machine.ml cparser/Machine.mli driver/Configuration.ml driver/Frontend.ml runtime/Makefile test/c/Makefile test/c/aes.c test/compression/Makefile test/regression/Makefile test/regression/extasm.c test/regression/floats-basics.c test/regression/floats.c Note : test/regression should be checked, didn't test it yet
Diffstat (limited to 'test/regression')
-rw-r--r--test/regression/Makefile3
-rw-r--r--test/regression/Results/builtins-aarch6415
-rw-r--r--test/regression/Results/floats-lit2
-rw-r--r--test/regression/builtins-aarch64.c47
-rw-r--r--test/regression/extasm.c13
-rw-r--r--test/regression/floats-basics.c14
-rw-r--r--test/regression/floats-lit.c559
-rw-r--r--test/regression/floats.c12
8 files changed, 638 insertions, 27 deletions
diff --git a/test/regression/Makefile b/test/regression/Makefile
index 09d12f9a..3447d6a5 100644
--- a/test/regression/Makefile
+++ b/test/regression/Makefile
@@ -9,7 +9,8 @@ LIBS=$(LIBMATH)
# Can run, both in compiled mode and in interpreter mode,
# and have reference output in Results
-TESTS?=int32 int64 floats floats-basics \
+
+TESTS?=int32 int64 floats floats-basics floats-lit \
expr1 expr6 funptr2 initializers initializers2 initializers3 \
volatile1 volatile2 volatile3 volatile4 \
funct3 expr5 struct7 struct8 struct11 struct12 casts1 casts2 char1 \
diff --git a/test/regression/Results/builtins-aarch64 b/test/regression/Results/builtins-aarch64
new file mode 100644
index 00000000..c70432d8
--- /dev/null
+++ b/test/regression/Results/builtins-aarch64
@@ -0,0 +1,15 @@
+bswap(12345678) = 78563412
+bswap16(1234) = 3412
+bswap64(123456789abcdef0) = f0debc9a78563412
+clz(12345678) = 3
+clzll(12345678) = 35
+clzll(1234567812345678) = 3
+cls(1234567) = 10
+cls(-9999) = 17
+clsll(1234567) = 42
+clsll(-9999) = 49
+fsqrt(3.141590) = 1.772453
+fmadd(3.141590, 2.718000, 1.414000) = 9.952842
+fmsub(3.141590, 2.718000, 1.414000) = -7.124842
+fnmadd(3.141590, 2.718000, 1.414000) = -9.952842
+fnmsub(3.141590, 2.718000, 1.414000) = 7.124842
diff --git a/test/regression/Results/floats-lit b/test/regression/Results/floats-lit
new file mode 100644
index 00000000..6cde72fb
--- /dev/null
+++ b/test/regression/Results/floats-lit
@@ -0,0 +1,2 @@
+--- Double-precision test
+--- Single-precision test
diff --git a/test/regression/builtins-aarch64.c b/test/regression/builtins-aarch64.c
new file mode 100644
index 00000000..2cfa2d09
--- /dev/null
+++ b/test/regression/builtins-aarch64.c
@@ -0,0 +1,47 @@
+/* Fun with builtin functions */
+
+#include <stdio.h>
+
+int main(int argc, char ** argv)
+{
+ unsigned int x = 0x12345678;
+ unsigned int y = 0xDEADBEEF;
+ unsigned long long xx = 0x1234567812345678ULL;
+ unsigned long long yy = 0x1234567800000000ULL;
+ unsigned long long zz = 0x123456789ABCDEF0ULL;
+ unsigned z;
+ double a = 3.14159;
+ double b = 2.718;
+ double c = 1.414;
+ unsigned short s = 0x1234;
+ signed int u = 1234567;
+ signed int v = -9999;
+
+ printf("bswap(%x) = %x\n", x, __builtin_bswap(x));
+ printf("bswap16(%x) = %x\n", s, __builtin_bswap16(s));
+ printf("bswap64(%llx) = %llx\n", zz, __builtin_bswap64(zz));
+ printf("clz(%x) = %d\n", x, __builtin_clz(x));
+ printf("clzll(%llx) = %d\n", (unsigned long long) x, __builtin_clzll(x));
+ printf("clzll(%llx) = %d\n", xx, __builtin_clzll(xx));
+ printf("cls(%d) = %d\n", u, __builtin_cls(u));
+ printf("cls(%d) = %d\n", v, __builtin_cls(v));
+ printf("clsll(%lld) = %d\n", (signed long long) u, __builtin_clsll(u));
+ printf("clsll(%lld) = %d\n", (signed long long) v, __builtin_clsll(v));
+
+ printf("fsqrt(%f) = %f\n", a, __builtin_fsqrt(a));
+ printf("fmadd(%f, %f, %f) = %f\n", a, b, c, __builtin_fmadd(a, b, c));
+ printf("fmsub(%f, %f, %f) = %f\n", a, b, c, __builtin_fmsub(a, b, c));
+ printf("fnmadd(%f, %f, %f) = %f\n", a, b, c, __builtin_fnmadd(a, b, c));
+ printf("fnmsub(%f, %f, %f) = %f\n", a, b, c, __builtin_fnmsub(a, b, c));
+
+ /* Make sure that ignoring the result of a builtin
+ doesn't cause an internal error */
+ (void) __builtin_bswap(x);
+ (void) __builtin_fsqrt(a);
+ return 0;
+}
+
+
+
+
+
diff --git a/test/regression/extasm.c b/test/regression/extasm.c
index 95628f7f..352b930b 100644
--- a/test/regression/extasm.c
+++ b/test/regression/extasm.c
@@ -5,14 +5,16 @@ int clobbers(int x, int z)
{
int y;
asm("TEST0 out:%0 in:%1" : "=r"(y) : "r"(x) : "cc"
-#if defined(__x86_64__)
+#if defined(ARCH_x86) && defined(MODEL_64)
, "rax", "rdx", "rbx"
-#elif defined(__i386__)
+#elif defined(ARCH_x86) && !defined(MODEL_64)
, "eax", "edx", "ebx"
-#elif defined(__arm__)
+#elif defined(ARCH_arm)
, "r0", "r1", "r4"
-#elif defined(__PPC__)
+#elif defined(ARCH_powerpc)
, "r0", "r3", "r4", "r31"
+#elif defined(ARCH_aarch64)
+ , "x0", "x1", "x16", "x29", "x30"
#endif
);
return y + z;
@@ -22,7 +24,8 @@ int clobbers(int x, int z)
|| (defined(ARCH_riscV) && defined(MODEL_64)) \
|| (defined(ARCH_powerpc) && defined(MODEL_ppc64)) \
|| (defined(ARCH_powerpc) && defined(MODEL_e5500)) \
- || (defined(ARCH_mppa_k1c) && defined(MODEL_64))
+ || (defined(ARCH_mppa_k1c) && defined(MODEL_64)) \
+ || defined(ARCH_aarch64)
#define SIXTYFOUR
#else
#undef SIXTYFOUR
diff --git a/test/regression/floats-basics.c b/test/regression/floats-basics.c
index a0225181..876a0d42 100644
--- a/test/regression/floats-basics.c
+++ b/test/regression/floats-basics.c
@@ -1,18 +1,10 @@
-#include<stdio.h>
-#include<stdlib.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include "../endian.h"
#define STR_EXPAND(tok) #tok
#define STR(tok) STR_EXPAND(tok)
-#if defined(__ppc__) || defined(__PPC__) || defined(__ARMEB__)
-#define ARCH_BIG_ENDIAN
-#elif defined(__i386__) || defined(__x86_64__) || defined(__ARMEL__) \
- || defined(__riscv) || defined(__K1C__)
-#undef ARCH_BIG_ENDIAN
-#else
-#error "unknown endianness"
-#endif
-
union converter64 {
double dbl;
struct {
diff --git a/test/regression/floats-lit.c b/test/regression/floats-lit.c
new file mode 100644
index 00000000..a1098faf
--- /dev/null
+++ b/test/regression/floats-lit.c
@@ -0,0 +1,559 @@
+#include <stdio.h>
+
+int error = 0;
+
+void dbl(double x, unsigned long long bits)
+{
+ union { double d; unsigned long long i; } u;
+ u.d = x;
+ if (u.i != bits) {
+ printf("Error: expected 0x%016llx, got 0x%016llx\n", bits, u.i);
+ error = 1;
+ }
+}
+
+void sng(float x, unsigned int bits)
+{
+ union { float f; unsigned int i; } u;
+ u.f = x;
+ if (u.i != bits) {
+ printf("Error: expected 0x%08x, got 0x%08x\n", bits, u.i);
+ error = 1;
+ }
+}
+
+void testdbl(void)
+{
+ printf("--- Double-precision test\n");
+ dbl(0.0, 0ULL);
+ dbl((-0.0), 0x8000000000000000ULL);
+ // The following are the "fmov immediate" of aarch64
+ // They include +1.0 and -1.0
+ dbl(0x1p-3, 0x3fc0000000000000ULL);
+ dbl(0x1.1p-3, 0x3fc1000000000000ULL);
+ dbl(0x1.2p-3, 0x3fc2000000000000ULL);
+ dbl(0x1.3p-3, 0x3fc3000000000000ULL);
+ dbl(0x1.4p-3, 0x3fc4000000000000ULL);
+ dbl(0x1.5p-3, 0x3fc5000000000000ULL);
+ dbl(0x1.6p-3, 0x3fc6000000000000ULL);
+ dbl(0x1.7p-3, 0x3fc7000000000000ULL);
+ dbl(0x1.8p-3, 0x3fc8000000000000ULL);
+ dbl(0x1.9p-3, 0x3fc9000000000000ULL);
+ dbl(0x1.ap-3, 0x3fca000000000000ULL);
+ dbl(0x1.bp-3, 0x3fcb000000000000ULL);
+ dbl(0x1.cp-3, 0x3fcc000000000000ULL);
+ dbl(0x1.dp-3, 0x3fcd000000000000ULL);
+ dbl(0x1.ep-3, 0x3fce000000000000ULL);
+ dbl(0x1.fp-3, 0x3fcf000000000000ULL);
+ dbl(0x1p-2, 0x3fd0000000000000ULL);
+ dbl(0x1.1p-2, 0x3fd1000000000000ULL);
+ dbl(0x1.2p-2, 0x3fd2000000000000ULL);
+ dbl(0x1.3p-2, 0x3fd3000000000000ULL);
+ dbl(0x1.4p-2, 0x3fd4000000000000ULL);
+ dbl(0x1.5p-2, 0x3fd5000000000000ULL);
+ dbl(0x1.6p-2, 0x3fd6000000000000ULL);
+ dbl(0x1.7p-2, 0x3fd7000000000000ULL);
+ dbl(0x1.8p-2, 0x3fd8000000000000ULL);
+ dbl(0x1.9p-2, 0x3fd9000000000000ULL);
+ dbl(0x1.ap-2, 0x3fda000000000000ULL);
+ dbl(0x1.bp-2, 0x3fdb000000000000ULL);
+ dbl(0x1.cp-2, 0x3fdc000000000000ULL);
+ dbl(0x1.dp-2, 0x3fdd000000000000ULL);
+ dbl(0x1.ep-2, 0x3fde000000000000ULL);
+ dbl(0x1.fp-2, 0x3fdf000000000000ULL);
+ dbl(0x1p-1, 0x3fe0000000000000ULL);
+ dbl(0x1.1p-1, 0x3fe1000000000000ULL);
+ dbl(0x1.2p-1, 0x3fe2000000000000ULL);
+ dbl(0x1.3p-1, 0x3fe3000000000000ULL);
+ dbl(0x1.4p-1, 0x3fe4000000000000ULL);
+ dbl(0x1.5p-1, 0x3fe5000000000000ULL);
+ dbl(0x1.6p-1, 0x3fe6000000000000ULL);
+ dbl(0x1.7p-1, 0x3fe7000000000000ULL);
+ dbl(0x1.8p-1, 0x3fe8000000000000ULL);
+ dbl(0x1.9p-1, 0x3fe9000000000000ULL);
+ dbl(0x1.ap-1, 0x3fea000000000000ULL);
+ dbl(0x1.bp-1, 0x3feb000000000000ULL);
+ dbl(0x1.cp-1, 0x3fec000000000000ULL);
+ dbl(0x1.dp-1, 0x3fed000000000000ULL);
+ dbl(0x1.ep-1, 0x3fee000000000000ULL);
+ dbl(0x1.fp-1, 0x3fef000000000000ULL);
+ dbl(0x1p+0, 0x3ff0000000000000ULL);
+ dbl(0x1.1p+0, 0x3ff1000000000000ULL);
+ dbl(0x1.2p+0, 0x3ff2000000000000ULL);
+ dbl(0x1.3p+0, 0x3ff3000000000000ULL);
+ dbl(0x1.4p+0, 0x3ff4000000000000ULL);
+ dbl(0x1.5p+0, 0x3ff5000000000000ULL);
+ dbl(0x1.6p+0, 0x3ff6000000000000ULL);
+ dbl(0x1.7p+0, 0x3ff7000000000000ULL);
+ dbl(0x1.8p+0, 0x3ff8000000000000ULL);
+ dbl(0x1.9p+0, 0x3ff9000000000000ULL);
+ dbl(0x1.ap+0, 0x3ffa000000000000ULL);
+ dbl(0x1.bp+0, 0x3ffb000000000000ULL);
+ dbl(0x1.cp+0, 0x3ffc000000000000ULL);
+ dbl(0x1.dp+0, 0x3ffd000000000000ULL);
+ dbl(0x1.ep+0, 0x3ffe000000000000ULL);
+ dbl(0x1.fp+0, 0x3fff000000000000ULL);
+ dbl(0x1p+1, 0x4000000000000000ULL);
+ dbl(0x1.1p+1, 0x4001000000000000ULL);
+ dbl(0x1.2p+1, 0x4002000000000000ULL);
+ dbl(0x1.3p+1, 0x4003000000000000ULL);
+ dbl(0x1.4p+1, 0x4004000000000000ULL);
+ dbl(0x1.5p+1, 0x4005000000000000ULL);
+ dbl(0x1.6p+1, 0x4006000000000000ULL);
+ dbl(0x1.7p+1, 0x4007000000000000ULL);
+ dbl(0x1.8p+1, 0x4008000000000000ULL);
+ dbl(0x1.9p+1, 0x4009000000000000ULL);
+ dbl(0x1.ap+1, 0x400a000000000000ULL);
+ dbl(0x1.bp+1, 0x400b000000000000ULL);
+ dbl(0x1.cp+1, 0x400c000000000000ULL);
+ dbl(0x1.dp+1, 0x400d000000000000ULL);
+ dbl(0x1.ep+1, 0x400e000000000000ULL);
+ dbl(0x1.fp+1, 0x400f000000000000ULL);
+ dbl(0x1p+2, 0x4010000000000000ULL);
+ dbl(0x1.1p+2, 0x4011000000000000ULL);
+ dbl(0x1.2p+2, 0x4012000000000000ULL);
+ dbl(0x1.3p+2, 0x4013000000000000ULL);
+ dbl(0x1.4p+2, 0x4014000000000000ULL);
+ dbl(0x1.5p+2, 0x4015000000000000ULL);
+ dbl(0x1.6p+2, 0x4016000000000000ULL);
+ dbl(0x1.7p+2, 0x4017000000000000ULL);
+ dbl(0x1.8p+2, 0x4018000000000000ULL);
+ dbl(0x1.9p+2, 0x4019000000000000ULL);
+ dbl(0x1.ap+2, 0x401a000000000000ULL);
+ dbl(0x1.bp+2, 0x401b000000000000ULL);
+ dbl(0x1.cp+2, 0x401c000000000000ULL);
+ dbl(0x1.dp+2, 0x401d000000000000ULL);
+ dbl(0x1.ep+2, 0x401e000000000000ULL);
+ dbl(0x1.fp+2, 0x401f000000000000ULL);
+ dbl(0x1p+3, 0x4020000000000000ULL);
+ dbl(0x1.1p+3, 0x4021000000000000ULL);
+ dbl(0x1.2p+3, 0x4022000000000000ULL);
+ dbl(0x1.3p+3, 0x4023000000000000ULL);
+ dbl(0x1.4p+3, 0x4024000000000000ULL);
+ dbl(0x1.5p+3, 0x4025000000000000ULL);
+ dbl(0x1.6p+3, 0x4026000000000000ULL);
+ dbl(0x1.7p+3, 0x4027000000000000ULL);
+ dbl(0x1.8p+3, 0x4028000000000000ULL);
+ dbl(0x1.9p+3, 0x4029000000000000ULL);
+ dbl(0x1.ap+3, 0x402a000000000000ULL);
+ dbl(0x1.bp+3, 0x402b000000000000ULL);
+ dbl(0x1.cp+3, 0x402c000000000000ULL);
+ dbl(0x1.dp+3, 0x402d000000000000ULL);
+ dbl(0x1.ep+3, 0x402e000000000000ULL);
+ dbl(0x1.fp+3, 0x402f000000000000ULL);
+ dbl(0x1p+4, 0x4030000000000000ULL);
+ dbl(0x1.1p+4, 0x4031000000000000ULL);
+ dbl(0x1.2p+4, 0x4032000000000000ULL);
+ dbl(0x1.3p+4, 0x4033000000000000ULL);
+ dbl(0x1.4p+4, 0x4034000000000000ULL);
+ dbl(0x1.5p+4, 0x4035000000000000ULL);
+ dbl(0x1.6p+4, 0x4036000000000000ULL);
+ dbl(0x1.7p+4, 0x4037000000000000ULL);
+ dbl(0x1.8p+4, 0x4038000000000000ULL);
+ dbl(0x1.9p+4, 0x4039000000000000ULL);
+ dbl(0x1.ap+4, 0x403a000000000000ULL);
+ dbl(0x1.bp+4, 0x403b000000000000ULL);
+ dbl(0x1.cp+4, 0x403c000000000000ULL);
+ dbl(0x1.dp+4, 0x403d000000000000ULL);
+ dbl(0x1.ep+4, 0x403e000000000000ULL);
+ dbl(0x1.fp+4, 0x403f000000000000ULL);
+ dbl((-0x1p-3), 0xbfc0000000000000ULL);
+ dbl((-0x1.1p-3), 0xbfc1000000000000ULL);
+ dbl((-0x1.2p-3), 0xbfc2000000000000ULL);
+ dbl((-0x1.3p-3), 0xbfc3000000000000ULL);
+ dbl((-0x1.4p-3), 0xbfc4000000000000ULL);
+ dbl((-0x1.5p-3), 0xbfc5000000000000ULL);
+ dbl((-0x1.6p-3), 0xbfc6000000000000ULL);
+ dbl((-0x1.7p-3), 0xbfc7000000000000ULL);
+ dbl((-0x1.8p-3), 0xbfc8000000000000ULL);
+ dbl((-0x1.9p-3), 0xbfc9000000000000ULL);
+ dbl((-0x1.ap-3), 0xbfca000000000000ULL);
+ dbl((-0x1.bp-3), 0xbfcb000000000000ULL);
+ dbl((-0x1.cp-3), 0xbfcc000000000000ULL);
+ dbl((-0x1.dp-3), 0xbfcd000000000000ULL);
+ dbl((-0x1.ep-3), 0xbfce000000000000ULL);
+ dbl((-0x1.fp-3), 0xbfcf000000000000ULL);
+ dbl((-0x1p-2), 0xbfd0000000000000ULL);
+ dbl((-0x1.1p-2), 0xbfd1000000000000ULL);
+ dbl((-0x1.2p-2), 0xbfd2000000000000ULL);
+ dbl((-0x1.3p-2), 0xbfd3000000000000ULL);
+ dbl((-0x1.4p-2), 0xbfd4000000000000ULL);
+ dbl((-0x1.5p-2), 0xbfd5000000000000ULL);
+ dbl((-0x1.6p-2), 0xbfd6000000000000ULL);
+ dbl((-0x1.7p-2), 0xbfd7000000000000ULL);
+ dbl((-0x1.8p-2), 0xbfd8000000000000ULL);
+ dbl((-0x1.9p-2), 0xbfd9000000000000ULL);
+ dbl((-0x1.ap-2), 0xbfda000000000000ULL);
+ dbl((-0x1.bp-2), 0xbfdb000000000000ULL);
+ dbl((-0x1.cp-2), 0xbfdc000000000000ULL);
+ dbl((-0x1.dp-2), 0xbfdd000000000000ULL);
+ dbl((-0x1.ep-2), 0xbfde000000000000ULL);
+ dbl((-0x1.fp-2), 0xbfdf000000000000ULL);
+ dbl((-0x1p-1), 0xbfe0000000000000ULL);
+ dbl((-0x1.1p-1), 0xbfe1000000000000ULL);
+ dbl((-0x1.2p-1), 0xbfe2000000000000ULL);
+ dbl((-0x1.3p-1), 0xbfe3000000000000ULL);
+ dbl((-0x1.4p-1), 0xbfe4000000000000ULL);
+ dbl((-0x1.5p-1), 0xbfe5000000000000ULL);
+ dbl((-0x1.6p-1), 0xbfe6000000000000ULL);
+ dbl((-0x1.7p-1), 0xbfe7000000000000ULL);
+ dbl((-0x1.8p-1), 0xbfe8000000000000ULL);
+ dbl((-0x1.9p-1), 0xbfe9000000000000ULL);
+ dbl((-0x1.ap-1), 0xbfea000000000000ULL);
+ dbl((-0x1.bp-1), 0xbfeb000000000000ULL);
+ dbl((-0x1.cp-1), 0xbfec000000000000ULL);
+ dbl((-0x1.dp-1), 0xbfed000000000000ULL);
+ dbl((-0x1.ep-1), 0xbfee000000000000ULL);
+ dbl((-0x1.fp-1), 0xbfef000000000000ULL);
+ dbl((-0x1p+0), 0xbff0000000000000ULL);
+ dbl((-0x1.1p+0), 0xbff1000000000000ULL);
+ dbl((-0x1.2p+0), 0xbff2000000000000ULL);
+ dbl((-0x1.3p+0), 0xbff3000000000000ULL);
+ dbl((-0x1.4p+0), 0xbff4000000000000ULL);
+ dbl((-0x1.5p+0), 0xbff5000000000000ULL);
+ dbl((-0x1.6p+0), 0xbff6000000000000ULL);
+ dbl((-0x1.7p+0), 0xbff7000000000000ULL);
+ dbl((-0x1.8p+0), 0xbff8000000000000ULL);
+ dbl((-0x1.9p+0), 0xbff9000000000000ULL);
+ dbl((-0x1.ap+0), 0xbffa000000000000ULL);
+ dbl((-0x1.bp+0), 0xbffb000000000000ULL);
+ dbl((-0x1.cp+0), 0xbffc000000000000ULL);
+ dbl((-0x1.dp+0), 0xbffd000000000000ULL);
+ dbl((-0x1.ep+0), 0xbffe000000000000ULL);
+ dbl((-0x1.fp+0), 0xbfff000000000000ULL);
+ dbl((-0x1p+1), 0xc000000000000000ULL);
+ dbl((-0x1.1p+1), 0xc001000000000000ULL);
+ dbl((-0x1.2p+1), 0xc002000000000000ULL);
+ dbl((-0x1.3p+1), 0xc003000000000000ULL);
+ dbl((-0x1.4p+1), 0xc004000000000000ULL);
+ dbl((-0x1.5p+1), 0xc005000000000000ULL);
+ dbl((-0x1.6p+1), 0xc006000000000000ULL);
+ dbl((-0x1.7p+1), 0xc007000000000000ULL);
+ dbl((-0x1.8p+1), 0xc008000000000000ULL);
+ dbl((-0x1.9p+1), 0xc009000000000000ULL);
+ dbl((-0x1.ap+1), 0xc00a000000000000ULL);
+ dbl((-0x1.bp+1), 0xc00b000000000000ULL);
+ dbl((-0x1.cp+1), 0xc00c000000000000ULL);
+ dbl((-0x1.dp+1), 0xc00d000000000000ULL);
+ dbl((-0x1.ep+1), 0xc00e000000000000ULL);
+ dbl((-0x1.fp+1), 0xc00f000000000000ULL);
+ dbl((-0x1p+2), 0xc010000000000000ULL);
+ dbl((-0x1.1p+2), 0xc011000000000000ULL);
+ dbl((-0x1.2p+2), 0xc012000000000000ULL);
+ dbl((-0x1.3p+2), 0xc013000000000000ULL);
+ dbl((-0x1.4p+2), 0xc014000000000000ULL);
+ dbl((-0x1.5p+2), 0xc015000000000000ULL);
+ dbl((-0x1.6p+2), 0xc016000000000000ULL);
+ dbl((-0x1.7p+2), 0xc017000000000000ULL);
+ dbl((-0x1.8p+2), 0xc018000000000000ULL);
+ dbl((-0x1.9p+2), 0xc019000000000000ULL);
+ dbl((-0x1.ap+2), 0xc01a000000000000ULL);
+ dbl((-0x1.bp+2), 0xc01b000000000000ULL);
+ dbl((-0x1.cp+2), 0xc01c000000000000ULL);
+ dbl((-0x1.dp+2), 0xc01d000000000000ULL);
+ dbl((-0x1.ep+2), 0xc01e000000000000ULL);
+ dbl((-0x1.fp+2), 0xc01f000000000000ULL);
+ dbl((-0x1p+3), 0xc020000000000000ULL);
+ dbl((-0x1.1p+3), 0xc021000000000000ULL);
+ dbl((-0x1.2p+3), 0xc022000000000000ULL);
+ dbl((-0x1.3p+3), 0xc023000000000000ULL);
+ dbl((-0x1.4p+3), 0xc024000000000000ULL);
+ dbl((-0x1.5p+3), 0xc025000000000000ULL);
+ dbl((-0x1.6p+3), 0xc026000000000000ULL);
+ dbl((-0x1.7p+3), 0xc027000000000000ULL);
+ dbl((-0x1.8p+3), 0xc028000000000000ULL);
+ dbl((-0x1.9p+3), 0xc029000000000000ULL);
+ dbl((-0x1.ap+3), 0xc02a000000000000ULL);
+ dbl((-0x1.bp+3), 0xc02b000000000000ULL);
+ dbl((-0x1.cp+3), 0xc02c000000000000ULL);
+ dbl((-0x1.dp+3), 0xc02d000000000000ULL);
+ dbl((-0x1.ep+3), 0xc02e000000000000ULL);
+ dbl((-0x1.fp+3), 0xc02f000000000000ULL);
+ dbl((-0x1p+4), 0xc030000000000000ULL);
+ dbl((-0x1.1p+4), 0xc031000000000000ULL);
+ dbl((-0x1.2p+4), 0xc032000000000000ULL);
+ dbl((-0x1.3p+4), 0xc033000000000000ULL);
+ dbl((-0x1.4p+4), 0xc034000000000000ULL);
+ dbl((-0x1.5p+4), 0xc035000000000000ULL);
+ dbl((-0x1.6p+4), 0xc036000000000000ULL);
+ dbl((-0x1.7p+4), 0xc037000000000000ULL);
+ dbl((-0x1.8p+4), 0xc038000000000000ULL);
+ dbl((-0x1.9p+4), 0xc039000000000000ULL);
+ dbl((-0x1.ap+4), 0xc03a000000000000ULL);
+ dbl((-0x1.bp+4), 0xc03b000000000000ULL);
+ dbl((-0x1.cp+4), 0xc03c000000000000ULL);
+ dbl((-0x1.dp+4), 0xc03d000000000000ULL);
+ dbl((-0x1.ep+4), 0xc03e000000000000ULL);
+ dbl((-0x1.fp+4), 0xc03f000000000000ULL);
+}
+
+void testsng(void)
+{
+ printf("--- Single-precision test\n");
+ sng(0x0p+0, 0x0U);
+ sng(-0x0p+0, 0x80000000U);
+ sng(0x1p-3, 0x3e000000U);
+ sng(0x1.1p-3, 0x3e080000U);
+ sng(0x1.2p-3, 0x3e100000U);
+ sng(0x1.3p-3, 0x3e180000U);
+ sng(0x1.4p-3, 0x3e200000U);
+ sng(0x1.5p-3, 0x3e280000U);
+ sng(0x1.6p-3, 0x3e300000U);
+ sng(0x1.7p-3, 0x3e380000U);
+ sng(0x1.8p-3, 0x3e400000U);
+ sng(0x1.9p-3, 0x3e480000U);
+ sng(0x1.ap-3, 0x3e500000U);
+ sng(0x1.bp-3, 0x3e580000U);
+ sng(0x1.cp-3, 0x3e600000U);
+ sng(0x1.dp-3, 0x3e680000U);
+ sng(0x1.ep-3, 0x3e700000U);
+ sng(0x1.fp-3, 0x3e780000U);
+ sng(0x1p-2, 0x3e800000U);
+ sng(0x1.1p-2, 0x3e880000U);
+ sng(0x1.2p-2, 0x3e900000U);
+ sng(0x1.3p-2, 0x3e980000U);
+ sng(0x1.4p-2, 0x3ea00000U);
+ sng(0x1.5p-2, 0x3ea80000U);
+ sng(0x1.6p-2, 0x3eb00000U);
+ sng(0x1.7p-2, 0x3eb80000U);
+ sng(0x1.8p-2, 0x3ec00000U);
+ sng(0x1.9p-2, 0x3ec80000U);
+ sng(0x1.ap-2, 0x3ed00000U);
+ sng(0x1.bp-2, 0x3ed80000U);
+ sng(0x1.cp-2, 0x3ee00000U);
+ sng(0x1.dp-2, 0x3ee80000U);
+ sng(0x1.ep-2, 0x3ef00000U);
+ sng(0x1.fp-2, 0x3ef80000U);
+ sng(0x1p-1, 0x3f000000U);
+ sng(0x1.1p-1, 0x3f080000U);
+ sng(0x1.2p-1, 0x3f100000U);
+ sng(0x1.3p-1, 0x3f180000U);
+ sng(0x1.4p-1, 0x3f200000U);
+ sng(0x1.5p-1, 0x3f280000U);
+ sng(0x1.6p-1, 0x3f300000U);
+ sng(0x1.7p-1, 0x3f380000U);
+ sng(0x1.8p-1, 0x3f400000U);
+ sng(0x1.9p-1, 0x3f480000U);
+ sng(0x1.ap-1, 0x3f500000U);
+ sng(0x1.bp-1, 0x3f580000U);
+ sng(0x1.cp-1, 0x3f600000U);
+ sng(0x1.dp-1, 0x3f680000U);
+ sng(0x1.ep-1, 0x3f700000U);
+ sng(0x1.fp-1, 0x3f780000U);
+ sng(0x1p+0, 0x3f800000U);
+ sng(0x1.1p+0, 0x3f880000U);
+ sng(0x1.2p+0, 0x3f900000U);
+ sng(0x1.3p+0, 0x3f980000U);
+ sng(0x1.4p+0, 0x3fa00000U);
+ sng(0x1.5p+0, 0x3fa80000U);
+ sng(0x1.6p+0, 0x3fb00000U);
+ sng(0x1.7p+0, 0x3fb80000U);
+ sng(0x1.8p+0, 0x3fc00000U);
+ sng(0x1.9p+0, 0x3fc80000U);
+ sng(0x1.ap+0, 0x3fd00000U);
+ sng(0x1.bp+0, 0x3fd80000U);
+ sng(0x1.cp+0, 0x3fe00000U);
+ sng(0x1.dp+0, 0x3fe80000U);
+ sng(0x1.ep+0, 0x3ff00000U);
+ sng(0x1.fp+0, 0x3ff80000U);
+ sng(0x1p+1, 0x40000000U);
+ sng(0x1.1p+1, 0x40080000U);
+ sng(0x1.2p+1, 0x40100000U);
+ sng(0x1.3p+1, 0x40180000U);
+ sng(0x1.4p+1, 0x40200000U);
+ sng(0x1.5p+1, 0x40280000U);
+ sng(0x1.6p+1, 0x40300000U);
+ sng(0x1.7p+1, 0x40380000U);
+ sng(0x1.8p+1, 0x40400000U);
+ sng(0x1.9p+1, 0x40480000U);
+ sng(0x1.ap+1, 0x40500000U);
+ sng(0x1.bp+1, 0x40580000U);
+ sng(0x1.cp+1, 0x40600000U);
+ sng(0x1.dp+1, 0x40680000U);
+ sng(0x1.ep+1, 0x40700000U);
+ sng(0x1.fp+1, 0x40780000U);
+ sng(0x1p+2, 0x40800000U);
+ sng(0x1.1p+2, 0x40880000U);
+ sng(0x1.2p+2, 0x40900000U);
+ sng(0x1.3p+2, 0x40980000U);
+ sng(0x1.4p+2, 0x40a00000U);
+ sng(0x1.5p+2, 0x40a80000U);
+ sng(0x1.6p+2, 0x40b00000U);
+ sng(0x1.7p+2, 0x40b80000U);
+ sng(0x1.8p+2, 0x40c00000U);
+ sng(0x1.9p+2, 0x40c80000U);
+ sng(0x1.ap+2, 0x40d00000U);
+ sng(0x1.bp+2, 0x40d80000U);
+ sng(0x1.cp+2, 0x40e00000U);
+ sng(0x1.dp+2, 0x40e80000U);
+ sng(0x1.ep+2, 0x40f00000U);
+ sng(0x1.fp+2, 0x40f80000U);
+ sng(0x1p+3, 0x41000000U);
+ sng(0x1.1p+3, 0x41080000U);
+ sng(0x1.2p+3, 0x41100000U);
+ sng(0x1.3p+3, 0x41180000U);
+ sng(0x1.4p+3, 0x41200000U);
+ sng(0x1.5p+3, 0x41280000U);
+ sng(0x1.6p+3, 0x41300000U);
+ sng(0x1.7p+3, 0x41380000U);
+ sng(0x1.8p+3, 0x41400000U);
+ sng(0x1.9p+3, 0x41480000U);
+ sng(0x1.ap+3, 0x41500000U);
+ sng(0x1.bp+3, 0x41580000U);
+ sng(0x1.cp+3, 0x41600000U);
+ sng(0x1.dp+3, 0x41680000U);
+ sng(0x1.ep+3, 0x41700000U);
+ sng(0x1.fp+3, 0x41780000U);
+ sng(0x1p+4, 0x41800000U);
+ sng(0x1.1p+4, 0x41880000U);
+ sng(0x1.2p+4, 0x41900000U);
+ sng(0x1.3p+4, 0x41980000U);
+ sng(0x1.4p+4, 0x41a00000U);
+ sng(0x1.5p+4, 0x41a80000U);
+ sng(0x1.6p+4, 0x41b00000U);
+ sng(0x1.7p+4, 0x41b80000U);
+ sng(0x1.8p+4, 0x41c00000U);
+ sng(0x1.9p+4, 0x41c80000U);
+ sng(0x1.ap+4, 0x41d00000U);
+ sng(0x1.bp+4, 0x41d80000U);
+ sng(0x1.cp+4, 0x41e00000U);
+ sng(0x1.dp+4, 0x41e80000U);
+ sng(0x1.ep+4, 0x41f00000U);
+ sng(0x1.fp+4, 0x41f80000U);
+ sng(-0x1p-3, 0xbe000000U);
+ sng(-0x1.1p-3, 0xbe080000U);
+ sng(-0x1.2p-3, 0xbe100000U);
+ sng(-0x1.3p-3, 0xbe180000U);
+ sng(-0x1.4p-3, 0xbe200000U);
+ sng(-0x1.5p-3, 0xbe280000U);
+ sng(-0x1.6p-3, 0xbe300000U);
+ sng(-0x1.7p-3, 0xbe380000U);
+ sng(-0x1.8p-3, 0xbe400000U);
+ sng(-0x1.9p-3, 0xbe480000U);
+ sng(-0x1.ap-3, 0xbe500000U);
+ sng(-0x1.bp-3, 0xbe580000U);
+ sng(-0x1.cp-3, 0xbe600000U);
+ sng(-0x1.dp-3, 0xbe680000U);
+ sng(-0x1.ep-3, 0xbe700000U);
+ sng(-0x1.fp-3, 0xbe780000U);
+ sng(-0x1p-2, 0xbe800000U);
+ sng(-0x1.1p-2, 0xbe880000U);
+ sng(-0x1.2p-2, 0xbe900000U);
+ sng(-0x1.3p-2, 0xbe980000U);
+ sng(-0x1.4p-2, 0xbea00000U);
+ sng(-0x1.5p-2, 0xbea80000U);
+ sng(-0x1.6p-2, 0xbeb00000U);
+ sng(-0x1.7p-2, 0xbeb80000U);
+ sng(-0x1.8p-2, 0xbec00000U);
+ sng(-0x1.9p-2, 0xbec80000U);
+ sng(-0x1.ap-2, 0xbed00000U);
+ sng(-0x1.bp-2, 0xbed80000U);
+ sng(-0x1.cp-2, 0xbee00000U);
+ sng(-0x1.dp-2, 0xbee80000U);
+ sng(-0x1.ep-2, 0xbef00000U);
+ sng(-0x1.fp-2, 0xbef80000U);
+ sng(-0x1p-1, 0xbf000000U);
+ sng(-0x1.1p-1, 0xbf080000U);
+ sng(-0x1.2p-1, 0xbf100000U);
+ sng(-0x1.3p-1, 0xbf180000U);
+ sng(-0x1.4p-1, 0xbf200000U);
+ sng(-0x1.5p-1, 0xbf280000U);
+ sng(-0x1.6p-1, 0xbf300000U);
+ sng(-0x1.7p-1, 0xbf380000U);
+ sng(-0x1.8p-1, 0xbf400000U);
+ sng(-0x1.9p-1, 0xbf480000U);
+ sng(-0x1.ap-1, 0xbf500000U);
+ sng(-0x1.bp-1, 0xbf580000U);
+ sng(-0x1.cp-1, 0xbf600000U);
+ sng(-0x1.dp-1, 0xbf680000U);
+ sng(-0x1.ep-1, 0xbf700000U);
+ sng(-0x1.fp-1, 0xbf780000U);
+ sng(-0x1p+0, 0xbf800000U);
+ sng(-0x1.1p+0, 0xbf880000U);
+ sng(-0x1.2p+0, 0xbf900000U);
+ sng(-0x1.3p+0, 0xbf980000U);
+ sng(-0x1.4p+0, 0xbfa00000U);
+ sng(-0x1.5p+0, 0xbfa80000U);
+ sng(-0x1.6p+0, 0xbfb00000U);
+ sng(-0x1.7p+0, 0xbfb80000U);
+ sng(-0x1.8p+0, 0xbfc00000U);
+ sng(-0x1.9p+0, 0xbfc80000U);
+ sng(-0x1.ap+0, 0xbfd00000U);
+ sng(-0x1.bp+0, 0xbfd80000U);
+ sng(-0x1.cp+0, 0xbfe00000U);
+ sng(-0x1.dp+0, 0xbfe80000U);
+ sng(-0x1.ep+0, 0xbff00000U);
+ sng(-0x1.fp+0, 0xbff80000U);
+ sng(-0x1p+1, 0xc0000000U);
+ sng(-0x1.1p+1, 0xc0080000U);
+ sng(-0x1.2p+1, 0xc0100000U);
+ sng(-0x1.3p+1, 0xc0180000U);
+ sng(-0x1.4p+1, 0xc0200000U);
+ sng(-0x1.5p+1, 0xc0280000U);
+ sng(-0x1.6p+1, 0xc0300000U);
+ sng(-0x1.7p+1, 0xc0380000U);
+ sng(-0x1.8p+1, 0xc0400000U);
+ sng(-0x1.9p+1, 0xc0480000U);
+ sng(-0x1.ap+1, 0xc0500000U);
+ sng(-0x1.bp+1, 0xc0580000U);
+ sng(-0x1.cp+1, 0xc0600000U);
+ sng(-0x1.dp+1, 0xc0680000U);
+ sng(-0x1.ep+1, 0xc0700000U);
+ sng(-0x1.fp+1, 0xc0780000U);
+ sng(-0x1p+2, 0xc0800000U);
+ sng(-0x1.1p+2, 0xc0880000U);
+ sng(-0x1.2p+2, 0xc0900000U);
+ sng(-0x1.3p+2, 0xc0980000U);
+ sng(-0x1.4p+2, 0xc0a00000U);
+ sng(-0x1.5p+2, 0xc0a80000U);
+ sng(-0x1.6p+2, 0xc0b00000U);
+ sng(-0x1.7p+2, 0xc0b80000U);
+ sng(-0x1.8p+2, 0xc0c00000U);
+ sng(-0x1.9p+2, 0xc0c80000U);
+ sng(-0x1.ap+2, 0xc0d00000U);
+ sng(-0x1.bp+2, 0xc0d80000U);
+ sng(-0x1.cp+2, 0xc0e00000U);
+ sng(-0x1.dp+2, 0xc0e80000U);
+ sng(-0x1.ep+2, 0xc0f00000U);
+ sng(-0x1.fp+2, 0xc0f80000U);
+ sng(-0x1p+3, 0xc1000000U);
+ sng(-0x1.1p+3, 0xc1080000U);
+ sng(-0x1.2p+3, 0xc1100000U);
+ sng(-0x1.3p+3, 0xc1180000U);
+ sng(-0x1.4p+3, 0xc1200000U);
+ sng(-0x1.5p+3, 0xc1280000U);
+ sng(-0x1.6p+3, 0xc1300000U);
+ sng(-0x1.7p+3, 0xc1380000U);
+ sng(-0x1.8p+3, 0xc1400000U);
+ sng(-0x1.9p+3, 0xc1480000U);
+ sng(-0x1.ap+3, 0xc1500000U);
+ sng(-0x1.bp+3, 0xc1580000U);
+ sng(-0x1.cp+3, 0xc1600000U);
+ sng(-0x1.dp+3, 0xc1680000U);
+ sng(-0x1.ep+3, 0xc1700000U);
+ sng(-0x1.fp+3, 0xc1780000U);
+ sng(-0x1p+4, 0xc1800000U);
+ sng(-0x1.1p+4, 0xc1880000U);
+ sng(-0x1.2p+4, 0xc1900000U);
+ sng(-0x1.3p+4, 0xc1980000U);
+ sng(-0x1.4p+4, 0xc1a00000U);
+ sng(-0x1.5p+4, 0xc1a80000U);
+ sng(-0x1.6p+4, 0xc1b00000U);
+ sng(-0x1.7p+4, 0xc1b80000U);
+ sng(-0x1.8p+4, 0xc1c00000U);
+ sng(-0x1.9p+4, 0xc1c80000U);
+ sng(-0x1.ap+4, 0xc1d00000U);
+ sng(-0x1.bp+4, 0xc1d80000U);
+ sng(-0x1.cp+4, 0xc1e00000U);
+ sng(-0x1.dp+4, 0xc1e80000U);
+ sng(-0x1.ep+4, 0xc1f00000U);
+ sng(-0x1.fp+4, 0xc1f80000U);
+}
+
+
+int main()
+{
+ testdbl();
+ testsng();
+ return error;
+}
diff --git a/test/regression/floats.c b/test/regression/floats.c
index 55c9fd26..58c202ae 100644
--- a/test/regression/floats.c
+++ b/test/regression/floats.c
@@ -1,17 +1,9 @@
-#include<stdio.h>
+#include <stdio.h>
+#include "../endian.h"
#define STR_EXPAND(tok) #tok
#define STR(tok) STR_EXPAND(tok)
-#if defined(__ppc__) || defined(__PPC__) || defined(__ARMEB__)
-#define ARCH_BIG_ENDIAN
-#elif defined(__i386__) || defined(__x86_64__) || defined(__ARMEL__) \
- || defined(__riscv) || defined(__K1C__)
-#undef ARCH_BIG_ENDIAN
-#else
-#error "unknown endianness"
-#endif
-
union converter64 {
double dbl;
struct {