1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-09 21:40:33 +02:00
Commit graph

19341 commits

Author SHA1 Message Date
Andy Wingo
3e22eef52c Fix guile-config for Guile 3.0
* meta/guile-config.in (guile-module): Use pkg-config for effective
  version.
2018-10-07 16:59:34 +02:00
Andy Wingo
5787f4e516 Fix -Wunused-function error for x86 not on sun
* libguile/lightning/lib/jit_x86-x87.c (_fstcwm): Surround definition
  with ifdef(sun).
2018-10-07 16:44:13 +02:00
Andy Wingo
8bcba78eda Fix unused local warning in vm-engine.c
* libguile/vm-engine.c (return-values): Remove needless frame_size=3
  local var.
2018-10-07 16:33:04 +02:00
Andy Wingo
2388193bbf Fix lightning build with jit_names.c
* libguile/lightning/lightning.am (lightning_extra_files): Move
  jit_names.c here.
2018-10-07 16:30:17 +02:00
Andy Wingo
ae188ac6b7 Revert "Remove jit_names.c."
This reverts commit b74e1f0de3.
2018-10-07 16:29:18 +02:00
Andy Wingo
b74e1f0de3 Remove jit_names.c.
* libguile/lightning/lib/jit_names.c: Remove unused file.
* libguile/lightning/lightning.am (lightning_c_files): Remove
  jit_names.c.
* libguile/lightning/lib/jit_print.c: Remove jit_names.c inclusion.
2018-10-07 16:28:36 +02:00
Andy Wingo
173b44a224 Fix GCC warning with %char-set-dump.
* libguile/srfi-14.c (scm_sys_char_set_dump): Silence an erroneous
  -Wformat-overflow warning based on an incorrect range inference by
  increasing output buffer size.
2018-10-07 16:14:06 +02:00
Andy Wingo
f34d50ad6b Deprecate scm_find_executable
* libguile/deprecated.h:
* libguile/deprecated.c (scm_find_executable): Deprecate.  Use strdup
  instead of weird scm_cat_path function.
* libguile/script.h:
* libguile/script.c: Remove old decls.
2018-10-07 16:04:59 +02:00
Andy Wingo
edba440885 Remove unimplemented decl in script.h
* libguile/script.h (scm_find_impl_file): Remove unimplemented decl.
2018-10-07 15:57:50 +02:00
Andy Wingo
03581c04d7 Comment out some unused definitions
* libguile/jit.c: Comment out unused var decls.
2018-10-07 15:57:27 +02:00
Andy Wingo
6cd9b3114f Fix use of uninstalled header by installed headers
* libguile/Makefile.am (libpath.h): Remove definition of
  SCM_EFFECTIVE_VERSION, which is defined in version.h.
* libguile/extensions.h: Remove libpath.h inclusion, as it's not
  installed.
* libguile/atomic.c:
* libguile/bytevectors.c:
* libguile/control.c:
* libguile/fdes-finalizers.c:
* libguile/foreign-object.c:
* libguile/foreign.c:
* libguile/fports.c:
* libguile/frames.c:
* libguile/goops.c:
* libguile/i18n.c:
* libguile/instructions.c:
* libguile/intrinsics.c:
* libguile/ioext.c:
* libguile/load.c:
* libguile/loader.c:
* libguile/poll.c:
* libguile/ports.c:
* libguile/posix.c:
* libguile/programs.c:
* libguile/r6rs-ports.c:
* libguile/srfi-1.c:
* libguile/srfi-60.c:
* libguile/threads.c:
* libguile/unicode.c:
* libguile/vm.c:
* libguile/weak-vector.c: Include version.h for the
  SCM_EFFECTIVE_VERSION definition.
2018-10-07 15:15:02 +02:00
Andy Wingo
d08f2c1166 Update NEWS
* NEWS: Update.
2018-10-07 15:02:08 +02:00
Andy Wingo
94e66d2384 Minor additional manual updates
* doc/ref/api-debug.texi (VM Hooks): Update for changes in VM hook API.
* doc/ref/guile.texi: Update copyright years.
* doc/ref/preface.texi (Contributors): Update.
2018-10-07 12:28:51 +02:00
Andy Wingo
a3b32f839b Add manual section on JIT compiler
* doc/ref/vm.texi (Just-In-Time Native Code): New section.
* doc/ref/compiler.texi (Extending the Compiler): Update.
2018-10-07 11:36:45 +02:00
Andy Wingo
6f3357b0df Fix f32-set! JIT compilation
* libguile/jit.c (compile_f32_set): Fix to write an f32, not a f64.
2018-10-04 16:50:10 +02:00
Andy Wingo
6a243e1ba0 Update compiler.texi
* doc/ref/compiler.texi: Update for compiler changes in Guile 3.
2018-10-03 23:24:22 +02:00
Andy Wingo
39729e8448 Rename $closure to $const-fun
* module/language/cps.scm ($const-fun): Rename from $closure, as we
  always use this now with nfree == 0.
