• Paul Eggert's avatar
    Remove interpreter’s byte stack · a815e5f1
    Paul Eggert authored
    This improves performance overall on my benchmark on x86-64,
    since the interpreted program-counter resides in a machine
    register rather than in RAM.
    * etc/DEBUG, src/.gdbinit: Remove xbytecode GDB command, as there
    is no longer a byte stack to decode.
    * src/bytecode.c (struct byte_stack, byte_stack_list)
    (relocate_byte_stack): Remove.  All uses removed.
    (FETCH): Simplify now that pc is now local (typically, in a
    register) and no longer needs to be relocated.
    (CHECK_RANGE): Remove.  All uses now done inline, in a different way.
    (BYTE_CODE_QUIT): Remove; now done by op_relative_branch.
    (exec_byte_code): Allocate a copy of the function’s bytecode,
    so that there is no problem if GC moves it.
    * src/lisp.h (struct handler): Remove byte_stack member.
    All uses removed.
    * src/thread.c (unmark_threads): Remove.  All uses removed.
    * src/thread.h (struct thread_state): Remove m_byte_stack_list member.
    All uses removed.  m_stack_bottom is now the first non-Lisp field.
eval.c 120 KB