Andy Wingo
41bc98985f
VM calls out to heap-numbers-equal? through intrinsics
...
* libguile/numbers.h:
* libguile/eq.c (scm_i_heap_numbers_equal_p): Change to return boolean
directly instead of tagged Scheme value.
(scm_eqv_p): Adapt caller of scm_i_heap_numbers_equal_p.
* libguile/intrinsics.c (scm_bootstrap_intrinsics):
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Declare
heap-numbers-equal? intrinsic.
* libguile/vm-engine.c (heap-numbers-equal?): Call out through the
intrinsics table.
2018-05-08 11:49:46 +02:00
Andy Wingo
1532b570e5
lsh, rsh etc are intrinsics
...
* libguile/intrinsics.c (lsh, rsh, lsh_immediate, rsh_immediate): New
intrinsics.
(scm_bootstrap_intrinsics): Wire up the intrinsics.
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Add new
intrinsics.
* libguile/vm-engine.c (call-scm<-scm-u64): New intrinsic caller.
(lsh, rsh, lsh/immediate, rsh/immediate): Disable.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Add new intrinsics.
* module/system/vm/assembler.scm: Adapt assemblers for new intrinsics.
2018-05-01 07:02:45 +02:00
Andy Wingo
89fda6da60
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.
2018-04-29 10:41:24 +02:00
Andy Wingo
2eb9c755d1
Intrinsics for dynamic state instructions
...
* libguile/intrinsics.c (wind, unwind, push_fluid, pop_fluid)
(fluid_ref): New intrinsics.
(scm_bootstrap_intrinsics): Wire them up.
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Declare new
intrinsics.
* libguile/vm-engine.c (wind, unwind, push_fluid, pop_fluid)
(fluid_ref): Disable these instructions.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Add new intrinsics.
* module/system/vm/assembler.scm (wind, unwind, push_fluid, pop_fluid)
(fluid_ref): Assemble as intrinsics.
2018-04-29 10:22:30 +02:00
Andy Wingo
25a0fe8839
logsub is intrinsic
...
* libguile/intrinsics.h:
* libguile/intrinsics.c (logsub): New intrinsic.
(scm_bootstrap_intrinsics): Init new intrinsic.
* libguile/vm-engine.c (logsub): Disable.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Add logsub.
* module/system/vm/assembler.scm: Update logsub intrinsic assembler.
2018-04-12 17:10:35 +02:00
Andy Wingo
7e386bbc70
u64->scm, s64->scm intrinsics
...
* libguile/intrinsics.h (u64->scm, s64->scm): New intrinsics.
* libguile/intrinsics.c (scm_bootstrap_intrinsics): Initialize new
intrinsics.
* libguile/vm-engine.c (call-scm<-u64, call-scm<-s64): New intrinsic
callers.
(u64->scm, s64->scm): Disable instructions.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Add new intrinsics as macro-instructions.
* module/system/vm/assembler.scm (define-scm<-u64-intrinsic):
(define-scm<-s64-intrinsic, u64->scm, s64->scm): Wire up new
intrinsics.
2018-04-12 16:43:57 +02:00
Andy Wingo
dd88fc569d
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.
2018-04-12 16:22:40 +02:00
Andy Wingo
b9f7621e13
Add scm->f64 intrinsic
...
* libguile/vm-engine.c (call-f64<-scm): New intrinsic kind.
(scm->f64): Disable instruction.
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS):
* libguile/intrinsics.c (scm_bootstrap_intrinsics):
* module/language/cps/reify-primitives.scm (compute-known-primitives):
* module/system/vm/assembler.scm (define-f64<-scm-intrinsic): Add scm->f64.
2018-04-10 19:39:50 +02:00
Andy Wingo
954bfad262
Class-of is intrinsic
...
* libguile/vm-engine.c (class-of): Disable.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Add class-of as macro-instruction.
* libguile/intrinsics.c (scm_bootstrap_intrinsics): Add class-of.
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Add class-of.
* module/system/vm/assembler.scm (class-of): Define as intrinsic.
2018-04-10 18:32:31 +02:00
Andy Wingo
1c49c1407b
string->number, etc intrinsics
...
* libguile/intrinsics.c (string_to_number): New helper.
(scm_bootstrap_intrinsics): Init new intrinsics.
* libguile/intrinsics.h (string->number, string->symbol)
(symbol->keyword): Add new intrinsics.
* libguile/vm-engine.c (call-scm<-scm): New intrinsic dispatcher.
(string->number, string->symbol, symbol->keyword): Disable these
instructions.
* module/system/vm/assembler.scm (encode-X8_S12_S12-C32<-/shuffle):
(define-scm<-scm-intrinsic): Enable scm<-scm intrinsics.
(string->number, string->symbol, symbol->keyword): New intrinsic
assemblers.
2018-04-10 17:56:08 +02:00
Andy Wingo
0ae1e943d8
Add string-set! intrinsic
...
* libguile/intrinsics.c (string_set_x): New intrinsic.
(scm_bootstrap_intrinsics): Initialize intrinsic.
* libguile/intrinsics.h: Add string-set! intrinsic.
* libguile/vm-engine.c (call-scm-u64-u64): New intrinsic trampoline.
* module/system/vm/assembler.scm (encode-X8_S8_S8_S8-C32!/shuffle): New
shuffling encoder.
(define-scm-u64-u64-intrinsic): New helper.
2018-04-10 11:57:40 +02:00
Andy Wingo
4d530a94bb
Add instrinsics to runtime
...
* libguile/intrinsics.c:
* libguile/intrinsics.h: New files.
* libguile/Makefile.am:
* libguile/init.c: Add new files to build.
2018-03-30 20:30:42 +02:00