* module/language/cps/closure-conversion.scm:
* module/language/cps/compile-bytecode.scm:
* 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/slot-allocation.scm:
* module/language/cps/specialize-numbers.scm:
* module/language/cps/types.scm:
* module/language/cps/utils.scm:
* module/language/cps/verify.scm: Adapt users.
2018-10-03 22:58:45 +02:00
Andy Wingo
4e8d27f0d1 Finish updating vm.texi
* doc/ref/compiler.texi (Bytecode): Update macro-assembler instructions,
  and move most of them to the instruction set reference.
* doc/ref/vm.texi (A Virtual Machine for Guile, VM Programs): Minor
  fixes.
(Instruction Set): Update for Guile 3 instruction set.
* libguile/vm-engine.c (vm_engine): Update a few instruction
  docstrings.
2018-09-30 16:08:40 +02:00
Andy Wingo
4c53593bbe Update "Variables and the VM"
* doc/ref/vm.texi (Variables and the VM): Update.
2018-09-28 12:24:06 +02:00
Andy Wingo
5e671cea02 Update "Stack Layout"
* doc/ref/vm.texi (Stack Layout): Update.
2018-09-28 12:15:58 +02:00
Andy Wingo
7e623d1014 Update "VM Concepts"
* doc/ref/vm.texi (VM Concepts): Update.
2018-09-28 12:15:30 +02:00
Andy Wingo
2018609a69 Update "Why a VM?"
* doc/ref/vm.texi (Why a VM?): Update.
2018-09-28 12:14:55 +02:00
Andy Wingo
f1b745eec5 Update "A Virtual Machine for Guile"
* doc/ref/vm.texi (A Virtual Machine for Guile): Update.
2018-09-28 12:14:09 +02:00
Andy Wingo
6be54f4526 Update data representation chapter in the manual
* doc/ref/data-rep.texi (The SCM Type in Guile): Refer to scm.h.
(Relationship Between SCM and scm_t_bits): Better title-case.
(Immediate Objects): Better title-case.  Prefer "heap object" over
"cell".
(Non-Immediate Objects): Better title-case.  Deprecate the concept of
cells.
(Allocating Heap Objects): Rename from Allocating Cells.
(Heap Object Type Information): Rename from Heap Cell Type Information.
(Accessing Heap Object Fields): Rename from Accessing Cell Entries.
* doc/ref/vm.texi: Update references.
2018-09-27 13:48:09 +02:00
Andy Wingo
a691540703 Update Conservative GC section of manual
* doc/ref/data-rep.texi (Conservative GC): Update notes with more
  details.
2018-09-27 09:50:37 +02:00
Andy Wingo
179f6610a2 Update history.texi.
* doc/ref/history.texi (A Timeline of Selected Guile Releases)
(Status): Update.
2018-09-25 10:44:08 +02:00
Andy Wingo
a74b4a45fa Update comments in vm-engine.c
* libguile/jit.c (compile_s64_numerically_equal): Remove as this
instruction was removed in previous refactoring.
(compile_atomic_scm_set_immediate), compile_atomic_scm_ref_immediate):
Adapt to change in C name of these instructions.
* libguile/vm-engine.c: Add comments for all instructions.
2018-09-22 18:42:27 +02:00
Andy Wingo
1e7c541b2f Fix case where running abort hook could trash registers
* libguile/vm-engine.c (abort): If the abort doesn't need to longjmp and
  the abort hook was enabled, cache registers first to avoid restoring
  a bad IP to the VM.
2018-09-22 17:33:58 +02:00
Andy Wingo
9505263fda Configure uses 2.3.x tags for version
* configure.ac: Only pick 2.3.x tags for the version.  Will need to bump
  when we do 3.0.
2018-09-20 11:42:08 +02:00
Andy Wingo
4060728e0a Renumber instructions and bump objcode version
* libguile/loader.h (SCM_OBJCODE_MINIMUM_MINOR_VERSION):
  (SCM_OBJCODE_MINOR_VERSION): Bump version.
* module/system/vm/assembler.scm (*bytecode-minor-version*): Bump.
* libguile/vm-engine.c: Rearrange opcodes to be contiguous and in a
  somewhat sensible order.
