increase range of relative jumps by aligning blocks to 8-byte boundaries
authorAndy Wingo <wingo@pobox.com>
Sun, 26 Jul 2009 12:01:56 +0000 (14:01 +0200)
committerAndy Wingo <wingo@pobox.com>
Sun, 26 Jul 2009 12:01:56 +0000 (14:01 +0200)
commite5dc27b86d0eaa470f92cdaa9f4ed2a961338c49
treec8c46f9c5995fd22c42f072faefacd7d075193fb
parent28b119ee3da0f4b14cb87e638794d22843778cda
increase range of relative jumps by aligning blocks to 8-byte boundaries

* libguile/objcodes.c (OBJCODE_COOKIE): Bump again, as our jump offsets
  are now multiplied by 8.

* libguile/vm-i-system.c (BR): Interpret the 16-bit offset as a relative
  jump to the nearest 8-byte-aligned block -- increasing relative jump
  range from +/-32K to +/-240K.
  (mvra): Do the same for the mvra jump.

* libguile/vm.c (really_make_boot_program): Align the mvra.

* module/language/assembly.scm (align-block): New export, for aligning
  blocks.

* module/language/assembly/compile-bytecode.scm (write-bytecode): Emit
  jumps to the nearest 8-byte-aligned block. Effectively our range is 18
  bits in either direction. I would like to do this differently -- have
  long-br and long-br-if, and all the other br instructions go to 8 bits
  only. But the assembler doesn't have an appropriate representation to
  allow me to do this yet, so for now this is what we have.

* module/language/assembly/decompile-bytecode.scm (decode-load-program):
  Decode the 19-bit jumps.
libguile/objcodes.c
libguile/vm-i-system.c
libguile/vm.c
module/language/assembly.scm
module/language/assembly/compile-bytecode.scm
module/language/assembly/decompile-bytecode.scm
module/language/glil/compile-assembly.scm