summaryrefslogtreecommitdiff
path: root/module/system/vm/assembler.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-04-29 10:22:30 +0200
committerAndy Wingo <wingo@pobox.com>2018-04-29 10:22:30 +0200
commit2eb9c755d1db5d5baedd6594d6385a9b98ad8fcf (patch)
tree6f0654b667b87cd9adcab000ce975fc47820847c /module/system/vm/assembler.scm
parent4779a10223078c89db4734857850df9af3d6830d (diff)
downloadguile-2eb9c755d1db5d5baedd6594d6385a9b98ad8fcf.tar.gz
Intrinsics for dynamic state instructions
* libguile/intrinsics.c (wind, unwind, push_fluid, pop_fluid) (fluid_ref): New intrinsics. (scm_bootstrap_intrinsics): Wire them up. * libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Declare new intrinsics. * libguile/vm-engine.c (wind, unwind, push_fluid, pop_fluid) (fluid_ref): Disable these instructions. * module/language/cps/reify-primitives.scm (compute-known-primitives): Add new intrinsics. * module/system/vm/assembler.scm (wind, unwind, push_fluid, pop_fluid) (fluid_ref): Assemble as intrinsics.
Diffstat (limited to 'module/system/vm/assembler.scm')
-rw-r--r--module/system/vm/assembler.scm18
1 files changed, 12 insertions, 6 deletions
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 973179ad4..7144a9e71 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -212,6 +212,12 @@
emit-scm->s64
emit-u64->scm
emit-s64->scm
+ emit-wind
+ emit-unwind
+ emit-push-fluid
+ emit-pop-fluid
+ emit-fluid-ref
+ emit-fluid-set!
emit-call
emit-call-label
@@ -238,15 +244,9 @@
emit-toplevel-box
emit-module-box
emit-prompt
- emit-wind
- emit-unwind
- emit-push-fluid
- emit-pop-fluid
emit-push-dynamic-state
emit-pop-dynamic-state
emit-current-thread
- emit-fluid-ref
- emit-fluid-set!
emit-lsh
emit-rsh
emit-lsh/immediate
@@ -1355,6 +1355,12 @@ returned instead."
(define-s64<-scm-intrinsic scm->s64)
(define-scm<-u64-intrinsic u64->scm)
(define-scm<-s64-intrinsic s64->scm)
+(define-thread-scm-scm-intrinsic wind)
+(define-thread-intrinsic unwind)
+(define-thread-scm-scm-intrinsic push-fluid)
+(define-thread-intrinsic pop-fluid)
+(define-scm<-thread-scm-intrinsic fluid-ref)
+(define-thread-scm-scm-intrinsic fluid-set!)
(define-macro-assembler (begin-program asm label properties)
(emit-label asm label)