2018-09-20 11:22:15 +02:00
Andy Wingo
ce9169804e Fix --disable-jit compilation
* libguile/jit.c: Wrap the whole thing in ENABLE_JIT.
* libguile/threads.c (on_thread_exit):
* libguile/vm.c (scm_call_n):
* libguile/init.c (scm_i_init_guile):
* libguile/vm-engine.c (VM_NAME): Wrap calls into jit.c with ENABLE_JIT.
* configure.ac: Move up AC_CANONICAL_TARGET, as autoconf was complaining
  about it coming after AC_ARG_PROGRAM.
* acinclude.m4 (GUILE_ENABLE_JIT): Fix to honor --enable-jit arg.
2018-09-17 09:28:41 +02:00
Andy Wingo
f03ff5304a Turn on automatic JIT compilation by default
* libguile/jit.c (default_jit_threshold): New static const variable.
(scm_sys_jit_compile): Remove.
(scm_init_jit): Rename GUILE_JIT_COUNTER_THRESHOLD to
GUILE_JIT_THRESHOLD, and default to default_jit_threshold.  Remove
%jit-compile definition.
2018-09-15 10:54:14 +02:00
Andy Wingo
883bdc7453 Fix emergency aborts to not expand the stack
* libguile/vm.c (scm_i_vm_emergency_abort): New helper: an abort that
  doesn't allocate, not even stack.
* libguile/throw.c (abort_to_prompt): Use scm_i_vm_emergency_abort.
* libguile/vm.h: Declare helper.
2018-09-15 10:41:35 +02:00
Andy Wingo
4dba01501c Fix scm_make_foreign_object_n.
* libguile/foreign-object.c (scm_make_foreign_object_n): Fix computation
  of slot count; broken in 34b9f22ca.
2018-09-14 16:11:48 +02:00
Andy Wingo
09b8f8ec06 Deoptimize to VM when hooks are enabled
* libguile/vm.c (vm_clear_mcode_return_addresses): New helper.
(vm_recompute_disable_mcode): Force a thread to deoptimize if hooks
become enabled.
(scm_call_n): Don't enter mcode if it's disabled.  Also check the right
flag for when to run the abort hook (the abort_hook_enabled flag).
* libguile/vm-engine.c (instrument-entry, instrument-loop)
(return-values, abort, compose-continuation): Don't enter mcode if mcode
is disabled for this thread.
2018-09-14 15:16:33 +02:00
Andy Wingo
12b125f2ad Hook refactors
* libguile/vm.h (SCM_VM_NUM_HOOKS): Remove hook enumeration.
(struct scm_vm): Re-arrange members to be more dense and to use common
cache lines for commonly-used members.  Declare hooks and their enabled
flags by name.
* libguile/vm-engine.c (RUN_HOOK): Refer to hooks by name.
* libguile/vm.c (FOR_EACH_HOOK): New helper.
(vm_hook_compute_enabled, vm_recompute_disable_mcode): New routines to
recompute when hooks are enabled, and whether to disable mcode because
hooks are active.
(set_vm_trace_level): New helper.
(invoke_hook): Take hook to invoke by value.
(DEFINE_INVOKE_HOOK): Refactor to use named hooks.
(scm_i_vm_prepare_stack): Init named hooks.
(VM_ADD_HOOK, VM_REMOVE_HOOK): Refactor to use named hooks, and also
recompute global disable_mcode flag.
(scm_set_vm_trace_level_x, scm_c_set_vm_engine_x): Use internal helper.
2018-09-14 13:02:44 +02:00
Andy Wingo
8bb9ae3b51 Micro-optimization of scm_vm placement in scm_thread
* libguile/threads.h (struct scm_thread): Move the embedded "struct
  scm_vm" earlier in the scm_thread.  Since the VM (and the JIT) access
  VM data (SP, FP, etc) through the thread pointer, this allows more
  accesses to be encoded in shorter instruction sequences.
2018-09-14 09:39:29 +02:00
Andy Wingo
0ccd2d0d9e Remove hook intrinsics: hooks are just for the VM
* libguile/intrinsics.h (SCM_FOR_ALL_VM_INTRINSICS): Remove VM hook
  intrinsics, now that we're going to rely on the interpreter for
  stepping and breakpoints.
* libguile/jit.c (struct scm_jit_state): Remove "hooks_enabled" member,
  now that we won't JIT.  Remove all code related to calling hooks.
* libguile/vm-engine.c (RUN_HOOK): Call hooks directly instead of
  through intrinsics.  Use precise per-hook enable flags.
* libguile/vm.c (DEFINE_INVOKE_HOOK): New helper.  Use to define the
  hook invokers.
2018-09-14 09:34:31 +02:00
Andy Wingo
bf31fe4cf6 VM manages hook sets itself
* libguile/vm.h (SCM_VM_ABORT_HOOK): Rename from
  SCM_VM_ABORT_CONTINUATION_HOOK.
