From bf523ef3457d20fd1b1c3e8113136966ec035177 Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Mon, 12 Mar 2018 20:07:10 -0700 Subject: vm: introduce sframe instruction. This is for allocating a new frame purely on the stack. The frame will not be captured by lexical closures, and so can only be used for non-shared variables and additional compiler-generated temporaries (if registers run out, for instance). * share/txr/stdlib/asm.tl (op-sframe, sframe): New opcode class and opcode. * vm.c (vm_do_frame): New static function for the common implementation of frame and sframe. (vm_frame): Now just a call with vm_do_frame, passing the flag indicating that closure capture is enabled for this environment frame. (vm_sframe): New static function. * vmop.h: Regenerated. --- share/txr/stdlib/asm.tl | 2 ++ 1 file changed, 2 insertions(+) (limited to 'share') diff --git a/share/txr/stdlib/asm.tl b/share/txr/stdlib/asm.tl index c6a7efc9..4871dd4f 100644 --- a/share/txr/stdlib/asm.tl +++ b/share/txr/stdlib/asm.tl @@ -268,6 +268,8 @@ (:method dis (me asm lev size) ^(,me.symbol ,lev ,size))) +(defopcode-derived op-sframe sframe auto op-frame) + (defopcode-derived op-dframe dframe auto op-frame) (defopcode op-end end auto -- cgit v1.2.3