diff options
author | Kaz Kylheku <kaz@kylheku.com> | 2018-03-12 20:07:10 -0700 |
---|---|---|
committer | Kaz Kylheku <kaz@kylheku.com> | 2018-03-12 20:07:10 -0700 |
commit | bf523ef3457d20fd1b1c3e8113136966ec035177 (patch) | |
tree | c284e712aa086b10ea8844f0b9570cadf135b5c0 /vmop.h | |
parent | c9d60bd84e0a77407b0f88326268c92aaeebd9d2 (diff) | |
download | txr-bf523ef3457d20fd1b1c3e8113136966ec035177.tar.gz txr-bf523ef3457d20fd1b1c3e8113136966ec035177.tar.bz2 txr-bf523ef3457d20fd1b1c3e8113136966ec035177.zip |
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.
Diffstat (limited to 'vmop.h')
-rw-r--r-- | vmop.h | 61 |
1 files changed, 31 insertions, 30 deletions
@@ -28,34 +28,35 @@ typedef enum vm_op { NOOP = 0, FRAME = 1, - DFRAME = 2, - END = 3, - FIN = 4, - CALL = 5, - APPLY = 6, - MOVRS = 7, - MOVSR = 8, - MOVRR = 9, - MOVRSI = 10, - MOVSMI = 11, - MOVRBI = 12, - JMP = 13, - IF = 14, - UWPROT = 15, - BLOCK = 16, - RETSR = 17, - RETRS = 18, - RETRR = 19, - CATCH = 20, - HANDLE = 21, - GETV = 22, - GETF = 23, - GETL1 = 24, - GETVB = 25, - GETFB = 26, - GETL1B = 27, - SETV = 28, - SETL1 = 29, - BINDV = 30, - CLOSE = 31, + SFRAME = 2, + DFRAME = 3, + END = 4, + FIN = 5, + CALL = 6, + APPLY = 7, + MOVRS = 8, + MOVSR = 9, + MOVRR = 10, + MOVRSI = 11, + MOVSMI = 12, + MOVRBI = 13, + JMP = 14, + IF = 15, + UWPROT = 16, + BLOCK = 17, + RETSR = 18, + RETRS = 19, + RETRR = 20, + CATCH = 21, + HANDLE = 22, + GETV = 23, + GETF = 24, + GETL1 = 25, + GETVB = 26, + GETFB = 27, + GETL1B = 28, + SETV = 29, + SETL1 = 30, + BINDV = 31, + CLOSE = 32, } vm_op_t; |