Remove interpreter’s byte stack
commita815e5f19581344af5e143636039064a7fbe83ed
authorPaul Eggert <eggert@cs.ucla.edu>
Sat, 24 Dec 2016 05:13:58 +0000 (23 21:13 -0800)
committerPaul Eggert <eggert@cs.ucla.edu>
Sat, 24 Dec 2016 05:46:53 +0000 (23 21:46 -0800)
treef5ed9c34657f1a86d85020d30826d07d9fa4d56b
parenta43cfb1ad55cad553d54798356c69e2496a3e504
Remove interpreter’s byte stack

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.
etc/DEBUG
src/.gdbinit
src/alloc.c
src/bytecode.c
src/eval.c
src/lisp.h
src/thread.c
src/thread.h