1
Fork 0
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:
Andy Wingo 2018-08-28 15:55:24 +02:00
parent 4fb99e9454
commit 10bfd55ec3

File diff suppressed because it is too large Load diff