* libguile/vm-engine.c (ABORT_HOOK):
* libguile/vm.c (invoke_abort_hook): Adapt to SCM_VM_ABORT_HOOK name
change.
(reset_vm_hook_enabled): New helper.
(VM_ADD_HOOK, VM_REMOVE_HOOK): New helper macros, replacing
VM_DEFINE_HOOK.
(scm_vm_add_abort_hook_x, scm_vm_remove_abort_hook_x)
(scm_vm_add_apply_hook_x, scm_vm_remove_apply_hook_x)
(scm_vm_add_return_hook_x, scm_vm_remove_return_hook_x)
(scm_vm_add_next_hook_x, scm_vm_remove_next_hook_x): New functions,
replacing direct access to the hooks.  Allows us to know in a more
fine-grained way when to enable hooks.
(scm_set_vm_trace_level_x): Use reset_vm_hook_enabled to update the
individual hook_enabled flags.
* module/statprof.scm:
* module/system/vm/coverage.scm:
* module/system/vm/traps.scm:
* module/system/vm/vm.scm: Adapt VM hook users to the new API.
2018-09-14 08:52:24 +02:00
Andy Wingo
ce5c05ac4a Fix JIT compilation of intrinsics that return doubles
* libguile/jit.c (emit_retval_d): New helper.
(compile_call_f64_from_scm): Take the f64 result from the correct
registers.
2018-09-10 16:33:10 +02:00
Andy Wingo
46fe5b069b Fix positional-arguments<=? compilation
* libguile/jit.c (compile_check_positional_arguments): Fix.
2018-09-10 16:28:31 +02:00
Andy Wingo
18aa995cbb Fix compilation of compare-and-swap
* libguile/jit.c (compile_atomic_scm_compare_and_swap_immediate): Call
  the right intrinsic.
2018-09-07 15:19:19 +02:00
Andy Wingo
227c3acc5d Refactor handling of lightning state
* libguile/jit.c (prepare_jit_state, reset_jit_state): New helpers.
(emit_code): Prevent emission of auxiliary data.
(compile_handle_interrupts): Assume the handle_interrupts_trampoline is
compiled eagerly.
(initialize_thread_jit_state): New helper.
(initialize_jit): Refactor.  Emit handle-interrupts code here.
(compute_mcode): Adapt to initialize_jit refactorings.
(scm_jit_state_free): Nothing to do.
2018-09-07 15:06:28 +02:00
Andy Wingo
377c3e117e Fix compilation of handle-interrupts
* libguile/jit.c (compile_handle_interrupts): Fix check for blocked
  interrupts.
2018-09-07 14:22:48 +02:00
Andy Wingo
f8229c603d Use custom JIT code allocator
* libguile/jit.c (struct code_arena): New data type.
(struct scm_jit_state): Add code arena member.
(allocate_code_arena): New helper.
(emit_code): New helper.  Emits code into a thread-local code arena.
(compute_mcode): Allow for failure to JIT.
(scm_jit_compute_mcode): Stop automatic JIT compilation on resource
exhaustion.
2018-09-07 12:22:44 +02:00
Andy Wingo
3e2b173158 Revert "<?" fast path for now
* libguile/jit.c (compile_less): Revert fast path; causing errors in
  benchmarks.
2018-09-05 22:30:43 +02:00
Andy Wingo
93112d3ed5 Add JIT fast paths for inum arithmetic
* libguile/jit.c (compile_call_scm_from_scm_scm): Add fast paths for
  inum add and sub.
  (compile_call_scm_from_scm_uimm): Add fast paths for inum
  add/immediate and sub/immediate.
  (compile_less): Add fast path for inum compare.
2018-09-05 22:09:42 +02:00
Andy Wingo
218fe1b962 Fix JIT compilation of [positional-]arguments<=?
* libguile/jit.c (compile_check_arguments)
  (compile_check_positional_arguments): Fix these functions.  The
  compiler uses "jge" as a "compare result not NONE", but the VM
  instructions set NONE on greater-than, not greater-than-or-equal.
  Sad!
2018-09-05 21:53:56 +02:00
Andy Wingo
cf712c0eb1 Improve JIT cleanup a bit
* libguile/jit.c (initialize_jit): Improve cleanup a bit.
2018-09-05 16:35:00 +02:00
Andy Wingo
babd4118c2 Fix nonlocal abort to compiled continuation
* libguile/vm.c (scm_call_n): Fix failure to reset vm.registers after a
  nonlocal abort to a compiled continuation.
2018-09-03 18:31:41 +02:00