From 89fda6da60b54ed606c67a7e4cc07c8f01a67b6b Mon Sep 17 00:00:00 2001 From: Andy Wingo Date: Sun, 29 Apr 2018 10:41:24 +0200 Subject: 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. --- module/system/vm/assembler.scm | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'module/system/vm/assembler.scm') 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) -- cgit v1.2.3