1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-05-01 04:10:18 +02:00
Commit graph

9201 commits

Author SHA1 Message Date
Andy Wingo
63de1893c3 Merge remote-tracking branch 'lightening/master' 2019-05-23 10:04:52 +02:00
Andy Wingo
e9e52b6ab9 Mark a couple functions as maybe-unused.
* libguile/jit.c (fp_scm_operand, sp_slot_operand): Maybe unused.
2019-05-23 09:34:08 +02:00
Andy Wingo
be8ac3589e Merge remote-tracking branch 'lightening/master' 2019-05-22 23:05:06 +02:00
Andy Wingo
3b707bb43d Merge remote-tracking branch 'lightening/master' 2019-05-22 17:30:25 +02:00
Andy Wingo
9b4870cad3 Merge remote-tracking branch 'lightening/master' 2019-05-21 16:06:11 +02:00
Andy Wingo
ec9fa9561b Merge remote-tracking branch 'lightening/master' 2019-05-21 15:35:15 +02:00
Andy Wingo
7bc95fde98 Merge remote-tracking branch 'lightening/master' 2019-05-21 15:30:56 +02:00
Andy Wingo
12e0063022 Merge remote-tracking branch 'lightening/master' 2019-05-21 14:21:42 +02:00
Andy Wingo
da0cc5d3e6 Bless enter_mcode as a function pointer
* libguile/jit.c (initialize_jit): Bless enter_mcode, to allow ARMv7
  interworking.
2019-05-21 14:02:27 +02:00
Andy Wingo
2feb4cf419 Merge remote-tracking branch 'lightening/master' 2019-05-21 14:00:55 +02:00
Andy Wingo
e00936d46b Allow jit_end to fail
* libguile/jit.c (emit_code): Emitting a constant table might cause us
  to fail.
2019-05-21 13:36:37 +02:00
Andy Wingo
2876f054e8 Merge remote-tracking branch 'lightening/master' 2019-05-21 12:44:23 +02:00
Andy Wingo
107926f8dd Fix allocator passed to lightening
* libguile/jit.c (jit_alloc_fn): On targets that need a dynamically
  allocated literal pool, we will need to trace that pool, so pass a
  pointerful malloc.  Fixes JIT on AArch64.
2019-05-21 12:39:55 +02:00
Andy Wingo
a4875baa4e Merge remote-tracking branch 'lightening/master' 2019-05-21 12:39:34 +02:00
Andy Wingo
03ceca9a2b Merge remote-tracking branch 'lightening/master' 2019-05-21 12:25:14 +02:00
Andy Wingo
f81f43591f Merge remote-tracking branch 'lightening/master' 2019-05-21 12:14:50 +02:00
Andy Wingo
66b96f9359 Merge remote-tracking branch 'lightening/master' 2019-05-20 21:36:17 +02:00
Andy Wingo
e057ea01f6 Merge remote-tracking branch 'lightening/master' 2019-05-20 15:48:27 +02:00
Andy Wingo
638846dc61 Merge from upstream lightening 2019-05-08 21:46:57 +02:00
Mark H Weaver
7c2b48a6bd Strings, i18n: Limit the use of alloca to approximately 8 kilobytes.
* libguile/i18n.c (SCM_MAX_ALLOCA): New macro.
(SCM_STRING_TO_U32_BUF): Accept an additional variable to remember
whether we used malloc to allocate the buffer.  Use malloc if the
allocation size is greater than SCM_MAX_ALLOCA.
(SCM_CLEANUP_U32_BUF): New macro.
(compare_u32_strings, compare_u32_strings_ci, str_to_case): Adapt.
* libguile/strings.c (SCM_MAX_ALLOCA): New macro.
(normalize_str, unistring_escapes_to_r6rs_escapes): Use malloc if the
allocation size is greater than SCM_MAX_ALLOCA.
* test-suite/tests/i18n.test, test-suite/tests/strings.test: Add tests.
2019-05-07 04:41:30 -04:00
Mark H Weaver
91b5b1631f put-u8: Always write a single byte, regardless of the port encoding.
Previously, 'put-u8' used textual I/O to write a single character,
relying on the usual practice of setting the port encoding to ISO-8859-1
for binary ports.

* libguile/r6rs-ports.c (scm_put_u8): Use 'scm_c_write', not 'scm_putc'.
2019-05-07 04:41:15 -04:00
Mark H Weaver
5b42fd80d7 Optimize fixnum exact integer square roots.
* libguile/numbers.c (scm_exact_integer_sqrt, scm_sqrt)
(exact_integer_is_perfect_square, exact_integer_floor_square_root):
Where it is trivial to do so, use GMP's low-level mpn functions to
avoid heap allocation.
2019-05-07 04:39:52 -04:00
Mark H Weaver
74d536bf52 Fix indentation in scm_sum. 2019-05-07 04:37:52 -04:00
Mark H Weaver
16b4bac355 Fix typo in comment. 2019-05-07 04:37:52 -04:00
Mark H Weaver
2a1f22c00a Add 'scm_c_make_char' and use it where appropriate.
This reverts the change to SCM_MAKE_CHAR made in the previous commit
63818453ad, which used an arithmetic trick
to avoid evaluating its argument more than once.

Here, we restore the previous implementation of SCM_MAKE_CHAR, which
evaluates its argument twice.  Instead, we introduce a new inlinable
function 'scm_c_make_char' and replace uses of SCM_MAKE_CHAR with calls
to 'scm_c_make_char' where appropriate.

