diff options
author | Andy Wingo <wingo@pobox.com> | 2018-08-20 08:48:00 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2018-08-20 08:56:35 +0200 |
commit | dca1e9d7bd36cad32e2165918194b522ed30e67d (patch) | |
tree | 1d0cb4964bb568fdd4d8266838216c7768ee789e /libguile/threads.h | |
parent | 698bff8748492c10d9935d7837776c323dc4f383 (diff) | |
download | guile-dca1e9d7bd36cad32e2165918194b522ed30e67d.tar.gz |
Manual JIT interface via %jit-compile
* libguile/init.c (scm_i_init_guile): Call scm_init_jit ().
* libguile/jit.c (enter_mcode, exit_mcode): New static members; code
pointers for the JIT trampoline.
(emit_exit): New helper. The Lightning tramp/frame mechanism that we
use needs to exit via a jmp instead of a return. Adapt callers of
jit_ret.
(emit_entry_trampoline): Use the "frame" mechanism to enter the JIT.
(compile1): Add missing "break" after case statements. Oops!
(compile): Add prolog and "tramp" to compiled functions.
(initialize_jit): New local routine to init the JIT on demand.
(compute_mcode): New helper, to compile a function.
(scm_sys_jit_compile): New function, exported to Scheme as
%jit-compile.
(scm_jit_compute_mcode): Return the existing mcode if the function is
at the start.
(scm_jit_enter_mcode): Call the enter_mcode trampoline.
* libguile/jit.h (struct scm_jit_state): Declare, so we can make
pointers to it.
* libguile/threads.h (struct scm_thread): Add jit_state member.
* libguile/threads.c (on_thread_exit): Free the jit state.
Diffstat (limited to 'libguile/threads.h')
-rw-r--r-- | libguile/threads.h | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/libguile/threads.h b/libguile/threads.h index 99a3cfd07..1969f8764 100644 --- a/libguile/threads.h +++ b/libguile/threads.h @@ -102,6 +102,9 @@ struct scm_thread { /* Stack base. Used when checking for C stack overflow. */ SCM_STACKITEM *base; + /* JIT state; NULL until this thread needs to JIT-compile something. */ + struct scm_jit_state *jit_state; + /* VM state for this thread. */ struct scm_vm vm; }; |