summaryrefslogtreecommitdiff
path: root/module/system
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-04-29 10:41:24 +0200
committerAndy Wingo <wingo@pobox.com>2018-04-29 10:41:24 +0200
commit89fda6da60b54ed606c67a7e4cc07c8f01a67b6b (patch)
tree09985001b8f14028f63108a15f10a7d996f04914 /module/system
parent2eb9c755d1db5d5baedd6594d6385a9b98ad8fcf (diff)
downloadguile-89fda6da60b54ed606c67a7e4cc07c8f01a67b6b.tar.gz
push and pop dynamic state via intrinsics
* libguile/intrinsics.c (push_dynamic_state, pop_dynamic_state): New intrinsics. (scm_bootstrap_intrinsics): Add new intrinsics. * libguile/intrinsics.h: Declare new intrinsics. * libguile/vm-engine.c (call-thread-scm): New intrinsic caller. (push-dynamic-state, pop-dynamic-state): Disable. * module/language/cps/reify-primitives.scm (compute-known-primitives): Add new intrinsics. * module/system/vm/assembler.scm (push-dynamic-state) (pop-dynamic-state): Emit as intrinsics.
Diffstat (limited to 'module/system')
-rw-r--r--module/system/vm/assembler.scm15
1 files changed, 10 insertions, 5 deletions
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 7144a9e71..2bbcdd2f5 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -218,6 +218,8 @@
emit-pop-fluid
emit-fluid-ref
emit-fluid-set!
+ emit-push-dynamic-state
+ emit-pop-dynamic-state
emit-call
emit-call-label
@@ -244,8 +246,6 @@
emit-toplevel-box
emit-module-box
emit-prompt
- emit-push-dynamic-state
- emit-pop-dynamic-state
emit-current-thread
emit-lsh
emit-rsh
@@ -1321,12 +1321,15 @@ returned instead."
(define-syntax-rule (define-scm<-s64-intrinsic name)
(define-macro-assembler (name asm dst src)
(emit-call-scm<-s64 asm dst src (intrinsic-name->index 'name))))
-(define-syntax-rule (define-thread-scm-scm-intrinsic name)
- (define-macro-assembler (name asm a b)
- (emit-call-thread-scm-scm asm a b (intrinsic-name->index 'name))))
(define-syntax-rule (define-thread-intrinsic name)
(define-macro-assembler (name asm)
(emit-call-thread asm (intrinsic-name->index 'name))))
+(define-syntax-rule (define-thread-scm-intrinsic name)
+ (define-macro-assembler (name asm a)
+ (emit-call-thread-scm asm a (intrinsic-name->index 'name))))
+(define-syntax-rule (define-thread-scm-scm-intrinsic name)
+ (define-macro-assembler (name asm a b)
+ (emit-call-thread-scm-scm asm a b (intrinsic-name->index 'name))))
(define-syntax-rule (define-scm<-thread-scm-intrinsic name)
(define-macro-assembler (name asm dst src)
(emit-call-scm<-thread-scm asm dst src (intrinsic-name->index 'name))))
@@ -1361,6 +1364,8 @@ returned instead."
(define-thread-intrinsic pop-fluid)
(define-scm<-thread-scm-intrinsic fluid-ref)
(define-thread-scm-scm-intrinsic fluid-set!)
+(define-thread-scm-intrinsic push-dynamic-state)
+(define-thread-intrinsic pop-dynamic-state)
(define-macro-assembler (begin-program asm label properties)
(emit-label asm label)