From 329fc7936c0adb69622a2206f8f12f3599a8c2aa Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 26 Mar 2019 14:51:28 +0100 Subject: [PATCH] Add int/int reg/imm compare-and-branch tests --- tests/beqi.c | 31 +++++++++++++++++++++++++++++++ tests/bgei.c | 31 +++++++++++++++++++++++++++++++ tests/bgei_u.c | 31 +++++++++++++++++++++++++++++++ tests/bgti.c | 31 +++++++++++++++++++++++++++++++ tests/bgti_u.c | 31 +++++++++++++++++++++++++++++++ tests/blei.c | 31 +++++++++++++++++++++++++++++++ tests/blei_u.c | 31 +++++++++++++++++++++++++++++++ tests/blti.c | 31 +++++++++++++++++++++++++++++++ tests/blti_u.c | 31 +++++++++++++++++++++++++++++++ tests/bnei.c | 31 +++++++++++++++++++++++++++++++ 10 files changed, 310 insertions(+) create mode 100644 tests/beqi.c create mode 100644 tests/bgei.c create mode 100644 tests/bgei_u.c create mode 100644 tests/bgti.c create mode 100644 tests/bgti_u.c create mode 100644 tests/blei.c create mode 100644 tests/blei_u.c create mode 100644 tests/blti.c create mode 100644 tests/blti_u.c create mode 100644 tests/bnei.c diff --git a/tests/beqi.c b/tests/beqi.c new file mode 100644 index 000000000..d65d48d7f --- /dev/null +++ b/tests/beqi.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_beqi(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/bgei.c b/tests/bgei.c new file mode 100644 index 000000000..25fe2ee42 --- /dev/null +++ b/tests/bgei.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_bgei(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/bgei_u.c b/tests/bgei_u.c new file mode 100644 index 000000000..f2b5a53ad --- /dev/null +++ b/tests/bgei_u.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_bgei_u(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/bgti.c b/tests/bgti.c new file mode 100644 index 000000000..fa1e7aa7d --- /dev/null +++ b/tests/bgti.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_bgti(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/bgti_u.c b/tests/bgti_u.c new file mode 100644 index 000000000..2d01728db --- /dev/null +++ b/tests/bgti_u.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_bgti_u(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/blei.c b/tests/blei.c new file mode 100644 index 000000000..1d0a91eb6 --- /dev/null +++ b/tests/blei.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_blei(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/blei_u.c b/tests/blei_u.c new file mode 100644 index 000000000..fcfde3acb --- /dev/null +++ b/tests/blei_u.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_blei_u(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 1); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/blti.c b/tests/blti.c new file mode 100644 index 000000000..8c3cd34ef --- /dev/null +++ b/tests/blti.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_blti(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/blti_u.c b/tests/blti_u.c new file mode 100644 index 000000000..b7af89d80 --- /dev/null +++ b/tests/blti_u.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_blti_u(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 0); + ASSERT(f(-1) == 0); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/bnei.c b/tests/bnei.c new file mode 100644 index 000000000..a34a3ad23 --- /dev/null +++ b/tests/bnei.c @@ -0,0 +1,31 @@ +#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_reloc_t r = jit_bnei(j, JIT_R0, 0); + jit_reti(j, 0); + jit_patch_here(j, r); + jit_reti(j, 1); + + intmax_t (*f)(intmax_t) = jit_end(j, NULL); + + ASSERT(f(0) == 0); + ASSERT(f(1) == 1); + ASSERT(f(-1) == 1); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +}