summaryrefslogtreecommitdiffstats
path: root/vmop.h
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2018-03-12 20:07:10 -0700
committerKaz Kylheku <kaz@kylheku.com>2018-03-12 20:07:10 -0700
commitbf523ef3457d20fd1b1c3e8113136966ec035177 (patch)
treec284e712aa086b10ea8844f0b9570cadf135b5c0 /vmop.h
parentc9d60bd84e0a77407b0f88326268c92aaeebd9d2 (diff)
downloadtxr-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.h61
1 files changed, 31 insertions, 30 deletions
diff --git a/vmop.h b/vmop.h
index 6f4d518a..6783b25d 100644
--- a/vmop.h
+++ b/vmop.h
@@ -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;