Andy Wingo
76eac85084
Use intrinsics for top-level refs outside captured scopes
...
* module/language/tree-il/compile-cps.scm (toplevel-box): Reify
intrinsic calls for top-level references outside captured scopes.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Update set of macro-instructions.
2018-05-14 16:25:50 +02:00
Andy Wingo
ceffb5e990
Compile "define!" via intrinsic
...
* libguile/intrinsics.c (scm_bootstrap_intrinsics):
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Add new define!
intrinsic.
* module/language/cps/compile-bytecode.scm (compile-function): Adapt
compilation for define! to take two arguments.
* module/language/cps/effects-analysis.scm (current-module): Update
define! for two arguments.
* module/language/tree-il/compile-cps.scm (convert): When reifying
"define", grab the current module.
* module/system/vm/assembler.scm (define!): Define assembler as
intrinsic.
2018-05-14 15:15:22 +02:00
Andy Wingo
77e7bea4c2
Remove backend support for cached-module-box et al.
...
* module/language/cps/compile-bytecode.scm (compile-function): Remove
unused assemblers for cached-module-box, cached-toplevel-box, and
cache-current-module!.
* module/language/cps/effects-analysis.scm (&cache): New memory kind.
(cache-current-module!): Set &cache memory, not &box.
(resolve-module, lookup-module, cache-ref, cache-set!): Add effect
annotations.
* module/system/vm/assembler.scm (emit-cache-current-module!)
(emit-cached-toplevel-box, emit-cached-module-box): Remove
assemblers.
* module/system/vm/disassembler.scm (code-annotation, fold-code-range):
Remove special cases for toplevel-box and module-box.
* module/system/xref.scm (program-callee-rev-vars): Add a FIXME for the
future.
2018-05-14 14:04:59 +02:00
Andy Wingo
667d808f58
Instruction explosion for cache-current-module, cached-toplevel-box
...
* module/language/cps/reify-primitives.scm (primitive-ref): When
reifying xoprimitives, explode cached-module-box references.
(cache-current-module!, cached-toplevel-box): Do instruction
explosion.
2018-05-14 14:04:59 +02:00
Andy Wingo
3edf02cbe5
Instruction explosion for cached-module-box
...
* module/language/cps/reify-primitives.scm (reify-lookup):
(reify-resolve-module): New helpers.
(cached-module-box): Explode.
2018-05-14 14:04:59 +02:00
Andy Wingo
f6de1b0620
Add cache-ref, cache-set! macro-instructions
...
* module/system/vm/assembler.scm (<cache-cell>): Remove "scope" member.
Just be an opaque key comparable with equal?.
(intern-cache-cell): Remove scope arg.
(intern-module-cache-cell): Remove; callers use intern-cache-cell now.
(cache-current-module!, cached-toplevel-box, cached-module-box): Create
cache keys that by construction won't collide between types.
(cache-ref, cache-set!): Add new macro assemblers.
* module/language/cps/reify-primitives.scm:
* module/language/cps/compile-bytecode.scm: Add cases for new macro
instructions.
2018-05-14 14:04:59 +02:00
Andy Wingo
fb344a25d5
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.
2018-05-14 14:04:54 +02:00
Andy Wingo
16a996f052
Add scm_maybe_resolve_module
...
* libguile/modules.c (scm_maybe_resolve_module): New API function, like
resolve-module but not ensuring that the module is created.
(scm_public_variable, scm_private_variable): Adapt to call
scm_maybe_resolve_module.
* libguile/modules.h (scm_maybe_resolve_module): Declare new API.
2018-05-14 11:27:30 +02:00
Andy Wingo
ad96291ffe
Mark call-scm<-scm-u64 as defining a result
...
* libguile/vm-engine.c (call-scm<-scm-u64): Add OP_DST.
2018-05-13 10:22:03 +02:00
Andy Wingo
9a72e21262
VM syncs IP in pop-fluid
...
* libguile/vm-engine.c (pop-fluid): Sync IP before popping, as setting a
fluid may allocate.
2018-05-09 11:07:35 +02:00
Andy Wingo
ed8b1adeab
Remove unused macros in VM
...
* libguile/vm-engine.c (ARGS1, ARGS2, RETURN, RETURN_EXP)
(UNPACK_16_8): Remove.
2018-05-08 20:50:40 +02:00
Andy Wingo
007fcf699f
VM calls =? through intrinsic
...
* libguile/intrinsics.c (numerically_equal_p): New intrinsic.
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Declare new
intrinsic.
* libguile/vm-engine.c (=?): Call through intrinsic.
2018-05-08 14:16:02 +02:00
Andy Wingo
0a8a7e9fd0
VM calls "<?" through intrinsic.
...
* libguile/intrinsics.c (less_p): New intrinsic.
(scm_bootstrap_intrinsics): Wire up intrinsic.
* libguile/intrinsics.h: Declare new intrinsic.
* libguile/vm-engine.c (less_p): Call through intrinsic.
2018-05-08 12:03:53 +02:00
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
84cb7c45fd
Remove implementation of lsh, rsh instructions
...
* libguile/vm-engine.c: Remove implementation of now-gone instructions.
2018-05-01 07:10:56 +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
e014bf3fc5
Remove old VM ops for fluid-ref et al
...
* libguile/vm-engine.c (wind, unwind, push_fluid, pop_fluid)
(fluid_ref, push_dynamic_state, pop_dynamic_state): Remove now-unused
implementations.
2018-04-29 10:44:19 +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
4779a10223
Add support for dynamic-state-related intrinsics
...
* libguile/vm-engine.c (call-thread, call-thread-scm-scm)
(call-scm<-thread-scm): New intrinsics.
* module/system/vm/assembler.scm (define-thread-scm-scm-intrinsic)
(define-thread-intrinsic, define-scm<-thread-scm-intrinsic): New
helpers.
(encode-X8_S12_S12-C32!/shuffle): New shuffler.
* libguile/intrinsics.h: Add new intrinsic types.
2018-04-29 10:13:50 +02:00
Andy Wingo
c927ca7111
Fix width of operands to intrinsic call instructions
...
* libguile/vm-engine.c (call-scm<-scm, etc): The operands were getting
unpacked into 8-bit locals, which were too small. Fix to use 16-bit
locals.
2018-04-29 09:55:24 +02:00
Paulo Andrade
94a188844d
Correct typo and values in jit_sparc-sz.c
2018-04-25 16:02:52 -03:00
Paulo Andrade
d2ff737812
HPPA: Correct wrong regarg_p check
...
If argument registers are in incremental order in the global _rvs
vector, the check if a register argument is reversed.
Adapted from a regression found in sparc 64.
2018-04-20 15:01:44 -03:00
Paulo Andrade
2cea99361b
Build and pass all tests on 32 and 64 bit sparc
...
* include/lightning/jit_private.h: Add new register classes to
flag float registers and double only registers, required for sparc64
where only low 32 bit fpr registers can be used for single precision
operations.
Add new 128 bit jit_regset_t type for sparc64 register set.
* include/lightning/jit_sparc.h, lib/jit_sparc-cpu.c, lib/jit_sparc-fpu.c,
lib/jit_sparc-sz.c, lib/jit_sparc.c: Update for 64 bits sparc.
* lib/lightning.c: Update for new jit_regset_t required for sparc64.
2018-04-20 10:37:37 -03:00
Andy Wingo
79ba396a1e
Remove unused macros in vm-engine
...
* libguile/vm-engine.c: Remove unused CPP macros.
2018-04-13 10:40:02 +02:00
Andy Wingo
0ae3d62f40
Remove implementation of atomic box ops
...
* libguile/vm-engine.c (VM_VALIDATE, VM_VALIDATE_ATOMIC_BOX): Remove
now-unused definitions. Remove implementations of atomic-box-ref et
al.
* libguile/vm.c (vm_error_not_a_atomic_box): Remove.
2018-04-13 10:17:32 +02:00
Andy Wingo
dff85f6f9f
Explode atomic box ops to new atomic instructions
...
* libguile/instructions.c (FOR_EACH_INSTRUCTION_WORD_TYPE): Add C8_S24
word type.
* libguile/vm-engine.c (UNPACK_8_24): New helper.
(atomic-scm-ref/immediate, atomic-scm-set!/immediate)
(atomic-swap-scm!/immediate, atomic-scm-compare-and-swap!/immediate):
New instructions.
(make-atomic-box, atomic-box-ref, atomic-box-set!, atomic-box-swap!)
(atomic-box-compare-and-swap!): Disable these ops.
* module/language/bytecode.scm (compute-instruction-arity): Add C8_S24
support.
* module/system/vm/assembler.scm: Add C8_S24 support. Export assemblers
for new opcodes.
* module/system/vm/disassembler.scm (disassembler): Support C8_S24.
* module/language/cps/compile-bytecode.scm (compile-function): Replace
old atomic-box assemblers with the new instructions.
* module/language/cps/effects-analysis.scm (annotation->memory-kind):
* module/language/cps/types.scm (annotation->type): Add cases for atomic
boxes. Mark as all memory kinds because atomic ops serialize memory
accesses.
* module/language/tree-il/compile-cps.scm (make-atomic-box):
(ensure-atomic-box, atomic-box-ref, atomic-box-set!):
(atomic-box-swap!, atomic-box-compare-and-swap!): Explode these ops to
more basic instructions.
* module/system/base/types/internal.scm (%tc7-atomic-box): Add forgotten
export.
2018-04-13 10:09:56 +02:00
Andy Wingo
b32d3cc6f7
Remove implementation of logsub VM op
...
* libguile/vm-engine.c (logsub): Remove implementation.
2018-04-12 17:22:11 +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
b2c01e5b58
Remove implementations of obsolete s64->scm, u64->scm insts
...
* libguile/vm-engine.c (s64->scm, u64->scm): Remove implementation.
2018-04-12 16:46:51 +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
1457f4efb3
Remove scm->u64, etc implementations
...
* libguile/vm-engine.c: Remove implementations of now-obsolete bytecodes.
2018-04-12 16:27:20 +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
2db7c2df64
Remove scm->f64, f64->scm implementations
...
* libguile/vm-engine.c: Remove now-unused f64->scm, scm->f64 impls.
2018-04-10 20:51:06 +02:00
Andy Wingo
b285226477
Disable f64->scm instruction
...
* libguile/vm-engine.c (f64->scm): Disable instruction.
* module/language/cps/compile-bytecode.scm (compile-function): Remove
f64->scm case.
* module/system/vm/assembler.scm: Remove emit-f64->scm export.
2018-04-10 20:41:04 +02:00
Andy Wingo
997ecae1df
Instruction explosion for f64->scm
...
* module/language/cps/reify-primitives.scm (reify-primitives): Reify
f64->scm via low-level operations.
2018-04-10 20:37:28 +02:00
Andy Wingo
c109fa7eb8
Add reifier for fadd/immediate.
...
* module/language/cps/reify-primitives.scm (fadd/immediate): Add
missing reify procedure.
2018-04-10 20:37:11 +02:00
Andy Wingo
41689edfc3
Slim heap-allocated flonums
...
* libguile/numbers.h (struct scm_t_double, struct scm_t_complex): Avoid
adding an extra padding word on systems with 8-byte pointers.
* module/system/base/types.scm (cell->object): Update to compute correct
offset of embedded double.
2018-04-10 20:01:52 +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
59f1f5a6a7
Remove load-typed-array, make-array opcodes
...
* libguile/vm-engine.c (load-typed-array, make-array): Remove these
apparently unused opcodes. Yay!
2018-04-10 19:14:15 +02:00
Andy Wingo
3073199264
Remove class-of opcode
...
* libguile/vm-engine.c (class-of): Remove unused opcode.
2018-04-10 18:35:23 +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
d1ed64d900
Add string->number etc as macro instructions to reify-primitives
...
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Add string->number, etc. Missed from two commits ago.
2018-04-10 18:20:29 +02:00
Andy Wingo
51736fd66c
Remove string->number, etc opcodes
...
* libguile/vm-engine.c (string->number, string->symbol)
(symbol->keyword): Remove unused instructions.
2018-04-10 18:00:23 +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
b0641783c9
Remove unused make-closure opcode.
...
* libguile/vm-engine.c (make-closure): Remove opcode.
2018-04-10 17:55:18 +02:00
Andy Wingo
9f98b4a5b1
Add $code CPS expression type
...
* module/language/cps.scm ($code): New CPS type, for labels as values.
Add cases to all CPS type dispatches. $closure now indicates only
statically allocated closures.
* module/language/cps/closure-conversion.scm (convert-one): Only reify
$closure for statically allocated procedures. Otherwise allocate an
object using low-level primitives.
* module/language/cps/compile-bytecode.scm (compile-function): Remove
make-closure case.
* module/language/cps/slot-allocation.scm (compute-var-representations):
$code produces a u64 value.
* module/system/vm/assembler.scm: Remove make-closure export.
* module/language/cps/contification.scm:
* module/language/cps/cse.scm:
* module/language/cps/dce.scm:
* module/language/cps/devirtualize-integers.scm:
* module/language/cps/effects-analysis.scm:
* module/language/cps/licm.scm:
* module/language/cps/peel-loops.scm:
* module/language/cps/renumber.scm:
* module/language/cps/rotate-loops.scm:
* module/language/cps/simplify.scm:
* module/language/cps/specialize-numbers.scm:
* module/language/cps/types.scm:
* module/language/cps/utils.scm:
* module/language/cps/verify.scm: Add cases for $code.
2018-04-10 17:06:27 +02:00
Andy Wingo
70e3a4a311
Add load-label instruction
...
* libguile/vm-engine.c (load-label): New instruction.
* module/system/vm/assembler.scm: Add emit-load-label.
* module/system/vm/disassembler.scm (code-annotation):
(fold-code-range): Add load-label support.
2018-04-10 14:36:15 +02:00
Andy Wingo
3047bcaefb
Remove dead code in CPS converter
...
* module/language/tree-il/compile-cps.scm: Remove dead primcall
expanders.
2018-04-10 14:10:03 +02:00
Andy Wingo
644875cf0e
Remove char->integer from VM
...
* libguile/vm-engine.c (VM_VALIDATE_CHAR, VM_VALIDATE_STRING)
(VM_VALIDATE_INDEX): Remove now-unused helpers.
(vm_engine): Fix position of intrinsics declaration.
(char->integer): Remove unused opcode.
* libguile/vm.c (vm_error_not_a_char, vm_error_not_a_string)
(vm_error_out_of_range_uint64): Remove unused decls.
2018-04-10 13:50:28 +02:00