aboutsummaryrefslogtreecommitdiff
path: root/deps/lightening/tests/jmp_table.c
diff options
context:
space:
mode:
authorKimplul <kimi.h.kuparinen@gmail.com>2024-06-25 23:25:29 +0300
committerKimplul <kimi.h.kuparinen@gmail.com>2024-06-25 23:25:29 +0300
commit01052811be08444458576dda994d15f8823560ea (patch)
treec52f2d72ef0ef703e755fcf05ee5d3a02f050acc /deps/lightening/tests/jmp_table.c
parent449ca1e570aa421992bbe98c6928def1ba8896fd (diff)
downloadposthaste-01052811be08444458576dda994d15f8823560ea.tar.gz
posthaste-01052811be08444458576dda994d15f8823560ea.zip
initial rewrite to use ejit
+ Doesn't actually link yet due to missing stuff from ejit, will have to add them (tomorrow?)
Diffstat (limited to 'deps/lightening/tests/jmp_table.c')
-rw-r--r--deps/lightening/tests/jmp_table.c61
1 files changed, 0 insertions, 61 deletions
diff --git a/deps/lightening/tests/jmp_table.c b/deps/lightening/tests/jmp_table.c
deleted file mode 100644
index f90ab16..0000000
--- a/deps/lightening/tests/jmp_table.c
+++ /dev/null
@@ -1,61 +0,0 @@
-#include "test.h"
-
-#define NTARGETS ((size_t) 4)
-
-static void
-run_test(jit_state_t *j, uint8_t *arena_base, size_t arena_size)
-{
- jit_begin(j, arena_base, arena_size);
- size_t align = jit_enter_jit_abi(j, 0, 0, 0);
- jit_load_args_1(j, jit_operand_gpr (JIT_OPERAND_ABI_POINTER, JIT_R0));
-
- jit_reloc_t default_target = jit_bgei_u(j, JIT_R0, NTARGETS);
-
- // FIXME: need ldxr with word stride, then can eliminate lshi.
- jit_lshi(j, JIT_R0, JIT_R0, sizeof(intptr_t) == 4 ? 2 : 3);
- jit_reloc_t table = jit_mov_addr(j, JIT_R1);
- jit_ldxr(j, JIT_R1, JIT_R1, JIT_R0);
- jit_jmpr(j, JIT_R1);
-
- jit_begin_data (j, (NTARGETS + 1) * sizeof(intptr_t));
- jit_align(j, sizeof(intptr_t));
- jit_patch_here(j, table);
- jit_reloc_t targets[NTARGETS];
- jit_reloc_t tails[NTARGETS];
- for (size_t i = 0; i < NTARGETS; i++) {
- targets[i] = jit_emit_addr(j);
- }
- jit_end_data (j);
-
- for (size_t i = 0; i < NTARGETS; i++) {
- jit_patch_here(j, targets[i]);
- jit_movi(j, JIT_R0, i * i);
- tails[i] = jit_jmp(j);
- }
-
- jit_patch_here(j, default_target);
- jit_movi(j, JIT_R0, 42);
- for (int i = 0; i < NTARGETS; i++) {
- jit_patch_here(j, tails[i]);
- }
- jit_leave_jit_abi(j, 0, 0, align);
- jit_retr(j, JIT_R0);
-
- jit_word_t (*f)(jit_word_t) = jit_end(j, NULL);
-
- for (int i = -2; i < ((int) NTARGETS) + 2; i++) {
- if (i < 0) {
- ASSERT(f(i) == 42);
- } else if (i < NTARGETS) {
- ASSERT(f(i) == i * i);
- } else {
- ASSERT(f(i) == 42);
- }
- }
-}
-
-int
-main (int argc, char *argv[])
-{
- return main_helper(argc, argv, run_test);
-}