mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-05-02 13:00:26 +02:00
JIT: Store FP in register during procedure prolog/epilog
* libguile/jit.c (scm_jit_state): Add op_attrs array, for a pre-pass, and store state of what's in registers. (SP, FP): Reassign to scratch registers, as in general these need to be reloaded anyway after callouts. (die, DIE, ASSERT, UNREACHABLE): Add better invariant-testing. (clear_register_state, clear_scratch_register_state) (set_register_state, has_register_state, ASSERT_HAS_REGISTER_STATE): Add machinery to track state of SP and FP. Can eventually track scratch register assignments as well. Adapt code to use these. (compile_atomic_ref_scm_immediate): Compile to a vanilla load on x86. (compile_handle_interrupts): Analogous atomic-ref changes here. (analyze): New helper, a simple once-through pre-pass to identify branch targets. (compile): Only generate labels for branch targets. Reset register state at branch targets. (compute_mcode): Initialize j->op_attrs appropriately.
This commit is contained in:
parent
4fb99e9454
commit
10bfd55ec3
1 changed files with 511 additions and 242 deletions
753
libguile/jit.c
753
libguile/jit.c
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue