Add specialize-primcalls pass; bump objcode version.
authorAndy Wingo <wingo@pobox.com>
Sun, 10 Nov 2013 18:27:19 +0000 (19:27 +0100)
committerAndy Wingo <wingo@pobox.com>
Sun, 10 Nov 2013 18:27:19 +0000 (19:27 +0100)
commit4c906ad5a5e0404e8b488b525f6b62f405b4d560
tree3d2f69e6931b4c52811df729f3528d92cec26f7d
parent863dd873628a971176556a1da1bf2ab3f0ff5e55
Add specialize-primcalls pass; bump objcode version.

* libguile/_scm.h (SCM_OBJCODE_MINOR_VERSION): Bump.

* libguile/objcodes.c (process_dynamic_segment): Expect the minor
  version to be present and, while we are still banging on the VM,
  exactly equal to SCM_OBJCODE_MINOR_VERSION.

* libguile/vm-engine.c: Renumber ops.  Remove the general make-vector.
  Rename constant-FOO to FOO/immediate.  Remove struct-ref and
  struct-set!, replace with struct-ref/immediate and
  struct-set!/immediate.

* module/Makefile.am:
* module/language/cps/specialize-primcalls.scm: New pass, inlines FOO to
  FOO/immediate -- e.g. vector-ref to vector-ref/immediate.

* module/language/cps/arities.scm: Remove struct-set! case, now that
  there is no struct-set! opcode.

* module/language/cps/compile-rtl.scm (compile-fun): Remove dispatch to
  constant-FOO versus FOO here -- that decision is made by
  specialize-primcalls.
  (optimize): Add specialize-primcalls pass.

* module/language/cps/dfg.scm (constant-needs-allocation?): Adapt to
  name changes.

* module/language/tree-il/primitives.scm (*interesting-primitive-names*):
  (*primitive-constructors*): Add allocate-struct.

* module/system/vm/assembler.scm (*bytecode-major-version*):
  (*bytecode-minor-version*, link-dynamic-section): Write minor version
  into resulting image.
libguile/_scm.h
libguile/objcodes.c
libguile/vm-engine.c
module/Makefile.am
module/language/cps/arities.scm
module/language/cps/compile-rtl.scm
module/language/cps/dfg.scm
module/language/cps/specialize-primcalls.scm [new file with mode: 0644]
module/language/tree-il/primitives.scm
module/system/vm/assembler.scm