summaryrefslogtreecommitdiff
path: root/module/system/vm/assembler.scm
diff options
context:
space:
mode:
authorAndy Wingo <wingo@pobox.com>2018-05-13 10:23:28 +0200
committerAndy Wingo <wingo@pobox.com>2018-05-14 14:04:54 +0200
commitfb344a25d5fab1714eb1d5ca66bad96fb4834855 (patch)
tree496697ce8faf53d003e94b52fd45339eac66b810 /module/system/vm/assembler.scm
parent16a996f052f381d915288bc4f39dfc4c21930295 (diff)
downloadguile-fb344a25d5fab1714eb1d5ca66bad96fb4834855.tar.gz
Add intrinsics for module operations
* libguile/intrinsics.c (scm_bootstrap_intrinsics): * libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): * module/system/vm/assembler.scm (resolve-module, lookup): New intrinsics. * module/language/cps/compile-bytecode: Add cases for primcalls corresponding to new intrinsics.
Diffstat (limited to 'module/system/vm/assembler.scm')
-rw-r--r--module/system/vm/assembler.scm7
1 files changed, 7 insertions, 0 deletions
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 59434295e..56644fdf4 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -224,6 +224,8 @@
emit-rsh
emit-lsh/immediate
emit-rsh/immediate
+ emit-resolve-module
+ emit-lookup
emit-call
emit-call-label
@@ -1336,6 +1338,9 @@ returned instead."
(define-syntax-rule (define-scm<-scm-u64-intrinsic name)
(define-macro-assembler (name asm dst a b)
(emit-call-scm<-scm-u64 asm dst a b (intrinsic-name->index 'name))))
+(define-syntax-rule (define-scm<-scm-bool-intrinsic name)
+ (define-macro-assembler (name asm dst a b)
+ (emit-call-scm<-scm-uimm asm dst a (if b 1 0) (intrinsic-name->index 'name))))
(define-scm<-scm-scm-intrinsic add)
(define-scm<-scm-uimm-intrinsic add/immediate)
@@ -1373,6 +1378,8 @@ returned instead."
(define-scm<-scm-u64-intrinsic rsh)
(define-scm<-scm-uimm-intrinsic lsh/immediate)
(define-scm<-scm-uimm-intrinsic rsh/immediate)
+(define-scm<-scm-bool-intrinsic resolve-module)
+(define-scm<-scm-scm-intrinsic lookup)
(define-macro-assembler (begin-program asm label properties)
(emit-label asm label)