* libguile/array-handle.c (scm_array_handle_pos_1):
(scm_array_handle_pos_2): New functions.
* libguile/generalized-arrays.c (scm_c_array_ref_1, scm_c_array_ref_2):
(scm_c_array_set_1_x, scm_c_array_set_2_x): New functions.
(scm_i_array_ref, scm_i_array_set_x): New subr bindings for array-ref
and array-set! that avoid consing for arrays of rank 1 or 2.
* test-suite/tests/arrays.test ("array-set!"): Fix expected exception
for wrong number of indices.
* libguile/inline.h:
* libguile/array-handle.h (scm_array_handle_ref):
(scm_array_handle_set): Move definitions here from inline.h.
* libguile/inline.c: Include array-handle.h.
* include/lightning/jit_sparc.h, lib/jit_sparc-cpu.c,
lib/jit_sparc-fpu.c, lib/jit_sparc.c: New files implementing
the basic framework of the sparc port.
* configure.ac, include/lightning.h, include/lightning/Makefile.am,
include/lightning/jit_private.h, lib/jit_disasm.c: Update
for the sparc port framework.
* lib/jit_mips.c: Correct reversed retr/reti logic.
* lib/jit_ppc.c: Correct misspelled __LITTLE_ENDIAN.
* lib/lightning.c: Always do byte hashing in hash_data, because
the logic to "compress" strings causes large pointers to not
be guaranteed aligned at 4 byte boundaries.
Update for the sparc port framework.
* libguile/hashtab.c (scm_hash_count): New function. Count the number
of elements in a hash table.
* doc/ref/api-compound.texi (Hash Tables): Update examples and
reference.
* test-suite/tests/hash.test (hash-count): New test.
* module/language/tree-il/peval.scm (peval): Add a special-case inlining
pattern for apply to a let-bound rest arg that preserves effect
ordering.
* test-suite/tests/peval.test ("partial evaluation"): Add a test, and
update an older test with a better result.
* module/language/tree-il/peval.scm (peval): Correct comment on
find-definition, and allow a find-definition to fall back on a source
expression. Avoid copying non-constant expressions.
* test-suite/tests/peval.test ("partial evaluation"): Add a test that
inlining rest arguments works with complicated argument expressions,
and a test that order of effects in rest args is preserved.
* module/language/tree-il/peval.scm (peval): Move up the find-definition
helper. Use it to speculatively destructure conses and lists into the
tail position of an `apply' form.
* test-suite/tests/peval.test ("partial evaluation"): Add tests.
* doc/ref/api-foreign.texi (Foreign Types): Replace references to the
old foreign->bytevector and bytevector->foreign with the new procedure
names using pointer.
* lib/jit_arm.c: Correct jit_pushargi_f in the arm hardfp abi.
Most of the logic uses even numbered register numbers, so that
a float and a double can be used in the same register, but
the abi requires packing the float arguments, so jit_pushargi_f
needs to allocate a temporary register to modify only the
proper register argument (or be very smart to push two
immediate arguments if applicable).
* include/lightning.h, lib/lightning.c: Implement the new
jit_clear_state and jit_destroy_state calls. jit_clear_state
releases all memory not required during jit_execution; that
is, leaves only the mmap'ed data and code buffers allocated.
jit_destroy_state releases the mmap'ed buffers as well as
the jit_state_t object itself, that holds pointers to the
code and data buffers, as well as annotation pointers (for
disassembly or backtrace) in the data buffer.
* lib/jit_note.c: Correct invalid vector offset access.
* check/ccall.c, check/lightning.c, doc/ifib.c, doc/incr.c,
doc/printf.c, doc/rfib.c, doc/rpn.c: Use the new jit_clear_state
and jit_destroy_state calls, to demonstrate the new code to
release all jit memory.
* doc/body.texi: Add basic documentation and usage description
of jit_clear_state and jit_destroy_state.
* include/lightning/jit_private.h, lib/jit_note.c, lib/lightning.c:
Store all annotation information in the mmap'ed area reserved for
read only data. This adds code to not allocate memory for jit_note_t
objects, and to relocate jit_line_t objects and its contents after
calculating annotation information. The jit_line_t objects are
relocated because it is not possible to always calculate before
hand data layout because note information may be extended or
redundant entries removed, as well as allowed to be added in
non sequential order.
A bug was also corrected in _jit_set_note, that was causing it
to allocate new jit_line_t objects when not needed. It was still
working correctly, but allocating way more memory than required.
*include/lightning.h, lib/lightning.c: Add the new jit_live code
to explicitly mark a register as live. It is required to avoid
assuming functions always return a value in the gpr and fpr return
register, and to avoid the need of some very specialized codes
that vary too much from backend to backend, to instruct the
optimization code the return register is live.
* lib/jit_arm.c, lib/jit_mips.c, lib/jit_ppc.c, lib/jit_print.c,
lib/jit_x86.c: Update for the new jit_live code.
* check/ret.ok, check/ret.tst: New files implementing a simple
test case that would previously fail at least in ix86/x86_64.
* check/Makefile.am: Update for new "ret" test case.
2013-02-04 Paulo Andrade <pcpa@gnu.org>
* include/lightning.h, include/lightning/jit_private.h,
lib/jit_arm-cpu.c, lib/jit_arm.c, lib/jit_mips-cpu.c,
lib/jit_mips.c, lib/jit_ppc-cpu.c, lib/jit_ppc.c,
lib/jit_x86-cpu.c, lib/jit_x86.c, lib/lightning.c:
Implement the new qmul and qdiv instructions that return signed
and unsigned lo/hi multiplication result and div/rem division result.
These should be useful for jit translation of code that needs to
know if a multiplication overflows (no branch opcode added) or if
a division is exact (easy check if remainder is zero).
* check/lightning.c, lib/jit_print.c, check/Makefile.am,
check/all.tst: Update for the new qmul and qdiv instructions.
* check/qalu.inc, check/qalu_div.ok, check/qalu_div.tst,
check/qalu_mul.ok, check/qalu_mul.tst: New files implementing
simple test cases for qmul and qdiv.
* test-suite/tests/foreign.test ("make-pointer")["equal? modulo
finalizer", "equal? modulo finalizer (set-pointer-finalizer!)"]: Skip
when `scm_is_pair' cannot be found, as is the case on Cygwin.
Reported by "objc" <objcjohn@hotmail.com>.
* module/ice-9/psyntax.scm (expand-body): As required by R6RS, evaluate
the right-hand-sides of internal 'define-syntax' forms and add their
transformers to the compile-time environment immediately, so that the
newly-defined keywords may be used in definition context within the
same lexical contour. Fixes#13509.
* module/system/repl/common.scm: Add not only 2013, but also 2012 to the
copyright notice at the top of the file, since the file was changed in
2012.
(*version*): Bump copyright year to 2013 in REPL greeting.
* doc/body.texi: Correct "jmpi" description that incorrectly
told it was possible to pass any address as jump target. The
only way to do that is "movi+jmpr".
* module/sxml/simple.scm (read-internal-doctype-as-string): New helper.
(xml->sxml): Add #:doctype-handler argument.
* doc/ref/sxml.texi (Reading and Writing XML): Document
#:doctype-handler. Fix some other examples, and fix the default value
of #:declare-namespaces?.
* test-suite/tests/sxml.simple.test: Add all tests from the manual
here.
* libguile/ports.h:
* libguile/ports.c (scm_consume_byte_order_mark): New procedure.
* libguile/fports.c (scm_open_file): Call consume-byte-order-mark if we
are opening a file in "r" mode.
* libguile/read.c (scm_i_scan_for_encoding): Don't do anything about
byte-order marks.
* libguile/load.c (scm_primitive_load): Add a note about the duplicate
encoding scan.
* test-suite/tests/filesys.test: Add tests for UTF-8, UTF-16BE, and
UTF-16LE BOM handling.
Fixes <http://bugs.gnu.org/13558>.
Reported by DNS <dns@rbose.org>.
* configure.ac: Use the `serial-tests' Automake option to cope with
Automake 1.13, which uses `parallel-tests' by default.
* module/language/tree-il/analyze.scm (format-string-argument-count):
Handle ~t and ~k options case-insensitively.
~! ~| ~/ ~q and ~Q should not update the min-count or max-count.
~^ returns the min-count and 'any
+ - # and ' should not increase the argument count.
* test-suite/tests/tree-il.test (*): Tests for new parameters.
* module/sxml/upstream/SSAX.scm (ssax:handle-parsed-entity):
Interpret *DEFAULT* as being a default handler procedure for parsed
entities. Includes test.
* doc/ref/sxml.texi (SXML): Reorder and begin rewriting. Fix formatting
throughout, provide a new introduction, and the beginning of proper
SSAX documentation.
* doc/ref/sxml-match.texi:
* doc/ref/texinfo.texi:
* doc/ref/web.texi: Update references to new node names.