From afd32134f09a72dc2a4cb6fd408ad45604e2c17b Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Tue, 26 Mar 2019 11:07:44 +0100 Subject: [PATCH] Add ldr tests --- tests/ldr_c.c | 31 +++++++++++++++++++++++++++++++ tests/ldr_d.c | 31 +++++++++++++++++++++++++++++++ tests/ldr_f.c | 31 +++++++++++++++++++++++++++++++ tests/ldr_i.c | 31 +++++++++++++++++++++++++++++++ tests/ldr_l.c | 33 +++++++++++++++++++++++++++++++++ tests/ldr_s.c | 31 +++++++++++++++++++++++++++++++ tests/ldr_uc.c | 31 +++++++++++++++++++++++++++++++ tests/ldr_ui.c | 33 +++++++++++++++++++++++++++++++++ tests/ldr_us.c | 31 +++++++++++++++++++++++++++++++ 9 files changed, 283 insertions(+) create mode 100644 tests/ldr_c.c create mode 100644 tests/ldr_d.c create mode 100644 tests/ldr_f.c create mode 100644 tests/ldr_i.c create mode 100644 tests/ldr_l.c create mode 100644 tests/ldr_s.c create mode 100644 tests/ldr_uc.c create mode 100644 tests/ldr_ui.c create mode 100644 tests/ldr_us.c diff --git a/tests/ldr_c.c b/tests/ldr_c.c new file mode 100644 index 000000000..d653dea3b --- /dev/null +++ b/tests/ldr_c.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +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_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_c(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == -1); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == 0x42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/ldr_d.c b/tests/ldr_d.c new file mode 100644 index 000000000..8488fb30f --- /dev/null +++ b/tests/ldr_d.c @@ -0,0 +1,31 @@ +#include "test.h" + +static double data[] = { -1.0, 0.0, 0.5 }; + +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_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_d(j, JIT_F0, JIT_R1); + jit_retr_d(j, JIT_F0); + + double (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == data[0]); + ASSERT(f(&data[1]) == data[1]); + ASSERT(f(&data[2]) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/ldr_f.c b/tests/ldr_f.c new file mode 100644 index 000000000..160af85a4 --- /dev/null +++ b/tests/ldr_f.c @@ -0,0 +1,31 @@ +#include "test.h" + +static float data[] = { -1.0, 0.0, 0.5 }; + +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_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_f(j, JIT_F0, JIT_R1); + jit_retr_f(j, JIT_F0); + + float (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == data[0]); + ASSERT(f(&data[1]) == data[1]); + ASSERT(f(&data[2]) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/ldr_i.c b/tests/ldr_i.c new file mode 100644 index 000000000..956d254ac --- /dev/null +++ b/tests/ldr_i.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +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_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_i(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == -1); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == 0x42424242); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/ldr_l.c b/tests/ldr_l.c new file mode 100644 index 000000000..a1a554a57 --- /dev/null +++ b/tests/ldr_l.c @@ -0,0 +1,33 @@ +#include "test.h" + +static uint64_t data[] = { 0xffffffffffffffff, 0, 0x4242424212345678 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_l(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == -1); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == data[2]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/ldr_s.c b/tests/ldr_s.c new file mode 100644 index 000000000..4384c5e00 --- /dev/null +++ b/tests/ldr_s.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +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_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_s(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == -1); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == 0x4242); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/ldr_uc.c b/tests/ldr_uc.c new file mode 100644 index 000000000..41dad79ca --- /dev/null +++ b/tests/ldr_uc.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint8_t data[] = { 0xff, 0x00, 0x42 }; + +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_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_uc(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == 0xff); + ASSERT(f(&data[1]) == 0); + ASSERT(f(&data[2]) == 0x42); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/ldr_ui.c b/tests/ldr_ui.c new file mode 100644 index 000000000..7f684f685 --- /dev/null +++ b/tests/ldr_ui.c @@ -0,0 +1,33 @@ +#include "test.h" + +static uint32_t data[] = { 0xffffffff, 0x00000000, 0x42424242 }; + +static void +run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size) +{ +#if __WORDSIZE > 32 + jit_begin(j, arena_base, arena_size); + + const jit_arg_abi_t abi[] = { JIT_ARG_ABI_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_ui(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == data[0]); + ASSERT(f(&data[1]) == data[1]); + ASSERT(f(&data[2]) == data[2]); +#endif +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +} diff --git a/tests/ldr_us.c b/tests/ldr_us.c new file mode 100644 index 000000000..e813d650d --- /dev/null +++ b/tests/ldr_us.c @@ -0,0 +1,31 @@ +#include "test.h" + +static uint16_t data[] = { 0xffff, 0x0000, 0x4242 }; + +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_POINTER }; + jit_arg_t args[1]; + const jit_anyreg_t regs[] = { { .gpr=JIT_R1 } }; + + jit_receive(j, 1, abi, args); + jit_load_args(j, 1, abi, args, regs); + + jit_ldr_us(j, JIT_R0, JIT_R1); + jit_retr(j, JIT_R0); + + uintmax_t (*f)(void*) = jit_end(j, NULL); + + ASSERT(f(&data[0]) == data[0]); + ASSERT(f(&data[1]) == data[1]); + ASSERT(f(&data[2]) == data[2]); +} + +int +main (int argc, char *argv[]) +{ + return main_helper(argc, argv, run_test); +}