summaryrefslogtreecommitdiff
path: root/module/system/vm/assembler.scm
diff options
context:
space:
mode:
Diffstat (limited to 'module/system/vm/assembler.scm')
-rw-r--r--module/system/vm/assembler.scm50
1 files changed, 50 insertions, 0 deletions
diff --git a/module/system/vm/assembler.scm b/module/system/vm/assembler.scm
index 022a40256..64b65f79e 100644
--- a/module/system/vm/assembler.scm
+++ b/module/system/vm/assembler.scm
@@ -101,6 +101,10 @@
emit-undefined?
emit-eof-object?
+ emit-null?
+ emit-false?
+ emit-nil?
+
emit-untag-fixnum
emit-tag-fixnum
emit-untag-char
@@ -256,6 +260,25 @@
emit-define!
emit-current-module
+ ;; Intrinsics for use by the baseline compiler.
+ emit-$car
+ emit-$cdr
+ emit-$set-car!
+ emit-$set-cdr!
+ emit-$variable-ref
+ emit-$variable-set!
+ emit-$vector-length
+ emit-$vector-ref
+ emit-$vector-set!
+ emit-$vector-ref/immediate
+ emit-$vector-set!/immediate
+ emit-$allocate-struct
+ emit-$struct-vtable
+ emit-$struct-ref
+ emit-$struct-set!
+ emit-$struct-ref/immediate
+ emit-$struct-set!/immediate
+
emit-cache-ref
emit-cache-set!
@@ -1399,6 +1422,15 @@ returned instead."
(define-syntax-rule (define-scm<-thread-intrinsic name)
(define-macro-assembler (name asm dst)
(emit-call-scm<-thread asm dst (intrinsic-name->index 'name))))
+(define-syntax-rule (define-scm-scm-intrinsic name)
+ (define-macro-assembler (name asm a b)
+ (emit-call-scm-scm asm a b (intrinsic-name->index 'name))))
+(define-syntax-rule (define-scm-uimm-scm-intrinsic name)
+ (define-macro-assembler (name asm a b c)
+ (emit-call-scm-uimm-scm asm a b c (intrinsic-name->index 'name))))
+(define-syntax-rule (define-scm-scm-scm-intrinsic name)
+ (define-macro-assembler (name asm a b c)
+ (emit-call-scm-scm-scm asm a b c (intrinsic-name->index 'name))))
(define-scm<-scm-scm-intrinsic add)
(define-scm<-scm-uimm-intrinsic add/immediate)
@@ -1464,6 +1496,24 @@ returned instead."
(define-scm<-scm-scm-intrinsic define!)
(define-scm<-thread-intrinsic current-module)
+(define-scm<-scm-intrinsic $car)
+(define-scm<-scm-intrinsic $cdr)
+(define-scm-scm-intrinsic $set-car!)
+(define-scm-scm-intrinsic $set-cdr!)
+(define-scm<-scm-intrinsic $variable-ref)
+(define-scm-scm-intrinsic $variable-set!)
+(define-scm<-scm-intrinsic $vector-length)
+(define-scm<-scm-scm-intrinsic $vector-ref)
+(define-scm-scm-scm-intrinsic $vector-set!)
+(define-scm<-scm-uimm-intrinsic $vector-ref/immediate)
+(define-scm-uimm-scm-intrinsic $vector-set!/immediate)
+(define-scm<-scm-scm-intrinsic $allocate-struct)
+(define-scm<-scm-intrinsic $struct-vtable)
+(define-scm<-scm-scm-intrinsic $struct-ref)
+(define-scm-scm-scm-intrinsic $struct-set!)
+(define-scm<-scm-uimm-intrinsic $struct-ref/immediate)
+(define-scm-uimm-scm-intrinsic $struct-set!/immediate)
+
(define-macro-assembler (begin-program asm label properties)
(emit-label asm label)
(let ((meta (make-meta label properties (asm-start asm))))