]> git.eshelyaron.com Git - emacs.git/commit
Put bytecode stack frame metadata in a struct
authorMattias Engdegård <mattiase@acm.org>
Mon, 14 Mar 2022 11:57:29 +0000 (12:57 +0100)
committerMattias Engdegård <mattiase@acm.org>
Thu, 17 Mar 2022 15:38:22 +0000 (16:38 +0100)
commit751c8f88c4faddb2b4f5d5ba3f051e8cd2c0153c
tree73078523cc6c2343db46ff45c8189e1d75055c9a
parentedb28bf669b890b7498cad0fd818ffa38b5e13a9
Put bytecode stack frame metadata in a struct

Using a plain C struct instead of type-punning Lisp_Object stack slots
makes the bytecode interpreter code more type-safe and potentially
faster (from better alias analysis), and the special-purpose accessors
are no longer needed.  It also reduces the stack requirements when
using 64-bit Lisp_Object on 32-bit platforms.

* src/bytecode.c (enum stack_frame_index)
(sf_get_ptr, sf_set_ptr, sf_get_lisp_ptr, sf_set_lisp_ptr,
sf_get_saved_pc, sf_set_saved_pc): Remove.
(BC_STACK_SIZE): Now in bytes, not Lisp words.
(struct bc_frame): New.
(init_bc_thread, mark_bytecode, Finternal_stack_stats, valid_sp)
(exec_byte_code):
* src/lisp.h (struct handler, get_act_rec, set_act_rec):
Adapt to new struct bc_frame.
src/bytecode.c
src/lisp.h
src/thread.h