mirror of
https://git.savannah.gnu.org/git/guile.git
synced 2025-06-15 08:10:17 +02:00
scm->u64, scm->s64, scm->u64/truncate intrinsics
* libguile/intrinsics.c (scm_to_uint64_truncate): New intrinsic. (scm_bootstrap_intrinsics): Init new intrinsics. * libguile/intrinsics.h: Add scm->u64, scm->u64/truncate, and scm->s64 as intrinsics, with their corresponding types. * libguile/vm-engine.c (call-u64<-scm, call-s64<-scm): New intrinsic calling ops. (scm->u64, scm->s64, scm->u64/truncate): Disable opcodes. * module/language/cps/reify-primitives.scm (compute-known-primitives): Add intrinsics as new macroinstructions. * module/system/vm/assembler.scm: Declare new intrinsic assemblers.
This commit is contained in:
parent
2db7c2df64
commit
dd88fc569d
5 changed files with 66 additions and 24 deletions
|
@ -201,6 +201,9 @@
|
|||
emit-symbol->keyword
|
||||
emit-class-of
|
||||
emit-scm->f64
|
||||
emit-scm->u64
|
||||
emit-scm->u64/truncate
|
||||
emit-scm->s64
|
||||
|
||||
emit-call
|
||||
emit-call-label
|
||||
|
@ -263,11 +266,8 @@
|
|||
emit-ulsh/immediate
|
||||
emit-make-array
|
||||
emit-load-f64
|
||||
emit-scm->u64
|
||||
emit-scm->u64/truncate
|
||||
emit-load-u64
|
||||
emit-u64->scm
|
||||
emit-scm->s64
|
||||
emit-load-s64
|
||||
emit-s64->scm
|
||||
emit-make-atomic-box
|
||||
|
@ -1296,6 +1296,12 @@ returned instead."
|
|||
(define-syntax-rule (define-f64<-scm-intrinsic name)
|
||||
(define-macro-assembler (name asm dst src)
|
||||
(emit-call-f64<-scm asm dst src (intrinsic-name->index 'name))))
|
||||
(define-syntax-rule (define-u64<-scm-intrinsic name)
|
||||
(define-macro-assembler (name asm dst src)
|
||||
(emit-call-u64<-scm asm dst src (intrinsic-name->index 'name))))
|
||||
(define-syntax-rule (define-s64<-scm-intrinsic name)
|
||||
(define-macro-assembler (name asm dst src)
|
||||
(emit-call-s64<-scm asm dst src (intrinsic-name->index 'name))))
|
||||
|
||||
(define-scm<-scm-scm-intrinsic add)
|
||||
(define-scm<-scm-uimm-intrinsic add/immediate)
|
||||
|
@ -1315,6 +1321,9 @@ returned instead."
|
|||
(define-scm<-scm-intrinsic symbol->keyword)
|
||||
(define-scm<-scm-intrinsic class-of)
|
||||
(define-f64<-scm-intrinsic scm->f64)
|
||||
(define-u64<-scm-intrinsic scm->u64)
|
||||
(define-u64<-scm-intrinsic scm->u64/truncate)
|
||||
(define-s64<-scm-intrinsic scm->s64)
|
||||
|
||||
(define-macro-assembler (begin-program asm label properties)
|
||||
(emit-label asm label)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue