guile-commits
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Guile-commits] 42/86: Add comr/negr tests


From: Andy Wingo
Subject: [Guile-commits] 42/86: Add comr/negr tests
Date: Wed, 3 Apr 2019 11:38:56 -0400 (EDT)

wingo pushed a commit to branch lightening
in repository guile.

commit a20146777d01f9da75409dc1b4cc94788d7564db
Author: Andy Wingo <address@hidden>
Date:   Tue Mar 26 09:58:33 2019 +0100

    Add comr/negr tests
---
 .gitignore          |  4 ++++
 tests/test-comr.c   | 45 +++++++++++++++++++++++++++++++++++++++++++++
 tests/test-negr.c   | 43 +++++++++++++++++++++++++++++++++++++++++++
 tests/test-negr_d.c | 30 ++++++++++++++++++++++++++++++
 tests/test-negr_f.c | 30 ++++++++++++++++++++++++++++++
 5 files changed, 152 insertions(+)

diff --git a/.gitignore b/.gitignore
index 10e673b..90d3544 100644
--- a/.gitignore
+++ b/.gitignore
@@ -35,3 +35,7 @@
 /tests/test-rshr
 /tests/test-rshr_u
 /tests/test-rshi_u
+/tests/test-comr
+/tests/test-negr
+/tests/test-negr_d
+/tests/test-negr_f
diff --git a/tests/test-comr.c b/tests/test-comr.c
new file mode 100644
index 0000000..608c374
--- /dev/null
+++ b/tests/test-comr.c
@@ -0,0 +1,45 @@
+#include "test.h"
+
+static void
+run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
+{
+  jit_begin(j, arena_base, arena_size);
+
+  const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX };
+  jit_arg_t args[1];
+  const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } };
+
+  jit_receive(j, 1, abi, args);
+  jit_load_args(j, 1, abi, args, regs);
+
+  jit_comr(j, JIT_R0, JIT_R0);
+  jit_retr(j, JIT_R0);
+
+  intmax_t (*f)(intmax_t) = jit_end(j, NULL);
+
+#if __WORDSIZE == 32
+  ASSERT(f(0) == 0xffffffff);
+  ASSERT(f(1) == 0xfffffffe);
+  ASSERT(f(0xffffffff) == 0);
+  ASSERT(f(0x80000000) == 0x7fffffff);
+  ASSERT(f(0x7fffffff) == 0x80000000);
+  ASSERT(f(0x80000001) == 0x7ffffffe);
+#else
+  ASSERT(f(0) == 0xffffffffffffffff);
+  ASSERT(f(1) == 0xfffffffffffffffe);
+  ASSERT(f(0xffffffff) == 0xffffffff00000000);
+  ASSERT(f(0x80000000) == 0xffffffff7fffffff);
+  ASSERT(f(0x7fffffff) == 0xffffffff80000000);
+  ASSERT(f(0x80000001) == 0xffffffff7ffffffe);
+  ASSERT(f(0xffffffffffffffff) == 0);
+  ASSERT(f(0x8000000000000000) == 0x7fffffffffffffff);
+  ASSERT(f(0x7fffffffffffffff) == 0x8000000000000000);
+  ASSERT(f(0x8000000000000001) == 0x7ffffffffffffffe);
+#endif
+}
+
+int
+main (int argc, char *argv[])
+{
+  return main_helper(argc, argv, run_test);
+}
diff --git a/tests/test-negr.c b/tests/test-negr.c
new file mode 100644
index 0000000..5a5c5c1
--- /dev/null
+++ b/tests/test-negr.c
@@ -0,0 +1,43 @@
+#include "test.h"
+
+static void
+run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
+{
+  jit_begin(j, arena_base, arena_size);
+
+  const jit_arg_abi_t abi[] = { JIT_ARG_ABI_INTMAX };
+  jit_arg_t args[1];
+  const jit_anyreg_t regs[] = { { .gpr=JIT_R0 } };
+
+  jit_receive(j, 1, abi, args);
+  jit_load_args(j, 1, abi, args, regs);
+
+  jit_negr(j, JIT_R0, JIT_R0);
+  jit_retr(j, JIT_R0);
+
+  intmax_t (*f)(intmax_t) = jit_end(j, NULL);
+
+  ASSERT(f(0) == 0);
+#if __WORDSIZE == 32
+  ASSERT(f(1) == 0xffffffff);
+  ASSERT(f(0xffffffff) == 1);
+  ASSERT(f(0x80000000) == 0x80000000);
+  ASSERT(f(0x7fffffff) == 0x80000001);
+  ASSERT(f(0x80000001) == 0x7fffffff);
+#else
+  ASSERT(f(1) == 0xffffffffffffffff);
+  ASSERT(f(0xffffffff) == 0xffffffff00000001);
+  ASSERT(f(0x80000000) == 0xffffffff80000000);
+  ASSERT(f(0x7fffffff) == 0xffffffff80000001);
+  ASSERT(f(0x80000001) == 0xffffffff7fffffff);
+  ASSERT(f(0xffffffffffffffff) == 1);
+  ASSERT(f(0x8000000000000000) == 0x8000000000000000);
+  ASSERT(f(0x7fffffffffffffff) == 0x8000000000000001);
+#endif
+}
+
+int
+main (int argc, char *argv[])
+{
+  return main_helper(argc, argv, run_test);
+}
diff --git a/tests/test-negr_d.c b/tests/test-negr_d.c
new file mode 100644
index 0000000..1af229b
--- /dev/null
+++ b/tests/test-negr_d.c
@@ -0,0 +1,30 @@
+#include "test.h"
+
+static void
+run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
+{
+  jit_begin(j, arena_base, arena_size);
+
+  const jit_arg_abi_t abi[] = { JIT_ARG_ABI_DOUBLE };
+  jit_arg_t args[1];
+  const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } };
+
+  jit_receive(j, 1, abi, args);
+  jit_load_args(j, 1, abi, args, regs);
+
+  jit_negr_d(j, JIT_F0, JIT_F0);
+  jit_retr_d(j, JIT_F0);
+
+  double (*f)(double) = jit_end(j, NULL);
+
+  ASSERT(f(0.0) == -0.0);
+  ASSERT(f(0.5) == -0.5);
+  ASSERT(f(1.0 / 0.0) == -1.0 / 0.0);
+  ASSERT(f(-1.25) == 1.25);
+}
+
+int
+main (int argc, char *argv[])
+{
+  return main_helper(argc, argv, run_test);
+}
diff --git a/tests/test-negr_f.c b/tests/test-negr_f.c
new file mode 100644
index 0000000..cdc1ccd
--- /dev/null
+++ b/tests/test-negr_f.c
@@ -0,0 +1,30 @@
+#include "test.h"
+
+static void
+run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
+{
+  jit_begin(j, arena_base, arena_size);
+
+  const jit_arg_abi_t abi[] = { JIT_ARG_ABI_FLOAT };
+  jit_arg_t args[1];
+  const jit_anyreg_t regs[] = { { .fpr=JIT_F0 } };
+
+  jit_receive(j, 1, abi, args);
+  jit_load_args(j, 1, abi, args, regs);
+
+  jit_negr_f(j, JIT_F0, JIT_F0);
+  jit_retr_f(j, JIT_F0);
+
+  float (*f)(float) = jit_end(j, NULL);
+
+  ASSERT(f(0.0f) == -0.0f);
+  ASSERT(f(0.5f) == -0.5f);
+  ASSERT(f(1.0f / 0.0f) == -1.0f / 0.0f);
+  ASSERT(f(-1.25f) == 1.25f);
+}
+
+int
+main (int argc, char *argv[])
+{
+  return main_helper(argc, argv, run_test);
+}



reply via email to

[Prev in Thread] Current Thread [Next in Thread]