* libguile/chars.h (scm_c_make_char): New inline function.
* libguile/inline.c: Include chars.h.
* libguile/srfi-13.c (REF_IN_CHARSET, scm_string_any, scm_string_every)
(scm_string_trim, scm_string_trim_right, scm_string_trim_both)
(scm_string_index, scm_string_index_right, scm_string_skip)
(scm_string_skip_right, scm_string_count, string_titlecase_x)
(string_reverse_x, scm_string_fold, scm_string_fold_right)
(scm_string_for_each, scm_string_filter, scm_string_delete):
Use 'scm_c_make_char' instead of 'SCM_MAKE_CHAR' in cases where the
argument calls a function.
* libguile/chars.c (scm_char_upcase, scm_char_downcase, scm_char_titlecase),
libguile/ports.c (scm_port_decode_char),
libguile/print.c (scm_simple_format),
libguile/read.c (scm_read_character),
libguile/strings.c (scm_string_ref, scm_c_string_ref),
libguile/vm-engine.c ("string-ref"): Ditto.
2019-05-07 04:37:52 -04:00
Andy Wingo
6e9d59f34d Merge from upstream lightening 2019-04-29 17:15:58 +02:00
Andy Wingo
7982839031 Merge from upstream lightening 2019-04-29 16:13:48 +02:00
Andy Wingo
c461126fab Fix u64-ref JIT on 32-bit
* libguile/jit.c (compile_u64_ref): Fix 32-bit load path; endianness was
  reversed.
2019-04-29 09:41:03 +02:00
Andy Wingo
85b3ee0ec3 Fix unneeded stack alignment.
* libguile/jit.c (emit_entry_trampoline): Remove unneeded alignment.
2019-04-28 18:45:10 +02:00
Andy Wingo
8f695c058a Merge from upstream lightening 2019-04-28 18:44:13 +02:00
Andy Wingo
983af3be3b Merge from upstream lightening 2019-04-28 16:21:22 +02:00
Andy Wingo
fb1f3ba051 Fix errors in 32-bit JIT support
* libguile/jit.c (compile_ursh_immediate):
(compile_ulsh_immediate): Fix immediate/register variant calling.
Happily a benefit of lightening, as type safety did this for us.
(DEFINE_CLOBBER_RECORDING_EMITTER_R_R_2): Pass JIT state.
2019-04-28 13:54:34 +02:00
Andy Wingo
334d0ba860 Adapt to lightening changes
* libguile/jit.c (emit_entry_trampoline): Use
  jit_{enter,leave}_jit_abi.
  (compile_allocate_words_immediate): Use JIT_OPERAND_ABI_WORD.
2019-04-28 13:54:34 +02:00
Andy Wingo
26bd81716b Align stack before entering JIT code
* libguile/jit.c (emit_entry_trampoline): Ensure stack is aligned when
  going into JIT code.
2019-04-28 13:54:34 +02:00
Andy Wingo
51618e7e83 Merge from upstream lightening 2019-04-28 13:53:16 +02:00
Andy Wingo
14e64a8b57 Ensure stack alignment in JIT code.
* libguile/jit.c (emit_entry_trampoline): Explicitly align stack.
2019-04-26 12:45:16 +02:00
Andy Wingo
5b45f04cc8 Merge from upstream Lightening 2019-04-26 12:41:47 +02:00
Andy Wingo
4e5329676b Fix backtraces with call-with-values during bootstrap
* libguile/programs.c (scm_i_program_name): Use scm_i_primitive_name for
  primitives.  No functional change though.
* libguile/vm.c (DEFINE_BUILTIN): Mark builtins as primitives.
2019-04-26 11:15:49 +02:00
Andy Wingo
52248cf622 Adapt to changes in upstream lightening
* libguile/jit.c (emit_entry_trampoline): Adapt to change in callee-save
  predicates.
2019-04-25 23:47:27 +02:00
Andy Wingo
5622396cd9 Merge from upstream lightening 2019-04-25 23:24:27 +02:00
Andy Wingo
4088915a7e Lower default JIT threshold as JIT is cheaper now
* libguile/jit.c (default_jit_threshold): Lower from 50000 to 1000.
2019-04-25 18:41:03 +02:00
Andy Wingo
e9a372b020 Re-enable fixnum less-than JIT fast-path
* libguile/jit.c (compile_less): Re-enable fast-path for fixnums, now
  that the JIT library works :)
2019-04-25 18:24:20 +02:00
Andy Wingo
f0be544463 Merge from upstream lightening 2019-04-25 18:12:42 +02:00
Andy Wingo
b0cd9c0b77 Merge from upstream lightening 2019-04-25 17:16:54 +02:00
Andy Wingo
fa6093c4ef Merge from upstream lightening 2019-04-24 22:57:26 +02:00
Andy Wingo
0ef614ecf9 Fix a JIT bug
* libguile/jit.c (compile): Reset frame size as well when restarting
  compilation.  Fixes JIT errors.
2019-04-24 22:20:00 +02:00
Andy Wingo
9a32b4b1ad Adapt to new lightening call API
* libguile/jit.c: Operands have their ABI in them.  We can now have
  addends on GPR and MEM operands, which can improve register
  allocation.  Use new jit_calli_3, etc helper APIs.
2019-04-24 16:02:33 +02:00
Andy Wingo
d75303780b Merge from upstream lightening 2019-04-24 15:53:22 +02:00
Andy Wingo
609df9ea55 Merge from upstream lightening 2019-04-22 09:17:26 +02:00
Mark H Weaver
63818453ad Reimplement SCM_MAKE_CHAR to evaluate its argument only once.
The motivation for this change is that SCM_MAKE_CHAR is sometimes passed
an expression that involves a procedure call that is not always trivial.
In other cases, the results are not guaranteed to be the same both
times, which could lead to the creation of invalid SCM objects.

* libguile/chars.h (SCM_MAKE_CHAR): Reimplement.
2019-04-17 03:02:55 -04:00