diff options
author | Andy Wingo <wingo@pobox.com> | 2018-04-29 10:41:24 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2018-04-29 10:41:24 +0200 |
commit | 89fda6da60b54ed606c67a7e4cc07c8f01a67b6b (patch) | |
tree | 09985001b8f14028f63108a15f10a7d996f04914 /module/system | |
parent | 2eb9c755d1db5d5baedd6594d6385a9b98ad8fcf (diff) | |
download | guile-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.scm | 15 |
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) |