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
Andy Wingo
21d5897b4c
Instruction explosion for char->integer
...
* module/language/cps/effects-analysis.scm:
* module/language/cps/slot-allocation.scm (compute-var-representations):
* module/language/cps/types.scm:
* module/language/cps/compile-bytecode.scm (compile-function): Remove
char->integer cases.
* module/system/vm/assembler.scm: Remove emit-char->integer export.
* module/language/tree-il/compile-cps.scm (char->integer): Define
instruction exploder.
2018-04-10 13:45:33 +02:00
Andy Wingo
9355985154
Remove integer->char op
...
* libguile/vm-engine.c (integer->char): Remove unused op.
* module/language/cps/types.scm:
* module/language/cps/effects-analysis.scm:
* module/language/cps/compile-bytecode.scm (compile-function): Remove
integer->char cases.
* module/system/vm/assembler.scm: Remove emit-integer->char.
2018-04-10 13:33:13 +02:00
Andy Wingo
880d68ea22
Instruction explosion for integer->char
...
* module/language/tree-il/compile-cps.scm (integer->char): Instruction
explosion!
2018-04-10 13:22:59 +02:00
Andy Wingo
f1fe5219de
Remove string-set! VM op
...
* libguile/vm-engine.c (string-set!): Remove now-unused VM op.
2018-04-10 12:21:23 +02:00
Andy Wingo
2964abad05
Explode "string-set!"
...
* module/language/cps/effects-analysis.scm (string-ref): Remove effects
declaration, given that the primitive is exploded now.
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Add string-set!.
* libguile/vm-engine.c (string-set!): Disable opcode.
* module/language/cps/types.scm (string-ref, string-set!): Remove type
checker and inferrers for string-ref and string-set!, as both are
exploded. In the case of string-set! there are still type-check
effects in the intrinsic call but they can't be elided by the checker,
as we don't track when strings are read-only.
* module/language/tree-il/compile-cps.scm (ensure-char): New helper.
(string-set!): New primcall exploded converter.
2018-04-10 12:14:47 +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
33b038bfa9
Remove now-unused string-length, string-ref
...
* libguile/vm-engine.c (string-length, string-ref): Remove
instructions.
* module/system/vm/assembler.scm: Remove assembler exports as well.
2018-04-09 10:22:35 +02:00
Andy Wingo
7a109dddd7
Lower string-ref in CPS conversion
...
* module/language/cps/effects-analysis.scm (annotation->memory-kind):
* module/language/cps/types.scm (annotation->type): Hackily consider
stringbuf memory to be string memory.
* module/language/tree-il/compile-cps.scm (string-ref): Add horrible
lowering conversion for string-ref.
2018-04-09 10:13:09 +02:00
Andy Wingo
91d0db1bf7
Add VM ops needed for string-ref
...
* libguile/vm-engine.c (tail-pointer-ref/immediate, tag-char)
(untag-char): New instructions.
* module/language/cps/compile-bytecode.scm (compile-function): Add
support for new instructions.
* module/language/cps/cse.scm (compute-equivalent-subexpressions): CSE
cases for tag-char / untag-char.
* module/language/cps/effects-analysis.scm:
* module/language/cps/types.scm: Add cases for new primcalls.
* module/language/cps/reify-primitives.scm (reify-primitives): Update
comment.
* module/language/cps/slot-allocation.scm (compute-var-representations):
Add cases for untag-char, tail-pointer-ref/immediate.
* module/language/cps/specialize-primcalls.scm (specialize-primcalls):
Add untag-char case, and add FIXME comment for tag-char.
* module/system/vm/assembler.scm: Export new assemblers.
2018-04-08 21:26:46 +02:00
Andy Wingo
39fb7e540b
CPS conversion lowers string-length
...
* module/language/cps/types.scm (annotation->type):
* module/language/cps/effects-analysis.scm (annotation->memory-kind):
Add case for string memory kinds. Remove special type and effect
inferrers for string-length.
* module/language/cps/slot-allocation.scm (compute-var-representations):
Remove string-length.
* module/language/tree-il/compile-cps.scm (ensure-string): New helper.
(string-length): Add custom converter.
2018-04-08 10:27:52 +02:00
Andy Wingo
bb1ff0e78a
Remove specific instructions for add, etc from VM
...
* module/language/cps/reify-primitives.scm (compute-known-primitives):
Treat add, sub, and so on as known primitives.
* libguile/vm-engine.c: Remove code for now-unused instructions.
2018-03-31 01:40:47 +02:00
Andy Wingo
1f6f282f16
Compile some generic arithmetic to intrinsic calls
...
* libguile/intrinsics.h: Rename intrinsic types added in previous
commit.
* libguile/vm-engine.c (call-scm<-scm-scm, call-scm<-scm-uimm): New
instructions.
* libguile/vm.c: Include intrinsics.h.
* module/language/bytecode.scm
* module/language/bytecode.scm (*intrinsic-codes*, *intrinsic-names*):
New internal definitions.
(intrinsic-name->index, intrinsic-index->name): New exported
definitions.
* module/system/vm/assembler.scm (encode-X8_S8_S8_S8-C32<-/shuffle):
(encode-X8_S8_S8_C8-C32<-/shuffle): New shuffling encoders.
(shuffling-encoder-name): Add case for new shuffling encoders.
(define-scm<-scm-scm-intrinsic, define-scm<-scm-uimm-intrinsic): New
helpers. Define encoders for "add", etc.
2018-03-30 22:11:18 +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
Arun Isaac
01f97cfc0a
Fix minor typo in the PEG documentation.
...
* doc/ref/api-peg.texi (PEG Internals): Fix minor typo.
Signed-off-by: Mark H Weaver <mhw@netris.org>
2018-03-16 00:15:12 -04:00
Mark H Weaver
6d9c6833e7
Fix a few typos in the manual.
...
Fixes <https://bugs.gnu.org/30276 >.
Reported by Matt Wette <matt.wette@gmail.com>.
* doc/ref/api-macros.texi (Macro Expansion)
doc/ref/vm.texi (Procedure Call and Return Instructions): Fix typos.
2018-03-16 00:09:26 -04:00
Mark H Weaver
b56e084c77
Fix eta-conversion edge cases in peval.
...
Fixes <https://bugs.gnu.org/29520 >.
Reported by Stefan Israelsson Tampe <stefan.itampe@gmail.com>.
* module/language/tree-il/peval.scm (peval)[lift-applied-lambda]: Before
performing eta-conversion, check that the variable(s) passed to the
inner 'apply' are not referenced from the inner lambda, and that the
number of required arguments would not be reduced by the conversion.
2018-03-15 23:22:26 -04:00