1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-04-30 20:00:19 +02:00
Commit graph

3841 commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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
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
98fc9c0380 Use make-struct/simple in tree-il
* module/language/tree-il.scm (borrow-core-vtables): Use
  make-struct/simple.
2018-01-22 08:09:33 +01:00
Andy Wingo
5fcc761b43 Use make-struct/simple in psyntax
* module/ice-9/psyntax.scm (define-expansion-constructors): Use
  make-struct/simple, so we can inline allocations.
* module/ice-9/psyntax-pp.scm: Regenerate.
2018-01-22 08:06:09 +01:00
Andy Wingo
3f736c4781 Remove unneeded assembly shuffle routines.
* module/system/vm/assembler.scm (encode-X8_S12_S12-X8_C24!/shuffle)
  (encode-X8_S12_S12-X8_C24<-/shuffle): Remove now-unneeded shufflers.
2018-01-22 07:55:06 +01:00
Andy Wingo
b09bbfe3c0 Remove free-ref, free-set!
* libguile/vm-engine.c (free-ref, free-set!): Remove ops.
* module/language/cps/effects-analysis.scm:
* module/system/vm/assembler.scm:
* module/system/vm/disassembler.scm (code-annotation):
* module/language/cps/compile-bytecode.scm (compile-function): Remove
  support for free-ref / free-set!.
2018-01-22 07:51:36 +01:00
Andy Wingo
dd203e5d7d Remove optimizer and backend support for struct ops
* module/language/cps/compile-bytecode.scm:
* module/language/cps/cse.scm:
* module/language/cps/effects-analysis.scm:
* module/language/cps/reify-primitives.scm:
* module/language/cps/specialize-primcalls.scm:
* module/language/cps/types.scm:
* module/language/tree-il/cps-primitives.scm:
* module/system/vm/assembler.scm: Remove support for struct-ref,
  struct-set!, allocate-struct, struct-vtable CPS primcalls and bytecode
  instructions.
2018-01-22 07:51:08 +01:00
Andy Wingo
91bf9b1db3 Lower "make-struct/simple" to CPS
* module/language/tree-il/cps-primitives.scm (struct-init!): Add
  primitive, just used in internal translations.
* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
  (*primitive-constructors*): Recognize "make-struct/simple" instead of
  allocate-struct.
* module/language/tree-il/compile-cps.scm (ensure-vtable): New helper.
  (allocate-struct, struct-init!): New lowerers.
  (convert): Add struct-init! case.
  (canonicalize): Convert make-struct/simple like vector.
2018-01-22 07:28:11 +01:00
Andy Wingo
5084fa4858 Introduce make-struct/simple
* libguile/struct.h:
* libguile/struct.c (scm_make_struct_simple): New function.
* module/ice-9/boot-9.scm (make-record-type): Recast in terms of
  make-struct/simple.
* module/ice-9/eval.scm (primitive-eval): Remove allocate-struct case.
* module/srfi/srfi-9.scm (%%set-fields, %define-record-type): Use
  make-struct/simple.
2018-01-21 21:03:35 +01:00
Andy Wingo
557acdbbba Instruction explosion for struct-ref, struct-set!
* module/language/cps/effects-analysis.scm (&memory-kind-mask): Add
  &bitmask, for the bitmask in vtables.
  (annotation->memory-kind): Add 'bitmask case.
* module/language/tree-il/compile-cps.scm (ensure-struct-index-in-range):
  (prepare-struct-scm-access): New helpers.
  (struct-ref/immediate, struct-set!/immediate): New exploded lowering
  routines.
  (struct-ref, struct-set!): New lowering routines that just do a call.
  (canonicalize): Remove struct-ref hack; lowering procedures will
  handle it.
* module/language/tree-il/cps-primitives.scm (bytevector-length): Define
  struct-set! as returning a value.
2018-01-19 21:57:03 +01:00
Andy Wingo
8573d94404 Remove optimizer and backend support for bv-u8-ref et al
* module/language/cps/compile-bytecode.scm (compile-function):
* module/language/cps/effects-analysis.scm:
* module/language/cps/slot-allocation.scm (compute-var-representations):
* module/language/cps/types.scm:
* module/system/vm/assembler.scm: Remove optimizer and backend support
  for bv- ops.
2018-01-16 16:43:25 +01:00
Andy Wingo
42837e9108 Instruction explosion for bv-length
* module/language/tree-il/compile-cps.scm (ensure-vector):
  (prepare-bytevector-access): Add assumptions on lengths.
  (bv-length): New lowerer.
2018-01-16 16:43:10 +01:00
Andy Wingo
4829cb3ce9 Add assume-u64 and assume-s64 dataflow restrictions
* module/language/cps/effects-analysis.scm::
* module/language/cps/reify-primitives.scm (reify-primitives):
* module/language/cps/slot-allocation.scm (compute-var-representations):
* module/language/cps/types.scm (assume-u64, assume-s64): Add primitives
  that assume the range of a u64 or s64 value is within certain bounds.
  This is useful when extracting e.g. a length from a 64-bit word when
  you know the length is less than 2**48.
2018-01-16 16:42:56 +01:00
Andy Wingo
94fdc5cad9 Instruction explosion for bytevector setters
* module/language/cps/compile-bytecode.scm (compile-function): Fix
  emitters for u64-set! et al.
* module/language/tree-il/compile-cps.scm (bytevector-set-converter):
  New helper.  Lower bytevector setters to pointer ops.
2018-01-16 10:05:03 +01:00
Andy Wingo
1b955b01c3 Add f32-ref, f64-ref lowering procs
* module/language/tree-il/compile-cps.scm (bytevector-ref-converter):
  Take kind as tag, not boolean.  Support floats.  Adapt and add
  lowerers for float-ref procedures.
2018-01-15 20:51:00 +01:00