2023-01-24  Luca Saiu  <positron@gnu.org>

	disable no-threading on solaris, temporarily

	* configure.ac: Another temporary change in the style of a previous ones: disable
	no-threading on solaris.

2023-01-24  Luca Saiu  <positron@gnu.org>

	temporarily disable no-threading on architectures different from x86_64

	* configure.ac: Disable no-threading on every architecture but x86_64.  This is
	a temporary change.

2023-01-24  Luca Saiu  <positron@gnu.org>

	fix jitter_distance_from , now correctly (thanks to Bruno Haible!)

	* machine/m68k/jitter/machine/jitter-machine-c.c (jitter_patch_patch_in): Fix
	definition.
	* machine/riscv/jitter/machine/jitter-machine-c.c (jitter_distance_from):
	Likewise.
	* machine/x86_64/jitter/machine/jitter-machine-c.c (jitter_distance_from):
	Likewise.

	Thanks to Bruno Haible for explaining me why my initial fix was wrong and what
	the actual initial problem was.

2023-01-24  Luca Saiu  <positron@gnu.org>

	update copyright years in short notices

	* README: Documentation.
	* configure.ac: Update copyright header.
	* jitterc/jitterc-main.c (jitterc_option_specification): Update string.
	* m4-utility/jitter-script.m4sh (version): Update output.

2023-01-24  Luca Saiu  <positron@gnu.org>

	THANKS: thank Arsen Arsenović

	* THANKS: Documentation.

2023-01-24  Luca Saiu  <positron@gnu.org>

	avoid signed overflow in jitter_distance_from

	* machine/riscv/jitter/machine/jitter-machine-c.c (jitter_distance_from): Change
	definition.
	* machine/x86_64/jitter/machine/jitter-machine-c.c (jitter_distance_from): Change
	definition.
	* machine/m68k/jitter/machine/jitter-machine-c.c (jitter_patch_patch_in): Change
	definition.

2023-01-23  Luca Saiu  <positron@gnu.org>

	temporarily disable no-threading on risc-v, to prevent problems on poke

	* configure.ac [RISC-V]: disable no-threading, like on powerpc32.  I will have
	to investigate this and check if it is indeed a Jitter problem.  Anyway it is
	not a problem to disable this temporarily.

2023-01-23  Luca Saiu  <positron@gnu.org>

	fix prototype: flockfile, funlockfile

	* jitter/jitter-missing.h (flockfile, funlockfile): Fix prototype.

	Reported by multiple people, I think first by Arsen Arsenović.

2022-11-29  Luca Saiu  <positron@gnu.org>

	undo my workaround for Automake bug 38139, and require a more recent Automake

	I reported Automake bug 38139 and changed Jitter's Makefile.am to work around it
	in commit 18b23df319422816d35fe6d7bc6bd8ce4e1dc563 (November 2019); Karl Berry
	rapidly committed the needed one-character fix which was published in Automake
	1.16.2, released in March 2020.  That is now old enough for me to rely on Jitter
	users to have.

	About the Automake bug see:
	  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=38139 and
	  https://lists.gnu.org/archive/html/automake/2019-10/msg00001.html

	* Makefile.am (dist_lisp_LISP): Replace with the cleaner dist_lisp_LISP.  Remove
	comment explaining the Automake bug and its workaround.

	* bootstrap.conf (automake): Bump required version.

	Suggested by Arsen Arsenović.

2022-11-28  Luca Saiu  <positron@gnu.org>

	temporarily disable no-threading on ppc32, to avoid a poke problem

	* configure.ac (jitter_supports_no_threading) [PowerPC]: Disable, warn.

2022-11-25  Arsen Arsenović  <arsen@aarsen.me>

	do not macroexpand directory names (contributed by Arsen Arsenović)

	This avoids tokens that could coincidentally appear in paths (such as ``unix''
	or ``i386'') getting expanded erroneously and breaking the directory paths.

		* jitterc/jitterc-main.c (JITTERC_DEFAULT_FLAG_DIRECTORY): Do not
		stringify.
		(JITTERC_DEFAULT_TEMPLATE_DIRECTORY): Ditto.
		* Makefile.am (-DJITTER_TEMPLATEDIR): Define as a string.
		(-DJITTER_FLAGDIR): Ditto.

	Fix contributed by Arsen Arsenović, committed by Luca Saiu.

2022-11-14  Luca Saiu  <positron@gnu.org>

	add a defect debugging facility, mostly for myself.

	* jitter/jitter-defect.c (JITTER_DEBUG_DEFECTS): New macro, commented out by
	default.  Add comment.
	(jitter_print_specialized_instruction_name, jitter_fill_replacement_table):
	Conditionalise on the new macro instead of using #if 0.

2022-11-13  Luca Saiu  <positron@gnu.org>

	avoid some distracting clang warnings

	* configure.ac <JITTER_CFLAGS flags> [CLANG]: use
	-Wno-ignored-optimization-argument, -Wno-unknown-attributes,
	-Wno-ignored-attributes to compile Jitter-generated code when clang is used and
	where the options are supported.

2022-11-13  Luca Saiu  <positron@gnu.org>

	mingw portability fix

	Add a new header jitter/jitter-early-header.h , to be included *before* standard
	header, to fix some dump platform quirk that is only relevant on mingw -- likely
	only on some mingw configurations.

	I am not convinced that I should bother Jitter users because of this.  The
	current workaround suffices for Jitter-generated code.

	I am currently inclined to say that users wishing to use standard features in
	their code should be prepared to initialise their code to allow for that, before
	using standard-compliant external features.

	* jitter/jitter-early-header.h: New file.

	* Makefile.am (jitterinclude_HEADERS, SOURCES_FOR_LIBJITTER): Add new header.

	* jitter/jitter-print.c: Include new header.
	* templates/vm-main.c: Likewise.
	* templates/vm.h: Likewise.
	* templates/vm1.c: Likewise.
	* jitterc/jitterc-generate.c (jitterc_emit_executor): Include new header in
	generated code (vm2.c).

2022-11-11  Luca Saiu  <positron@gnu.org>

	portability fix for JITTER_WORD_CHAR_NO == JITTER_SIZEOF_LONG_LONG configurations

	The macros JITTER_PRIi, JITTER_PRIu and so on were not defined in the case when
	JITTER_WORD_CHAR_NO == JITTER_SIZEOF_LONG_LONG, after their recent redefinition.
	A misplaced #else line broke my cross-x86_64-w64-mingw32 configuration.

	* jitter/jitter.h [JITTER_WORD_CHAR_NO == JITTER_SIZEOF_LONG_LONG]: move #else
	line down where it belongs.

2022-11-11  Luca Saiu  <positron@gnu.org>

	jitter_mutable_routine_append_symbolic_label_parameter_safe bug fix

	* jitter/jitter-mutable-routine.c
	(jitter_mutable_routine_append_symbolic_label_parameter_safe): actually use the
	label pointer parameter to pass a value back to the caller; I had forgotten it
	but did not notice since the routine parser does not rely on this feature and
	passes a NULL pointer.

2022-11-11  Luca Saiu  <positron@gnu.org>

	portability improvement for RISC-V

	Do not unconditionally rely on __riscv_flush_icache being available on RISC-V.

	* configure.ac: Check for __riscv_flush_icache and its prototype in
	sys/cachectl.h.
	(ac_cv_func___riscv_flush_icache, jitter_have_sys_cachectl_h)
	(jitter_have___riscv_flush_icache): New shell variables.
	(JITTER_HAVE___RISCV_FLUSH_ICACHE): New CPP feature macro.

	* jitter/jitter-config.h.in (JITTER_HAVE___RISCV_FLUSH_ICACHE): New feature
	macro.

	* machine/riscv/jitter/machine/jitter-machine-c.c: Conditionalise inclusion
	of sys/cachectl.h using the new feature macro.
	(jitter_invalidate_icache): Conditionalise using the new feature macro.

2022-11-11  Luca Saiu  <positron@gnu.org>

	change example

	Make an example longer-running, actually exploiting the outer loop that was
	already there but used to iterate exactly once.

	* example-vms/uninspired/examples/count-till-overflow.vm: Change outer loop
	iteration count.

2022-11-11  Luca Saiu  <positron@gnu.org>

	configure: whitespace changes

	* configure: Whitespace.

2022-11-09  Luca Saiu  <positron@gnu.org>

	update URL schema from http:// to https:// for gnu.org and ageinghacker.net

	Update URLs in comments, user strings and documentation.

	* AUTHORS: Fix URLs.
	* Makefile.am: Fix URLs.
	* NEWS: Fix URLs.
	* README: Fix URLs.
	* README-hacking: Fix URLs.
	* THANKS: Fix URLs.
	* amend-autom4te-output: Fix URLs.
	* autoconf/jitter.m4: Fix URLs.
	* bin/jitter-config.in.m4sh: Fix URLs.
	* bootstrap: Fix URLs.
	* bootstrap.conf: Fix URLs.
	* configure.ac: Fix URLs.
	* doc/jitter.texi: Fix URLs.
	* doc/missing-man-page.1: Fix URLs.
	* emacs/jitter-mode.el: Fix URLs.
	* example-build-systems/AUTHORS: Fix URLs.
	* example-build-systems/ChangeLog: Fix URLs.
	* example-build-systems/NEWS: Fix URLs.
	* example-build-systems/README: Fix URLs.
	* example-build-systems/bootstrap: Fix URLs.
	* example-build-systems/structured-simple/Makefile.am: Fix URLs.
	* example-build-systems/structured-simple/configure.ac: Fix URLs.
	* example-build-systems/structured-with-library/Makefile.am: Fix URLs.
	* example-build-systems/structured-with-library/configure.ac: Fix URLs.
	* example-vms/jitterlisp/THANKS: Fix URLs.
	* example-vms/jitterlisp/compat/common-lisp-compatibility.lisp: Fix URLs.
	* example-vms/jitterlisp/compat/gambit-compatibility.scm: Fix URLs.
	* example-vms/jitterlisp/compat/guile-compatibility.scm: Fix URLs.
	* example-vms/jitterlisp/compat/mit-gnu-scheme-compatibility.scm: Fix URLs.
	* example-vms/jitterlisp/compat/racket-compatibility.scm: Fix URLs.
	* example-vms/jitterlisp/compat/scm-compatibility.scm: Fix URLs.
	* example-vms/jitterlisp/compat/siod-compatibility.scm: Fix URLs.
	* example-vms/jitterlisp/compat/sisc-compatibility.scm: Fix URLs.
	* example-vms/jitterlisp/compat/tinyscheme-compatibility.scm: Fix URLs.
	* example-vms/jitterlisp/doc/jitterlisp.texi: Fix URLs.
	* example-vms/jitterlisp/examples/counter-iterative.lisp: Fix URLs.
	* example-vms/jitterlisp/examples/counter-recursive.lisp: Fix URLs.
	* example-vms/jitterlisp/examples/derivative.lisp: Fix URLs.
	* example-vms/jitterlisp/examples/factorial.lisp: Fix URLs.
	* example-vms/jitterlisp/examples/fibo.c: Fix URLs.
	* example-vms/jitterlisp/examples/fibo.lisp: Fix URLs.
	* example-vms/jitterlisp/examples/peano.lisp: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-allocator.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-allocator.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-ast.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-ast.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-banner.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-banner.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-code-generator.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-code-generator.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-config.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-constant-strings.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-constants.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-constants.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-error.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-error.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-eval-interpreter.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-eval-interpreter.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-eval-vm.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-eval-vm.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-eval.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-eval.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-library.lisp: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-macros.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-macros.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-main.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-operations.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-operations.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-primitives.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-primitives.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-printer.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-printer.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-reader.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-reader.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-run-input.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-run-input.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-settings.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-settings.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-sexpression.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-sexpression.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-style.css: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-utility.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp-utility.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp.c: Fix URLs.
	* example-vms/jitterlisp/jitterlisp.h: Fix URLs.
	* example-vms/jitterlisp/jitterlisp.jitter: Fix URLs.
	* example-vms/structured/doc/structured.texi: Fix URLs.
	* example-vms/structured/examples/count-down-nonopt.structuredvm: Fix URLs.
	* example-vms/structured/examples/count-down-opt.structuredvm: Fix URLs.
	* example-vms/structured/examples/count-down.structured: Fix URLs.
	* example-vms/structured/examples/count-primes.c: Fix URLs.
	* example-vms/structured/examples/count-primes.structured: Fix URLs.
	* example-vms/structured/examples/count-up-down.structured: Fix URLs.
	* example-vms/structured/examples/euclid-iterative.structured: Fix URLs.
	* example-vms/structured/examples/euclid-optimized.structuredvm: Fix URLs.
	* example-vms/structured/examples/euclid-recursive.structured: Fix URLs.
	* example-vms/structured/examples/euclid-unoptimized.structuredvm: Fix URLs.
	* example-vms/structured/examples/even-odd.structured: Fix URLs.
	* example-vms/structured/examples/fibo.structured: Fix URLs.
	* example-vms/structured/examples/primes.c: Fix URLs.
	* example-vms/structured/examples/primes.java: Fix URLs.
	* example-vms/structured/examples/primes.py: Fix URLs.
	* example-vms/structured/examples/primes.structured: Fix URLs.
	* example-vms/structured/structured-code-generator-register.c: Fix URLs.
	* example-vms/structured/structured-code-generator-register.h: Fix URLs.
	* example-vms/structured/structured-code-generator-stack.c: Fix URLs.
	* example-vms/structured/structured-code-generator-stack.h: Fix URLs.
	* example-vms/structured/structured-code-generator.c: Fix URLs.
	* example-vms/structured/structured-code-generator.h: Fix URLs.
	* example-vms/structured/structured-main.c: Fix URLs.
	* example-vms/structured/structured-style.css: Fix URLs.
	* example-vms/structured/structured-syntax.c: Fix URLs.
	* example-vms/structured/structured-syntax.h: Fix URLs.
	* example-vms/structured/structured.jitter: Fix URLs.
	* example-vms/structured/structured.l: Fix URLs.
	* example-vms/structured/structured.y: Fix URLs.
	* example-vms/uninspired/examples/bubble-sort-random.vm: Fix URLs.
	* example-vms/uninspired/examples/bubble-sort.vm: Fix URLs.
	* example-vms/uninspired/examples/count-till-overflow.vm: Fix URLs.
	* example-vms/uninspired/examples/counter-iterator.py: Fix URLs.
	* example-vms/uninspired/examples/counter-mips-using-delay-slot.s: Fix URLs.
	* example-vms/uninspired/examples/counter-mips.s: Fix URLs.
	* example-vms/uninspired/examples/counter-sparc.s: Fix URLs.
	* example-vms/uninspired/examples/counter-x86_64.s: Fix URLs.
	* example-vms/uninspired/examples/counter.pir: Fix URLs.
	* example-vms/uninspired/examples/counter.py: Fix URLs.
	* example-vms/uninspired/examples/counter.scm: Fix URLs.
	* example-vms/uninspired/examples/counter.vm: Fix URLs.
	* example-vms/uninspired/examples/euclid-faster.vm: Fix URLs.
	* example-vms/uninspired/examples/euclid-simple-assignments.py: Fix URLs.
	* example-vms/uninspired/examples/euclid-super.vm: Fix URLs.
	* example-vms/uninspired/examples/euclid-symmetric.py: Fix URLs.
	* example-vms/uninspired/examples/euclid-x86_64.s: Fix URLs.
	* example-vms/uninspired/examples/euclid.pir: Fix URLs.
	* example-vms/uninspired/examples/euclid.py: Fix URLs.
	* example-vms/uninspired/examples/euclid.vm: Fix URLs.
	* example-vms/uninspired/examples/signals.vm: Fix URLs.
	* example-vms/uninspired/examples/sqrt-2.vm: Fix URLs.
	* example-vms/uninspired/examples/threading-benchmark.vm: Fix URLs.
	* example-vms/uninspired/examples/vector-sum.vm: Fix URLs.
	* example-vms/uninspired/uninspired-style.css: Fix URLs.
	* example-vms/uninspired/uninspired.jitter: Fix URLs.
	* jitter/jitter-aligned-block.c: Fix URLs.
	* jitter/jitter-aligned-block.h: Fix URLs.
	* jitter/jitter-arithmetic.c: Fix URLs.
	* jitter/jitter-arithmetic.h: Fix URLs.
	* jitter/jitter-bitwise.h: Fix URLs.
	* jitter/jitter-c-compiler-version.h: Fix URLs.
	* jitter/jitter-config.h.in: Fix URLs.
	* jitter/jitter-cpp.h: Fix URLs.
	* jitter/jitter-data-locations.c: Fix URLs.
	* jitter/jitter-data-locations.h: Fix URLs.
	* jitter/jitter-defect.c: Fix URLs.
	* jitter/jitter-defect.h: Fix URLs.
	* jitter/jitter-disassemble.c: Fix URLs.
	* jitter/jitter-disassemble.h: Fix URLs.
	* jitter/jitter-dynamic-buffer.c: Fix URLs.
	* jitter/jitter-dynamic-buffer.h: Fix URLs.
	* jitter/jitter-executor.h: Fix URLs.
	* jitter/jitter-fast-branch.c: Fix URLs.
	* jitter/jitter-fast-branch.h: Fix URLs.
	* jitter/jitter-fatal.c: Fix URLs.
	* jitter/jitter-fatal.h: Fix URLs.
	* jitter/jitter-hash-random-table.c: Fix URLs.
	* jitter/jitter-hash.c: Fix URLs.
	* jitter/jitter-hash.h: Fix URLs.
	* jitter/jitter-heap-debug.c: Fix URLs.
	* jitter/jitter-heap-debug.h: Fix URLs.
	* jitter/jitter-heap.c: Fix URLs.
	* jitter/jitter-heap.h: Fix URLs.
	* jitter/jitter-human-prefix.c: Fix URLs.
	* jitter/jitter-human-prefix.h: Fix URLs.
	* jitter/jitter-instruction.c: Fix URLs.
	* jitter/jitter-instruction.h: Fix URLs.
	* jitter/jitter-list.c: Fix URLs.
	* jitter/jitter-list.h: Fix URLs.
	* jitter/jitter-machine-common.S: Fix URLs.
	* jitter/jitter-machine-common.h: Fix URLs.
	* jitter/jitter-malloc.c: Fix URLs.
	* jitter/jitter-malloc.h: Fix URLs.
	* jitter/jitter-missing.c: Fix URLs.
	* jitter/jitter-missing.h: Fix URLs.
	* jitter/jitter-mmap.c: Fix URLs.
	* jitter/jitter-mmap.h: Fix URLs.
	* jitter/jitter-mutable-routine.c: Fix URLs.
	* jitter/jitter-mutable-routine.h: Fix URLs.
	* jitter/jitter-parse-int.c: Fix URLs.
	* jitter/jitter-parse-int.h: Fix URLs.
	* jitter/jitter-patch-in.c: Fix URLs.
	* jitter/jitter-patch-in.h: Fix URLs.
	* jitter/jitter-patch.c: Fix URLs.
	* jitter/jitter-patch.h: Fix URLs.
	* jitter/jitter-print-libtextstyle.c: Fix URLs.
	* jitter/jitter-print.c: Fix URLs.
	* jitter/jitter-print.h: Fix URLs.
	* jitter/jitter-profile.c: Fix URLs.
	* jitter/jitter-profile.h: Fix URLs.
	* jitter/jitter-readline.c: Fix URLs.
	* jitter/jitter-readline.h: Fix URLs.
	* jitter/jitter-reinterpret-cast.h: Fix URLs.
	* jitter/jitter-replicate.c: Fix URLs.
	* jitter/jitter-replicate.h: Fix URLs.
	* jitter/jitter-rewrite.c: Fix URLs.
	* jitter/jitter-rewrite.h: Fix URLs.
	* jitter/jitter-routine.c: Fix URLs.
	* jitter/jitter-routine.h: Fix URLs.
	* jitter/jitter-routine.l: Fix URLs.
	* jitter/jitter-routine.y: Fix URLs.
	* jitter/jitter-sections.c: Fix URLs.
	* jitter/jitter-sections.h: Fix URLs.
	* jitter/jitter-signals.c: Fix URLs.
	* jitter/jitter-signals.h: Fix URLs.
	* jitter/jitter-specialize.c: Fix URLs.
	* jitter/jitter-specialize.h: Fix URLs.
	* jitter/jitter-stack.c: Fix URLs.
	* jitter/jitter-stack.h: Fix URLs.
	* jitter/jitter-string.c: Fix URLs.
	* jitter/jitter-string.h: Fix URLs.
	* jitter/jitter-tagging.c: Fix URLs.
	* jitter/jitter-tagging.h: Fix URLs.
	* jitter/jitter-time.c: Fix URLs.
	* jitter/jitter-time.h: Fix URLs.
	* jitter/jitter-vm.c: Fix URLs.
	* jitter/jitter-vm.h: Fix URLs.
	* jitter/jitter-word-set.c: Fix URLs.
	* jitter/jitter-word-set.h: Fix URLs.
	* jitter/jitter.c: Fix URLs.
	* jitter/jitter.h: Fix URLs.
	* jitterc/jitterc-generate.c: Fix URLs.
	* jitterc/jitterc-generate.h: Fix URLs.
	* jitterc/jitterc-main.c: Fix URLs.
	* jitterc/jitterc-mangle.c: Fix URLs.
	* jitterc/jitterc-mangle.h: Fix URLs.
	* jitterc/jitterc-rewrite.c: Fix URLs.
	* jitterc/jitterc-rewrite.h: Fix URLs.
	* jitterc/jitterc-utility.c: Fix URLs.
	* jitterc/jitterc-utility.h: Fix URLs.
	* jitterc/jitterc-vm.c: Fix URLs.
	* jitterc/jitterc-vm.h: Fix URLs.
	* jitterc/jitterc.l: Fix URLs.
	* jitterc/jitterc.y: Fix URLs.
	* m4-utility/jitter-script.m4sh: Fix URLs.
	* machine/aarch64/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/aarch64/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/aarch64/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/alpha/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/alpha/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/alpha/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/arm/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/arm/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/arm/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/dummy--minimal-threading/jitter/machine/jitter-machine-assembly.S: Fix
	URLs.
	* machine/dummy--minimal-threading/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/dummy--minimal-threading/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/dummy--no-threading/jitter/machine/jitter-machine-assembly.S: Fix
	URLs.
	* machine/dummy--no-threading/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/dummy--no-threading/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/m68k/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/m68k/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/m68k/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/mips/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/mips/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/mips/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/powerpc/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/powerpc/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/powerpc/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/riscv/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/riscv/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/riscv/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/s390x/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/s390x/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/s390x/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/sh/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/sh/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/sh/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/sparc/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/sparc/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/sparc/jitter/machine/jitter-machine.h: Fix URLs.
	* machine/x86_64/jitter/machine/jitter-machine-assembly.S: Fix URLs.
	* machine/x86_64/jitter/machine/jitter-machine-c.c: Fix URLs.
	* machine/x86_64/jitter/machine/jitter-machine.h: Fix URLs.
	* scripts/emulator.in.m4sh: Fix URLs.
	* scripts/generate-fast-branches.in.m4sh: Fix URLs.
	* templates/vm-main.c: Fix URLs.
	* templates/vm.h: Fix URLs.
	* templates/vm1.c: Fix URLs.
	* tests/elementary/empty.vm: Fix URLs.
	* tests/elementary/init-fini.test.in: Fix URLs.
	* tests/filter-test-case-output.c: Fix URLs.
	* tests/jitterlisp/jitterlisp.test.in: Fix URLs.
	* tests/jitterlisp/test-definitions.scm: Fix URLs.
	* tests/structured/begin-end.structured: Fix URLs.
	* tests/structured/conditional.structured: Fix URLs.
	* tests/structured/euclid.structured: Fix URLs.
	* tests/structured/even-odd.structured: Fix URLs.
	* tests/structured/primes.structured: Fix URLs.
	* tests/structured/programs.test.in: Fix URLs.
	* tests/structured/skip.structured: Fix URLs.
	* tests/uninspired/add.vm: Fix URLs.
	* tests/uninspired/branch-thru-register.vm: Fix URLs.
	* tests/uninspired/branch-thru-slow-register.vm: Fix URLs.
	* tests/uninspired/call-leaf.vm: Fix URLs.
	* tests/uninspired/call-non-leaf.vm: Fix URLs.
	* tests/uninspired/call-thru-register-leaf.vm: Fix URLs.
	* tests/uninspired/call-thru-register-non-leaf.vm: Fix URLs.
	* tests/uninspired/conditional-branch-not-taken.vm: Fix URLs.
	* tests/uninspired/conditional-branch.vm: Fix URLs.
	* tests/uninspired/count-down-slow-register.vm: Fix URLs.
	* tests/uninspired/count-down.vm: Fix URLs.
	* tests/uninspired/count-up-down-slow-registers.vm: Fix URLs.
	* tests/uninspired/count-up-down.vm: Fix URLs.
	* tests/uninspired/div.vm: Fix URLs.
	* tests/uninspired/fundamental.test.in: Fix URLs.
	* tests/uninspired/load-0.vm: Fix URLs.
	* tests/uninspired/load-0xffff.vm: Fix URLs.
	* tests/uninspired/load-10-bit.vm: Fix URLs.
	* tests/uninspired/load-11-bit.vm: Fix URLs.
	* tests/uninspired/load-12-bit.vm: Fix URLs.
	* tests/uninspired/load-13-bit.vm: Fix URLs.
	* tests/uninspired/load-143010319.vm: Fix URLs.
	* tests/uninspired/load-1450166639.vm: Fix URLs.
	* tests/uninspired/load-16-bit.vm: Fix URLs.
	* tests/uninspired/load-1625250854.vm: Fix URLs.
	* tests/uninspired/load-17-bit.vm: Fix URLs.
	* tests/uninspired/load-21-bit.vm: Fix URLs.
	* tests/uninspired/load-22-bit.vm: Fix URLs.
	* tests/uninspired/load-23-bit.vm: Fix URLs.
	* tests/uninspired/load-24-bit.vm: Fix URLs.
	* tests/uninspired/load-25-bit.vm: Fix URLs.
	* tests/uninspired/load-256167675.vm: Fix URLs.
	* tests/uninspired/load-3-bit.vm: Fix URLs.
	* tests/uninspired/load-32-bit.vm: Fix URLs.
	* tests/uninspired/load-3761490317.vm: Fix URLs.
	* tests/uninspired/load-4-bit.vm: Fix URLs.
	* tests/uninspired/load-5-bit.vm: Fix URLs.
	* tests/uninspired/load-594116.vm: Fix URLs.
	* tests/uninspired/load-6-bit.vm: Fix URLs.
	* tests/uninspired/load-64-bit.vm: Fix URLs.
	* tests/uninspired/load-680185852.vm: Fix URLs.
	* tests/uninspired/load-7-bit.vm: Fix URLs.
	* tests/uninspired/load-8-bit.vm: Fix URLs.
	* tests/uninspired/load-823944.vm: Fix URLs.
	* tests/uninspired/load-9-bit.vm: Fix URLs.
	* tests/uninspired/load-minus-one.vm: Fix URLs.
	* tests/uninspired/load-minus-two.vm: Fix URLs.
	* tests/uninspired/mod.vm: Fix URLs.
	* tests/uninspired/mul.vm: Fix URLs.
	* tests/uninspired/programs.test.in: Fix URLs.
	* tests/uninspired/sub.vm: Fix URLs.
	* tests/uninspired/unconditional-branch.vm: Fix URLs.
	* tests/unit/float-test.c: Fix URLs.
	* tests/unit/heap-test.c: Fix URLs.
	* tests/utility.in: Fix URLs.

2022-10-15  Luca Saiu  <positron@gnu.org>

	add Uninspired example

	* example-vms/uninspired/examples/count-till-overflow.vm: New file.

	* Makefile.am (EXTRA_DIST): Distribute new file.

2022-10-15  Luca Saiu  <positron@gnu.org>

	typo

	* jitter/jitter-routine.y (jitter_routine_edit_status_to_string): Fix typo in
	comment.

2022-10-15  Luca Saiu  <positron@gnu.org>

	routine frontend overhaul: new operators, handle precedence / associativity

	Remove "signed" plus and minus operators, which are semantically
	indistinguishable from their signed counterparts on two's complement
	architectures; keep the old names as compatibility aliases, in order not to
	scare beginners.

	* jitter/jitter-routine.l: Remove "signed" plus and minus operators.
	(**, **u, ~, &, |, ^): New operators.

	* jitter/jitter-routine.y (jitter_power, jitter_upower): New static functions.
	Reorder token and insert %left / %right to enforce precedence and associativity.
	(PREFIX_NEGATION): New precedence-only token.
	(expect): Expect zero conflicts now.
	(int_expression): Add new cases, remove signed plus and minus.

2022-10-15  Luca Saiu  <positron@gnu.org>

	jitter routine frontend: add JITTER_INT_MIN, JITTER_INT_MAX, JITTER_UINT_MAX

	* jitter/jitter-routine.l (JITTER_INT_MIN, JITTER_INT_MAX, JITTER_UINT_MAX): New
	keywords.
	* jitter/jitter-routine.y (JITTER_INT_MIN_, JITTER_INT_MAX_, JITTER_UINT_MAX_):
	New tokens.
	(int_expression): Use new tokens.

2022-10-15  Luca Saiu  <positron@gnu.org>

	define JITTER_INT_MIN, JITTER_INT_MAX, JITTER_UINT_MAX

	* jitter/jitter.h (JITTER_INT_MIN, JITTER_INT_MAX, JITTER_UINT_MAX): New macros,
	defined conditionally.
	(jitter_int, jitter_uint): Redefine types (no semantic change intended).
	(JITTER_PRIi, JITTER_PRIu, JITTER_PRIo, JITTER_PRIx): Redefine macros (no
	semantic change intended).

2022-10-15  Luca Saiu  <positron@gnu.org>

	RISC-V: invalidate the icache with the appropriate GCC builtin

	* machine/riscv/jitter/machine/jitter-machine-c.c: Add header.
	(jitter_invalidate_icache): Reimplement.

2022-10-15  Luca Saiu  <positron@gnu.org>

	uninspired: add printufixnum instruction

	* example-vms/uninspired/uninspired.jitter (late-c): New constant
	vmprefix_printufixnum_format_string.
	(printufixnum): New instruction.

2022-10-15  Luca Saiu  <positron@gnu.org>

	make routine parsing errors non-fatal; add safe (non-fatal) mutable routine API

	* jitter/jitter-mutable-routine.h (struct jitter_mutable_routine): Change
	comments.  Rename field specialized_program to specialized_routine.  Change
	comments and every use.  Add comments about safe and unsafe API.
	(jitter_mutable_routine_append_label_safe)
	(jitter_mutable_routine_append_symbolic_label_safe)
	(jitter_mutable_routine_append_instruction_name_safe)
	(jitter_mutable_routine_append_instruction_id_safe)
	(jitter_mutable_routine_append_meta_instruction_safe)
	(jitter_mutable_routine_check_next_parameter_safe)
	(jitter_mutable_routine_append_literal_parameter_safe)
	(jitter_mutable_routine_append_signed_literal_parameter_safe)
	(jitter_mutable_routine_append_unsigned_literal_parameter_safe)
	(jitter_mutable_routine_append_pointer_literal_parameter_safe)
	(jitter_mutable_routine_append_register_parameter_safe)
	(jitter_mutable_routine_append_symbolic_register_parameter_safe)
	(jitter_mutable_routine_append_label_parameter_safe)
	(jitter_mutable_routine_append_symbolic_label_parameter_safe): New prototypes.
	(jitter_mutable_routine_append_instruction_name)
	(jitter_mutable_routine_append_instruction_id): Add attributes.
	(jitter_mutable_routine_append_symbolic_register_parameter): New prototype.
	(enum jitter_routine_edit_status, struct jitter_routine_parse_error): New types.
	(jitter_routine_parse_error_destroy, jitter_routine_edit_status_to_string): New
	prototypes.

	* jitter/jitter-mutable-routine.c (jitter_mutable_routine_append_label_safe)
	(jitter_mutable_routine_append_symbolic_label_safe)
	(jitter_mutable_routine_append_instruction_name_safe)
	(jitter_mutable_routine_append_instruction_id_safe)
	(jitter_mutable_routine_append_meta_instruction_safe)
	(jitter_mutable_routine_check_next_parameter_safe)
	(jitter_mutable_routine_append_literal_parameter_safe)
	(jitter_mutable_routine_append_signed_literal_parameter_safe)
	(jitter_mutable_routine_append_unsigned_literal_parameter_safe)
	(jitter_mutable_routine_append_pointer_literal_parameter_safe)
	(jitter_mutable_routine_append_register_parameter_safe)
	(jitter_mutable_routine_append_symbolic_register_parameter_safe)
	(jitter_mutable_routine_append_label_parameter_safe)
	(jitter_mutable_routine_append_symbolic_label_parameter_safe): New functions,
	adapting code from...
	(jitter_mutable_routine_append_label)
	(jitter_mutable_routine_append_symbolic_label, jitter_close_current_instruction)
	(jitter_check_parameter_compatibility)
	(jitter_mutable_routine_append_literal_parameter)
	(jitter_mutable_routine_append_signed_literal_parameter)
	(jitter_mutable_routine_append_unsigned_literal_parameter)
	(jitter_mutable_routine_append_pointer_literal_parameter)
	(jitter_mutable_routine_append_symbolic_label_parameter)
	(jitter_mutable_routine_append_label_parameter)
	(jitter_mutable_routine_append_meta_instruction)
	(jitter_mutable_routine_append_instruction_id)
	(jitter_mutable_routine_append_instruction_name): Reimplement, based on calling
	the new function and raising fatal errors in case of failure.
	(jitter_mutable_routine_append_symbolic_register_parameter): New function.

	* jitter/jitter-instruction.c (jitter_lookup_meta_instruction): in case of lookup
	failure return NULL instead of failing fatally.
	(jitter_make_instruction_parameter): Change comment.
	* jitter/jitter-instruction.h (jitter_lookup_meta_instruction): Change comment.

	* jitter/jitter-routine.l: return INVALID_TOKEN instead of failing on scan error.
	* jitter/jitter-routine.y: Change includes.
	(jitter_error): Reimplement.
	(JITTER_HANDLE_STATUS_WITHOUT_YYABORT, JITTER_HANDLE_STATUS): New macros.
	(api.pure): Add full parameter.
	Change comments.
	(struct parser_arg): Change definition.
	(jitter_scan_error, jitter_parse_error): Remove functions.
	(jitter_parse_core, jitter_parse_mutable_routine_from_file_star)
	(jitter_parse_mutable_routine_from_file)
	(jitter_parse_mutable_routine_from_string): Change types, reimplement.
	(parse rules): Use use safe mutable routine editing functions and
	JITTER_HANDLE_STATUS.
	(argument <REGISTER>): do not lookup register class here: use
	jitter_mutable_routine_append_symbolic_register_parameter_safe instead.
	(jitter_routine_edit_status_to_string, jitter_routine_parse_error_finalize)
	(jitter_routine_parse_error_destroy): New functions.

	* templates/vm-main.c (main): Use the new safe API.

	* templates/vm.h (vmprefix_routine_edit_status)
	(vmprefix_routine_edit_status_success)
	(vmprefix_routine_edit_status_label_defined_twice)
	(vmprefix_routine_edit_status_invalid_instruction)
	(vmprefix_routine_edit_status_invalid_register)
	(vmprefix_routine_edit_status_register_class_mismatch)
	(vmprefix_routine_edit_status_nonexisting_register_class)
	(vmprefix_routine_edit_status_invalid_parameter_kind)
	(vmprefix_routine_edit_status_too_many_parameters)
	(vmprefix_routine_edit_status_last_instruction_incomplete)
	(vmprefix_routine_edit_status_other_parse_error)
	(vmprefix_routine_edit_status_to_string, vmprefix_routine_parse_error)
	(vmprefix_routine_parse_error_destroy): New macros.
	(vmprefix_parse_mutable_routine_from_file_star)
	(vmprefix_parse_mutable_routine_from_file)
	(vmprefix_parse_mutable_routine_from_string): Change return type.
	(vmprefix_mutable_routine_append_symbolic_register_parameter): New macro.
	(vmprefix_mutable_routine_append_label_safe)
	(vmprefix_mutable_routine_append_symbolic_label_safe)
	(vmprefix_mutable_routine_append_instruction_name_safe)
	(vmprefix_mutable_routine_append_instruction_id_safe)
	(vmprefix_mutable_routine_append_meta_instruction_safe)
	(vmprefix_mutable_routine_append_literal_parameter_safe)
	(vmprefix_mutable_routine_append_signed_literal_parameter_safe)
	(vmprefix_mutable_routine_append_unsigned_literal_parameter_safe)
	(vmprefix_mutable_routine_append_pointer_literal_parameter_safe)
	(vmprefix_mutable_routine_append_register_parameter_safe)
	(vmprefix_mutable_routine_append_symbolic_register_parameter_safe)
	(vmprefix_mutable_routine_append_symbolic_label_parameter_safe)
	(vmprefix_mutable_routine_append_label_parameter_safe): New macros.

	* templates/vm1.c: (vmprefix_parse_mutable_routine_from_file_star)
	(vmprefix_parse_mutable_routine_from_file)
	(vmprefix_parse_mutable_routine_from_string): Change return type and
	implementation.

	* jitter/jitter.h: Change references to specialized_program field.
	* jitter/jitter-disassemble.c: Likewise.
	* jitter/jitter-replicate.c: Likewise.
	* jitter/jitter-specialize.h: Likewise.
	* jitter/jitter-specialize.c: Likewise.

2022-10-14  Luca Saiu  <positron@gnu.org>

	documentation

	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation.

2022-10-14  Luca Saiu  <positron@gnu.org>

	structured: flush the output before executing the VM routine

	* example-vms/structured/structured-main.c (structured_work): Flush.

2022-10-12  Luca Saiu  <positron@gnu.org>

	print contexts: make the context struct non-opaque

	Rename struct jitter_print_context_private

	* jitter/jitter-print.c(struct jitter_print_context_private): Rename and change
	uses, move definition from this file to...
	* jitter/jitter-print.h: Here, renamed to
	(struct jitter_print_context_struct).
	Fix comments.

2022-09-07  Luca Saiu  <positron@gnu.org>

	clang: use -O1 instead of -O2 with direct-threading, but at least terminate...

	...even if slowly.

	* configure.ac (jitter_o_option): New shell variable.  Set it according to the
	value of JITTER_HAVE_CLANG.  Add comment.

2022-09-07  Luca Saiu  <positron@gnu.org>

	portability improvement

	* jitter/jitter-missing.h (returns_nonnull, __returns_nonnull__): Do not define
	to nothing when using clang; my portability fix interferes with others.

2022-09-07  Luca Saiu  <positron@gnu.org>

	support non-executable stacks on more architectures

	Ensure that the stack is not unintentionally made executable in more cases by
	not relying on the architecture being known for
	  .section .note.GNU-stack, "", @progbits
	.  Also support the alternative ARM syntax.

	* jitter/jitter-machine-common.S (.section .note.GNU-stack, "", @progbits):
	Move code and comments out of the large CPP conditional.  Add another equivalent
	line guarded by JITTER_HAVE_SECTION_NOTE_GNU_STACK_IN_ARM_SYNTAX for the
	alternative syntax.  No longer depend on ELF, by switching from .previous to a
	more crude but portable .text

	* configure.ac: New check for .note-GNU-stack section support in ARM syntax.
	(ac_cv_have_section_note_gnu_stack_in_arm_syntax): New shell variable.
	(JITTER_HAVE_SECTION_NOTE_GNU_STACK_IN_ARM_SYNTAX): New CPP feature macro.
	* jitter/jitter-config.h.in (JITTER_HAVE_SECTION_NOTE_GNU_STACK_IN_ARM_SYNTAX):
	New feature macro.

	Thanks to Antoine Belvire for reporting the problem.  My fix is a little
	different from what he suggested.

2022-08-28  Luca Saiu  <positron@gnu.org>

	add reinterpret-cast float<->integer conversion; configure-time C feature checks

	Add a new facility for converting between floating-point and integer types of
	the same size, without altering the bit representation.  This is intended for
	tagging in dynamically-typed systems.

	The feature is implemented using relatively advanced (and efficient) C hacks
	which are however supposed to be very portable: check for the required features
	at compile time in order to be sure.

	* jitter/jitter-reinterpret-cast.h: New header file.

	* jitter/jitter.h: Include new header.
	(JITTER_REINTERPRET_CAST_UINT_TO_FLOAT, JITTER_REINTERPRET_CAST_INT_TO_FLOAT)
	(JITTER_REINTERPRET_CAST_FLOAT_TO_UINT, JITTER_REINTERPRET_CAST_FLOAT_TO_INT):
	New macros.

	* configure.ac: Add comments.
	(ac_cv_have_non_constant_aggregate_initializers)
	(ac_cv_have_designated_initializers)
	(ac_cv_have_compound_literals, have_compound_literals_as_lvalues): New shell
	variables.
	(JITTER_HAVE_NON_CONSTANT_AGGREGATE_INITIALIZERS)
	(JITTER_HAVE_DESIGNATED_INITIALIZERS)
	(JITTER_HAVE_COMPOUND_LITERALS, JITTER_HAVE_COMPOUND_LITERALS_AS_LVALUES): New
	feature macros and feature tests.

	jitter/jitter-config.h.in: (JITTER_HAVE_NON_CONSTANT_AGGREGATE_INITIALIZERS)
	(JITTER_HAVE_DESIGNATED_INITIALIZERS)
	(JITTER_HAVE_COMPOUND_LITERALS, JITTER_HAVE_COMPOUND_LITERALS_AS_LVALUES): New
	feature macros.

	* Makefile.am (lib_libjitterutility__partial_la_SOURCES, jitterinclude_HEADERS):
	Add new header.
	(check_PROGRAMS): Add new test program tests/unit/float-test.
	(tests_unit_float_test_SOURCES, tests_unit_float_test_LDADD)
	(tests_unit_float_test_CPPFLAGS): New definitions.

	* tests/unit/float-test.c: New file.

2022-08-28  Luca Saiu  <positron@gnu.org>

	trivial portability fix

	* jitter/jitter.h (jitter_float) [long double case]: Only consider the long
	double type when HAVE_LONG_DOUBLE is defined.

2022-08-27  Luca Saiu  <positron@gnu.org>

	structured command-line options: minor improvements

	Add --no-disassemble, --no-cross-disassemble command-line options.

	* example-vms/structured/structured-main.c (structured_help): Document new
	options in --help.
	(structured_parse_command_line): Handle new options.

2022-08-20  Luca Saiu  <positron@gnu.org>

	jitter, --max-fast-register-no / -r: ignore for fast-only register classes

	The limit passed through--max-fast-register-no / -r is meant to affect
	performance but not behaviour: in order to satisfy this requirement, ignore the
	limit for register classes with no slow registers: for these changing the number
	of fast registers means changing the number of registers.

	* jitterc/jitterc-vm.c (clamp_register_class_fast_register_no): Do not clamp if
	not using slow registers.

2022-08-20  Luca Saiu  <positron@gnu.org>

	jitter: actually enforce --max-fast-register-no / -r

	The limit on the number of fast registers per class was not actually enforced;
	actually use it.

	However, I (currently) do not want to use a limit for the example, so I am
	changing the jitter command lines for generating C code for examples in order to
	avoid any limit.

	* jitterc/jitterc-main.c (parse_opt) <'r'>: allow an argument of -1; change
	error message in case of bound violation.
	(jitterc_option_specification): Change --help text for the option.

	* jitterc/jitterc-vm.c (jitterc_vm_add_register_class): Change comment.
	(clamp_register_class_fast_register_no): New static function.
	(jitterc_specialize): Call new function.

	* Makefile.am (UNINSPIRED_MAX_FAST_REGISTER_NO)
	(STRUCTUREDVM_MAX_FAST_REGISTER_NO): Redefine to -1, at least by now, so that I
	can experiment even with large values and still build with make.

2022-08-20  Luca Saiu  <positron@gnu.org>

	update .gitignore

	* .gitignore (_backup): New directory to ignore.

2022-08-08  Luca Saiu  <positron@gnu.org>

	add initialisation to silence GCC warning

	Add an initialisation to a variable, and explain why it is not actually needed
	for correctness in a comment.

	* jitter/jitter-print.c (jitter_print_ulong_long): Add res initialisation.

2022-08-08  Luca Saiu  <positron@gnu.org>

	comment update

	Fill in an old "FIXME" comment in which I wondered how GCC would behave on m68k.
	Now that m68k is well support I can tell.  (Very well.)

	* jitter/jitter.h (union jitter_word): Change comment.

2022-08-08  Luca Saiu  <positron@gnu.org>

	comment change

	* jitter/jitter-bitwise.h (JITTER_CONDITIONAL_IF_NEGATIVE): Comment fix.

2022-08-08  Luca Saiu  <positron@gnu.org>

	move the definition of jitter_program_point to a more convenient header file

	It is more convenient to have a type only dependent on the dispatch to be
	directly defined in jitter/jitter.h , rather than some more obscure header.

	Also move JITTER_EXECUTABLE_ROUTINE_BEGINNING , which anyway will need some
	redesign.

	This change set is only moving code from one file to another.

	* jitter/jitter-specialize.h (jitter_program_point) [all dispatches]
	(JITTER_EXECUTABLE_ROUTINE_BEGINNING): Move to...
	* jitter/jitter.h: ...This file.

2022-08-06  Luca Saiu  <positron@gnu.org>

	comment changes in jitter-bitwise.h

	* jitter/jitter-bitwise.h (JITTER_NEXT_MULTIPLE_OF_POSITIVE)
	(JITTER_PREVIOUS_MULTIPLE_OF_POWER_OF_TWO): Improve comments.

2022-08-05  Luca Saiu  <positron@gnu.org>

	do not include the Gnulib header from random headers

	* jitter/jitter-word-set.h: Remove #include line for config.h.

2022-07-31  Luca Saiu  <positron@gnu.org>

	hash table: incompatibly redefine function type for jitter_hash_for_all_bindings

	The hash iteration function jitter_hash_for_all_bindings was defined in an
	unnecessary weak way: with a small change it would have been possible to allow
	the function to modify hash table data (not keys).  Allow this.

	This is an incompatible change: the type of the user function accepted by
	jitter_hash_for_all_bindings has to change.  Seize the occasion to rename the
	type.

	Fix JitterLisp, which uses the function.

	* jitter/jitter-hash.h (jitter_hash_for_all_bindings_function): Rename to
	jitter_hash_for_all_bindings_function_f, change second argument type.
	(jitter_hash_for_all_bindings): Change comment.  Change second argument type
	name.

	* jitter/jitter-hash.c (jitter_hash_for_all_bindings): Change argument type
	name; fix definition.

	* example-vms/jitterlisp/jitterlisp-allocator.c (jitterlisp_add_binding_to_list):
	Change parameter type and name.  Fix use.

2022-03-06  Luca Saiu  <positron@gnu.org>

	revert to fast compilation, after my Binary Tools Summit 2022 demo

	My demo is over and I have linked and tagged the correct version for people who
	want to retrace it; now go back to the usual default of fast compilation.

	Do *not* undo the general no-threading re-enabling.

	* example-vms/structured/structured.jitter (r): Back to zero fast registers,
	for fast compilation.

2022-03-06  Luca Saiu  <positron@gnu.org>

	temporary changes for my Binary Tools Summit 2022 demo

	Prepare the sources so that people can follow along while watching a recording
	of my demo, and see the same things I am doing.

	Compilation will be very heavyweight, with 5 fast registers for structured.

	About the event, see https://binary-tools.net .

	* configure.ac: Re-enable no-threading.
	* example-vms/structured/structured.jitter (r): Use 5 fast registers.

2022-02-06  Luca Saiu  <positron@gnu.org>

	temporarily disable no-threading on m68k as well

	There is a bug which prevents things from working.  I have not seeing it myself
	yet, but this is for the poke friends.

	* configure.ac (jitter_supports_no_threading): Separate the m68k case change
	from the x86_64 case.
	Whitespace.

2022-02-05  Luca Saiu  <positron@gnu.org>

	temporarily disable no-threading by default except on m68k and x86_64

	It turns out that the GNU poke friends are doing a good job with their compiler,
	and how need to branch to far away destinations.  The displacement encoding in
	hardware instructions is becoming a limit, and for the time being I have to
	disable no-threading on every architecture not supporting wide displacements --
	these are, among the currently supported architectures, only m68k and x86_64,
	both allowing for 32-bit displacements.

	The long-term solution is changing the Jitter code generation to (automatically)
	use indirect jumps where needed.

	* configure.ac (jitter_supports_no_threading) [! m68k && ! x86_64]: Set to no,
	add user messages.
	(jitter_supports_minimal_threading setting): Add user message, move.

2022-02-03  Luca Saiu  <positron@gnu.org>

	temporarily disable minimal-threading on every architecture

	The GNU poke people are about to release again but there is some
	minimal-threading problem that I have to time to fix.  In order to avoid
	problems with less-tested architectures just disable minimal-threading by
	default on every platform -- no-threading remains enabled on supported
	architectures.
	I will re-enable minimal-threading after fixing the bugs.

	* configure.ac (jitter_supports_minimal_threading): Redefine to no.  Add
	comments.

2022-01-29  Luca Saiu  <positron@gnu.org>

	_JITTER_ASM_CRASH on arm: make the swi literal even smaller

	I was obviously wrong assuming that a 16-bit literal fits in a 16-bit
	instruction.  Use a narrower literal.

	* machine/arm/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): Change
	definition and comment again.

2022-01-29  Luca Saiu  <positron@gnu.org>

	arm: redefine _JITTER_ASM_CRASH to be also valid on Thumb

	* machine/arm/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): Redefine,
	update comment, remove commented-out alternative.

	Thanks to Romain Naour and Mohammad-Reza Nabipoor for the bug report.

2022-01-28  Luca Saiu  <positron@gnu.org>

	another stub documentation change

	* doc/jitter.texi: Documentation.

2022-01-26  Luca Saiu  <positron@gnu.org>

	add (TODO) documentation in the manual

	* doc/jitter.text: Documentation.

2022-01-25  Luca Saiu  <positron@gnu.org>

	tentatively add cast to satisfy GCC 12, which I cannot test yet

	* jitter/jitter-executor.h (JITTER_COMPUTED_GOTO_FALLBACK): Add cast.  Add TODO
	comment.

2022-01-25  Luca Saiu  <positron@gnu.org>

	documentation: convert to British spelling in more cases

	* doc/jitter.texi: Documentation.

2022-01-18  Luca Saiu  <positron@gnu.org>

	unify redundant Makefile.am rules for Info, when no Texinfo tools are available

	Bug fix: flip incorrect Makefile conditional ITTER_HAVE_TEXINFO.  Unify with
	another ! JITTER_HAVE_TEXINFO conditional.

	* Makefile.am (documentationdisabledondisabletexinfo) [! JITTER_HAVE_TEXINFO]:
	Factor with warn-on-disable-texinfo, unifying conditionals.
	Rename documentationdisabledondisabletexinfo to warn-on-disable-texinfo.
	(info): Change dependencies, to use files with "$(srcdir)/" directory.
	Change comments.

2022-01-18  Luca Saiu  <positron@gnu.org>

	actually disable Texinfo documentation on --disable-texinfo at configure time

	* configure.ac (--enable-hardcopy): Change --help string.
	(JITTER_HAVE_TEXI2DVI): Redefine conditional, also using $jitter_enable_texinfo.

	* Makefile.am (documentationdisabledinsubpackagemode): Rename into
	documentationdisabledondisabletexinfo).  Change conditional from
	JITTER_SUBPACKAGE to ! JITTER_HAVE_TEXINFO.  Change uses in dependencies.
	(info, html, dvi, ps, pdf) [JITTER_SUBPACKAGE]: Change conditional to
	! JITTER_HAVE_TEXINFO.

2022-01-18  Luca Saiu  <positron@gnu.org>

	documentation

	* example-vms/structured/doc/structured.texi: Documentation.

2022-01-18  Luca Saiu  <positron@gnu.org>

	documentation

	* README: Documentation.

2022-01-18  Luca Saiu  <positron@gnu.org>

	recommend bug-jitter@ as the public bug reporting mail address

	* configure.ac (AC_INIT): Change bug reporting address.

	* example-build-systems/structured-simple/configure.ac: Update copyright years.
	(AC_INIT): Change bug reporting address.
	* example-build-systems/structured-with-library/configure.ac: Likewise.

	* README: Documentation.

2022-01-18  Luca Saiu  <positron@gnu.org>

	new --enable-texinfo configure option; make doc in subpackage mode as well

	Introduce a new configure option --enable-texinfo; in case texinfo is disabled
	do not build Info documentation, independently from sub-package mode.  It will
	be nice to have Jitter in sub-package mode with Info documentation included.

	* configure.ac (copyright notice): Use compact notation.
	(--enable-texinfo): New configure option.
	(jitter_enable_texinfo): New shell variable.
	(JITTER_MAKEINFO conditional): Also conditionalise on jitter_enable_texinfo, so
	that the user can manually disable Info documentation.
	Update user message.
	(JITTER_HAVE_TEXINFO): New Automake conditional.

	* Makefile.am (EXTRA_PROGRAMS): Define benchmarking-examples without
	conditionalising on ! JITTER_SUBPACKAGE ; the dependency is still conditional,
	but these examples are trivial to compile anyway.
	(doc/jitter.info, example-vms/jitterlisp/doc/jitterlisp.info): Instead of
	conditionalising on JITTER_SUBPACKAGE, conditionalise on JITTER_HAVE_TEXINFO.
	(info) [JITTER_HAVE_TEXINFO]: Add example-vms/structured/doc/structured.info as
	dependency.
	(example-vms/structured/doc/structured.info) [JITTER_HAVE_TEXINFO]: New rule.
	Update comments.

	* doc/missing-man-page.1: Documentation.

2022-01-18  Luca Saiu  <positron@gnu.org>

	trivial grammar fix in example

	* example-vms/jitterlisp/examples/fibo.c (error): Fix printed user string.

2022-01-13  Luca Saiu  <positron@gnu.org>

	consolidate copyright notices; update printed copyright notices; documentation

	Following the README remark explaining how to interpret compact copyright
	notices with dashes according to maintain.texi {Copyright Notices} (already
	added before this change set), change some copyright notices to be compact.
	Update some printed copyright notices.

	* README: Update copyright notice.
	* Makefile.am: Likewise.
	* bin/jitter-config.in.m4sh: Likewise.
	* scripts/generate-fast-branches.in.m4sh: Likewise.
	* doc/jitter.texi: Likewise.

	* example-vms/jitterlisp/doc/jitterlisp.texi: Update copyright notice.  Comment.
	* example-vms/structured/doc/structured.texi: Likewise.  Documentation.

	* m4-utility/jitter-script.m4sh: Update copyright notice.
	(version): Update printed copyright notice
	* example-vms/jitterlisp/jitterlisp-main.c: Update copyright notice.
	(the_argp_program_version_hook): Update printed copyright notice
	* example-vms/structured/structured-main.c: Update copyright notice.
	(structured_version): Update printed copyright notice.
	* templates/vm-main.c: Update copyright notice.
	(the_argp_program_version_hook): Update printed copyright notice.

2022-01-12  Luca Saiu  <positron@gnu.org>

	documentation

	* README: Documentation.
	* doc/jitter.texi: Documentation.

2022-01-07  Luca Saiu  <positron@gnu.org>

	documentation

	* doc/jitter.texi: Documentation.

2021-12-28  Luca Saiu  <positron@gnu.org>

	big rename of "dispatching mode", "threading model"...; other minor changes

	While writing Jitter I initially said "threading model" or "threading mode"
	(no-threading came next-to-last before switch, and initially every mode was
	based on threading), then "dispatching model" or "dispatching mode".  Recent
	code and documentation uses the shorter and simpler phrase "dispatch".
	Adapt existing documentation and comments to the new convention.

	This mostly affects comments and documentation, but also a few internal
	identifiers.

	One user-visible but backward-compatible change: new CPP macros
	JITTER_BEST_DISPATCH_NAME_LOWER and JITTER_BEST_DISPATCH_NAME_UPPER.  The
	configure infrastructure was already present.

	One trivial build system correction, fixing distcheck by removing two temporary
	files generated at configure time.
	Update --help text for several programs, including the new Jitter home page URL
	on gnu.org.
	A few trivial build system new features.

	* Makefile.am: Comments.
	(lib_libjitter_la_LIBADD): Change dependecy from
	lib/libjitter--$(JITTER_BEST_DISPATCHING_MODEL)--partial.la to
	lib/libjitter--$(JITTER_BEST_DISPATCH)--partial.la.
	(print-built-sources, print-jitter-generated-c-files, built-sources): New rules.
	(generated-c-files): Rename to jitter-generated-c-files.  Change rule:
	dependencies, body, comment.
	(remove-man-pages): Re-enable rm command line in the body.

	* README: Documentation.
	* README-hacking: Documentation.
	* doc/jitter.texi: Documentation.
	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation.

	* configure.ac: Comments, user strings.
	(jitter_enabled_dispatch_models, jitter_best_dispatch_model): Rename shell
	variables to jitter_enabled_dispatches, jitter_best_dispatch.
	(JITTER_BEST_DISPATCHING_MODEL_IS_SWITCH)
	(JITTER_BEST_DISPATCHING_MODEL_IS_DIRECT_THREADING)
	(JITTER_BEST_DISPATCHING_MODEL_IS_MINIMAL_THREADING)
	(JITTER_BEST_DISPATCHING_MODEL_IS_NO_THREADING): Rename to
	JITTER_BEST_DISPATCH_IS_SWITCH, JITTER_BEST_DISPATCH_IS_DIRECT_THREADING,
	JITTER_BEST_DISPATCH_IS_MINIMAL_THREADING, JITTER_BEST_DISPATCH_IS_NO_THREADING.
	(JITTER_BEST_DISPATCH_MODEL, JITTER_BEST_DISPATCHING_MODEL_NAME_LOWER)
	(JITTER_BEST_DISPATCHING_MODEL_NAME_UPPER): Rename to
	JITTER_BEST_DISPATCH, JITTER_BEST_DISPATCH_NAME_LOWER,
	JITTER_BEST_DISPATCH_NAME_UPPER.
	(DISPATCH_MODEL, dispatch_model): Rename to DISPATCH, dispatch.
	(JITTER_BEST_DISPATCH <Dispatches to be enabled>): Rename shell
	variable to JITTER_BEST_DISPATCH_NAME_UPPER.
	(JITTER_MAKEINFO test): Remove generated files, fixing distcheck.

	* jitter/jitter-config.h.in (JITTER_BEST_DISPATCH_NAME_LOWER)
	(JITTER_BEST_DISPATCH_NAME_UPPER): New feature macros.
	(JITTER_BEST_DISPATCH_MODEL, JITTER_BEST_DISPATCHING_MODEL_NAME_LOWER)
	(JITTER_BEST_DISPATCHING_MODEL_NAME_UPPER): Rename CPP feature macros to
	JITTER_BEST_DISPATCH, JITTER_BEST_DISPATCH_NAME_LOWER,
	JITTER_BEST_DISPATCH_NAME_UPPER.

	* autoconf/jitter.m4: Comments, user strings.
	* bin/jitter-config.in.m4sh: Likewise.
	* example-vms/jitterlisp/jitterlisp-sexpression.h: Likewise.
	* example-vms/jitterlisp/jitterlisp.jitter: Likewise.
	* example-build-systems/structured-simple/Makefile.am: Likewise.
	* jitter/jitter-defect.h: Likewise.
	* jitter/jitter-executor.h: Likewise.
	* jitter/jitter-fast-branch.h: Likewise.
	* jitter/jitter-machine-common.h: Likewise.
	* jitter/jitter-patch-in.h: Likewise.
	* jitter/jitter-sections.h: Likewise.
	* jitter/jitter-specialize.h: Likewise.
	* jitter/jitter-vm.h: Likewise.
	* jitter/jitter-disassemble.c: Likewise.
	* jitter/jitter.c: Likewise.
	* jitter/jitter.h: Likewise.
	* jitterc/jitterc-vm.h: Likewise.
	* machine/m68k/jitter/machine/jitter-machine.h: Likewise.
	* machine/mips/jitter/machine/jitter-machine.h: Likewise.
	* machine/powerpc/jitter/machine/jitter-machine.h: Likewise.
	* machine/riscv/jitter/machine/jitter-machine.h: Likewise.
	* machine/sparc/jitter/machine/jitter-machine.h: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine.h: Likewise.
	* templates/vm.h: Likewise.
	* templates/vm1.c: Likewise.
	* tests/jitterlisp/jitterlisp.test.in: Likewise.
	* jitterc/jitterc-generate.c: Likewise, also in generated code.
	* tests/utility.in: Likewise.
	(jitter_run_program_case): Rename local variables.

	* templates/vm-main.c (argp_program_bug_address, argp): Change user strings,
	adding the new Jitter home page URL.
	* jitterc/jitterc-main.c (argp_program_bug_address, argp): Likewise.
	* example-vms/jitterlisp/jitterlisp-main.c (argp_program_bug_address, argp):
	Likewise.
	* example-vms/structured/structured-main.c (structured_help): Likewise.

2021-12-27  Luca Saiu  <positron@pep.foundation>

	documentation (structured)

	* example-vms/structured/doc/structured.texi: Documentation.

2021-12-27  Luca Saiu  <positron@gnu.org>

	build system: Autoconf macro factoring and improvements, Texinfo improvements

	Factor internal macros.  Make a better effort to find the C dialect supported by
	the compiler, conditionalising definitions according to the Autoconf versions.
	Avoid Autoconf-time warnings.  Add convenience macros JITTER_PROG_FLEX and
	JITTER_PROG_BISON, also available to user code.

	* autoconf/jitter.m4 (JITTER_CHECK_AUTOCONF_VERSION): Change comment,
	specification and implementation.
	(jitter_autoconf_version, jitter_ac_prog_cc_can_check_c_dialect)
	(jitter_ac_prog_lex_with_arguments): New m4 macros defined by
	JITTER_CHECK_AUTOCONF_VERSION.
	(JITTER_PROG_CC_AND_CHECK_C_DIALECT): Factor and redefine using...
	(JITTER_PROG_CC_AND_CHECK_C_DIALECT_OLD_STYLE): ...New macro.
	(JITTER_PROG_CC_AND_CHECK_C_DIALECT_NEW_STYLE): ...New macro, with code factored
	from the previous definition of JITTER_PROG_CC_AND_CHECK_C_DIALECT.
	Add comments.
	(JITTER_PROG_FLEX_COMMON, JITTER_PROG_FLEX_OLD_STYLE)
	(JITTER_PROG_FLEX_NEW_STYLE): New macros.
	(JITTER_JITTER_SUBPACKAGE): Fix the call to JITTER_CONFIG_SUBDIRS_NOW, restoring
	an m4 arguments in the place of a shell variable expansion: this fixes an
	annoying Autoconf-time warning which was also affecting poke.
	(JITTER_PROG_FLEX, JITTER_PROG_BISON): New macros.

	* configure.ac (AC_PROG_LEX): Replace with JITTER_PROG_FLEX, adapt test.
	(AC_PROG_YACC): Replace with JITTER_PROG_BISON, adapt test, fix comments.
	(JITTER_MAKEINFO): Check that makeinfo is recent enough by compiling a minimal
	Texinfo file.

	* example-build-systems/structured-simple/configure.ac (AC_PROG_LEX)
	(AC_PROG_YACC): Likewise.
	* example-build-systems/structured-with-library/configure.ac: (AC_PROG_LEX)
	(AC_PROG_YACC): Likewise.

	* Makefile.am (MAKEINFO, TEXI2DVI): Define using substitutions found at
	configure time, which were previously ignored.
	(HELP2MAN_WITH_OPTIONS): Change or add help2man options.

2021-12-22  Luca Saiu  <positron@gnu.org>

	relax Autoconf requirement

	I changed my mind about requiring a very recent Autoconf, as this will
	inconvenience the poke people and many others not having very recent tools
	installed.
	I am relaxing the prerequisite, keeping the alternative commented out and
	ready to re-enable later.

	* bootstrap.conf (autoconf): No longer require very recent version.

	* autoconf/jitter.m4 (JITTER_CHECK_AUTOCONF_VERSION): No longer require very
	recent version.  Update comment.
	(JITTER_PROG_CC_AND_CHECK_C_DIALECT): Update user message, warning that the
	diagnosis will be unreliable with older Autoconf versions.  It is just a
	warning anyway.

	* configure.ac (AC_PROG_LEX): Revert to the backwards-compatible usage, without
	any argument.  Keep the modern version in a comment, with explanation.

	* example-build-systems/structured-simple/configure.ac (AC_PROG_LEX): Likewise.
	* example-build-systems/structured-with-library/configure.ac (AC_PROG_LEX):
	Likewise.

2021-12-22  Luca Saiu  <positron@gnu.org>

	configure: add forgotten substitution

	* configure.ac (JITTER_PACKAGE_VERSION): New substitution.

2021-12-22  Luca Saiu  <positron@gnu.org>

	do not pollute reserved namespaces: AC_ in Autoconf macros, ac_ in shell

	Move every Jitter Autoconf macro, both public and internal, from the AC_
	namespace to the new JITTER_ namespace.  Same for shell variables.

	Rename the shell variable JITTER_SUBPACKAGE to JITTER_SUBPACKAGE_DIRECTORY.
	Rename the (unused) substitution JITTER_SUBPACKAGE_SUBDIRECTORY to
	JITTER_SUBPACKAGE_DIRECTORY.
	Rename the (unused) CPP feature macro JITTER_SUBPACKAGE to
	JITTER_SUBPACKAGE_MODE.

	Fix the few macro uses in my build system examples.  I will need to fix the
	AC_JITTER_SUBPACKAGE call in Poke as well.

	* autoconf/jitter.m4 (AC_JITTER_USING_AUTOMAKE, AC_JITTER, AC_JITTER_SUBPACKAGE)
	(AC_JITTER_CONFIG, AC_JITTER_CONFIG_SUBDIRS_NOW)
	(AC_JITTER_CHECK_AUTOCONF_VERSION, AC_JITTER_PROG_CC_AND_CHECK_C_DIALECT)
	(AC_JITTER_CHECK_AUTOCONF_VERSION, AC_JITTER_WITH_JITTER_COMMAND_LINE_OPTION)
	(AC_JITTER_C_GENERATOR): Rename Autoconf macros to JITTER_USING_AUTOMAKE,
	JITTER_JITTER, JITTER_JITTER_SUBPACKAGE, JITTER_PROG_JITTER_CONFIG,
	JITTER_CONFIG_SUBDIRS_NOW, JITTER_CHECK_AUTOCONF_VERSION,
	JITTER_PROG_CC_AND_CHECK_C_DIALECT, JITTER_CHECK_AUTOCONF_VERSION,
	JITTER_WITH_JITTER_COMMAND_LINE_OPTION, JITTER_PROG_JITTER.
	(JITTER_SUBPACKAGE): Rename shell variable to JITTER_SUBPACKAGE_DIRECTORY.
	(ac_jitter_using_automake, ac_jitter_path, ac_jitter_default_dispatch): Rename
	internal shell variables to jitter_using_automake, jitter_jitter_path,
	jitter_default_dispatch.
	Update uses.  Update comments.

	* configure.ac: Likewise.
	(JITTER_SUBPACKAGE_SUBDIRECTORY): Rename substitution, never used yet, to
	JITTER_SUBPACKAGE_DIRECTORY.
	(JITTER_SUBPACKAGE): Rename CPP feature macro to JITTER_SUBPACKAGE_MODE.

	* jitter/jitter-config.h.in (JITTER_HAVE_READLINE, JITTER_HAVE_LIBTEXTSTYLE):
	Likewise, in comments.

	* example-build-systems/structured-simple/configure.ac (AC_JITTER_SUBPACKAGE):
	Likewise.
	* example-build-systems/structured-with-library/configure.ac
	(AC_JITTER_SUBPACKAGE): Likewise.

	* doc/jitter.texi: Documentation.

	Thanks to Bruno Haible and Alfred M. Szmidt for making me aware of the problem.

2021-12-22  Luca Saiu  <positron@gnu.org>

	example build system: trivial improvement

	* example-build-systems/bootstrap: Add top level code removing possibly stale
	directories.

2021-12-21  Luca Saiu  <positron@gnu.org>

	documentation

	* example-vms/structured/doc/structured.texi: Documentation.

2021-12-20  Luca Saiu  <positron@gnu.org>

	minor defensiveness improvement

	* example-vms/jitterlisp/litterlisp.jitter
	(jitterlispvm_error_invalid_primitive_argument_type_friendly): use snprintf
	instead of sprintf.

	Suggested by Vasily Evseenko over a Russian chat.  Привет русскиe друзя.

2021-12-20  Luca Saiu  <positron@gnu.org>

	cosmetic build system improvements

	Make it more explicit that Jitter-generated C files would conceptually depend on
	bin/jitter -- they do not because having that dependency would break distcheck,
	which is more useful.

	No functional changes.

	* Makefile.am ($(srcdir)/example-vms/uninspired/uninspired-vm.h)
	($(srcdir)/example-vms/structured/structuredvm-vm-main.c)
	($(srcdir)/example-vms/jitterlisp/jitterlispvm-vm.h): Change dependency from
	$(JITTER_TEMPLATES) to $(DEPENDENCIES_FOR_JITTER_GENERATED_FILES).
	(DEPENDENCIES_FOR_JITTER_GENERATED_FILES): New variable.  Add comment.

2021-12-20  Luca Saiu  <positron@gnu.org>

	change output text

	* jitterc/jitterc-generate.c (jitterc_emit_initial_comments_to_stream): Change
	output.
	* example-vms/structured/structured-main.c (structured_help): Change code for
	user output.

2021-12-20  Luca Saiu  <positron@gnu.org>

	fix home page link in configure script

	* configure.ac (AC_INIT): Fix home page link.

2021-12-20  Luca Saiu  <positron@gnu.org>

	documentation fixes

	Fix home page links to point to https://www.gnu.org/software/jitter , which now
	exists.  Other minor changes.  The occasional rephrasing or grammar correction.

	* README: Documentation.
	* doc/jitter.texi: Documentation.
	* doc/missing-man-page.1: Documentation.
	* example-build-systems/AUTHORS: Documentation.
	* example-build-systems/ChangeLog: Documentation.
	* example-build-systems/NEWS: Documentation.
	* example-build-systems/README: Documentation.
	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation.
	* example-vms/structured/doc/structured.texi: Documentation.

2021-12-19  Luca Saiu  <positron@gnu.org>

	build system: check for the C dialect supported by $CC in a nicer way

	Modernise build system examples, factor.  Now external software configuring
	Jittery VMs through AC_JITTER or AC_JITTER_SUBPACKAGE will automatically check
	for a modern Autoconf and for the dialect supported by the local C compiler.

	* configure.ac: No longer directly use AC_PREREQ.  Add comments.
	No longer use AC_PROG_CC or check for $ac_prog_cc_stdc; instead call
	AC_JITTER_CHECK_CC_AND_ITS_C_DIALECT.

	* autoconf/jitter.m4 (AC_JITTER_CHECK_AUTOCONF_VERSION): New macro.
	(AC_JITTER_CHECK_CC_AND_ITS_C_DIALECT): New macro, factored and improved from
	the removed code in configure.ac and also calling
	AC_JITTER_CHECK_AUTOCONF_VERSION.
	(AC_JITTER_CONFIG): Change comment.  Require new macro
	AC_JITTER_CHECK_CC_AND_ITS_C_DIALECT.  Avoid escaping double quotes in
	AC_MSG_NOTICE and AC_MSG_WARN.

	* example-build-systems/structured-simple/configure.ac (AC_PREREQ): Remove, like
	above.
	(AC_PROG_CC): Add comment and keep, even if now perfunctory.
	(AM_PROG_LEX): Replace with AC_PROG_LEX, with the new parameter noyywrap.
	* example-build-systems/structured-with-library/configure.ac: Likewise, but
	here replace a use of AM_PROG_LEX.

2021-12-19  Luca Saiu  <positron@gnu.org>

	update .gitignore

	* .gitignore: Update.

2021-12-19  Luca Saiu  <positron@gnu.org>

	and one more trivial documentation fix

	* README: Documentation.

2021-12-19  Luca Saiu  <positron@gnu.org>

	another trivial documentation fix

	* README: Documentation.

2021-12-18  Luca Saiu  <positron@gnu.org>

	trivial documentation fixes

	* README: Documentation.

2021-12-17  Luca Saiu  <positron@gnu.org>

	add the GNU prefix before Jitter: Jitter has been accepted in the GNU Project

	Add the "GNU" prefix before "Jitter" where appropriate in documentation,
	comments, user messages.  A few other trivial changes.

	* README: Documentation changes.  Add the "GNU" prefix to "Jitter".
	* README-hacking: Likewise.
	* doc/jitter.texi: Likewise.
	* example-vms/jitterlisp/doc/jitterlisp.texi: Likewise.
	* example-vms/structured/doc/structured.texi: Likewise.

	* configure.ac (JITTER_PACKAGE_NAME, JITTER_PACKAGE_URL): New substitutions.

	* jitterc/jitterc-main.c (argp_program_version): Add the "GNU" prefix to
	"Jitter" in user message; update user message.
	* m4-utility/jitter-script.m4sh (version): Likewise.
	* bin/jitter-config.in.m4sh (help): Likewise.
	* scripts/emulator.in.m4sh (help): Likewise.
	* scripts/generate-fast-branches.in.m4sh (help): Likewise.
	* templates/vm-main.c (the_argp_program_version_hook): Likewise.
	* example-vms/structured/structured-main.c (structured_version): Likewise.
	(structured_help): Likewise.
	* example-vms/jitterlisp/jitterlisp-banner.c
	(jitterlisp_interactive_banner_text): Likewise.
	* amend-autom4te-output (handle_gnu_option): Likewise.

	* scripts/generate-fast-branches.in.m4sh (version): Remove, now subsumed by the
	definition in m4-utility/jitter-script.m4sh .
	(main program): add forgotten arguments to handle_command_line call.

	* doc/jitter.texi: Release code examples contained in the manual into the
	public domain.  Of course the manual remain GFDL 1.3+.
	* example-vms/jitterlisp/doc/jitterlisp.texi: Likewise.
	* example-vms/structured/doc/structured.texi: Likewise.

	* example-build-systems/structured-simple/configure.ac (AC_INIT): Rename project
	to simply "Structured".
	* example-build-systems/structured-with-library/configure.ac (AC_INIT):
	Likewise.

	* AUTHORS (legal notice): add "GNU" prefix to "Jitter".
	* Makefile.am (legal notice): Likewise.
	* NEWS (legal notice): Likewise.
	* README-hacking (legal notice): Likewise.
	* THANKS (legal notice): Likewise.
	* amend-autom4te-output (legal notice): Likewise.
	* autoconf/jitter.m4 (legal notice): Likewise.
	* bin/jitter-config.in.m4sh (legal notice): Likewise.
	* bootstrap.conf (legal notice): Likewise.
	* build-aux/trivial-source.c (legal notice): Likewise.
	* configure.ac (legal notice): Likewise.
	* doc/missing-man-page.1 (legal notice): Likewise.
	* emacs/jitter-mode.el (legal notice): Likewise.
	* example-build-systems/AUTHORS (legal notice): Likewise.
	* example-build-systems/ChangeLog (legal notice): Likewise.
	* example-build-systems/NEWS (legal notice): Likewise.
	* example-build-systems/README (legal notice): Likewise.
	* example-build-systems/bootstrap (legal notice): Likewise.
	* example-build-systems/structured-simple/Makefile.am (legal notice): Likewise.
	* example-build-systems/structured-simple/configure.ac (legal notice): Likewise.
	* example-build-systems/structured-with-library/Makefile.am (legal notice): Likewise.
	* example-build-systems/structured-with-library/configure.ac (legal notice): Likewise.
	* example-vms/jitterlisp/THANKS (legal notice): Likewise.
	* example-vms/jitterlisp/compat/common-lisp-compatibility.lisp (legal notice): Likewise.
	* example-vms/jitterlisp/compat/gambit-compatibility.scm (legal notice): Likewise.
	* example-vms/jitterlisp/compat/guile-compatibility.scm (legal notice): Likewise.
	* example-vms/jitterlisp/compat/mit-gnu-scheme-compatibility.scm (legal notice): Likewise.
	* example-vms/jitterlisp/compat/racket-compatibility.scm (legal notice): Likewise.
	* example-vms/jitterlisp/compat/scm-compatibility.scm (legal notice): Likewise.
	* example-vms/jitterlisp/compat/siod-compatibility.scm (legal notice): Likewise.
	* example-vms/jitterlisp/compat/sisc-compatibility.scm (legal notice): Likewise.
	* example-vms/jitterlisp/compat/tinyscheme-compatibility.scm (legal notice): Likewise.
	* example-vms/jitterlisp/examples/counter-iterative.lisp (legal notice): Likewise.
	* example-vms/jitterlisp/examples/counter-recursive.lisp (legal notice): Likewise.
	* example-vms/jitterlisp/examples/derivative.lisp (legal notice): Likewise.
	* example-vms/jitterlisp/examples/factorial.lisp (legal notice): Likewise.
	* example-vms/jitterlisp/examples/fibo.c (legal notice): Likewise.
	* example-vms/jitterlisp/examples/fibo.lisp (legal notice): Likewise.
	* example-vms/jitterlisp/examples/peano.lisp (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-allocator.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-allocator.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-ast.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-ast.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-banner.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-banner.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-code-generator.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-code-generator.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-config.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-constant-strings.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-constants.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-constants.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-error.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-error.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-eval-interpreter.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-eval-interpreter.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-eval-vm.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-eval-vm.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-eval.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-eval.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-library.lisp (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-macros.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-macros.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-main.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-operations.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-operations.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-primitives.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-primitives.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-printer.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-printer.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-reader.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-reader.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-run-input.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-run-input.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-settings.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-settings.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-sexpression.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-sexpression.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-style.css (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-utility.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp-utility.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp.c (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp.h (legal notice): Likewise.
	* example-vms/jitterlisp/jitterlisp.jitter (legal notice): Likewise.
	* example-vms/structured/examples/count-down-nonopt.structuredvm (legal notice): Likewise.
	* example-vms/structured/examples/count-down-opt.structuredvm (legal notice): Likewise.
	* example-vms/structured/examples/count-down.structured (legal notice): Likewise.
	* example-vms/structured/examples/count-primes.c (legal notice): Likewise.
	* example-vms/structured/examples/count-primes.structured (legal notice): Likewise.
	* example-vms/structured/examples/count-up-down.structured (legal notice): Likewise.
	* example-vms/structured/examples/euclid-iterative.structured (legal notice): Likewise.
	* example-vms/structured/examples/euclid-optimized.structuredvm (legal notice): Likewise.
	* example-vms/structured/examples/euclid-recursive.structured (legal notice): Likewise.
	* example-vms/structured/examples/euclid-unoptimized.structuredvm (legal notice): Likewise.
	* example-vms/structured/examples/even-odd.structured (legal notice): Likewise.
	* example-vms/structured/examples/fibo.structured (legal notice): Likewise.
	* example-vms/structured/examples/primes.c (legal notice): Likewise.
	* example-vms/structured/examples/primes.java (legal notice): Likewise.
	* example-vms/structured/examples/primes.py (legal notice): Likewise.
	* example-vms/structured/examples/primes.structured (legal notice): Likewise.
	* example-vms/structured/structured-code-generator-register.c (legal notice): Likewise.
	* example-vms/structured/structured-code-generator-register.h (legal notice): Likewise.
	* example-vms/structured/structured-code-generator-stack.c (legal notice): Likewise.
	* example-vms/structured/structured-code-generator-stack.h (legal notice): Likewise.
	* example-vms/structured/structured-code-generator.c (legal notice): Likewise.
	* example-vms/structured/structured-code-generator.h (legal notice): Likewise.
	* example-vms/structured/structured-main.c (legal notice): Likewise.
	* example-vms/structured/structured-style.css (legal notice): Likewise.
	* example-vms/structured/structured-syntax.c (legal notice): Likewise.
	* example-vms/structured/structured-syntax.h (legal notice): Likewise.
	* example-vms/structured/structured.jitter (legal notice): Likewise.
	* example-vms/structured/structured.l (legal notice): Likewise.
	* example-vms/structured/structured.y (legal notice): Likewise.
	* example-vms/uninspired/examples/bubble-sort-random.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/bubble-sort.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/counter-iterator.py (legal notice): Likewise.
	* example-vms/uninspired/examples/counter-mips-using-delay-slot.s (legal notice): Likewise.
	* example-vms/uninspired/examples/counter-mips.s (legal notice): Likewise.
	* example-vms/uninspired/examples/counter-sparc.s (legal notice): Likewise.
	* example-vms/uninspired/examples/counter-x86_64.s (legal notice): Likewise.
	* example-vms/uninspired/examples/counter.pir (legal notice): Likewise.
	* example-vms/uninspired/examples/counter.py (legal notice): Likewise.
	* example-vms/uninspired/examples/counter.scm (legal notice): Likewise.
	* example-vms/uninspired/examples/counter.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/euclid-faster.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/euclid-simple-assignments.py (legal notice): Likewise.
	* example-vms/uninspired/examples/euclid-super.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/euclid-symmetric.py (legal notice): Likewise.
	* example-vms/uninspired/examples/euclid-x86_64.s (legal notice): Likewise.
	* example-vms/uninspired/examples/euclid.pir (legal notice): Likewise.
	* example-vms/uninspired/examples/euclid.py (legal notice): Likewise.
	* example-vms/uninspired/examples/euclid.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/signals.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/sqrt-2.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/threading-benchmark.vm (legal notice): Likewise.
	* example-vms/uninspired/examples/vector-sum.vm (legal notice): Likewise.
	* example-vms/uninspired/uninspired-style.css (legal notice): Likewise.
	* example-vms/uninspired/uninspired.jitter (legal notice): Likewise.
	* jitter/jitter-aligned-block.c (legal notice): Likewise.
	* jitter/jitter-aligned-block.h (legal notice): Likewise.
	* jitter/jitter-arithmetic.c (legal notice): Likewise.
	* jitter/jitter-arithmetic.h (legal notice): Likewise.
	* jitter/jitter-bitwise.h (legal notice): Likewise.
	* jitter/jitter-c-compiler-version.h (legal notice): Likewise.
	* jitter/jitter-config.h.in (legal notice): Likewise.
	* jitter/jitter-cpp.h (legal notice): Likewise.
	* jitter/jitter-data-locations.c (legal notice): Likewise.
	* jitter/jitter-data-locations.h (legal notice): Likewise.
	* jitter/jitter-defect.c (legal notice): Likewise.
	* jitter/jitter-defect.h (legal notice): Likewise.
	* jitter/jitter-disassemble.c (legal notice): Likewise.
	* jitter/jitter-disassemble.h (legal notice): Likewise.
	* jitter/jitter-dynamic-buffer.c (legal notice): Likewise.
	* jitter/jitter-dynamic-buffer.h (legal notice): Likewise.
	* jitter/jitter-executor.h (legal notice): Likewise.
	* jitter/jitter-fast-branch.c (legal notice): Likewise.
	* jitter/jitter-fast-branch.h (legal notice): Likewise.
	* jitter/jitter-fatal.c (legal notice): Likewise.
	* jitter/jitter-fatal.h (legal notice): Likewise.
	* jitter/jitter-hash-random-table.c (legal notice): Likewise.
	* jitter/jitter-hash.c (legal notice): Likewise.
	* jitter/jitter-hash.h (legal notice): Likewise.
	* jitter/jitter-heap-debug.c (legal notice): Likewise.
	* jitter/jitter-heap-debug.h (legal notice): Likewise.
	* jitter/jitter-heap.c (legal notice): Likewise.
	* jitter/jitter-heap.h (legal notice): Likewise.
	* jitter/jitter-human-prefix.c (legal notice): Likewise.
	* jitter/jitter-human-prefix.h (legal notice): Likewise.
	* jitter/jitter-instruction.c (legal notice): Likewise.
	* jitter/jitter-instruction.h (legal notice): Likewise.
	* jitter/jitter-list.c (legal notice): Likewise.
	* jitter/jitter-list.h (legal notice): Likewise.
	* jitter/jitter-machine-common.S (legal notice): Likewise.
	* jitter/jitter-machine-common.h (legal notice): Likewise.
	* jitter/jitter-malloc.c (legal notice): Likewise.
	* jitter/jitter-malloc.h (legal notice): Likewise.
	* jitter/jitter-missing.c (legal notice): Likewise.
	* jitter/jitter-missing.h (legal notice): Likewise.
	* jitter/jitter-mmap.c (legal notice): Likewise.
	* jitter/jitter-mmap.h (legal notice): Likewise.
	* jitter/jitter-mutable-routine.c (legal notice): Likewise.
	* jitter/jitter-mutable-routine.h (legal notice): Likewise.
	* jitter/jitter-parse-int.c (legal notice): Likewise.
	* jitter/jitter-parse-int.h (legal notice): Likewise.
	* jitter/jitter-patch-in.c (legal notice): Likewise.
	* jitter/jitter-patch-in.h (legal notice): Likewise.
	* jitter/jitter-patch.c (legal notice): Likewise.
	* jitter/jitter-patch.h (legal notice): Likewise.
	* jitter/jitter-print-libtextstyle.c (legal notice): Likewise.
	* jitter/jitter-print.c (legal notice): Likewise.
	* jitter/jitter-print.h (legal notice): Likewise.
	* jitter/jitter-profile.c (legal notice): Likewise.
	* jitter/jitter-profile.h (legal notice): Likewise.
	* jitter/jitter-readline.c (legal notice): Likewise.
	* jitter/jitter-readline.h (legal notice): Likewise.
	* jitter/jitter-replicate.c (legal notice): Likewise.
	* jitter/jitter-replicate.h (legal notice): Likewise.
	* jitter/jitter-rewrite.c (legal notice): Likewise.
	* jitter/jitter-rewrite.h (legal notice): Likewise.
	* jitter/jitter-routine.c (legal notice): Likewise.
	* jitter/jitter-routine.h (legal notice): Likewise.
	* jitter/jitter-routine.l (legal notice): Likewise.
	* jitter/jitter-routine.y (legal notice): Likewise.
	* jitter/jitter-sections.c (legal notice): Likewise.
	* jitter/jitter-sections.h (legal notice): Likewise.
	* jitter/jitter-signals.c (legal notice): Likewise.
	* jitter/jitter-signals.h (legal notice): Likewise.
	* jitter/jitter-specialize.c (legal notice): Likewise.
	* jitter/jitter-specialize.h (legal notice): Likewise.
	* jitter/jitter-stack.c (legal notice): Likewise.
	* jitter/jitter-stack.h (legal notice): Likewise.
	* jitter/jitter-string.c (legal notice): Likewise.
	* jitter/jitter-string.h (legal notice): Likewise.
	* jitter/jitter-tagging.c (legal notice): Likewise.
	* jitter/jitter-tagging.h (legal notice): Likewise.
	* jitter/jitter-time.c (legal notice): Likewise.
	* jitter/jitter-time.h (legal notice): Likewise.
	* jitter/jitter-vm.c (legal notice): Likewise.
	* jitter/jitter-vm.h (legal notice): Likewise.
	* jitter/jitter-word-set.c (legal notice): Likewise.
	* jitter/jitter-word-set.h (legal notice): Likewise.
	* jitter/jitter.c (legal notice): Likewise.
	* jitter/jitter.h (legal notice): Likewise.
	* jitterc/jitterc-generate.c (legal notice): Likewise.
	* jitterc/jitterc-generate.h (legal notice): Likewise.
	* jitterc/jitterc-main.c (legal notice): Likewise.
	* jitterc/jitterc-mangle.c (legal notice): Likewise.
	* jitterc/jitterc-mangle.h (legal notice): Likewise.
	* jitterc/jitterc-rewrite.c (legal notice): Likewise.
	* jitterc/jitterc-rewrite.h (legal notice): Likewise.
	* jitterc/jitterc-utility.c (legal notice): Likewise.
	* jitterc/jitterc-utility.h (legal notice): Likewise.
	* jitterc/jitterc-vm.c (legal notice): Likewise.
	* jitterc/jitterc-vm.h (legal notice): Likewise.
	* jitterc/jitterc.l (legal notice): Likewise.
	* jitterc/jitterc.y (legal notice): Likewise.
	* m4-utility/jitter-script.m4sh (legal notice): Likewise.
	* machine/aarch64/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/aarch64/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/aarch64/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/alpha/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/alpha/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/alpha/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/arm/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/arm/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/arm/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/dummy--minimal-threading/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/dummy--minimal-threading/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/dummy--minimal-threading/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/dummy--no-threading/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/dummy--no-threading/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/dummy--no-threading/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/m68k/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/m68k/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/m68k/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/mips/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/mips/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/mips/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/powerpc/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/powerpc/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/powerpc/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/riscv/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/riscv/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/riscv/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/s390x/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/s390x/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/s390x/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/sh/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/sh/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/sh/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/sparc/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/sparc/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/sparc/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* machine/x86_64/jitter/machine/jitter-machine-assembly.S (legal notice): Likewise.
	* machine/x86_64/jitter/machine/jitter-machine-c.c (legal notice): Likewise.
	* machine/x86_64/jitter/machine/jitter-machine.h (legal notice): Likewise.
	* scripts/emulator.in.m4sh (legal notice): Likewise.
	* scripts/generate-fast-branches.in.m4sh (legal notice): Likewise.
	* templates/vm-main.c (legal notice): Likewise.
	* templates/vm.h (legal notice): Likewise.
	* templates/vm1.c (legal notice): Likewise.
	* tests/elementary/empty.vm (legal notice): Likewise.
	* tests/elementary/init-fini.test.in (legal notice): Likewise.
	* tests/filter-test-case-output.c (legal notice): Likewise.
	* tests/jitterlisp/jitterlisp.test.in (legal notice): Likewise.
	* tests/jitterlisp/test-definitions.scm (legal notice): Likewise.
	* tests/structured/begin-end.structured (legal notice): Likewise.
	* tests/structured/conditional.structured (legal notice): Likewise.
	* tests/structured/euclid.structured (legal notice): Likewise.
	* tests/structured/even-odd.structured (legal notice): Likewise.
	* tests/structured/primes.structured (legal notice): Likewise.
	* tests/structured/programs.test.in (legal notice): Likewise.
	* tests/structured/skip.structured (legal notice): Likewise.
	* tests/uninspired/add.vm (legal notice): Likewise.
	* tests/uninspired/branch-thru-register.vm (legal notice): Likewise.
	* tests/uninspired/branch-thru-slow-register.vm (legal notice): Likewise.
	* tests/uninspired/call-leaf.vm (legal notice): Likewise.
	* tests/uninspired/call-non-leaf.vm (legal notice): Likewise.
	* tests/uninspired/call-thru-register-leaf.vm (legal notice): Likewise.
	* tests/uninspired/call-thru-register-non-leaf.vm (legal notice): Likewise.
	* tests/uninspired/conditional-branch-not-taken.vm (legal notice): Likewise.
	* tests/uninspired/conditional-branch.vm (legal notice): Likewise.
	* tests/uninspired/count-down-slow-register.vm (legal notice): Likewise.
	* tests/uninspired/count-down.vm (legal notice): Likewise.
	* tests/uninspired/count-up-down-slow-registers.vm (legal notice): Likewise.
	* tests/uninspired/count-up-down.vm (legal notice): Likewise.
	* tests/uninspired/div.vm (legal notice): Likewise.
	* tests/uninspired/fundamental.test.in (legal notice): Likewise.
	* tests/uninspired/load-0.vm (legal notice): Likewise.
	* tests/uninspired/load-0xffff.vm (legal notice): Likewise.
	* tests/uninspired/load-10-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-11-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-12-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-13-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-143010319.vm (legal notice): Likewise.
	* tests/uninspired/load-1450166639.vm (legal notice): Likewise.
	* tests/uninspired/load-16-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-1625250854.vm (legal notice): Likewise.
	* tests/uninspired/load-17-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-21-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-22-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-23-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-24-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-25-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-256167675.vm (legal notice): Likewise.
	* tests/uninspired/load-3-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-32-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-3761490317.vm (legal notice): Likewise.
	* tests/uninspired/load-4-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-5-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-594116.vm (legal notice): Likewise.
	* tests/uninspired/load-6-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-64-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-680185852.vm (legal notice): Likewise.
	* tests/uninspired/load-7-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-8-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-823944.vm (legal notice): Likewise.
	* tests/uninspired/load-9-bit.vm (legal notice): Likewise.
	* tests/uninspired/load-minus-one.vm (legal notice): Likewise.
	* tests/uninspired/load-minus-two.vm (legal notice): Likewise.
	* tests/uninspired/mod.vm (legal notice): Likewise.
	* tests/uninspired/mul.vm (legal notice): Likewise.
	* tests/uninspired/programs.test.in (legal notice): Likewise.
	* tests/uninspired/sub.vm (legal notice): Likewise.
	* tests/uninspired/unconditional-branch.vm (legal notice): Likewise.
	* tests/unit/heap-test.c (legal notice): Likewise.
	* tests/utility.in (legal notice): Likewise.

2021-12-17  Luca Saiu  <positron@gnu.org>

	test suite: time out later in case of long runs

	Particularly when running the test suite right after building in parallel, and
	buffer have to be flushed to disk, I notice some occasional test case failures
	due to timeouts.  Make the time out limit more generous to prevent these false
	positives.

	* tests/utility.in (jitter_timeout, jitter_wall_clock_time_factor)
	(jitter_timeout_command): Redefine to tolerate longer runs.

2021-12-16  Luca Saiu  <positron@gnu.org>

	distribute a copy of the LGPL in the Gnulib directory

	* gnulib-local/COPYING.LESSER: New file.
	* Makefile.am (EXTRA_DIST): Distribute new file.

2021-12-16  Luca Saiu  <positron@gnu.org>

	bump Autoconf requirements, modernise some configure macros

	Avoid the obsolete macro AC_PROG_CC_C99; in its place use the simple AC_PROG_CC.
	After its use, check the new shell variable ac_prog_cc_stdc, telling which C
	dialect is supported.  A few other minor cleanups.

	Bump the required Autoconf version because of this.

	* configure.ac (AC_PREREQ): Bump required version.
	(AC_PROG_CC_C99): Replace obsolete macro with...
	(AC_PROG_CC): ...This.  And check $ac_prog_cc_stdc.
	(AM_PROG_LEX): Replace with...
	(AC_PROG_LEX): ...This, and give the now recommended option.
	AC_MSG_CHECKING, AC_MSG_NOTICE: Do not quote double quotes in user message.

	* bootstrap.conf (buildreq): Require more recent Autoconf version.

2021-12-15  Luca Saiu  <positron@gnu.org>

	let VM specifications contain legal notices, copied into generated C

	By using this feature Jitter can generate C files with very precise legal
	notices, mentioning both Jitter and the user source.

	This mostly reuses the existing machinery for recognizing blocks of C code.
	Factor slightly.

	* jitterc/jitterc-vm.h (struct jitterc_vm): New field legal_notice.
	* jitterc/jitterc-vm.c (jitterc_make_vm): Initialise new struct field.

	* jitterc/jitterc-generate.c (jitterc_emit_initial_comments_to_stream): New
	function.
	(jitterc_generate): Use new function.

	* jitterc/jitterc.l (LEGALNOTICEOPENLINE, LEGALNOTICEBLOCK): New regexp
	definitions.
	({LEGALNOTICEBLOCK}): New rule.

	* jitterc/jitterc.y (code): Factor rule action into...
	(jitterc_make_code_struct): New function.
	(LEGAL_NOTICE): New token.
	(legal_notice): New nonterminal and rule.
	(section): Use new nonterminal.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Change to support new
	syntax.

	* example-vms/jitterlisp/jitterlisp.jitter: Replace the initial comment with
	legal notices with a legal-notice..end block.
	* example-vms/structured/structured.jitter: Likewise.
	* example-vms/uninspired/uninspired.jitter: Likewise.

2021-12-15  Luca Saiu  <positron@gnu.org>

	add missing legal notices

	* NO-WARRANTY: Add legal notice.
	* Makefile.am (regenerate-changelog [JITTER_BUILDING_FROM_GIT]): Append license
	notice to generated ChangeLog.

2021-12-15  Luca Saiu  <positron@gnu.org>

	trivial documentation changes

	* README: Documentation.
	* README-hacking: Documentation.

2021-12-07  Luca Saiu  <positron@gnu.org>

	replication: before shrinking executable buffer check that its size went down

	Add a defensive check to prevent disasters.  This should not be triggered in
	production but it can happen on complex-dispatch (minimal-threading or
	no-threading) VMs compiled with unsupported CFLAGS -- a combination which will
	almost certainly not work anyway, but it is better to fail cleanly.

	* jitter/jitter-replicate.c (jitter_replicate_program): Add a check.

	This was reported by José Marchesi, working on GNU Poke.  Thanks.

2021-12-07  Luca Saiu  <positron@gnu.org>

	documentation

	* THANKS: Documentation.
	* example-vms/structured/doc/structured.texi: Documentation.
	* example-vms/structured/structured.jitter: Documentation.

2021-12-07  Luca Saiu  <positron@gnu.org>

	improve --help output some more in scripts/emulator

	* scripts/emulator.in.m4sh (help): Improve output.

2021-12-07  Luca Saiu  <positron@gnu.org>

	improve --help output in scripts/emulator

	* scripts/emulator.in.m4sh (help): Improve output.

2021-11-09  Luca Saiu  <positron@gnu.org>

	improve scripts/emulator --help output * scripts/emulator.in.m4sh (help): Change implementation.

2021-11-07  Luca Saiu  <positron@gnu.org>

	fix distcheck on cross configurations without an emulator

	The set of distributed file was different in cross configurations without an
	emulator, compared to native configurations or cross configurations with an
	emulator.  Distribute the same set of files.

	* Makefile.am (EXTRA_DIST): Add the "dummy" copy of machine-specific files,
	unconditionally.  Distribute tests/jitterlisp/test-definitions.scm,
	unconditionally.

2021-11-07  Luca Saiu  <positron@gnu.org>

	scripts/emulator: cosmetic changes

	* scripts/emulator.in.m4sh (help): Change implementation, improving output
	text.

2021-11-07  Luca Saiu  <positron@gnu.org>

	update .gitignore

	* .gitignore: Update.

2021-11-07  Luca Saiu  <positron@gnu.org>

	cleanup scripts/emulator, factor

	Generate scripts/emulator using M4sh before config.status , like
	bin/jitter-config .  Factor.  Add GNU-style command-line options --version and
	--help, printing useful information according to configuration data.

	* bin/jitter-config.in.m4sh (script_name, help_section_indentation)
	(help, suppress_redundant_spaces, main program): Change definition.
	(prefix, exec_prefix, datarootdir, includedir, flagdir, templatedir, my_echo)
	(echo_and_exit, fail_usage, fail_semantic-version): Move to...

	* m4-utility/jitter-script.m4sh: ...Here.

	* scripts/emulator.in: The file is now generated: replace with...
	* scripts/emulator.in.m4sh: ...This.  New implementation, replying on
	m4-utility/jitter-script.m4sh.

	* Makefile.am (noinst_SCRIPTS): New variable.
	(bin_SCRIPTS): Change comment.
	(scripts/emulator.in): New rule.
	(EXTRA_DIST): Distribute new source scripts/emulator.in.m4sh.

2021-11-07  Luca Saiu  <positron@gnu.org>

	update .gitignore

	* .gitignore: Update path names for moved generated files.

2021-11-07  Luca Saiu  <positron@gnu.org>

	add minimal-threading support for s390x

	The test suite passes with no errors and all the disassembled code I checked
	looks reasonable.  This is a minimal-effort port for minimal-threading, which is
	how things are supposed to be.
	The older s390 variant is still not tested because I have no usable emulator for
	it.

	* machine/s390x/jitter/machine/jitter-machine.h: New file.

	* machine/s390x/jitter/machine/jitter-machine-assembly.S: New stub file, copied
	from the dummy file.
	* machine/s390x/jitter/machine/jitter-machine-c.c: New stub file, copied
	from the dummy file.

	* Makefile.am (EXTRA_DIST): Distribute new files.
	* configure.ac ($default_host_cpu case): Add s390x case.  Keep existing s390.

2021-11-06  Luca Saiu  <positron@gnu.org>

	trivial documentation changes

	* doc/jitter.texi: Documentation.
	* example-vms/structured/doc/structured.texi: Documentation.

2021-11-06  Luca Saiu  <positron@gnu.org>

	build system: on cross configurations do not use the build-time sed on host

	configure.ac (AC_PROG_SED): Add, out of cleanliness.  In practice this was
	already enabled through Gnulib.
	(JITTER_HOST_SED): New substitution.
	Add comments.

2021-11-06  Luca Saiu  <positron@gnu.org>

	move example program man pages

	Generate man pages in different subdirectories of the source directory.

	* Makefile.am ($(srcdir)/doc/structured.1): Move to
	$(srcdir)/example-vms/structured/doc/structured.1, update rule generating it.
	(dist_man1_MANS): Update reference to renamed file.
	($(srcdir)/doc/jitterlisp.1): Likewise, move to
	$(srcdir)/example-vms/jitterlisp/doc/jitterlisp.1.
	(dist_man1_MANS): Likewise.

2021-11-06  Luca Saiu  <positron@gnu.org>

	build system: improve example programs library dependencies

	Cleanup the Makefile.am file, factor and add actual missing dependencies that in
	many cases prevented parallel builds of the examples when the all target was not
	made already.  This was already done with JitterLisp: improve the machinery and
	use it for all the C examples.

	The ability to build in parallel makes a difference in practice: even just
	JitterLisp comes in up to 16 different configurations.

	* Makefile.am (OTHER_DEPENDENCIES_FOR_ALL_C_EXAMPLES): New variable.  Explain
	its purpose in a long comment.
	(EXTRA_bin_uninspired__switch_DEPENDENCIES)
	(EXTRA_bin_uninspired__direct_threading_DEPENDENCIES)
	(EXTRA_bin_uninspired__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_uninspired__no_threading_DEPENDENCIES)
	(EXTRA_bin_structured_DEPENDENCIES)
	(EXTRA_bin_structuredvm_DEPENDENCIES)
	(EXTRA_bin_structured__switch_DEPENDENCIES)
	(EXTRA_bin_structuredvm__switch_DEPENDENCIES)
	(EXTRA_bin_structured__direct_threading_DEPENDENCIES)
	(EXTRA_bin_structuredvm__direct_threading_DEPENDENCIES)
	(EXTRA_bin_structured__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_structuredvm__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_structured__no_threading_DEPENDENCIES)
	(EXTRA_bin_structuredvm__no_threading_DEPENDENCIES): New variables, using
	OTHER_DEPENDENCIES_FOR_ALL_C_EXAMPLES in their definition.
	(EXTRA_bin_jitterlisp__switch_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__direct_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__no_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__switch_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__direct_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__no_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm__switch_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm__direct_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm__no_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm__switch_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm__direct_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm__no_threading_DEPENDENCIES): Redefine to
	use OTHER_DEPENDENCIES_FOR_ALL_C_EXAMPLES in their definition.

2021-10-31  Luca Saiu  <positron@gnu.org>

	update .gitignore

	.gitignore: Add new machine-generated files.

2021-10-31  Luca Saiu  <positron@gnu.org>

	add Texinfo manual stub for Structured

	* example-vms/structured/doc/structured.texi: New file.

	* Makefile.am (info_TEXINFOS): Add += definition.
	(example_vms_structured_doc_structured_TEXINFOS): Define.
	($(srcdir)/example-vms/structured/doc/gpl.texi): Define.
	($(srcdir)/example-vms/structured/doc/fdl.texi): Define.

	* example-build-systems/bootstrap: Whitespace change.  Copy new Texinfo file
	and its included files into example source directories.
	* example-build-systems/structured-simple/Makefile.am (info_TEXINFOS)
	(doc_structured_TEXINFOS): Define.
	* example-build-systems/structured-with-library/Makefile.am (info_TEXINFOS)
	(doc_structured_TEXINFOS): Define.

2021-10-31  Luca Saiu  <positron@gnu.org>

	build system: no longer use info-in-builddir

	No distcheck regressions.

	* Makefile.am (AUTOMAKE_OPTIONS): Remove info-in-builddir .
	(doc_jitter_TEXINFOS): Refer to doc/gpl.texi doc/fdl.texi without the $(srcdir)
	directory, which is obvious; notice that this is not always the case for the
	copies of these files included by other Texinfo documents, since the copies
	pathname is explicitly used in make rules.

2021-10-31  Luca Saiu  <positron@gnu.org>

	structured example build systems: support long pathnames in dist

	* example-build-systems/structured-simple/configure.ac: Add parameters to
	AM_INIT_AUTOMAKE, and comment.
	* example-build-systems/structured-with-library/configure.ac: Likewise.

2021-10-31  Luca Saiu  <positron@gnu.org>

	documentation change

	* example-build-systems/ChangeLog: Documentation.

2021-10-31  Luca Saiu  <positron@gnu.org>

	structured: print nicer output on --help

	* example-vms/structured/structured-main.c (structured_help): Change message
	formatting.

2021-10-31  Luca Saiu  <positron@gnu.org>

	trivial documentation changes

	* doc/jitter.texi: Documentation.
	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation.

2021-10-31  Luca Saiu  <positron@gnu.org>

	.gitignore: ignore new generated file

	* .gitignore: Ignore doc/structured.1 .

2021-10-31  Luca Saiu  <positron@gnu.org>

	build system: add automatically generated man page for structured

	* Makefile.am ($(srcdir)/doc/structured.1) [JITTER_CAN_REBUILD_MAN_PAGES]: Add
	rule.
	($(srcdir)/doc/structured.1) [! JITTER_CAN_REBUILD_MAN_PAGES]: Add rule.
	(dist_man1_MANS): Add += definition.

2021-10-25  Luca Saiu  <positron@gnu.org>

	structured: compile return statements as tail, in any position

	A return statement should be considered tail even when not in a tail context.
	Moreover its result expression is also in a tail context -- which may be
	important in some cases, such as when the result is a conditional of which at
	least one branch is a procedure call.

	Perform the same change in both code generators, register and stack.

	* example-vms/structured/structured-code-generator-register.c
	(structured_translate_statement): Change definition and comments.
	* example-vms/structured/structured-code-generator-stack.c
	(structured_translate_statement): Likewise.

2021-10-25  Luca Saiu  <positron@pep.foundation>

	structured stack code generator: add tail calls

	The stack code generator now also support tail calls.  No more test suite
	errors.  Unfortunately the stack calling convention is not so nice, requiring
	swap instructions after every actual; it still has the advantage of being easy
	to understand.

	* example-vms/structured/structured-code-generator-stack.c
	(structured_translate_expression): Add tail argument and use it.  Change
	comment.  Update every caller.
	(structured_translate_call): Change implementation.  Add tail argument.  Change
	comments.
	(structured_generate_return_statement): New function, identical to the version
	in example-vms/structured/structured-code-generator-register.c.
	(structured_translate_statement): Add tail argument and use it.  Change comments.
	Call new function.
	(structured_translate_procedure): Change implementation.

	* example-vms/structured/structured-code-generator-register.c
	(structured_translate_call, structured_translate_statement): Change comments,
	following the changes above to more or less identical code in the other
	generator.

	* example-vms/structured/structured.jitter (swap-stack): New VM instruction.
	(push-swap--underpush): New rewrite rule.

2021-10-25  Luca Saiu  <positron@gnu.org>

	structured: comment change

	Perform the same comment change in the two code generators: register and stack.

	* example-vms/structured/structured-code-generator-register.c
	(structured_translate_procedure): Comment change.
	* example-vms/structured/structured-code-generator-stack.c
	(structured_translate_procedure): Comment change.

2021-10-25  Luca Saiu  <positron@gnu.org>

	update .gitignore

	* .gitignore: Ignore changed generated files.

2021-10-25  Luca Saiu  <positron@gnu.org>

	improve test suite machinery for Structured, add new test case

	When testing Structured programs in the test suite print what kind of code
	generator is being used: stack or register.

	Add a new test case for tail calls -- currently known to fail in the stack case,
	where tail calls are not yet implemented.

	* tests/utility.in (jitter_run_program_case): Add parameter, change comment.
	Change implementation.
	(jitter_run_program_case_all_dispatches): Likewise.
	(jitter_run_program_case_all_dispatches): Change implementation following the
	changes above.
	(jitter_run_structured_case_all_dispatches): Likewise.

	* tests/structured/programs.test.in: Change test case number.
	Add new even-odd test cases.

	* tests/structured/even-odd.structured: New file: Structured program to test.

	* Makefile.am (EXTRA_DIST): Distribute new file.

2021-10-25  Luca Saiu  <positron@gnu.org>

	make --version output better for help2man

	Avoid generating commas right after the first word, so that the man page title
	automatically generated by help2man looks correct.

	* templates/vm-main.c (the_argp_program_version_hook): Likewise.
	* example-vms/jitterlisp/jitterlisp-main.c (the_argp_program_version_hook):
	Change output text.
	* example-vms/structured/structured-main.c (structured_version): Likewise.

2021-10-25  Luca Saiu  <positron@gnu.org>

	build system: fix JitterLisp dependencies, add a man page, improve man machinery

	Add an explicit dependency from JitterLisp to runtime libraries.  Add a man page
	for the main JitterLisp executable.  Improve man generation machinery.

	* Makefile.am: Add comments.
	(EXTRA_bin_jitterlisp_DEPENDENCIES, EXTRA_bin_jitterlisp__unsafe_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__switch_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__switch_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm__switch_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm__switch__DEPENDENCIES)
	(EXTRA_bin_jitterlisp__direct_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__direct_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm__direct_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm__direct_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm__minimal_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__no_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__no_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__boehm__no_threading_DEPENDENCIES)
	(EXTRA_bin_jitterlisp__unsafe__boehm__no_threading_DEPENDENCIES): New variables.
	(doc/jitter.1): Move to $(srcdir)/doc/jitter.1.  Change body.
	(doc/jitter-config.1): Move to $(srcdir)/doc/jitter-config.1.  Change body.
	($(srcdir)/doc/jitterlisp.1): New conditional rule.

2021-10-25  Luca Saiu  <positron@gnu.org>

	structured: add procedures, use use the new defect printing functionality

	Structured example: add procedure support, add tail calls in the register code
	generator; the stack code generator does not support tail calls yet.
	Add a few Structured syntax rules: undefined expressions, call expression, call
	statement, return statement.

	The option --print-defects now has a mandatory argument which can be one of
	"summary", "list", "replacements" and "no".

	* example-vms/structured/structured-syntax.h (enum structured_expression_case):
	New case structured_expression_case_undefined.  Uncomment
	structured_expression_case_call.
	(struct structured_expression): New fields for the call case: callee, actuals,
	actual_no.
	(enum structured_statement_case): New cases structured_statement_case_return,
	structured_statement_case_call.
	(struct structured_statement): New field for the return case: return_result;
	new fields for the call case: callee, actuals, actual_no.
	(struct structured_procedure): New type.
	(struct structured_program): New fields procedures, procedure_no.

	* example-vms/structured/structured.l ("return", "undefined", "procedure"): New
	keywords.

	* example-vms/structured/structured.y (structured_initialize_program): New
	static function.
	(structured_with_optional_initialization): Rename to structured_make_block,
	change definition and behaviour.
	Add comments.
	(structured_append_pointer, structured_make_procedure)
	(structured_program_append_procedure, structured_procedure_append_formal)
	(structured_last_procedure): New static functions.
	(struct structured_sequence): New type.
	(structured_initialize_sequence, structured_make_sequence): New function.
	(%union): New case pointers;
	(PROCEDURE, RETURN, UNDEFINED): New tokens.
	(actuals, non_empty_actuals): New typed nonterminals.
	(program): Change rule.
	(formals, non_empty_formals, actuals, non_empty_actuals, procedure_definition):
	New rules.
	(statement): Add cases.
	(block): Change aaction.
	(block_rest): Change rule and syntax, relaxing it.
	(optional_initialization): Change action.
	(expression): Add cases.
	(structured_parse_file_star_with_name): Change definition.

	* example-vms/structured/structured-code-generator-register.c
	(structured_conctetize_location): New static function, factored from
	structured_translate_expression_non_conditional_primitive.
	(structured_translate_expression_non_conditional_primitive): Change definition.
	(structured_emit_save_registers, structured_emit_restore_registers)
	(structured_translate_call, structured_generate_return_statement)
	(structured_bind_procedure_labels, structured_translate_procedure): New static
	functions.
	(structured_translate_expression, structured_emit_operand)
	(structured_translate_conditional, structured_translate_conditional_primitive)
	(structured_translate_statement): Add argument.  Change definition.
	(structured_translate_program): Change argument type.  Change definition.

	* example-vms/structured/structured-code-generator-stack.c
	(structured_emit_save_registers, structured_emit_restore_registers)
	(structured_translate_call, structured_bind_procedure_labels)
	(structured_translate_procedure): New static functions.
	(structured_translate_expression, structured_translate_statement)
	(structured_translate_program): Change definitions.

	* example-vms/structured/structured-code-generator.h
	(structured_static_environment_used_register_no)
	(structured_static_environment_bind_procedure)
	(structured_static_environment_has_procedure)
	(structured_static_environment_lookup_procedure_tail)
	(structured_static_environment_lookup_procedure_arity): New prototypes.

	* example-vms/structured/structured-code-generator.c (struct
	structured_procedure_binding): New type.
	(struct structured_static_environment): New field procedure_bindings.
	(structured_static_environment_initialize)
	(structured_static_environment_finalize): Change definitions.
	(structured_static_environment_bind_procedure)
	(structured_static_environment_used_register_no)
	(structured_static_environment_has_procedure)
	(structured_static_environment_lookup_procedure_helper)
	(structured_static_environment_lookup_procedure)
	(structured_static_environment_lookup_procedure_tail)
	(structured_static_environment_lookup_procedure_arity): New funtcions.
	(structured_static_environment_fresh_register): Change definition.
	(structured_static_environment_highest_register_index_in_use): New static
	function, factored from structured_static_environment_fresh_register.

	* example-vms/structured/structured.jitter (r): Comment changes in
	fast-register-no.
	(push-unspecified-stack, underpop-stack, underpush-stack, return-to-undertop)
	(procedure-prolog, call): New VM instructions.

	* example-vms/structured/structured-main.c (structured_help): Change output
	string.
	(enum structured_print_defect_what): New type.
	(struct structured_command_line): Change print_defects field type.
	(structured_initialize_command_line): Update initialisation.
	(structured_parse_command_line): Set print_defects field according to option
	argument.
	(structured_print_heading): New static function.
	(structured_work): Add switch on the value of cl->print_defects.

	This change set is lovingly dedicated to my muse and future wife Ege, who has
	given me the motivation to write the change log entry you are reading when I was
	feeling tired.  Thanks for this as well.

2021-10-25  Luca Saiu  <positron@gnu.org>

	jitterlisp: add defect-printing primitives

	* example-vms/jitterlisp/jitterlisp-primitives.c (print_defects)
	(print_defect_replacements): New primitives.
	(jitterlisp_primitives): Add primitive structs.

	* example-vms/jitterlisp/doc/jitterlisp.texi: Document new primitive wrappers in
	the manual.

2021-10-25  Luca Saiu  <positron@gnu.org>

	improve defect-printing functionality

	Add functions to print out the list of defective specialised instructions, and
	the table of specialised instruction replacements.
	VM driver: Add mandatory option argument to --print-defects, now allowing to
	print a summary, a list of defective specialised instructions, a table of
	replacements, or nothing.

	* jitter/jitter-defect.c (jitter_print_specialized_instruction_name): New
	function.
	(jitter_defect_print): New function.
	(jitter_defect_print_replacement_table): New function.
	(jitter_indent): New static function.
	(jitter_defect_print_summary): Cosmetic changes.
	(jitter_fill_replacement_table): Add argument defective_specialized_instructions.
	Use it.
	(jitter_dump_defects): New function.
	* jitter/jitter-defect.h (jitter_fill_replacement_table): Update comment.
	(jitter_fill_replacement_table): Add argument defective_specialized_instructions.
	Change attribute.
	Reorganise comments.
	(jitter_dump_defects, jitter_defect_print)
	(jitter_defect_print_replacement_table): New prototypes.

	* jitter/jitter-vm.h (struct jitter_vm): New fields
	defective_specialized_instructions, specialized_instruction_call_relateds,
	replacement_table.

	* templates/vm.h (vmprefix_defect_print)
	(vmprefix_defect_print_replacement_table): New prototypes.
	(vmprefix_defective_specialized_instructions): New extern declaration.

	* templates/vm1.c (vmprefix_defective_specialized_instructions): New variable.
	(vmprefix_initialize): Update argument in jitter_fill_replacement_table call.
	[defect replacements] Initialise new struct jitter_vm fields.
	[! defect replacements] Initialise new struct jitter_vm fields to default values.
	[0] Add disabled jitter_dump_defects call.
	(vmprefix_defect_print, vmprefix_defect_print_replacement_table): New wrapper
	functions.

	* templates/vm-main.c (enum vmprefix_print_defects_how): New type.
	(struct vmprefix_main_command_line): Change type for field print_defects.
	(parse_opt): Update cl->print_defects initialisation and option handling.
	(argp_option): Add mandatory option argument to --print-defects.  Update user
	help string for --no-print-defects.
	(vmprefix_print_heading): New static function.
	(main): Possibly call one of the new function according to the value of
	cl.print_defects.

2021-10-25  Luca Saiu  <positron@gnu.org>

	replace malloc function attribute with its __malloc__ alias

	This avoids conflicts with the malloc macro defined by Gnulib as a replacement
	for the libc function.

	Whenever the same file contains other function attributes, rename those as well.
	Do not rename every function attribute in the code base, yet.

	* example-vms/jitterlisp/jitterlisp-allocator.h: Replace function attributes
	including malloc with aliases beginning and ending with __.
	* jitter/jitter-aligned-block.h: Likewise.
	* jitter/jitter-heap.h: Likewise.
	* jitter/jitter-malloc.h: Likewise.
	* jitter/jitter-mmap.h: Likewise.
	* jitter/jitter-time.h: Likewise.

2021-10-25  Luca Saiu  <positron@gnu.org>

	locations: do not crash on non-switch dispatches when no information is there

	* jitter/jitter-data-locations.c (jitter_make_data_locations): Change definition.

2021-10-25  Luca Saiu  <positron@pep.foundation>

	update THANKS

	* THANKS: Documentation.

2021-10-25  Luca Saiu  <positron@pep.foundation>

	add another structured example

	* example-vms/structured/examples/even-odd.structured: New file.

	* Makefile.am (EXTRA_DIST): Add new file.
	* example-build-systems/structured-simple/Makefile.am (EXTRA_DIST): Likewise.
	* example-build-systems/structured-with-library/Makefile.am (EXTRA_DIST):
	Likewise.

2021-10-25  Luca Saiu  <positron@pep.foundation>

	structured examples: add fibo, rename iterative euclid, add recursive euclid

	* example-vms/structured/examples/euclid.structured: Rename to
	example-vms/structured/examples/euclid-iterative.structured.
	* example-vms/structured/examples/euclid-recursive.structured: New file.
	* example-vms/structured/examples/fibo.structured: New file.

	* Makefile.am: Adjust to added/renamed files.
	* example-build-systems/structured-simple/Makefile.am: Likewise.
	* example-build-systems/structured-with-library/Makefile.am: Likewise.

2021-10-25  Luca Saiu  <positron@pep.foundation>

	arm: prepare comment about special registers without actually doing anything yet

	* machine/arm/jitter/machine/jitter-machine.h: Comment.
	* THANKS: Documentation.

2021-10-25  Luca Saiu  <positron@gnu.org>

	structured bug fix

	* example-vms/structured/structured-code-generator-register.c
	(structured_translate_expression_variable) [structured_location_case_temporary]:
	Do not fail in this case: it is legitimate that a variable gets copied into a
	temporary.  Explain in a comment.

2021-10-25  Luca Saiu  <positron@gnu.org>

	new stack operations, push-under-top-unspecified, push-under-top

	* jitter/jitter-stack.h (JITTER_STACK_TOS_UNDER_PUSH)
	(JITTER_STACK_NTOS_UNDER_PUSH, JITTER_STACK_TOS_UNDER_PUSH_UNSPECIFIED)
	(JITTER_STACK_NTOS_UNDER_PUSH_UNSPECIFIED): New macros.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions): Emit
	CPP macro definitions for the new operations, visible in user C code.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Add new keywords.

2021-10-25  Luca Saiu  <positron@gnu.org>

	documentation

	* doc/jitter.texi: Documentation.

2021-10-25  Luca Saiu  <positron@gnu.org>

	configure.ac: cosmetic changes

	* configure.ac: fix help string, fix shell variable name which was only used for
	a warning.

2021-09-26  Luca Saiu  <positron@gnu.org>

	build system fix: make flex-generated files include Gnulib's header when needed

	* Makefile.am ($(srcdir)/jitterc/jitterc-scanner.c)
	($(srcdir)/jitterc/jitterc-scanner.h): Change rule.  Add comment.

2021-09-26  Luca Saiu  <positron@gnu.org>

	THANKS: mention pEp foundation

2021-09-26  Luca Saiu  <positron@pep.foundation>

	android: update build system

	* configure.ac (jitter_host_os_is_elf): Define for Android.
	(jitter_host_os_is_android): New shell variable.
	(JITTER_HOST_OS_IS_ANDROID): New CPP feature macro.

	* jitter/jitter-config.h.in (JITTER_HOST_OS_IS_ANDROID): New CPP feature macro.

2021-09-26  Luca Saiu  <positron@pep.foundation>

	arm: define crashing asm macro in a more portable way

	It turns out that very old revisions of the ARM architecture do not support the
	rfe instruction.  Redefine using an alternative.

	* machine/arm/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): Redefine.

2021-09-26  Luca Saiu  <positron@gnu.org>

	trivial build system change

	* Makefile.am (LDADD_FOR_GNULIB): Change definition.
	* doc/jitter.texi: Documentation.

2021-09-26  Luca Saiu  <positron@gnu.org>

	include Gnulib headers in a few places where Gnulib might be used

	* example-vms/jitterlisp/jitterlisp-primitives.c: Include Gnulib header,
	unconditionally (JitterLisp always uses Gnulib).
	* templates/vm1.c [HAVE_CONFIG_H]: Include Gnulib header, in case it is used.

2021-09-26  Luca Saiu  <positron@gnu.org>

	disassemble: add commented-out debugging prints

	* jitter/jitter-disassemble.c (jitter_disassemble_range_objdump): Add
	commented out fpritnf calls.

2021-09-26  Luca Saiu  <positron@gnu.org>

	fix jitterlisp bug

	Fix embarrassing mistake.

	* example-vms/jitterlisp/jitterlisp.jitter
	(jitterlispvm_error_invalid_primitive_argument_type_friendly): Change printf
	with sprintf, which was intended since the beginning.

2021-09-26  Luca Saiu  <positron@gnu.org>

	update .gitignore

	* .gitignore: Add ignored files.

2021-09-26  Luca Saiu  <positron@gnu.org>

	manual: trivial changes

	* doc/jitter.texi: Documentation.

2021-09-26  Luca Saiu  <positron@gnu.org>

	configure: print Jitter version at the beginning

	* configure.ac: Add AC_MSG_NOTICE call.

2021-09-26  Luca Saiu  <positron@gnu.org>

	handle long path names in tarballs from git branches

	When generating a tarball from a non-master branch it is better to take the
	liberty of relying on a tar program without pathname length limitation -- which
	is checked for at configuration time.  This is a good idea now that the branch
	name is part of the version identifier.

	* bootstrap.conf: Copy machine/dummy--minimal-threading to machine/dummy.  Add
	comment.

	* configure.ac: Change comment.
	(jitter_filename_length_limit_options): New M4 macro.
	(AM_INIT_AUTOMAKE): Call with new macro.
	(JITTER_ASSEMBLY_SUBDIRECTORY): Add comment about copied "dummy" directory.

2021-09-26  Luca Saiu  <positron@gnu.org>

	build system: change man page handling in Makefile.am

	* Makefile.am (dist_man1_MANS): Cite files as being in $(srcdir).
	(distclean-local): Change comment.  Do not remove man pages.
	(remove-man-pages): New rule.
	(maintainer-clean-local): Add remove-man-pages as dependency.

2021-09-26  Luca Saiu  <positron@gnu.org>

	documentation

	* doc/missing-man-page.1: Documentation.

2021-09-26  Luca Saiu  <positron@gnu.org>

	configure bug fix

	* configure.ac (JITTER_ASSEMBLY_SUBDIRECTORY): Check JITTER_ASSEMBLY_SUBDIRECTORY
	instead of xJITTER_ASSEMBLY_SUB DIRECTORY.

2021-09-26  Luca Saiu  <positron@gnu.org>

	improve automatically generated Jitter version name

	When bootstrapping from a git snapshot show the branch name as well, unless the
	branch name is unknown or named "master".  Implement the new functionality in
	clearly factored macros.

	* configure.ac (jitter_git_branch_suffix, jitter_version_from_git_tag)
	(jitter_version): New M4 macros.
	(AC_INIT): Use new macro in call.

2021-09-26  Luca Saiu  <positron@gnu.org>

	build system: add a rule to delete Jitter-generated C files

	* Makefile.am (clean-generated-examples): New rule.
	(maintainer-clean-local): Change, use new rule as dependency.

2021-09-26  Luca Saiu  <positron@gnu.org>

	documentation changes

	* doc/jitter.texi: Documentation.

2021-09-26  Luca Saiu  <positron@gnu.org>

	move generated man pages to doc/ directory

	* Makefile.am (dist_man1_MANS): Redefine.
	(jitterc/jitter.1): Change to doc/jitter.1.  Update rule.
	(bin/jitter-config.1): Change to doc/jitter-config.1.  Update rule.

2021-09-26  Luca Saiu  <positron@gnu.org>

	build system clean target: remove core dumps and related files

	* Makefile.am (clean-local): Remove core files and vgcore files.

2021-05-05  Luca Saiu  <positron@gnu.org>

	change argument type for out-of-vm-instruction state field access macros

	It is more natural to pass pointers to structs than structs.

	* templates/vm.h (VMPREFIX_STATE_RUNTIME_FIELD, VMPREFIX_STATE_BACKING_FIELD):
	Change definitions and comments.

2021-05-01  Luca Saiu  <positron@gnu.org>

	remove scripts/highlight-disassembly

	Remove old crude script, made obsolete by libtextstyle support.

	* configure.ac (scripts/highlight-disassembly): Remove generation.

	* scripts/highlight-disassembly.in: Delete file.

2021-05-01  Luca Saiu  <positron@gnu.org>

	build system: remove indent machinery, formerly used for debugging

	This debugging machinery was annoying to maintain, and I have not used it in a
	long time.  Newcomers have been confused by it.

	* configure.ac (JITTER_INDENT): Remove substitution.  Remove check.
	(JITTER_HAVE_INDENT): Remove Automake conditional.
	Keep a comment, adapted.

	* Makefile.am (INDENT): Remove variable.
	Remove every use.

2021-04-30  Luca Saiu  <positron@gnu.org>

	tentatively change --cppflags to omit -I prefix on cross-compilation

	The autoconf macros defined from jitter --cppflags get automatically changed, of
	course.

	* configure.ac (JITTER_CROSS_COMPILING): New substitution.

	* bin/jitter-config.in.m4sh (main loop) <--cppflags>: Introduce conditional on
	the new substitution.

	Suggested by Romain Naour, after his difficulties with building GNU poke with
	buildroot.

2021-04-30  Luca Saiu  <positron@gnu.org>

	configure.ac: fix obvious bug in recently introduced conditional

	* configure.ac (JITTER_ASSEMBLY_SUBDIRECTORY, jitter_supports_minimal_threading)
	(jitter_supports_no_threading) [x86_64]: Fix conditional.  Improve error
	message.

2021-04-30  Luca Saiu  <positron@gnu.org>

	support -m32 on x86_64

	On x86_64 check for pointer size at configuration: configure for i386 instead of
	x86_64 if the size is 4B instead of 8B.

	Thanks to José Marchesi for reporting the issue.

	* configure.ac (JITTER_ASSEMBLY_SUBDIRECTORY, jitter_supports_minimal_threading)
	(jitter_supports_no_threading) [x86_64]: Add conditional.

2021-04-26  Luca Saiu  <positron@gnu.org>

	make it easy to add architecture-specific code around C function calls

	Make it easy to add architecture-specific code around C function calls, for
	example for restoring GOT tables and the like on architectures/ABI where such
	information gets clobbered and the restoration mechanism used by GCC is
	position-dependent.

	Fix example port code explaining how to do it.

	Fix alpha port, actually doing it.  Zero failures on alpha with
	minimal-threading!  I anticipate other architectures to suffer from the same
	problem.

	* jitter/jitter-executor.h (JITTER_EXECUTION_PRE_C_CALL_)
	(JITTER_EXECUTION_POST_C_CALL_): New macros.  Update comments.
	New sanity check.
	(JITTER_PRE_POST_FORCE_SEQUENCE_, JITTER_IF_VOID_ELSE, JITTER_PRE_POST_VOID)
	(JITTER_PRE_POST_NONVOID, JITTER_PRE_POST, JITTER_CALL_C): New macros.

	* jitterc/jitterc-generate.c (jitterc_emit_executor_global_wrappers): Rename to
	jitterc_emit_executor_global_and_function_wrappers, update call.
	(jitterc_emit_executor_global_wrappers): Change implementation.
	(jitterc_generate_non_relocatable_instruction_label_variables): New function,
	factoring code from jitterc_emit_executor_main_function.
	(jitterc_emit_executor_main_function): Remove commented-out generated code. Call
	new function.  Change generated code.

	* machine/alpha/jitter/machine/jitter-machine.h (_JITTER_ASM_DEBUGGING_NOP): Fix
	definition.
	(JITTER_EXECUTION_BEGINNING_, JITTER_EXECUTION_POST_C_CALL_): New macros.  Add
	comments.

	* machine/dummy--minimal-threading/jitter/machine/jitter-machine.h
	(JITTER_EXECUTION_BEGINNING_, JITTER_EXECUTION_END_)
	(JITTER_EXECUTION_PRE_C_CALL_, JITTER_EXECUTION_POST_C_CALL_): New commented-out
	macro definitions.  Add comments.

2021-04-26  Luca Saiu  <positron@gnu.org>

	example fixes

	* example-vms/structured/structured.jitter (divided-stack, remainder-stack)
	(divided, remainder): Make non-relocatable.

	* example-vms/uninspired/uninspired.jitter (divo, modo): Likewise.

2021-04-26  Luca Saiu  <positron@gnu.org>

	jitterlisp: simplify and fix, remove obsolete Alpha code, now generalised

	* example-vms/jitterlisp/jitterlisp.jitter (primitive): Remove commented-out
	code, now subsumed by a clean implementation.  Use new macro JITTER_CALL_C.

2021-04-26  Luca Saiu  <positron@gnu.org>

	emacs mode change

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Font-lock new macro
	JITTER_CALL_C.

2021-04-26  Luca Saiu  <positron@gnu.org>

	documentation files

	Change compact copyright notices, rephrase a few sentences.

	* NEWS: Documentation.
	* README-hacking: Documentation.
	* example-build-systems/ChangeLog: Documentation.
	* example-build-systems/NEWS: Documentation.
	* example-build-systems/README: Documentation.

2021-04-26  Luca Saiu  <positron@gnu.org>

	comment fix

	* jitter/jitter.h: Comment.

2021-04-26  Luca Saiu  <positron@gnu.org>

	add minimal-threading support for ARM

	The lack of a hardware division instruction will provide for some testing
	opportunities in this case.

	* Makefile.am (EXTRA_DIST): Distribute new files.

	* configure.ac (JITTER_ASSEMBLY_SUBDIRECTORY, jitter_supports_minimal_threading)
	[arm]: Define.

	* machine/arm/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/arm/jitter/machine/jitter-machine-c.c: New file.
	* machine/arm/jitter/machine/jitter-machine.h: New file.

2021-04-26  Luca Saiu  <positron@gnu.org>

	build system improvements

	* configure.ac (ac_cv_c_typeof, ac_cv_have_gcc_builtin_types_compatible_p)
	(ac_cv_have_gcc_builtin_choose_expr, ac_cv_have_function_wrappers_requirements)
	(ac_cv_have_local_poisoning_requirements): New shell variables.
	(JITTER_HAVE_TYPEOF, HAVE_TYPEOF, JITTER_HAVE_GCC_BUILTIN_TYPES_COMPATIBLE_P)
	(JITTER_HAVE_GCC_BUILTIN_CHOOSE_EXPR)
	(JITTER_HAVE_FUNCTION_WRAPPERS_REQUIREMENTS)
	(JITTER_HAVE_LOCAL_POISONING_REQUIREMENTS): New CPP feature macros.
	(default) [minimal-threading]: change default.
	(default) [no-threading]: change default.
	(--dispatch-minimal-threading): Change help text.
	(--dispatch-no-threading): Change help text.

	* jitter/jitter-config.h.in (JITTER_HAVE_TYPEOF)
	(JITTER_HAVE_GCC_BUILTIN_TYPES_COMPATIBLE_P)
	(JITTER_HAVE_GCC_BUILTIN_CHOOSE_EXPR)
	(JITTER_HAVE_FUNCTION_WRAPPERS_REQUIREMENTS)
	(JITTER_HAVE_LOCAL_POISONING_REQUIREMENTS): New CPP feature macros.

	* jitter/jitter-cpp.h (JITTER_HAVE_LOCAL_POISONING): Remove macro definition,
	now replaced by JITTER_HAVE_LOCAL_POISONING_REQUIREMENTS.

	* jitterc/jitterc-generate.c: Replace every use of JITTER_HAVE_LOCAL_POISONING
	by JITTER_HAVE_LOCAL_POISONING_REQUIREMENTS in generated code.

2021-04-26  Luca Saiu  <positron@gnu.org>

	portability improvements: make minimal-threading easy to support

	Prepare the changes needed to enable minimal-threading on new architectures in a
	very simple way.  Actually enable it on two architectures, Aarch64 and Alpha --
	even if Alpha still has a problem to be solved in a later change set.

	* configure.ac (jitter_supports_minimal_threading): New variable.
	(jitter_supports_no_threading, jitter_has_host_assembly): Change definitions.
	Change comments, reorder slightly.
	(default) [minimal-threading]: Change using jitter_supports_minimal_threading.
	(JITTER_ASSEMBLY_SUBDIRECTORY) [aarch64, alpha]: Define.

	* machine/aarch64/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/aarch64/jitter/machine/jitter-machine-c.c: New file.
	* machine/aarch64/jitter/machine/jitter-machine.h: New file.

	* machine/alpha/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/alpha/jitter/machine/jitter-machine-c.c: New file.
	* machine/alpha/jitter/machine/jitter-machine.h: New file.

	* machine/dummy--minimal-threading/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/dummy--minimal-threading/jitter/machine/jitter-machine-c.c: New file.
	* machine/dummy--minimal-threading/jitter/machine/jitter-machine.h: New file.

	* machine/dummy/jitter/machine/jitter-machine-assembly.S: Rename to
	machine/dummy--no-threading/jitter/machine/jitter-machine-assembly.S.
	* machine/dummy/jitter/machine/jitter-machine-c.c: Rename to
	machine/dummy--no-threading/jitter/machine/jitter-machine-c.c.
	* machine/dummy/jitter/machine/jitter-machine.h: Rename to
	machine/dummy--no-threading/jitter/machine/jitter-machine.h.

	* Makefile.am (EXTRA_DIST): Distribute new files, update references to renamed
	files.

2021-04-26  Luca Saiu  <positron@gnu.org>

	test suite: add test cases

	* tests/jitterlisp/jitterlisp.test.in: Add test cases

2021-04-26  Luca Saiu  <positron@gnu.org>

	introduce hash prefix, use it for runtime field of state structs

	Make the state runtime field of VM state structures difficult to use by mistake.
	Generalise this machinery to be used more in the future.  No changes in user
	code, as long as the user is using the intended access macros.

	* jitter/jitter-vm.c (jitter_print_vm_configuration): Change function.

	* jitter/jitter-vm.h (struct jitter_vm_configuration): New field hash_prefix.

	* jitterc/jitterc-generate.c (INPUT_HASH_PREFIX): New macro.  Whitespace.
	(jitterc_emit_stack_operation_definition): Change emitted code.
	(jitterc_emit_state_h): Change emitted code and emitted comment.
	(jitterc_emit_state): Change emitted code.
	(jitterc_emit_configuration_macros): Change emitted code.
	(jitterc_emit_executor_main_function): Change emitted code.
	(jitterc_fix_and_move): Fix vmprefixhash as well, in addition to vmprefix and
	VMPREFIX.  Whitespace.

	* jitterc/jitterc-vm.c (jitterc_hash_prefix): New static function.
	(jitterc_make_vm, jitterc_vm_add_setting): Use new function.

	* jitterc/jitterc-vm.h (struct jitterc_vm): Change comment.  New field
	hash_prefix.

	* templates/vm.h (vmprefix_profile_sample_stop): Update reference to renamed
	field.

	* templates/vm1.c (vmprefix_vm_the_configuration): Add initialisation for new
	field.

2021-04-26  Luca Saiu  <positron@gnu.org>

	remove old profiling experiment

	Remove an old profiling experiment based on profil, obsolete and confusing now
	that profiling works in a different way.

	* jitterc/jitterc-generate.c (jitterc_emit_executor_main_function): Do not
	emit code.

2021-04-26  Luca Saiu  <positron@gnu.org>

	improve state field access macros

	make state fields (both runtime and backing) accessible from out of VM
	instructions as well, given a VM state in addition to a field name.  These two
	macros are alternate (and incompatible) versions of macros already existing for
	use within VM instructions.  Rename both sets of macros to use VMPREFIX_ instead
	of JITTER_ , so as to work well with multiple VMs in the same program.

	Thanks to José Marchesi for the poke bug report and the conversation which
	eventually lead to this idea.

	* jitter/jitter-executor.h: Add comments.
	(JITTER_STATE_RUNTIME, JITTER_STATE_BACKING_FIELD, JITTER_STATE_RUNTIME_FIELD):
	Rename to _JITTER_STATE_RUNTIME, _JITTER_STATE_BACKING_FIELD,
	_JITTER_STATE_RUNTIME_FIELD.

	* jitterc/jitterc-generate.c (jitterc_emit_executor_main_function): Update uses.
	(jitterc_emit_executor_general_purpose_state_data_access_macros): Update
	definition of _JITTER_STATE_BACKING in generated code.
	(jitterc_emit_executor_state_field_access_macros): New forward declaration.
	(jitterc_emit_executor_state_field_access_macros): New static function.
	(jitterc_emit_executor_main_function): Call new function.

	* templates/vm.h (VMPREFIX_STATE_RUNTIME_FIELD, VMPREFIX_STATE_BACKING_FIELD):
	New macros.  Add comments.

	* example-vms/jitterlisp/jitterlisp.jitter (heap-allocate, gc-if-needed)
	(primitive-cons-special): Update uses.

2021-04-26  Luca Saiu  <positron@gnu.org>

	documentation

	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation.

2021-04-07  Luca Saiu  <positron@gnu.org>

	improve VM instruction identifier poisoning

	* jitter/jitter-cpp.h (JITTER_HAVE_LOCAL_POISONING): New feature macro.  Change
	comment.
	(JITTER_PRAGMA_WARN_WITH_REASON): Change definition.
	(JITTER_POISONED_IN_ANY_INSTRUCTION, JITTER_POISONED_IN_RELOCATABLE_INSTRUCTION)
	(JITTER_POISONED_IN_NON_BRANCHING_INSTRUCTION, JITTER_FORBIDDEN_EXPRESSION)
	(JITTER_FORBIDDEN_EXPRESSION_IN_RELOCATABLE)
	(JITTER_FORBIDDEN_EXPRESSION_IN_NON_BRANCHING): Remove macros.
	(JITTER_POISONED_EXPRESSION, JITTER_POISONED_EVERYWHERE)
	(JITTER_POISONED_WITH_OR_WITHOUT_ATTRIBUTE, JITTER_POISONED_WITH_ATTRIBUTE)
	(JITTER_POISONED_WITHOUT_ATTRIBUTE): New macros.

	* jitterc/jitterc-generate.c (enum jitterc_poisoning_reason): New type.
	(struct jitterc_poisoned_identifier): New type.
	(jitterc_poisoning_stack): New global variable.
	(jitterc_initialize_local_poisoning, jitterc_poison, jitterc_unpoison_all): New
	static functions.
	(jitterc_open_local_poisoning, jitterc_close_local_poisoning)
	(jitterc_emit_executor_definitions, jitterc_emit_executor_undefinitions)
	(jitterc_emit_executor): Change definitions.

2021-04-05  Luca Saiu  <positron@gnu.org>

	profiling improvements; fix jitterlisp profiling

	Make the JitterLisp state pool into two lists: one list of used states and
	another list of ununsed states.  Each state can be in only one of the two,
	and in fact contains only one set of links, now renamed from unused_links to
	pool_links.

	Now profiling with JitterLisp works again: a runtime profile is obtained by
	merging the runtime profiles in each state from both list, used and unused.

	Add a forgotten function for profiling in the template.

	* templates/vm.h (vmprefix_profile_runtime_destroy): New protoype
	* templates/vm1.c (vmprefix_profile_runtime_destroy): New function.

	* example-vms/jitterlisp/jitterlisp-eval-vm.h: Change comments.
	(jitterlisp_current_profile_runtime, jitterlisp_reset_profile_runtime): New
	prototypes.

	* example-vms/jitterlisp/jitterlisp-eval-vm.c (jitterlisp_used_states): New
	variable.
	(jitterlisp_add_to_state_pool, jitterlisp_remove_from_state_pool): Remove,
	replacing with...
	(jitterlisp_state_initialise_as_used, jitterlisp_state_used_to_unused)
	(jitterlisp_state_unused_to_used): New functions.  Change uses.
	(jitterlisp_get_state): Change comments and implementation.
	(jitterlisp_initialize_state_pool, jitterlisp_finalize_state_pool)
	(jitterlisp_vm_finalize): Change implementation.
	(jitterlisp_runtime_profile_function_1, jitterlisp_runtime_profile_function_2):
	New types.
	(jitterlisp_runtime_profiles_call_1_in, ejitterlisp_runtime_profiles_call_2_in):
	New static functions.
	(jitterlisp_profile_runtime_merge_from_every_state_in)
	(jitterlisp_runtime_profiles_clear_in): New static functions.
	(jitterlisp_current_profile_runtime, jitterlisp_reset_profile_runtime): New
	function.

	* example-vms/jitterlisp/jitterlisp-primitives.c (print_profile_specialized)
	(print_profile_unspecialized, reset_profileb): Change definition.

	* example-vms/jitterlisp/jitterlisp.jitter (state-struct-backing-c):
	Rename unused_links to pool_links.  Change comment.

2021-04-05  Luca Saiu  <positron@gnu.org>

	small documentation change

	* doc/jitter.texi: Documentation.

2021-04-05  Luca Saiu  <positron@gnu.org>

	documentation

	* doc/jitter.texi: Documentation.

2021-04-05  Luca Saiu  <positron@gnu.org>

	profiling improvements, with one incompatible change

	Rename JITTER_PROFILE_SAMPLE to VMPREFIX_PROFILE_SAMPLE and JITTER_PROFILE_COUNT
	to VMPREFIX_PROFILE_COUNT; now each kind of profiling can be enabled for each VM
	independently.

	Fix profiling with simple dispatches, which had been broken by a recent change
	set.

	* jitterc/jitterc-generate.c
	(jitterc_emit_executor_ordinary_specialized_instructions)
	(jitterc_emit_executor_main_function): Change emitted code.

	* templates/vm.h: Change comment.

	* templates/vm1.c (JITTER_PROFILE_SAMPLE, JITTER_PROFILE_COUNT): Rename to
	VMPREFIX_PROFILE_SAMPLE, VMPREFIX_PROFILE_COUNT.  Change every use.
	Add global check with warning.

	* jitter/jitter-profile.c (jitter_profile_print_uninstrumented): Change printed
	message.

2021-04-04  Luca Saiu  <positron@gnu.org>

	make JITTER_EXIT a branching macro

	From now on using JITTER_EXIT in a VM instruction requires the instruction to
	be branching; this is necessary since exiting VM code entails a hardware branch
	(to the end of the execution C function), which may be defective and therefore
	needs to be compiled as a replacement as well.

	Fix an example using JITTER_EXIT.

	Discovered thanks to José Marchesi, who is using JITTER_EXIT in poke.

	* jitter/jitter-executor.h (JITTER_EXIT) [replicate]: Rename to _JITTER_EXIT.
	(JITTER_EXIT) [! replicate]: Rename to _JITTER_EXIT.
	Add comment.

	* jitterc/jitterc-generate.c (jitterc_emit_executor_definitions): Handle
	JITTER_EXIT along with the other branching macros.
	(jitterc_emit_executor_main_function): Use the private macro _JITTER_EXIT from
	the special specialised instruction, which is not relocatable and therefore
	safe to compile only once.
	Fix generated comment.

	* example-vms/uninspired/uninspired.jitter (endvm): Add branching attribute.

2021-04-03  Luca Saiu  <positron@gnu.org>

	disable debugging prints left in by mistake

	* jitter/jitter-defect.c (jitter_fill_replacement_table): Add CPP conditionals
	to disable prints.

	* templates/vm1.c (vmprefix_initialize): Remove one debugging print.  Add CPP
	conditional around another.

2021-04-03  Luca Saiu  <positron@gnu.org>

	template: initialisation / finalisation bug fix

	* templates/vm1.c (vmprefix_initialize): Initialise
	the_vmprefix_vm.patch_in_table out of the conditional, so that the table is
	rebuilt at every VM initialisation.  This is important because VM finalisation
	destroys the table.

2021-04-03  Luca Saiu  <positron@gnu.org>

	implement defect replacement

	Fix defect replacement, plus other changes.  This is a large and complex change
	set, and the final state is not perfectly clean; jitterc/jitterc-generate.c in
	particular is becoming very ugly and will need factoring.  However the new code
	is meant to be reliable.

	For minimal threading and no-threading: instead of jitter_dispatch_label from C
	use jitter_fake_target (a macro expanding to a VM instruction initial label),
	and from assembly use the new assembly-only macro jitter_fake_target_asm.
	Defects are detected comparing the difference between the C label and the
	assembly label with the correct value -- no longer assumed to be zero.  The new
	way of defining jitter_fake_target_asm is reliable, differently from the older
	solution in which the assembly label was generated from inline extended asm in C
	-- in some cases leading to code duplication.
	Change every use of jitter_dispatch_label to jitter_fake_target, and every
	use of jitter_dispatch_label_asm to jitter_fake_target_asm.

	Make stack operations accessible from out of VM code, given a VM state as an
	additional argument.

	Update vm-main template with options for handling defects.

	Update examples.

	Temporarily break VM instruction profiling.

	* configure.ac: New tests for GCC features, assembly names for functions and
	assembly names for non-functions.
	(ac_cv_have_assembly_names_for_functions)
	(ac_cv_have_assembly_names_for_non_functions): New shell variables.
	(JITTER_HAVE_ASSEMBLY_NAMES_FOR_NON_FUNCTIONS)
	(JITTER_HAVE_ASSEMBLY_NAMES_FOR_FUNCTIONS): New CPP feature macros.
	(jitter_supports_no_threading): Add default assignment.
	<minimal threading> (default): Change conditional around definition.
	(--dispatch-minimal-threading): Change help string.
	Remove minimal-threading reliability warning.
	<no threading> (default): Change conditional around definition.
	(--dispatch-no-threading): Change help string.
	Change comments.

	* example-vms/jitterlisp/jitterlisp-allocator.c
	(JITTERLISP_LITTER_BLOCK_BYTE_NO): Redefine.
	(jitterlisp_add_litter_block): Fill block with copies of
	JITTERLISP_UNINITIALIZED_HEAP_VALUE.
	(jitterlisp_allocate): Fix off-by-one bug in condition.

	* example-vms/jitterlisp/jitterlisp-banner.c
	(jitterlisp_interactive_banner_text): Change printed copyright string.
	(jitterlisp_interactive_banner_feature): Add argument (update all callers).  Add
	comment.  Use correct class name.
	(jitterlisp_interactive_banner): Print defect information.  Change
	implementation.

	* example-vms/jitterlisp/jitterlisp-code-generator.c: Change comments.
	(slow_register_per_class_no): New variable.

	* example-vms/jitterlisp/jitterlisp-eval-vm.c: Change include.
	(jitterlisp_unused_states): New global.
	(jitterlisp_add_to_state_pool, jitterlisp_remove_from_state_pool)
	(jitterlisp_get_state, jitterlisp_initialize_state_pool)
	(jitterlisp_finalize_state_pool): New functions.
	(jitterlisp_slow_register_per_class_no): New global variable.
	(jitterlisp_reset_vm_state): Remove function.
	(jitterlisp_vm_initialize, jitterlisp_vm_finalize): Use new functions.
	(jitterlisp_vm_initialize): Whitespace.
	(jitterlisp_jump_to_driver_and_return_result): Add argument.  Fix disabled code.
	(jitterlispvm_execute_executable_routine, jitterlisp_call_compiled)
	(jitterlisp_apply_compiled): Change implementation, using new functionality.
	(jitterlisp_unused_states): New variable.
	(jitterlisp_state): Remove variable.
	(jitterlisp_slow_register_per_class_no): New variable.

	* example-vms/jitterlisp/jitterlisp-eval-vm.h (jitterlispvm_state): Remove
	external variable.
	(jitterlisp_unused_states): New external variable.
	(jitterlisp_reset_vm_state): Remove prototype.
	(JITTERLISPVM_PUSH_MAINSTACK, JITTERLISPVM_DROP_MAINSTACK)
	(JITTERLISPVM_TOP_MAINSTACK, JITTERLISPVM_UNDER_TOP_MAINSTACK): Remove
	hand-written macro definitions, now replaced by machine-generated (but
	incompatible) definitions.
	(jitterlisp_slow_register_per_class_no): New prototype.

	* example-vms/jitterlisp/jitterlisp-library.lisp
	(interpreted-closure-compile!-knowing): Add commented-out code.

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTERLISP_CHARACTER_DISPLAY_):
	Flush.
	(JITTERLISP_DIVIDED_OR_OVERFLOW_, JITTERLISP_QUOTIENT_OR_OVERFLOW_) [unsafe]
	(JITTERLISP_REMAINDER_OR_OVERFLOW_) [unsafe]: Reimplement.

	* example-vms/jitterlisp/jitterlisp-primitives.c (times): Check for overflow.
	(print_profile_specialized, print_profile_unspecialized, reset_profileb):
	Comment out definition, temporarily breaking profiling.

	* example-vms/jitterlisp/jitterlisp-printer.c (jitterlisp_print_recursive):
	Whitespace.

	* example-vms/jitterlisp/jitterlisp-sexpression.c
	(jitterlisp_unique_object_names): Add cases.  Whitespace.

	* example-vms/jitterlisp/jitterlisp-sexpression.h (JITTERLISP_UNIQUE_OBJECT_NO):
	Redefine.
	(JITTERLISP_UNINITIALIZED_REGISTER_VALUE)
	(JITTERLISP_UNINITIALIZED_MAINSTACK_VALUE)
	(JITTERLISP_UNINITIALIZED_RETURNSTACK_VALUE)
	(JITTERLISP_UNINITIALIZED_HEAP_VALUE): New macros.

	* example-vms/jitterlisp/jitterlisp.jitter (m, t): Change stack definitions.
	(r): Change register class definition.
	(state-struct-runtime-c): Fix comment.
	(state-struct-backing-c): New field unused_links.  Comment.
	(state-initialization-c): Register stack backings as roots.
	(state-reset-c): New block.
	(state-finalization-c): Unregister roots.
	(branch-if-positive, branch-if-non-positive, branch-if-register-positive)
	(branch-if-register-non-positive, branch-if-register-null)
	(branch-if-register-not-null, one-minus-register, one-plus-register)
	(cdr-register): New instructions, as rewrite targets.
	(call-from-c): Cosmetic changes and simplifications.
	(tail-call): Add attributes caller, returning.
	(tail-call-compiled): Add attribute caller.
	(return): Add returning attribute.
	(positivep-branch-if-true, positivep-branch-if-false)
	(push-register-branch-if-positive, push-register-branch-if-non-positive)
	(push-register-branch-if-null, push-register-branch-if-non-null)
	(push-register-one-minus-pop-to-register)
	(push-register-one-plus-pop-to-register, push-register-cdr-pop-to-register): New
	rewrite rules.

	* example-vms/structured/structured-main.c (structured_help): Change printed
	message.
	(struct structured_command_line): New field print_defects.
	(structured_initialize_command_line): Initialise new field.
	(structured_parse_command_line): Handle new options --print-defects,
	--no-print-defects.
	(structured_work): Print defects if needed.

	* example-vms/structured/structured.jitter (r): Change fast register no.
	(minusr-stack, differenti-stack, beqr-stack, bneqr-stack)
	(pushr-minusr-pop-stack, pushr-beqr-stack, pushr-bger-stack): Comment out,
	tentatively.

	* example-vms/uninspired/uninspired.jitter (r): Change fast register no.
	(raise, procedurereturn, br): Add attributes.

	* jitter/jitter-config.h.in (JITTER_HAVE_ASSEMBLY_NAMES_FOR_FUNCTIONS)
	(JITTER_HAVE_ASSEMBLY_NAMES_FOR_NON_FUNCTIONS): New feature macros.

	* jitter/jitter-defect.h: Change included headers.  Change comments.
	(JITTER_HAVE_DEFECT_REPLACEMENT): New feature macro.
	(JITTER_WHEN_DEFECT_, JITTER_UNLESS_DEFECT_, JITTER_IF2_DEFECT_)
	(JITTER_WHEN_DEFECT_COMMA_, JITTER_UNLESS_DEFECT_COMMA_): New macros, defined
	once when JITTER_HAVE_DEFECT_REPLACEMENT is defined and once when it is not.
	(struct jitter_defect_descriptor): Change comment.
	(JITTER_DEFECT_DESCRIPTOR_DECLARATIONS_): Change definition.
	(JITTER_DEFECT_HEADER): Punctuation, whitespace.
	(JITTER_ASM_DEFECT_DESCRIPTOR): Comment.
	(jitter_fill_defect_table): Rename to jitter_fill_replacement_table.  Change
	comment and formals.
	(jitter_dump_defect_table): Rename to jitter_dump_replacement_table.  Change
	comment and formals.
	(jitter_defect_print_summary): New prototype.

	* jitter/jitter-defect.c: Change included headers.
	(jitter_defect_begin_class, jitter_defect_print_summary): New functions.
	(jitter_fill_defect_table): Remove.  Replace with...
	(jitter_fill_replacement_table): ...New function.
	(jitter_dump_defect_table): Remove.  Replace with...
	(jitter_dump_replacement_table): New function.

	* jitter/jitter-executor.h: Change included header.  Fix comments.  Remove
	commented-out code.
	(JITTER_PRETEND_TO_POSSIBLY_JUMP_ANYWHERE): Whitespace.
	(JITTER_PRETEND_TO_POSSIBLY_JUMP_TO_, JITTER_PRETEND_TO_JUMP_TO_): Remove
	macros.
	(JITTER_EXIT): Change definition.
	(JITTER_SKIP_RESIDUALS_): Change definition, factor conditional definitions.
	(JITTER_INSTRUCTION_EPILOG_) [minimal-threading || no-threading]: Whitespace.
	(JITTER_COMPUTED_GOTO_TRIVIAL): Rename to JITTER_COMPUTED_GOTO_FALLBACK, comment,
	whitespace.
	(JITTER_COMPUTED_GOTO): Remove, now replaced by machine-generated code with one
	definition per VM instruction, according to relocatability.
	(JITTER_COMPUTED_GOTO_IN_ASM) [switch]: Explicitly undefine out of defensiveness.
	(JITTER_SET_IP): Comment, whitespace.
	(JITTER_BRANCH_TO_IP, JITTER_BRANCH, _JITTER_PROCEDURE_PROLOG): Change definition.
	Change every use of jitter_state_runtime._jitter_link to
	jitter_state_runtime._jitter_link.label.
	(_JITTER_BRANCH_AND_LINK, _JITTER_BRANCH_AND_LINK_WITH_FALLBACK)
	(_JITTER_BRANCH_AND_LINK_WITH, _JITTER_BRANCH_AND_LINK_WITH_NATIVE): New macros.
	(_JITTER_RETURN_COMMON): Rename to _JITTER_RETURN_FALLBACK.
	(JITTER_RETURN): Remove.
	(_JITTER_RETURN): New macro.

	* jitter/jitter-fast-branch.h: Change comments.  Whitespace.
	(_JITTER_BRANCH_FAST_AND_LINK_INTERNAL) [every case]: Rename to
	_JITTER_BRANCH_FAST_AND_LINK.  Redefine.

	* jitter/jitter-instruction.h (struct jitter_meta_instruction): New field
	branching.

	* jitter/jitter-patch-in.h: Update use of renamed identifiers.

	* jitter/jitter-replicate.c (jitter_replicate_program): Change definition.

	* jitter/jitter-specialize.h (enum jitter_specialized_instruction_opcode):
	Rename case jitter_specialized_instruction_opcode_UNREACHABLE2 to
	jitter_specialized_instruction_opcode_PRETENDTOJUMPANYWHERE.

	* jitter/jitter-string.h (jitter_escape_string): New prototype.
	* jitter/jitter-string.c: Update included headers.
	(jitter_escape_string): New function.

	* jitter/jitter-vm.h: Cosmetic CPP conditional changes.  Comment changes.
	Whitespace.
	(struct jitter_vm) [defect-replacement]: New fields defect_no,
	defective_specialized_instruction_no,
	defective_call_related_specialized_instruction_no,
	replacement_specialized_instruction_no.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions): New
	forward declaration.
	(jitterc_emit_non_instruction_stack_operation_definitions): New function.
	(jitterc_emit_meta_instructions): Change.
	(jitterc_emit_specialized_instructions_h): Change comment.  Change definition.
	(jitterc_emit_worst_case_defect_table): Rename to
	jitterc_emit_worst_case_replacement_table.  Change definition.
	(jitterc_emit_call_related_specialized_instruction_ids): New function.
	(jitterc_emit_specializer): Change definition.
	(jitterc_emit_stack_operation_definition): Change comment.  Add argument.  Change
	definition.
	(jitterc_emit_stack_operation_definition): Change definition.
	(jitterc_emit_stack_operation_definitions): Add argument.  Change definition.
	(jitterc_emit_stack_initializations): Rename to
	jitterc_emit_stack_initializations_or_resets.  Change definition.
	(jitterc_emit_register_initializations): Change definition.
	(jitterc_emit_state_h, jitterc_emit_state): Change definition.
	(jitterc_open_local_poisoning, jitterc_close_local_poisoning): New functions.
	(jitterc_emit_executor_sarg_definition): Change definition.
	(jitterc_emit_computed_goto_definition): New function.
	(jitterc_emit_executor_fast_branch_definitions): Rename to
	jitterc_emit_executor_definitions, change definition.
	(jitterc_emit_executor_undefinitions): New function.
	(jitterc_emit_executor_ordinary_specialized_instructions): Change definition.
	(jitterc_emit_patch_in_header): Rename to jitterc_emit_asm_headers, change
	definition.
	(jitterc_emit_patch_in_footer): Rename to jitterc_emit_asm_footers, change
	definition.
	(jitterc_emit_executor_special_specialized_instruction_beginning): Change
	definition.
	(jitterc_emit_executor_special_specialized_instruction_end): Change definition.
	(jitterc_emit_executor_special_specialized_instruction): Change definition.
	(jitterc_emit_executor_data_locations): Change definition.
	(jitterc_emit_executor_main_function): Change definition.
	(jitterc_emit_executor_wrappers): Change definition.
	(jitterc_emit_executor): Change definition.
	(jitterc_generate): Change definition.

	* jitterc/jitterc-vm.h (enum jitterc_instruction_argument_kind): New case
	jitterc_instruction_argument_kind_return_address.
	(enum jitterc_returningness, enum jitterc_branchingness): New types.
	(struct jitterc_instruction): New fields branchingness, returningness.
	(jitterc_make_specialized_instruction_argument_return_address): New
	prototype.
	(struct jitterc_specialized_instruction): New field opcode.
	(struct jitterc_specialized_instruction): New field branchingness.
	(jitterc_specialized_instruction_is_call_related): New prototype.
	(struct jitterc_stack): Change comment.
	(struct jitterc_vm): New field state_reset_c_code.
	(jitterc_analyze_vm): Change comment.
	* jitterc/jitterc-vm.c (JITTERC_MAX_ARGUMENT_PRINTED_SIZE_PREFIX_SIZE): New
	macro.
	(MAXIMUM_ARGUMENT_PRINTED_SIZE): Rename to
	JITTERC_MAXIMUM_ARGUMENT_PRINTED_SIZE.
	(jitterc_add_implicit_instruction, jitterc_make_vm): Change definition.
	(jitterc_specialized_instruction_name): Change comment.  Change definition.
	(jitterc_make_instruction): Change definition.
	(jitterc_make_specialized_instruction_argument_return_address): New function.
	(jitterc_make_specialized_instruction_internal): Change comment, arguments,
	definition.
	(jitterc_make_ordinary_specialized_instruction)
	(jitterc_make_special_specialized_instruction): Change definition.
	(jitterc_specialized_instruction_is_call_related): New function.
	(jitterc_generate_replacement_for, jitterc_generate_replacements)
	(jitterc_make_special_specialized_instructions, jitterc_specialize_recursive)
	(jitterc_specialize): Change definitions.

	* jitterc/jitterc.l: Recognise new keywords.

	* jitterc/jitterc.y (STATE_RESET_C, NON_BRANCHING, BRANCHING, RETURNING): New
	tokens.
	(c_section, properties): Update rules.
	(instruction_section): Update action.
	(callingness): Remove rule.
	(branchingness, callrelatedness): New rules.

	* machine/m68k/jitter/machine/jitter-machine.h: Update uses of renamed
	identifiers.
	(JITTER_RETURN, JITTER_BRANCH_AND_LINK_INTERNAL, JITTER_BRANCH_AND_LINK_WITH)
	(_JITTER_BRANCH_FAST_AND_LINK_INTERNAL): Rename to _JITTER_RETURN,
	_JITTER_BRANCH_AND_LINK_NATIVE, _JITTER_BRANCH_AND_LINK_WITH_NATIVE,
	_JITTER_BRANCH_FAST_AND_LINK_NATIVE.  Change definition.
	* machine/mips/jitter/machine/jitter-machine.h: Likewise.
	* machine/powerpc/jitter/machine/jitter-machine.h: Likewise.
	* machine/riscv/jitter/machine/jitter-machine.h: Likewise.
	* machine/sh/jitter/machine/jitter-machine.h: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine.h: Likewise.

	* templates/vm-main.c (struct vmprefix_main_command_line): New field
	print_defects.
	(enum vmprefix_vm_negative_option): Renumber existing cases.  New case
	vmprefix_vm_negative_option_no_print_defects.
	(enum vmprefix_vm_long_only_option): Renumber existing cases.  New case
	vmprefix_vm_long_only_option_print_defects.
	(parse_opt): Handle new options.
	(vmprefix_main_option_specification): Add new options.
	(main): Change definition.

	* templates/vm.h (vmprefix_state_initialize_with_slow_registers)
	(vmprefix_state_make, vmprefix_state_make_with_slow_registers)
	(vmprefix_state_destroy, vmprefix_state_reset): New prototypes.
	(vmprefix_defect_print_summary): New prototype.
	(vmprefix_worst_case_defect_table, vmprefix_defect_table): Rename extern
	variables to vmprefix_worst_case_replacement_table, vmprefix_replacement_table.
	(vmprefix_call_related_specialized_instruction_ids)
	(vmprefix_call_related_specialized_instruction_id_no)
	(vmprefix_specialized_instruction_call_relateds): New extern variables.
	(vmprefix_branch_to_program_point, vmprefix_execute_executable_routine)
	(vmprefix_execute_routine): Change return type to enum vmprefix_exit_status.
	(enum vmprefix_exit_status): New type.
	* templates/vm1.c: Cosmetic CPP conditional changes.
	(vmprefix_check_specialized_instruction_opcode_once): Change definition.
	(vmprefix_worst_case_defect_table, vmprefix_defect_table): Rename variables to
	vmprefix_worst_case_replacement_table, vmprefix_replacement_table.
	(vmprefix_initialize): Change definition.
	(vmprefix_initialize_slow_registers): New function.
	(vmprefix_make_place_for_slow_registers): Change definition.
	(vmprefix_state_initialize, vmprefix_state_make_with_slow_registers)
	(vmprefix_state_make, vmprefix_state_destroy): New definitions.
	(vmprefix_execute_routine): Change return type.
	(vmprefix_defect_print_summary): New function.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Recognise new syntax.

	* doc/jitter.texi: Documentation.

2021-04-03  Luca Saiu  <positron@gnu.org>

	configure: unfactor objdump disassembly option check from assembly support check

	Checking for the two features separately allows to have nice disassembly even
	when assembly support is disabled -- for example on mainstream architectures but
	with weak compilers which do not reorder code out of simplicity -- TCC is a good
	example.

	* configure.ac: Unfactor.

2021-04-03  Luca Saiu  <positron@gnu.org>

	add gendocs support

	* bootstrap.conf (gnulib_modules): Add gendocs.
	* configure.ac (JITTER_PACKAGE_BUGREPORT): New substitution.
	* Makefile.am (web-manuals): New rule.

2021-04-03  Luca Saiu  <positron@gnu.org>

	add benchmarking example in C; minor build system change for such examples

	* example-vms/jitterlisp/examples/fibo.c: New file.

	* Makefile.am (EXTRA_PROGRAMS): Add new program
	example-vms/jitterlisp/examples/fibo-in-c.
	(benchmarking-examples): Add dependency on new executable plus another
	which had been forgotten.
	(example_vms_jitterlisp_examples_fibo_in_c_SOURCES): New definition.

2021-04-03  Luca Saiu  <positron@gnu.org>

	update .gitignore

	* .gitignore: Update.

2021-04-03  Luca Saiu  <positron@gnu.org>

	no longer require label address differences to be constant for direct threading

	Do not compute thread sizes as constant expressions, one per element inside a
	static C array: compute them in a for loop at initialisation instead.  No longer
	require differences of labels to be constant expressions in order to enable
	direct-threading.

	This fixes direct-threading on TCC and some other compiler.

	* configure.ac (--enable-dispatch-direct-threading): Change default.  Change
	user help string.

	* jitterc/jitterc-generate.c (jitterc_emit_executor_main_function): Change
	definition of vmprefix_the_thread_sizes in generated code.

2021-04-03  Luca Saiu  <positron@gnu.org>

	configure: enable no-threading by default

	* configure.ac (AC_INIT): Update home page URL.
	Check for attribute no_reorder.
	(ac_cv_have_no_reorder): New shell variable.
	(JITTER_HAVE_ATTRIBUTE_NO_REORDER): New CPP feature macro.
	Checks for attribute returns_nonnull: Use subshell like in new code, to prevent
	-Werror in CFLAGS from breaking the test.
	(minimal-threading): Change user message in AC_MSG_WARN.
	(no-threading): Change default to yes (YES!).  Remove unreliability warning.
	(AC_ARG_ENABLE([dispatch-no-threading]): Change help message.
	(AC_ARG_ENABLE([defect-replacement]): New configure option
	--enable-defect-replacement.
	(jitter_enable_defect_replacement): New shell variable.
	(JITTER_DEFECT_REPLACEMENT_ALL_POSSIBLE, JITTER_DEFECT_REPLACEMENT_NEVER): New
	feature macros.
	(Flags) [! ac_cv_have_no_reorder]: Check for -fno-toplevel-reorder as an
	alternative to the attribute.
	(Flags) [minimal-threading]: Check for -fno-tree-vrp.
	(Flags) [GCC <= 4]: Check for -fno-optimize-sibling-calls.
	(JITTER_PACKAGE_URL): New CPP macro.

	* jitter/jitter-config.h.in (JITTER_DEFECT_REPLACEMENT_ALL_POSSIBLE)
	(JITTER_DEFECT_REPLACEMENT_NEVER): New feature macros.  Add comments.
	(JITTER_PACKAGE_URL): New feature macro.
	(JITTER_HAVE_ATTRIBUTE_NO_REORDER): New feature macro.

2021-03-07  Luca Saiu  <positron@gnu.org>

	build system: check for TeX, add configure option to disable the hardcopy manual

	This makes Jitter easy to build on systems where texi2dvi or texi2pdf exists,
	without a usable TeX; in case of an incompatible Texinfo version configuring
	with --disable-hardcopy is a simple solution.

	* configure.ac (--enable-hardcopy): New option.
	(jitter_enable_hardcopy): New shell variable.
	(JITTER_HAVE_TEXI2DVI): Redefine conditional.

	* Makefile.am (missinghardcopytools) [! JITTER_HAVE_TEXI2DVI]: Do not fail.

2021-03-07  Luca Saiu  <positron@gnu.org>

	vm-main template: do not fail fatally if getrlimit fails: print warning instead

	This prevents some trivial fatal failures (and test suite failures) on Haiku.

	* templates/vm-main.c (main): do not fail fatally if getrlimit fails: print a
	warning instead.

2021-03-06  Luca Saiu  <positron@gnu.org>

	minor portability fix

	* example-vms/jitterlisp/jitterlisp-sexpression.h (struct jitterlisp_primitive):
	Use _Alignas instead of alignas.

2021-03-02  Luca Saiu  <positron@gnu.org>

	documentation

	* THANKS: Documentation.

2021-03-02  Luca Saiu  <positron@gnu.org>

	more portability improvements

	Improve portability, preventing compiler warnings or even errors on non-GNU
	platforms.  Thanks to Bruno Haible for his reports.

	* jitter/jitter-hash.c (jitter_hash_bucket_get, jitter_hash_bucket_set)
	(jitter_string_hash_table_get, jitter_word_hash_table_get): Change result type
	from const union to union.
	* jitter/jitter-hash.h (jitter_hash_table_get, jitter_string_hash_table_get)
	(jitter_word_hash_table_get): Likewise.

	* jitter/jitter-stack.h (JITTER_STACK_TOS_PUSH, JITTER_STACK_NTOS_PUSH): Remove
	unnecessary cast to struct, forbidden by some compilers.

2021-03-02  Luca Saiu  <positron@gnu.org>

	change to revert later: do not use #pragma GCC diagnostic

	Instead of making the effort now to fix a portability problem reported by Bruno
	Haible, just temporarily disable the feature for the time being: I will
	re-enable it later by reverting this change set, then apply some changes which
	lie in another branch, and finally fix the problem.

	* jitterc/jitterc-generate.c (jitterc_emit_executor_global_wrappers)
	(jitterc_emit_executor_main_function): Add comments around emitted #pragma GCC
	diagnostic.

2021-03-02  Luca Saiu  <positron@gnu.org>

	example portability: do not use anonymous member unions anonymous member structs

	With his change the Structured example can be compiled by GCC 4.4.7 -- and
	possibly earlier versions.

	* example-vms/structured/structured-code-generator-register.c (struct
	structured_location): Redefine without using anonymous member unions or
	anonymous member structs.  Add comments.
	(STRUCTURED_LOCATION_ANYWHERE, STRUCTURED_LOCATION_NONCONSTANT)
	(STRUCTURED_LOCATION_REGISTER): Use field name in initialisers everywhere,
	since I was already using one in one instance anyway, and with a flat struct
	structured_location this may become more important in the future.

2021-03-02  Luca Saiu  <positron@gnu.org>

	configure: check if #pragma GCC diagnostic works in functions

	Check whether the compiler supports #pragma GCC diagnostic within a function
	body.  This will be used more extensively later, for local identifier poisoning
	in user C code.
	Along with another forthcoming change set, this will enable support for early
	versions of GCC 4.

	Thanks to Bruno Haible for making me aware of the issue.

	* configure: New test. (ac_cv_have_pragma_gcc_diagnostic_in_functions): New
	shell variable.
	(JITTER_HAVE_PRAGMA_GCC_DIAGNOSTIC_IN_FUNCTIONS): New CPP feature macro.

	* jitter/jitter-config.h.in (JITTER_HAVE_PRAGMA_GCC_DIAGNOSTIC_IN_FUNCTIONS):
	New CPP feature macro.

2021-03-01  Luca Saiu  <positron@gnu.org>

	fix README misspelling

	Thanks to Antonio Diaz Diaz for reporting.

	* README: Fix typo.

2021-02-26  Luca Saiu  <positron@gnu.org>

	fix sub-package mode bug: do not overwrite super-package ChangeLog on dist

	The dist-hook-changelog rule, when building from git, forces regeneration of a
	ChangeLog file and copies it into the dist directory.  This is all reasonable,
	except that in sub-package mode I have to make sure that the dist directory is
	the sub-package's; I was not copying ChangeLog into the appropriate
	subdirectory.  Do it.  Seize the occasion for some minor Makefile.am cleanup.
	Define a new substitution JITTER_SUBPACKAGE_SUBDIRECTORY , which might be useful
	in similar situations in the future.

	(Sorry for replacing poke 1.0's ChangeLog file in the released tarball with
	Jitter's.)

	* configure.ac (JITTER_SUBPACKAGE_SUBDIRECTORY): New substitution.  Add comment.

	* Makefile.am (dist-hook-changelog) [JITTER_BUILDING_FROM_GIT]: Split into two
	new rules...
	(regenerate-changelog) [JITTER_BUILDING_FROM_GIT]: ...New rule, derived from the
	first part of the old dist-hook-changelog with JITTER_BUILDING_FROM_GIT.
	(dist-hook-changelog): ...New unconditional rule, derived from the second part
	of the old dist-hook-changelog with JITTER_BUILDING_FROM_GIT.  Use distdir
	rather than top_distdir , which makes a difference in sub-package mode; this
	fixes the bug.
	(dist-hook-changelog) [! JITTER_BUILDING_FROM_GIT]: Rename to
	regenerate-changelog.
	(ChangeLog): Rename to dist-hook-changelog, so that the rule has no dependencies
	on existing files.
	(changelog): Update renamed dependency.
	(dist-hook-remove-nodist-sources): protect $(distdir) with quotes.
	(dist-hook-git-versioning): Likewise.  Make sure the dist directory is writable.

2021-02-23  Luca Saiu  <positron@gnu.org>

	build system fix

	* configure.ac (JITTER_BUILDING_FROM_GIT): Redefine Automake conditional also
	accepting the existence of a *file* named $(srcdir)/.git , rather than a
	directory: a file will be used when the Jitter source directory is in a git
	submodule.

2021-02-23  Luca Saiu  <positron@gnu.org>

	fix ChangeLog generation dist hook

	* Makefile.am (dist-hook-changelog): Copy ChangeLog to the dist directory.

2021-02-23  Luca Saiu  <positron@gnu.org>

	avoid generating CPP directives (#line) within CPP macro arguments

	Thanks to Bruno Haible for the report.

	* jitterc/jitterc-generate.c (jitterc_emit_hash_line): New argument; add
	comment.  Change callers.

2021-02-23  Luca Saiu  <positron@gnu.org>

	do not delete generated example C files on distclean

	Suggested by Bruno Haible.  Thanks.

	* Makefile (clean-local, distclean-local, maintainer-clean-local): Delete
	generated example C files only on maintainer-clean.

2021-02-23  Luca Saiu  <positron@gnu.org>

	require label address differences to be constant expressions for direct threading

	This should fix TCC and some other compiler supporting GNU C computed goto, but
	where label address subtractions (even for labels in the same function) are not
	considered constant expressions.  The fix is, currently, disabling direct
	threading; in the future it should not be difficult to do better and just
	preventing disassembly.

	* configure.ac (ac_cv_have_gnu_c_constant_label_difference): New shell variable.
	New test defining it.
	(JITTER_HAVE_GNU_C_CONSTANT_LABEL_DIFFERENCE): New CPP feature macro.
	(default) <direct-threading enabling>: Change default to no if
	ac_cv_have_gnu_c_constant_label_difference is not yes.  Update help string.

	* jitter/jitter-config.h.in (JITTER_HAVE_GNU_C_CONSTANT_LABEL_DIFFERENCE): New
	CPP feature macro.

2021-02-23  Luca Saiu  <positron@gnu.org>

	do not unconditionally emit code using the GNU C address-of-label operator

	Thanks to Bruno Haible for his bug report.

	* jitterc/jitterc-generate.c (jitterc_emit_executor_main_function):
	Conditionalise code relying on computed goto.

2021-02-23  Luca Saiu  <positron@gnu.org>

	do not distribute generated file jitter/jitter-config.h

	Thanks to Bruno Haible for his bug report -- which I had initially mistook as
	describing something different from a Jitter bug.  This fix should also be very
	similar to his proposal.

	* Makefile.am (nodist_jitterinclude_HEADERS): New variable.
	(SOURCES_FOR_LIBJITTER, jitterinclude_HEADERS): Remove jitter/jitter-config.h.
	(SOURCES_FOR_LIBJITTER_NODIST): New variable.
	(nodist_jitterinclude_HEADERS): Add to new variable.
	(lib_libjitter__switch__partial_la_SOURCES)
	(lib_libjitter__direct_threading__partial_la_SOURCES)
	(lib_libjitter__minimal_threading__partial_la_SOURCES)
	(lib_libjitter__no_threading__partial_la_SOURCES): Use new variable
	SOURCES_FOR_LIBJITTER_NODIST.  Fill.
	(dist-hook): New dependency dist-hook-remove-nodist-sources.
	(dist-hook-remove-nodist-sources): New rule.

2021-02-22  Luca Saiu  <positron@gnu.org>

	jitterc parser: rename TRUE and FALSE tokens to TRUE_ and FALSE_

	On some obscure configurations TRUE and FALSE are predefined CPP macros.
	What is worse, Bison (I guess for Yacc compatibility) turns token names
	into unprefixed CPP macros as well.  Prevent clashes

	Thanks to Bruno Haible for his bug report.

	* jitterc/jitterc.y (TRUE, FALSE): Rename to TRUE_, FALSE_.  Add comment.
	* jitterc/jitterc.l: Use new tokens.

2021-02-22  Luca Saiu  <positron@gnu.org>

	documentation

	* THANKS: Documentation.

2021-02-22  Luca Saiu  <positron@gnu.org>

	do not explicitly define RANLIB and AR

	My way of doing this was complicated but ultimately incorrect on some unusual
	configurations (thanks to Bruno Haible for his bug report); moreover my
	technique was only beneficial with LTO, which is a bad fit for Jitter anyway.

	* configure (RANLIB, AR): Do not define.  Update comments.

2021-02-21  Luca Saiu  <positron@gnu.org>

	configure: rename generated object file, clean it up correctly

	Bug reported by Bruno Haible.  Thanks!

	* configure.ac (jitter_check_cc_option): Rename test.o to conftest.o, following
	the naming pattern for files generated by Autoconf tests.  Clean it up in case
	it gets in fact generated with success.

2021-02-21  Luca Saiu  <positron@gnu.org>

	build system: avoid grep -q, which is not portable

	Reported by Bruno Haible.  Thanks.

	* bin/jitter-config.in.m4sh: Use grep with redirection instead of grep -q.
	* example-build-systems/structured-simple/configure.ac: Likewise.
	* example-build-systems/structured-with-library/configure.ac: Likewise.
	* tests/jitterlisp/jitterlisp.test.in: Likewise.

2021-02-21  Luca Saiu  <positron@gnu.org>

	documentation changes

	* doc/jitter.texi: Documentation.
	* doc/missing-man-page.1: Documentation.
	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation.

2021-02-21  Luca Saiu  <positron@gnu.org>

	check that the C compiler compiling a VM is the same known by configure

	* jitter/jitter-c-compiler-version.h: New file.

	* jitter/jitter.h: Include new file.
	Change unrelated comment.

	* Makefile.am (SOURCES_FOR_LIBJITTER, jitterinclude_HEADERS): Add new file.

2021-02-21  Luca Saiu  <positron@gnu.org>

	configure: bug fix, update user message

	* configure.ac (test for GCC): use the x$varaible style.  Update user message.
	(test for actual GCC): bug fix: compare "x$GCC" with 'x' instead of an empty
	string.

2021-02-21  Luca Saiu  <positron@gnu.org>

	comment changes

	* jitter/jitter-config.h.in: Comment changes.

2021-02-21  Luca Saiu  <positron@gnu.org>

	jitter-cpp: add local poisoning definitions

	* jitter/jitter-cpp.h: (JITTER_PRAGMA, JITTER_PRAGMA_WARN_WITH_REASON)
	(JITTER_POISONED_IN_ANY_INSTRUCTION, JITTER_POISONED_IN_RELOCATABLE_INSTRUCTION)
	(JITTER_POISONED_IN_NON_BRANCHING_INSTRUCTION, JITTER_FORBIDDEN_EXPRESSION)
	(JITTER_FORBIDDEN_EXPRESSION_IN_RELOCATABLE)
	(JITTER_FORBIDDEN_EXPRESSION_IN_NON_BRANCHING): New macros.
	Comment.

2021-02-21  Luca Saiu  <positron@gnu.org>

	minor optimisation in remainder "overflow" check

	It is possible that the syntax infrastructure introduced here might be
	beneficial for other more important operations as well in the future.

	* jitter/jitter-arithmetic.h (JITTER_WOULD_REMAINDER_NOT_OVERFLOW): New macro.

	* scripts/generate-fast-branches.in.m4sh (emit_overflowing_operations):
	[JITTER_WOULD_${macroized_operation}_NOT_OVERFLOW]
	New macro in generated code,
	_JITTER_C_CONDITION_${macroized_operation}_DOES_NOT_OVERFLOW_.
	Define _JITTER_LOW_LEVEL_BRANCH_FAST_IF_${macroized_operation}_OVERFLOWS_, again
	in generated code, conditionally, using the new macro if available.
	Comments.

2021-02-21  Luca Saiu  <positron@gnu.org>

	introduce macros for word size in chars and in bits

	* jitter/jitter.h (JITTER_WORD_CHAR_NO, JITTER_WORD_BIT_NO): New macros.
	Use new macros.

2021-02-21  Luca Saiu  <positron@gnu.org>

	jitterlisp: minor factoring

	* example-vms/jitterlisp/jitterlisp-sexpression.h
	(JITTERLISP_FIXNUM_MOST_NEGATIVE, JITTERLISP_FIXNUM_MOST_POSITIVE): Redefine.

2021-02-21  Luca Saiu  <positron@gnu.org>

	update --version messages

	Make the messages prettier and move the closed parentheses in the first line to
	make the output easy to parse, following the GNU coding standards.  Update the
	printed copyright year.

2021-02-21  Luca Saiu  <positron@gnu.org>

	improve JitterLisp style file

	* example-vms/jitterlisp/jitterlisp-style.css (jitterlisp-banner)
	(jitterlisp-banner-feature-name, jitterlisp-banner-feature-value)
	(jitterlisp-log): Change whitespace, redefine.
	(jitterlisp-banner-feature-warning): New class

2021-02-21  Luca Saiu  <positron@gnu.org>

	fix incorrect comment

	* jitter/jitter-sections.h (JITTER_ASM_ENTER_SUBSECTION_GAS): Fix comment.

2021-02-21  Luca Saiu  <positron@gnu.org>

	disassemble: minor changes

	* jitter/jitter-disassemble.c (jitter_executable_routine_disassemble): Use
	styling.
	(jitter_executable_routine_disassemble): Update comments.  Omit threading
	label with no-threading dispatch.

2021-02-21  Luca Saiu  <positron@gnu.org>

	improve error message

	* machine/x86_64/jitter/machine/jitter-machine-c.c
	(jitter_patch_load_immediate_to_register): Add information to error message.

2021-02-21  Luca Saiu  <positron@gnu.org>

	patch-in, defects, locations: use basic asm instead of extended asm

	* jitter/jitter-data-locations.h (JITTER_DATA_LOCATION_HEADER)
	(JITTER_DATA_LOCATION_FOOTER): Redefine.

	* jitter/jitter-defect.h (JITTER_DEFECT_HEADER, JITTER_DEFECT_FOOTER): Redefine.

	* jitter/jitter-patch-in.h (JITTER_PATCH_IN_HEADER, JITTER_PATCH_IN_FOOTER):
	Redefine.

2021-02-21  Luca Saiu  <positron@gnu.org>

	fix incorrect comment

	* jitter/jitter-patch-in.c (jitter_make_patch_in_table): Fix incorrect comment.

2021-02-21  Luca Saiu  <positron@gnu.org>

	define replacement for no_reorder or __no_reorder__ where missing

	* jitter/jitter-missing.h [! JITTER_HAVE_ATTRIBUTE_NO_REORDER] (no_reorder)
	[! JITTER_HAVE_ATTRIBUTE_NO_REORDER] (__no_reorder__): New macros.

2021-02-21  Luca Saiu  <positron@gnu.org>

	update Emacs mode

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Recognise new syntax.

2021-02-21  Luca Saiu  <positron@gnu.org>

	minor generate-fast-branches change

	* scripts/generate-fast-branches.in.m4sh (emit_low_level): Emit #undef.

2021-02-21  Luca Saiu  <positron@gnu.org>

	fix fallback division and remainder overflow checks

	* jitter/jitter-arithmetic.h (JITTER_WOULD_DIVIDED_OVERFLOW)
	(JITTER_WOULD_REMAINDER_OVERFLOW): Redefine.

2021-02-21  Luca Saiu  <positron@gnu.org>

	test suite improvements

	* tests/utility.in (jitter_timeout): Change default, update comments.

2021-02-21  Luca Saiu  <positron@gnu.org>

	manual: add stubs

	* doc/jitter.texi: Documentation

2021-02-21  Luca Saiu  <positron@gnu.org>

	build system, jitter-config: minor changes

	* amend-autom4te-output (--help): Use JITTER_PACKAGE_URL and
	JITTER_PACKAGE_BUGREPORT.
	* bin/jitter-config.in.m4sh (version): Update printed copyright notice.
	(--help): Improve user message.

2021-02-21  Luca Saiu  <positron@gnu.org>

	stacks: add backing reset function

	This functionality will be used in a forthcoming change set.  The idea is that
	resetting a VM state can be much faster than finalising and then re-initialising
	an existing state.

	* jitter/jitter-stack.h (jitter_stack_reset_backing): New prototype.

	* jitter/jitter-stack.c (jitter_stack_reset_backing): New function.
	(jitter_stack_initialize_backing): Change, using new function.

2021-02-21  Luca Saiu  <positron@gnu.org>

	documentation

	* doc/jitter.texi: Documentation.

2021-02-21  Luca Saiu  <positron@gnu.org>

	configure: check for "asm inline" GNU C syntax

	* configure.ac: Check for GNU C's asm inline, a relatively recent GCC feature.
	(ac_cv_have_gnu_c_asm_inline): New shell variable.
	(JITTER_HAVE_GNU_C_ASM_INLINE): New CPP feature macro.

	* jitter/jitter-config.h.in (JITTER_HAVE_GNU_C_ASM_INLINE): New feature macro.

2021-02-21  Luca Saiu  <positron@gnu.org>

	cosmetic change

	* jitter/jitter-mutable-routine.c (jitter_mutable_routine_print): Use
	jitter_digit_no_radix_10 instead of a temporary barbaric hack.

2021-02-21  Luca Saiu  <positron@gnu.org>

	add count-primes benchmarking example, in Structured and in C

	* example-vms/structured/examples/count-primes.structured: New file.
	* example-vms/structured/examples/count-primes.c: New file.

	* Makefile.am (EXTRA_PROGRAMS): Add new program.
	(EXTRA_DIST): Distribute new files.
	(example_vms_structured_examples_count_primes_in_c_SOURCES): New definition.

	* example-build-systems/structured-simple/Makefile.am (EXTRA_PROGRAMS): Add new
	program.
	(EXTRA_DIST): Distribute new files.
	(examples_count_primes_in_c_SOURCES): New definition.

	* example-build-systems/structured-with-library/Makefile.am (EXTRA_PROGRAMS):
	Add new program.
	(EXTRA_DIST): Distribute new files.  Distribute structured-style.css, that I had
	forgotten to mention before.
	(examples_count_primes_in_c_SOURCES): New definition.

2021-01-11  Luca Saiu  <positron@gnu.org>

	vm-main template: fix include order

	Thanks to Mohammad-Reza Nabipoor for reporting this bug.

	* templates/vm-main.c: Include jitter/jitter.h before checking for
	JITTER_HAVE_SETRLIMIT, which is defined by a header included by
	jitter/jitter.h.

2021-01-11  Luca Saiu  <positron@gnu.org>

	documentation

	* README: Documentation.
	* THANKS: Documentation.
	* AUTHORS: Documentation.

2021-01-03  Luca Saiu  <positron@gnu.org>

	mips r6: support literal materialisation with addiupc

	* machine/mips/jitter/machine/jitter-machine.h (enum jitter_snippet_to_patch)
	[r6]: New cases jitter_snippet_load_pcrel_address_to_register_0,
	jitter_snippet_load_pcrel_address_to_register_1,
	jitter_snippet_load_pcrel_address_to_register_2,
	jitter_snippet_load_pcrel_address_to_register_3,
	jitter_snippet_load_pcrel_address_to_register_4,
	jitter_snippet_load_pcrel_address_to_register_5.

	* machine/mips/jitter/machine/jitter-machine-assembly.S [r6]
	(LOAD_PCREL_ADDRESS_TO_REGISTER): New macro.
	(load_pcrel_address_to_register_0, load_pcrel_address_to_register_1)
	(load_pcrel_address_to_register_2, load_pcrel_address_to_register_3)
	(load_pcrel_address_to_register_4, load_pcrel_address_to_register_5): New
	snippets.

	* machine/mips/jitter/machine/jitter-machine-c.c (struct
	jitter_mips_21_bit_immediate_instruction): New type.
	(jitter_snippet_for_loading_register) [r6]: Check for a case where to use the new
	snippet.
	(jitter_patch_load_immediate_to_register) [r6]: Patch the new snippet.

2021-01-03  Luca Saiu  <positron@gnu.org>

	factor MIPS assembly

	* machine/mips/jitter/machine/jitter-machine-assembly.S: Fix a comment.
	(LOAD_ZERO_EXTENDED_16BIT_TO_REGISTER, LOAD_SIGN_EXTENDED_16BIT_TO_REGISTER)
	(LOAD_32BIT_TO_REGISTER): New macros.  Use the macros.

2021-01-01  Luca Saiu  <positron@gnu.org>

	documentation stub change

	* example-vms/jitterlisp/doc/jitterlisp.texi: Manual.

2020-12-31  Luca Saiu  <positron@gnu.org>

	profile: change style classes

	Use the following classes to print profiles, as usual with "vmprefix" replaced
	by the name of the VM:
	  - "vmprefix-warning";
	  - "vmprefix-profile-instruction";
	  - "vmprefix-profile-execution-count";
	  - "vmprefix-profile-run-time";
	  - "vmprefix-profile-time-ratio".
	Update example styles.

	* jitter/jitter-profile.h (jitter_profile_print): Change comment, introducing
	the new classes.
	jitter/jitter-profile.c (jitter_profile_print): Use the new classes.

	* example-vms/jitterlisp/jitterlisp-style.css: Define classes.
	* example-vms/structured/structured-style.css: Likewise.
	* example-vms/uninspired/uninspired-style.css: Likewise.

2020-12-31  Luca Saiu  <positron@gnu.org>

	jitterlisp: fix old GC stub code

	* example-vms/jitterlisp/jitterlisp.jitter (primitive-cons-special)
	[JITTER_GC_STUB]: Use JITTER_STATE_RUNTIME_FIELD correctly.  This example was
	written before the new Jitter GC, but the generated code is consistent with it.

2020-12-31  Luca Saiu  <positron@gnu.org>

	change user message

	When printing a profile with profiling disabled, show a warning message advising
	the user to recompile with *both* JITTER_PROFILE_COUNT and JITTER_PROFILE_SAMPLE
	defined, rather than just "one of" them.  Having both macros defined at the same
	time is the most common and most useful scenario.

	* jitter/jitter-profile.c (jitter_profile_print_uninstrumented): Change user
	message.

2020-12-30  Luca Saiu  <positron@gnu.org>

	make profile structs from runtime profile structs even with profiling off

	* jitter/jitter-profile.c (jitter_profile_make_empty): New static function.
	(jitter_profile_from_runtime): Use new function.

2020-12-28  Luca Saiu  <positron@gnu.org>

	fix jitter_dispatch_label bug

	Make sure that a label jitter_dispatch_label is defined with any dispatch, as
	required by profiling instrumentation.

	This fixes a bug reported by José Marchesi.  Thanks José.

	* jitter/jitter-executor.h [JITTER_DISPATCH_SWITCH] (jitter_dispatch_label):
	Remove the macro.  Change it into a real label...

	* jitterc/jitterc-generate.c (jitterc_emit_executor_main_function): ...Here.
	Emit the jitter_dispatch_label label unconditionally, even if it is in fact
	always unreachable.  For switch dispatch make it branch (goto) to the real
	dispatch label.  For the other dispatches it branch (goto *) to ip.
	Of course there is no real threaded ip with no-threading, but as
	usual I fool the compiler into using the base as if it were ip,
	in order to have something with an unpredictable value, and without using any
	other register.

2020-12-28  Luca Saiu  <positron@gnu.org>

	profiling instrumentation: relax ordering requirements

	After the previous fix I understood that, in fact, only sample-profiling
	instrumentation code needs to be executed before user code.  The count-profiling
	part can be freely reordered without affecting the profile accuracy; if this
	achieves better throughput by exploiting instruction-level-parallelism, good.
	In fact allowing this optimisation might better approximate the performance of a
	non-profiled run, which is desirable.

	Require GCC only for sample-profiling: count-profiling (only) is now supported
	with any compiler.

	* jitterc/jitterc-generate.c
	(jitterc_emit_executor_ordinary_specialized_instructions) <profile
	instrumentation>: Move JITTER_PRETEND_TO_POSSIBLY_JUMP_ANYWHERE to the
	conditional checking for sample-profiling.  Move the conditional checking for
	count-profiling after that point.

	* templates/vm1.c: Require GCC only if sample-profiling.

2020-12-28  Luca Saiu  <positron@gnu.org>

	profiling instrumentation ordering bug fix

	* jitterc/jitterc-generate.c
	(jitterc_emit_executor_ordinary_specialized_instructions) <profile
	instrumentation>: Check the definition of either one macro of the other in the
	preprocessor conditional, instead of the same one twice.

2020-12-28  Luca Saiu  <positron@gnu.org>

	fix comment

	* jitter/jitter-profile.h: Comment.

2020-12-28  Luca Saiu  <positron@gnu.org>

	profiling: force instrumentation instructions to be emitted before user code

	This makes profiling numbers more reliable.  It is still not perfect since
	the instrumentation code is still generated after residual materialisation,
	but the numbers will be more accurate now.

	* jitterc/jitterc-generate.c
	(jitterc_emit_executor_ordinary_specialized_instructions) <profiling
	instrumentation>: Emit JITTER_PRETEND_TO_POSSIBLY_JUMP_ANYWHERE when
	profiling, in order to prevent instruction reordering.

	* templates/vm1.c: On profiling, fail with a clear error message if
	not using GCC.  The use of JITTER_PRETEND_TO_POSSIBLY_JUMP_ANYWHERE,
	above, limits portability of profiled code.

2020-12-28  Luca Saiu  <positron@gnu.org>

	make JITTER_PRETEND_TO_POSSIBLY_JUMP_ANYWHERE usable with switch dispatching

	I am about to use it, in the next change set.  The fact that the expansion
	requires GNU C will not be a problem.

	* jitter/jitter-executor.h [JITTER_DISPATCH_SWITCH] (jitter_dispatch_label):
	Define as a macro, for compatibility with the other dispatches, to be used...
	(JITTER_PRETEND_TO_POSSIBLY_JUMP_ANYWHERE): ...Here.  Rename the asm operand
	from jitter_ip to _jitter_ip, to prevent macroexpansion.

2020-12-26  Luca Saiu  <positron@gnu.org>

	introduce sample profiling (incompatible profiling API change)

	No longer recognise JITTER_INSTRUMENT_FOR_PROFILING.  In its place there are now
	two different CPP macros which can be defined independently:
	JITTER_PROFILE_COUNT and JITTER_PROFILE_SAMPLE.  The two kinds of profiling work
	well together, but it is also possible to use only one.
	It is now possible to profile specialised or unspecialised VM instructions.
	Rationalise user API, with the intent of keeping it stable.
	Sample-profiling is still limited to one thread or state at a time; this
	restriction can be lifted later without changing the user API.
	Update examples.

	* configure.ac: Check for function setitimer.  New prefixed CPP feature macro
	JITTER_HAVE_SETITIMER.
	* jitter/jitter-config.h.in: New CPP feature macro JITTER_HAVE_SETITIMER.

	* jitter/jitter-profile.c: Rewrite.
	* jitter/jitter-profile.h: Rewrite.

	* jitter/jitter-vm.h (jitter_vm_instrumentation): New type.
	(struct jitter_vm_configuration): Replace bool field profile_instrumented with
	new enumerate field instrumentation.
	(struct jitter_vm): New field
	specialized_instruction_to_unspecialized_instruction.

	* jitter/jitter-vm.c (jitter_vm_instrumentation_to_string): New function.
	(jitter_print_vm_configuration): Use new function.

	* jitterc/jitterc-generate.c
	(jitterc_emit_specialized_instruction_to_unspecialized_instruction): New
	function.
	(jitterc_emit_executor_ordinary_specialized_instructions): Change profiling
	generated code.
	(jitterc_emit_executor_main_function): Likewise.
	(jitterc_generate): Call new function.

	* templates/vm-main.c (struct vmprefix_main_command_line): Replace bool field
	profile with two bool fields profile_specialized and profile_unspecialized.
	(enum vmprefix_vm_negative_option): Change options.  Renumber.
	(enum vmprefix_vm_long_only_option): Likewise.
	(parse_opt): Handle changed options.
	(static struct argp_option): Change options.
	(the_argp_program_version_hook): Print profiling kind.
	(main): Use new options.

	* templates/vm.h (struct jitter_special_purpose_state_data) Add comments.
	Remove field profile, replaced by profile_runtime, now a struct defined in
	the new jitter/jitter-profile.h.
	(vmprefix_specialized_instruction_to_unspecialized_instruction): New extern
	variable.
	Completely change profiling API.
	(vmprefix_profile_sample_initialize, vmprefix_profile_sample_start)
	(vmprefix_profile_sample_stop): New template prototypes.

	* templates/vm1.c: Whitespace.  Include sys/time.h.
	(vmprefix_vm_the_configuration): Change initialisation.
	(vmprefix_initialize_special_purpose_data)
	(vmprefix_finalize_special_purpose_data): Use new functions.
	(vmprefix_initialize): Initialise new field
	specialized_instruction_to_unspecialized_instruction.
	(vmprefix_timer_frequency, vmprefix_timer_disabled_frequency)
	(vmprefix_sample_profile_state): New static globals.
	(struct vmprefix_sample_profile_state): New types.
	(vmprefix_sigprof_handler, vmprefix_profile_sample_initialize)
	(vmprefix_profile_sample_start, vmprefix_profile_sample_stop): New functions.
	(vmprefix_make_place_for_slow_registers): Temporarily disable sampling if
	enabled on the state owning an Array being resized.
	Rewrite profiling API.

	* example-vms/jitterlisp/jitterlisp-main.c (the_argp_program_version_hook):
	Print the kind of profiling.

	* example-vms/jitterlisp/jitterlisp-primitives.c (primitives): Reimplement
	print_profile_specialized and reset_profileb.
	Implement print_profile_unspecialized.
	(jitterlisp_primitives): Add print-profile-unspecialized.

	* example-vms/structured/structured-main.c (structured_help): Change --help
	text.
	(structured_version): Print the kind of profiling.
	(struct structured_command_line): Replace field profile with two fields
	profile_specialized, profile_unspecialized.
	(structured_initialize_command_line): Change initialised fields.
	(structured_parse_command_line, structured_work): Hanlde changed options.

	* example-vms/jitterlisp/jitterlisp-banner.c: Include header.
	(jitterlisp_interactive_banner): print the kind of enabled profiling.

	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation.

2020-12-26  Luca Saiu  <positron@gnu.org>

	remove now spurious printed warning

	* jitter/jitter-data-locations.c (jitter_dump_data_locations): Do not
	print warning.

2020-12-26  Luca Saiu  <positron@gnu.org>

	minor changes in jitter.h

	* jitter/jitter.h: Include jitter/jitter-arithmetic.h.  Move inclusion of
	jitter/machine/jitter-machine.h down, allowing machine files to use the
	arithmetic header without it being expanded before the definition of
	jitter_int.

2020-12-26  Luca Saiu  <positron@gnu.org>

	arithmetic: add functions to compute the number of digits of an integer number

	* jitter/jitter-arithmetic.h (jitter_digit_no, jitter_digit_no_unsigned)
	(jitter_digit_no_radix_10, jitter_digit_no_unsigned_radix_10): New prototypes.

	* jitter/jitter-arithmetic.c: New file, implementing the functions above.

	* Makefile.am (lib_libjitterutility__partial_la_SOURCES): Add new file

2020-12-25  Luca Saiu  <positron@gnu.org>

	jitterlisp: fix type checking in optimised VM instruction (rewrite target)

	* example-vms/jitterlisp/jitterlisp.jitter (branch-if-register-non-zero): Check
	the register type, not the type of the TOS element.

2020-12-25  Luca Saiu  <positron@gnu.org>

	jitterlisp: fix test suite

	Omit littering warnings when testing with no GC: these interfere with the
	expected output, now that they are on stdout instead of stderr.

	* tests/jitterlisp/jitterlisp.test.in (jitterlisp_case_all_confs): Change
	options to always pass --no-verbose-litter.

2020-12-25  Luca Saiu  <positron@gnu.org>

	emit JITTER_VM_PREFIX_{LOWER,UPPER}_CASE in vm{1,2}.c

	Emit definitions for JITTER_VM_PREFIX_LOWER_CASE and JITTER_VM_PREFIX_UPPER_CASE
	in both vm1.c and vm2.c -- but not in any header, where they would make different
	VMs conflict with one another.

	This fixes switch dispatching, recently broken.

	* jitterc/jitterc-generate.c (jitterc_emit_vm_name_macros): Change argument and
	definition, in order to become the new common logic for...
	(jitterc_emit_vm_name_macros_vm1): New function, completely replacing the old
	definition.
	(jitterc_emit_vm_name_macros_vm2): New function.
	(jitterc_generate): Call both jitterc_emit_vm_name_macros_vm1 and
	jitterc_emit_vm_name_macros_vm2, to add the same code to different generated
	files.

2020-12-25  Luca Saiu  <positron@gnu.org>

	manual changes

	Add manual changes from the gc branch, before adding the garbage collector
	itself.  This will let me work more easily on other changes in the manual.

	* doc/jitter.texi: Documentation.

2020-12-25  Luca Saiu  <positron@gnu.org>

	profiling: print count ratios as well

	Print count ratios as a percentage.  This is still an execution count and does
	not measure the time spent executing each instruction.

	* jitter/jitter-profile.c (jitter_profile_print_specialized): Compute and print
	percentage.

2020-12-24  Luca Saiu  <positron@gnu.org>

	profiling cleanup and improvement

	Make the generated code more rational.  Use it better from examples.  Add
	profiling primitives to JitterLisp.
	Switch from argp_program_version to argp_program_version_hook in all the
	examples, in order to be able to print information about profiling -- doing that
	from a literal string is difficult, and the user must be informed: activating
	profile instrumentation by mistake would lead to surprisingly bad performance.

	In libjitter, do not conditionalise on JITTER_INSTRUMENT_FOR_PROFILING: this
	can be defined independently for each VM, which is important for an installed
	non-sub-package Jitter.

	* jitter/jitter-profile.h (jitter_profile_reset): New prototype.
	Comment changes.

	* jitter/jitter-profile.c (jitter_profile_make): Do not depend on
	JITTER_INSTRUMENT_FOR_PROFILING: use the VM instead.  Use jitter_profile_reset.
	(jitter_profile_reset): New function.
	(jitter_profile_merge_from): Do not depend on JITTER_INSTRUMENT_FOR_PROFILING:
	use the VM instead.
	(struct jitter_profile_item): New field count_as_text.
	(jitter_specialized_instruction_profile_items): Remove function attribute.  Set
	new struct field.
	(jitter_profile_item_compare, jitter_profile_items_sort): Remove funciton
	attribute.
	(JITTER_MAXIMUM_IN_ITEMS): New macro, factoring the next two new functions...
	(jitter_longest_name_in): ...Removed, turned into...:
	(jitter_maximal_name_length_in): ...New function.
	(jitter_maximal_count_width_in): New function.
	(jitter_profile_begin_class): Adapt to the change in struct jitter_vm.
	(jitter_profile_print_uninstrumented): New function, factoring code from...
	(jitter_profile_print_specialized):... Here.  Do not depend on
	JITTER_INSTRUMENT_FOR_PROFILING: use the VM instead.  Improve printed output.

	* jitter/jitter-vm.h (struct jitter_vm_configuration): Change comments.
	(dispatch): Rename field to dispatch_human_readable.
	(profile_instrumented): New field.
	(struct jitter_vm): Change field type for configuration, now a pointer.

	* jitter/jitter-vm.c (jitter_print_vm_configuration): Print profiling
	information.

	* jitter/jitter-data-locations.c (jitter_locations_begin_class): Adapt to the
	change in struct jitter_vm.
	* jitter/jitter-disassemble.c (jitter_disassemble_begin_class): Likewise.
	* jitter/jitter-mutable-routine.c (jitter_mutable_routine_begin_class): Likewise.

	* jitterc/jitterc-generate.c (jitterc_emit_vm_name, jitterc_emit_configuration):
	Remove functions.
	(jitterc_emit_configuration_macros): New function.
	(jitterc_emit_executor_main_function): Emit code checking CPPFLAGS consistency
	with respect to profiling in vm1.c and vm2.c.
	(jitterc_emit_executor, jitterc_generate): Remove calls to removed functions.
	Call new function.

	* templates/vm.h (vmprefix_profile_reset, vmprefix_profile_merge_from_state):
	New prototypes.

	* templates/vm1.c (vmprefix_vm_the_configuration): New static variable, not
	requiring initialisation from a function.
	(vmprefix_vm_configuration): Redefine.
	(vmprefix_initialize_vm_configuration): Remove forward-declaration.
	(vmprefix_initialize): Adapt to the change in struct jitter_vm; just set a
	pointer instead of the struct content, which is now statically initialised.
	(vmprefix_profile_reset, vmprefix_profile_merge_from_state): New functions.

	* templates/vm-main.c (argp_program_version): Remove.
	(the_argp_program_version_hook): New static function.
	(argp_program_version_hook): New variable.

	* example-vms/structured/structured-main.c (structured_help): Use
	structuredvm_vm_configuration.  Print profiling information.  Improve --help.
	(structured_version): Use structuredvm_vm_configuration.  Print profiling
	information.

	* example-vms/jitterlisp/jitterlisp-banner.c
	(jitterlisp_interactive_banner_text): Use a compact-form copyright notice for
	the interactive banner.
	(jitterlisp_interactive_banner): Use jitterlispvm_vm_configuration.  Print
	profiling information.

	* example-vms/jitterlisp/jitterlisp-main.c (argp_program_version): Remove.
	(the_argp_program_version_hook): New static function.
	(argp_program_version_hook): Define

	* example-vms/jitterlisp/jitterlisp-primitives.c (print_profile_specialized)
	(reset_profileb): New functions.
	(jitterlisp_primitives): New primitives print-profile-specialized,
	reset-profile!.

	* example-vms/jitterlisp/doc/jitterlisp.texi: Document new primitives

2020-12-24  Luca Saiu  <positron@gnu.org>

	examples: GNU libtextstyle styles cleanup

	* example-vms/jitterlisp/jitterlisp-style.css: Remove commented-out part.
	* example-vms/structured/structured-style.css (structuredvm-warning): New class.
	Remove commented-out part.
	* example-vms/uninspired/uninspired-style.css (uninspired-warning): New class.
	Remove commented-out part.

2020-12-24  Luca Saiu  <positron@gnu.org>

	add instrumentation support for instruction-count profiling

	Compile with -DJITTER_INSTRUMENT_FOR_PROFILING=1 in your CPPFLAGS in order to
	enable instrumentation for profiling.  Update main program in templates and in the
	structured example, showing how to use the feature.
	Right now only specialised instructions are profiled.  Support for unspecialised
	instructions is not difficult to implement, and will be added later.

	Feature requested by José Marchesi.

	* jitter/jitter-profile.h: New file.
	* jitter/jitter-profile.c: New file.

	* Makefile.am (SOURCES_FOR_LIBJITTER, jitterinclude_HEADERS): Add new files.

	* example-vms/structured/structured-main.c (structured_help): Update help user
	message.
	(struct structured_command_line): New field profile.
	(structured_initialize_command_line): Initialise new field.
	(structured_parse_command_line): Handle new options.
	(structured_work): Print profile if requested by the user.

	* jitterc/jitterc-generate.c
	(jitterc_emit_executor_ordinary_specialized_instructions): Emit instrumentation
	code as a macro call.

	* templates/vm-main.c (struct vmprefix_main_command_line): New field profile.
	(enum vmprefix_vm_negative_option): New case
	vmprefix_vm_negative_option_no_profile.  Renumber following cases.
	(enum vmprefix_vm_negative_option): New case
	vmprefix_vm_long_only_option_profile.  Renumber following cases.
	(parse_opt): Handle new struct field and new options.
	(vmprefix_main_option_specification): New options --profile, --no-profile.
	(main): Print profile if requested by the user.

	* templates/vm.h: Include new header.
	(struct jitter_special_purpose_state_data): New field profile.
	(vmprefix_profile, vmprefix_profile_destroy): New VM compatibility macros.
	(vmprefix_state_profile, vmprefix_profile_make, vmprefix_profile_merge_from)
	(vmprefix_profile_print_specialized): New VM compatibility prototypes.

	* templates/vm1.c (vmprefix_initialize_special_purpose_data): Initialise new
	field.
	(vmprefix_finalize_special_purpose_data): Finalise new field.
	(vmprefix_state_profile, vmprefix_profile_make, vmprefix_profile_merge_from)
	(vmprefix_profile_print_specialized): New functions.

2020-12-22  Luca Saiu  <positron@gnu.org>

	minor jitterlisp changes

	* example-vms/jitterlisp/jitterlisp-allocator.c (jitterlisp_add_litter_block):
	print newline at the end of each allocation logging message.

	* example-vms/jitterlisp/jitterlisp-printer.c (jitterlisp_print_internal)
	(jitterlisp_print_char_star_internal): Flush at the end.

2020-12-22  Luca Saiu  <positron@gnu.org>

	fix jitterlisp bug

	* example-vms/jitterlisp/jitterlisp-operations.h
	(JITTERLISP_REMAINDER_OR_OVERFLOW_) [unsafe]: Use remainder, not division.

2020-12-22  Luca Saiu  <positron@gnu.org>

	jitterlisp allocator: style litter logs

	* example-vms/jitterlisp/jitterlisp-allocator.c: Include header.
	(JITTERLIST_TO_MIB): Rename to JITTERLISP_TO_MIB.
	(jitterlisp_add_litter_block): Use a temporary string, print via the
	styled printer.

2020-12-22  Luca Saiu  <positron@gnu.org>

	structuredvm: fix register initialisation value

	* example-vms/structured/structured.jitter (r): Change c-initial-value.

2020-12-22  Luca Saiu  <positron@gnu.org>

	jitterlispvm: set correct initialisation values for registers and stack elements

	* example-vms/jitterlisp/jitterlisp.jitter (r): Fix c-initial-value, now
	that it is actually used.
	(m, t): Set c-initial-value.

2020-12-22  Luca Saiu  <positron@gnu.org>

	allow The Array to be larger than 4GB

	Allow The Array to take a ridiculously large size, typically because of a
	ridiculously large number of slow registers.

	* jitterc/jitterc-generate.c (jitterc_emit_state_h): Change field type for
	jitter_slow_register_no_per_class, in generated state struct.

	* templates/vm.h (vmprefix_make_place_for_slow_registers): Change argument
	type.

	* templates/vm1.c (vmprefix_make_place_for_slow_registers): Change argument
	type.  Add sign check.  Change index type to make sure it is not restricted
	to 32 bits.  Update disabled debugging messages.

2020-12-22  Luca Saiu  <positron@gnu.org>

	example change

	* example-vms/uninspired/uninspired.jitter (r): Initialise registers with an
	easy to recognise value, for debugging.

2020-12-22  Luca Saiu  <positron@gnu.org>

	initialise VM registers (fast, slow, link) following the user specification

	With this change set every user setting in register classes and stack should
	take effect.

	* jitterc/jitterc-generate.c (jitterc_emit_register_initializations): New
	function.
	(jitterc_emit_state): Call new function.  Update comment.
	(jitterc_emit_register_classes_h): Emit new macro
	VMPREFIX_INITIALIZE_SLOW_REGISTER_RANK in generated code.

	* templates/vm.h: Add comment defining slow register ranks.

	* templates/vm1.c (vmprefix_make_place_for_slow_registers): Rename formal.
	Use new macro VMPREFIX_INITIALIZE_SLOW_REGISTER_RANK.  Cosmetic changes.

2020-12-22  Luca Saiu  <positron@gnu.org>

	initialise stack TOS for TOS-optimised stacks with an initial value

	* jitter/jitter-stack.h  (JITTER_STACK_TOS_INITIALIZE): Add initialisation.
	(JITTER_STACK_NTOS_INITIALIZE): Remove wrong comment.

2020-12-22  Luca Saiu  <positron@gnu.org>

	runtime: accept large stack size

	Accept large stack sizes in stack backings.  Keep more information in
	backing structures, to make it easier to use GNU libsigsegv.

	* jitter/jitter-stack.h (struct jitter_stack_backing): Change field type for
	element_size_in_bytes, element_no, mmapped_memory_size. New fields
	underflow_page_beginning, overflow_page_beginning, page_length_in_bytes.  Add
	comment.
	(jitter_stack_initialize_tos_backing): Change argument types.
	(jitter_stack_initialize_ntos_backing): Likewise.

	* jitter/jitter-stack.c (jitter_stack_backing_update_and_allocate): Change
	local variable types.  Improve comments.  Set new struct fields, use them to
	simplify expressions.
	(jitter_stack_backing_destroy_content): Change argument types.
	(jitter_stack_initialize_backing): Initialise new fields.  Add commented-out
	testing code.
	(jitter_stack_initialize_tos_backing): Change argument types.
	(jitter_stack_initialize_ntos_backing): Likewise.

2020-12-22  Luca Saiu  <positron@gnu.org>

	jitter: accept large stack sizes

	Make sure that it is possible to allocate stack larger than 4GiB on 64-bit
	machines.

	* jitterc/jitterc-vm.h (struct jitterc_stack): Change element_no field type.
	(jitterc_vm_stack_set_element_no): Change argument type.

	* jitterc/jitterc-vm.c (jitterc_vm_stack_set_c_element_type): Update argument
	type.  Add positivity check.

2020-12-22  Luca Saiu  <positron@gnu.org>

	uninspired: make stack element initial value small enough for 32-bit machines

	* example-vms/uninspired/uninspired.jitter (s): Change c-initial-value.

2020-12-22  Luca Saiu  <positron@gnu.org>

	stacks: use fields from the new syntax

	Implement guard pages for overflow and underflow, sizing, initialisation (except
	for the TOS element in the TOS case: that will come later, along with registers.)

	* jitter/jitter-stack.h (struct jitter_stack_backing): Update comments.
	New fields mmapped_memory_size, initial_element_copy, guard_underflow,
	guard_overflow.
	(jitter_stack_initialize_tos_backing): Add arguments.
	(jitter_stack_initialize_ntos_backing): Add arguments.  Factor comment with the
	previous function.
	Remove now obsolete comment.

	* jitter/jitter-stack.c: Add included headers.
	(JITTER_HAVE_PAGE_PERMISSIONS): New feature macro.
	(jitter_saved_page_size): New static variable.
	(jitter_page_size): New static function.
	(jitter_stack_backing_update_and_allocate_trivial): New static function.
	(jitter_stack_backing_destroy_content_trivial): New static function.
	(jitter_stack_backing_update_and_allocate): New static function, conditionally
	defined in two ways.
	(jitter_stack_backing_destroy_content): New static function, conditionally
	defined in two ways.
	(jitter_stack_initialize_backing): Add arguments, change implementation.
	(jitter_stack_initialize_tos_backing): Likewise.
	(jitter_stack_initialize_ntos_backing): Likewise.
	(jitter_stack_finalize_backing): Use the new functionality.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_runtime_declarations): Emit
	code for the new arguments to jitter_stack_initialize_tos_backing and
	jitter_stack_initialize_ntos_backing.

2020-12-22  Luca Saiu  <positron@gnu.org>

	uninspired: use correct initial element value for stack

	* example-vms/uninspired/uninspired.jitter (s): Fix c-initial-value, now
	that it is actually used.

2020-12-22  Luca Saiu  <positron@gnu.org>

	build system: check for mprotect

	* configure.ac (AC_CHECK_FUNCS): Check for mprotect.
	(ac_cv_func_mprotect): New shell variable.
	(JITTER_HAVE_MPROTECT): New CPP feature macro.

	* jitter/jitter-config.h.in (JITTER_HAVE_MPROTECT): New feature macro.

2020-12-22  Luca Saiu  <positron@gnu.org>

	build system: invoke jitter with --no-line when building examples

	* Makefile.am: Change every use of bin/jitter$(EXEEXT).

2020-12-22  Luca Saiu  <positron@gnu.org>

	emacs mode: support new keywords

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Recognize no-guard-underflow
	and no-guard-overflow as keywords.

2020-12-21  Luca Saiu  <positron@gnu.org>

	comment updates and fixes

	* jitter/jitter-mmap.c: Comments.
	* jitter/jitter-mmap.h: Comments.

2020-12-21  Luca Saiu  <positron@gnu.org>

	simple dispatches: make performance better at the cost of disassembly

	Add option --enable-disassemble-friendly-cflags to make disassembly possible
	with simple dispatches.  By default prefer performance to ease of debugging.

	Disable -fno-gcse, which seems to have only a small negative effect in
	direct-threading despite what the GCC documentation says.

	* configure.ac (--enable--disassemble-friendly-cflags): New option.
	(jitter_enable_disassemble_friendly_cflags): New shell variable.
	(flags): Rely on the new variable to choose CFLAGS.  Minor cleanups.
	Comment out the code for -fno-gcse, adding an explanation.

2020-12-20  Luca Saiu  <positron@gnu.org>

	uninspired: do not specialise on literals

	Specialising on literals, even just on 1, to be converted into floating-point,
	may require large constants on some architectures.  Prevent problems due to
	PC-relative loads by not specialising: a materialised residual, not known at
	compile time, is safe to convert to floating-point.

	* example-vms/uninspired/uninspired.jitter (fset): Do not specialise on
	literals.

2020-12-20  Luca Saiu  <positron@gnu.org>

	fix routine printing bug

	* templates/vm-main.c (main): Undo previous change: print routine *after*
	making it executable, to ensure we do not resolve labels twice.

2020-12-20  Luca Saiu  <positron@gnu.org>

	fail cleanly if zero fast registers + no slow registers prevent specialisation

	* jitter/jitter-routine.c (jitter_routine_print): Revert previous change:
	make an executable routine if labels need resolving.

	* jitterc/jitterc-generate.c (jitterc_emit_specializer_recognizers): If
	specialisation is impossible fail cleanly at run time when the instruction
	is used, instead of crashing at generation time.
	(jitterc_emit_specializer): Whitespace.

	* jitterc/jitterc-vm.h (jitterc_vm_register_class_set_fast_register_no): Change
	parameter type, accepting a signed value...
	* jitterc/jitterc-vm.c (jitterc_vm_register_class_set_fast_register_no): But
	check the sign here.  This catches invalid values in the Jitter specification.

2020-12-20  Luca Saiu  <positron@gnu.org>

	syntax change in register-class and stack specifications

	This nicer syntax is easier to extend and will make future changes less annoying
	to the user.  Stack-element and register initialisation, stack underflow and
	overflow guards are not implemented yet; but these feature now all have a syntax
	in the Jitter specification.

	Update all the examples to work with the new syntax.

	* jitterc/jitterc-vm.c (jitterc_valid_register_character): Rename to
	jitterc_valid_register_or_class_character, change comments.
	(jitterc_add_register_class): Remove.
	(jitterc_make_register_class, jitterc_vm_register_class_set_letter)
	(jitterc_vm_register_class_set_long_name, jitterc_vm_register_class_set_c_type)
	(jitterc_vm_register_class_set_c_initial_value)
	(jitterc_vm_register_class_set_fast_register_no)
	(jitterc_vm_register_class_set_use_slow_registers, jitterc_change_case)
	(jitterc_ensure_register_class_or_stack_consistency)
	(jitterc_vm_add_register_class, jitterc_vm_make_stack)
	(jitterc_vm_stack_set_letter, jitterc_vm_stack_set_long_name)
	(jitterc_vm_stack_set_c_element_type, jitterc_vm_stack_set_element_no)
	(jitterc_vm_stack_set_c_initial_value, jitterc_vm_stack_set_implementation)
	(jitterc_vm_stack_set_guard_underflow, jitterc_vm_stack_set_guard_overflow)
	(jitterc_vm_add_stack, jitterc_lookup_stack_or_NULL): New functions.
	(jitterc_make_specialized_instruction_argument_specialized_register): Update
	using renamed fields.
	(jitterc_specialize_recursive): Likewise.  Use new field use_slow_registers
	in register class.
	(jitterc_specialize): Remove use_slow_registers argument.

	* jitterc/jitterc-vm.h: Add prototypes for the functions above.
	(struct jitterc_register_class): Rename character to letter.
	New fields long_name, lower_case_long_name, upper_case_long_name,
	c_initial_value, use_slow_registers.  Change comment.
	(enum jitterc_register_class_): Remove.
	(enum jitterc_stack_optimization): Add case
	jitterc_stack_implementation_uninitialized.
	(struct jitterc_stack): Rename c_element_type to c_type.  New fields
	c_initial_value, long_name, lower_case_long_name, upper_case_long_name,
	element_no, implementation, guard_underflow, guard_overflow.
	(struct jitterc_vm): Remove field use_slow_registers, now handled per-class.

	* jitterc/jitterc.y (%union): New cases register_class, stack.
	(NTOS_STACK, TOS_STACK, REGISTER_LETTER): Remove tokens.
	(FAST_REGISTER_NO, REGISTER_OR_STACK_LETTER, SLOW_REGISTERS, NO_SLOW_REGISTERS)
	(STACK, C_TYPE, C_INITIAL_VALUE, C_ELEMENT_TYPE, LONG_NAME, ELEMENT_NO)
	(NON_TOS_OPTIMIZED, TOS_OPTIMIZED, NO_GUARD_OVERFLOW, NO_GUARD_UNDERFLOW)
	(GUARD_OVERFLOW, GUARD_UNDERFLOW): New tokens.
	(register_letter): Rename typed nonterminal to register_or_stack_letter.
	(register_class_section_contents, stack_section_contents): New typed
	nonterminals.
	(vm_section_conents): Fix typo, rename to vm_section_contents.
	(section): Update rule.
	(register_class_section): Update rule.
	(register_class_section_contents): New rule.
	(stack_section, stack_section_contents): New rules.
	(bare_argument, indentifier): Update renamed token use.

	* jitterc/jitterc.l: Recognise new tokens.

	* jitterc/jitterc-generate.c (jitterc_emit_specializer): In generated code: in
	case of specialisation failure print the meta-instruction opcode.
	(jitterc_emit_stack_operation_definition): Adapt to changes in jitterc-vm.h.
	(jitterc_emit_stack_backing_declarations): Likewise.
	(jitterc_emit_stack_runtime_declarations): Likewise.
	(jitterc_emit_stack_initializations): Likewise.
	(jitterc_emit_stack_finalizations): Likewise.
	(jitterc_emit_state_h): Likewise.
	(jitterc_emit_register_classes_h): Likewise.
	(jitterc_emit_register_access_macros_h): Likewise.
	(jitterc_emit_executor_data_locations): Likewise.
	(jitterc_emit_register_classes): Likewise, and adapt to the changes in
	jitter/jitter-instruction.h.
	(jitterc_emit_executor_main_function): Emit unused attribute for
	jitter_array_base.

	* jitterc/jitterc-main.c (struct jitterc_command_line): Remove field
	slow_registers.
	(enum jitterc_negative_option): Remove case
	jitterc_negative_option_slow_registers.  Renumber other cases.
	(jitterc_option_specification): Remove --no-slow-registers, --slow-registers:
	now each register class allows to individually select that.
	(parse_opt): Remove handling of removed options.
	(main): Remove removed option state from debug printing.  Update
	jitterc_specialize use.

	* jitter/jitter-instruction.h (struct jitter_register_class): New fields
	lower_case_long_name, upper_case_long_name, use_slow_registers.
	Move field register_class_id to the beginning.

	* example-vms/jitterlisp/jitterlisp.jitter (vm): Remove stack definitions from
	here...
	(m) ...To add them here: New stack section...
	(t) ...And here: New stack section.
	(r): Update register class with new fields and new syntax.

	* example-vms/structured/structured.jitter (vm): Remove stack specification...
	(s): ...To add it here.
	(r): Update register class with new fields and new syntax.

	* example-vms/uninspired/uninspired.jitter (vm): Remove stack specifications...
	(s, h): ...To add them here.
	(r, v, c, f): Update register class specifications.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Update keyword syntax.

2020-12-20  Luca Saiu  <positron@gnu.org>

	main program template: print routine before specialisation

	* templates/vm-main.c (main): Print routine before making in executable, if
	printing is requested.  This makes it possible to print routines whose
	specialisation fails, for example for lack of fast registers.

2020-12-20  Luca Saiu  <positron@gnu.org>

	unified routine API: do not make executable routines just for printing

	* jitter/jitter-routine.c (jitter_routine_print): Do not make an executable
	routine just for printing: instead just make sure that label are resolved.  This
	may make debugging easier, and allow to print a routine whose specialisation
	will fail, for example for lack of fast registers.

2020-12-20  Luca Saiu  <positron@gnu.org>

	remove brainfuck example VM

	This example VM had not been tested in a long time.

	* Makefile.am (JITTER_NON_GENERATED_FILES): Remove file.  Remove comments.
	* example-vms/brainfuck/brainfuck.jitter: Remove file.

2020-12-16  Luca Saiu  <positron@gnu.org>

	add support for MIPS release 6; factor and improve the MIPS code

	Support MIPS32r6 as well, including compact branches and overflow checking.
	Improve and factor existing code for pre-r6 MIPS, which remains supported.
	64-bit support still to come.

	* machine/mips/jitter/machine/jitter-machine.h: Change comments.  Include
	jitter/jitter-cpp.h and jitter/jitter-config.h.
	(_JITTER_ASM_DEBUGGING_NOP): Redefine not to use instruction removed in MIPS r6.
	(JITTER_ASM_COMPUTED_GOTO_TEMPLATE): Conditionalise.
	(JITTER_SCRATCH_REGISTER): Redefine.
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_RESULT)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_OTHER1)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_OTHER2)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_RESULT_STRING)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_OTHER1_STRING)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_OTHER2_STRING): New macros.
	(JITTER_BITNESS, JITTER_BITNESS_STRING, JITTER_REVISION_STRING): New macros.
	(JITTER_PATCH_IN_SIZE_FAST_BRANCH_UNCONDITIONAL)
	(JITTER_PATCH_IN_SIZE_FAST_BRANCH_BRANCH_AND_LINK): Conditionalise.
	(JITTER_PATCH_IN_CASE_FAST_BRANCH_R6_CONDITIONAL_ZERO) [r6]
	(JITTER_PATCH_IN_CASE_FAST_BRANCH_R6_CONDITIONAL_OTHER) [r6]: New macros.
	(_JITTER_LOW_LEVEL_BRANCH_FAST_CONDITIONAL_R6_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_UNARY_ZERO_R6_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_UNARY_OTHER_R6_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_BINARY_R6_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_BINARY_BS_R6_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_BINARY_NS_R6_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_ZERO_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONZERO_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NEGATIVE_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONNEGATIVE_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_POSITIVE_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONPOSITIVE_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_EQUAL_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTEQUAL_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_LESS_SIGNED_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_GREATER_SIGNED_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTLESS_SIGNED_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTGREATER_SIGNED_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_LESS_UNSIGNED_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_GREATER_UNSIGNED_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTLESS_UNSIGNED_) [r6]
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTGREATER_UNSIGNED_) [r6]
	(_JITTER_LOW_LEVEL_PLUS_BRANCH_FAST_IF_OVERFLOW_) [r6]
	(_JITTER_LOW_LEVEL_MINUS_BRANCH_FAST_IF_OVERFLOW_) [r6]
	(_JITTER_LOW_LEVEL_TIMES_BRANCH_FAST_IF_OVERFLOW_) [r6]: New macros.
	(_JITTER_LOW_LEVEL_TIMES_BRANCH_FAST_IF_OVERFLOW_) [! r6]: Cosmetic changes.
	Use new temporary register macros.
	(JITTER_ASM_RETURN): New macro, conditionalised.
	(JITTER_RETURN): Use new macro.
	(JITTER_ASM_BRANCH_AND_LINK_VIA_REGISTER_TEMPLATE): New macro, conditionalised.
	(JITTER_BRANCH_AND_LINK_INTERNAL): Cosmetic changes.
	Use new temporary register macros.
	(JITTER_ASM_BRANCH_AND_LINK_WITH_TEMPLATE): New macro, conditionalised.
	(JITTER_BRANCH_AND_LINK_WITH): Use new macro.
	(enum jitter_snippet_to_patch): Add new snippets.  Conditionalise old snippets.

	* machine/mips/jitter/machine/jitter-machine-c.c: Add comments.  Include
	jitter/jitter-arithmetic.h.
	(JITTER_MIPS_INSTRUCTION_STRUCT): New macro, defined twice, once if
	JITTER_WORDS_BIGENDIAN is defined, once if not.
	(struct jitter_mips_16_bit_immediate_instruction)
	(struct jitter_mips_28_bit_branch_instruction)
	(struct jitter_mips_18_bit_branch_instruction)
	(struct jitter_mips_23_bit_branch_instruction): New struct definitions.
	(jitter_patch_load_immediate_to_register): Use the new struct instead of
	memcpy conditionalised on endianness.
	(jitter_snippet_for_patch_in): Support new patch-ins on r6.  Conditionalise.
	(jitter_patch_patch_in): Support new patch-ins.  Factor.
	(JITTER_R6_CASE_): New macro.

	* machine/mips/jitter/machine/jitter-machine-assembly.S: Add comments.
	[JITTER_HOST_CPU_IS_MIPS_R6_OR_LATER]: Add .set arch.
	(branch_unconditional_28bit_compact, branch_and_link_28bit_compact)
	(branch_conditional_compact_18bit_offset)
	(branch_conditional_compact_23bit_offset): New snippets.
	Conditionalise.

	* configure.ac (jitter_gcc_print_cpp_macro): New shell function.
	(yacc): Avoid grep -q.
	(JITTER_HOST_OS_IS_GNU): Avoid grep -q.
	(default_host_cpu) [mips|mipsel]: New shell variables jitter_bitness,
	jitter_mips_release, jitter_mips_architecture.  New CPP feature macro
	JITTER_HOST_CPU_IS_MIPS_R6_OR_LATER.  Redefine jitter_objdump_options.

	* jitter/jitter-config.h.in (JITTER_HOST_CPU_IS_MIPS_R6_OR_LATER): New CPP
	feature macro.

	* jitter/jitter-fast-branch.h: Add comment.

2020-12-16  Luca Saiu  <positron@gnu.org>

	update comment

	Update comment with respect to the current port status.

	* jitter/jitter-fast-branch.h: Comment.

2020-12-16  Luca Saiu  <positron@gnu.org>

	risc-v: add overflow-checking multiplication

	* machine/riscv/jitter/machine/jitter-machine.h
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_RESULT)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_OTHER1)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_OTHER2)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_RESULT_STRING)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_OTHER1_STRING)
	(JITTER_NON_RESERVED_REGISTER_TEMPORARY_OTHER2_STRING)
	(_JITTER_LOW_LEVEL_TIMES_BRANCH_FAST_IF_OVERFLOW_): New macros.

2020-12-14  Luca Saiu  <positron@gnu.org>

	fix the previous fix

	Reported by José Marchesi.

	* jitter/jitter-executor.h (JITTER_STATE_BACKING): Move the definition,
	replacing it with a comment; from here...

	* jitterc/jitterc-generate.c: ...To generated code, here.
	(jitterc_emit_executor_general_purpose_state_data_access_macros): New
	function.
	(jitterc_emit_executor): Call the new function.

2020-12-14  Luca Saiu  <positron@gnu.org>

	fix JITTER_STATE_BACKING bug

	Reported by José Marchesi.

	* jitter/jitter-executor.h (JITTER_STATE_BACKING): Use vmprefix instead of the VM
	name for the JitterLisp VM.

2020-12-14  Luca Saiu  <positron@gnu.org>

	print a better error message when the user forgets to destroy VM states

	* templates/vm1.c (vmprefix_finalize): Replace assertions with checks, failing
	with an error message intended for the user.

2020-12-14  Luca Saiu  <positron@gnu.org>

	rephrase comment again

	* example-vms/uninspired/examples/signals.vm: Comment.

2020-12-14  Luca Saiu  <positron@gnu.org>

	comment punctuation

	* example-vms/uninspired/examples/signals.vm: Comment.

2020-12-14  Luca Saiu  <positron@gnu.org>

	rephrase example comment

	* example-vms/uninspired/examples/signals.vm: Comment.

2020-12-12  Luca Saiu  <positron@gnu.org>

	jitterlisp: user message change

	* example-vms/jitterlisp/jitterlisp-banner.c (jitterlisp_interactive_banner):
	Change printed string literal.

2020-12-10  Luca Saiu  <positron@gnu.org>

	jitterlisp improvements: use Jitter's nice fast branches at least in my own VMs

	Use Jitter's fast branches for type checking and overflow checking in JitterLisp.

	* example-vms/jitterlisp/jitterlisp-operations.h: Improve comments, also
	removing some obsolete notes for myself.
	Fail at compile time if JITTERLISP_FIXNUM_TAG is not zero.
	(JITTERLISP_EXP_FF_F_PLUS_OR_MINUS): Whitespace.
	(JITTERLISP_PLUS_OR_OVERFLOW_, JITTERLISP_MINUS_OR_OVERFLOW_)
	(JITTERLISP_TIMES_OR_OVERFLOW_, JITTERLISP_DIVIDED_OR_OVERFLOW_)
	(JITTERLISP_QUOTIENT_OR_OVERFLOW_, JITTERLISP_REMAINDER_OR_OVERFLOW_)
	(JITTERLISP_1PLUS_OR_OVERFLOW_, JITTERLISP_1MINUS_OR_OVERFLOW_)
	(JITTERLISP_2TIMES_OR_OVERFLOW_, JITTERLISP_NEGATE_OR_OVERFLOW_): New macros,
	each defined conditionally in two ways: one if JITTERLISP_UNSAFE is defined, in
	which case do nothing more than their non-overflow-checking variants; and
	one actually using Jitter's primitives, used if JITTERLISP_UNSAFE is not
	defined.

	* example-vms/jitterlisp/jitterlisp-sexpression.h: Add comments.  Fix whitespace.
	(JITTERLISP_BRANCH_FAST_UNLESS_HAS_TAG, JITTERLISP_BRANCH_FAST_UNLESS_ANYTHING):
	New macros.
	(JITTERLISP_BRANCH_FAST_UNLESS_FIXNUM, JITTERLISP_BRANCH_FAST_UNLESS_CONS)
	(JITTERLISP_BRANCH_FAST_UNLESS_BOX): New macros.

	* example-vms/jitterlisp/jitterlisp.jitter (JITTERLISPVM_CHECK_NEXT_TYPE_):
	Rewrite using the new macros, remove old commented-out tentative code.
	(primitive-one-plus, primitive-one-minus, primitive-two-times, primitive-negate):
	(primitive-primordial-minus, primitive-primordial-times)
	(primitive-primordial-divided, primitive-quotient, primitive-remainder): Use the
	the new macros above.
	(primitive-primordial-plus): Use the new macros above.  Remove old commented-out
	experiments.

2020-12-10  Luca Saiu  <positron@gnu.org>

	add m68k port

	Add complete no-threading support for m68k including every kind of fast
	branch, procedures, integer overflow.  The generated code with GCC 10.2.0
	looks very good.

	* machine/m68k/jitter/machine/jitter-machine.h: New file.
	* machine/m68k/jitter/machine/jitter-machine-c.c: New file.
	* machine/m68k/jitter/machine/jitter-machine-assembly.S: New file.

	* Makefile.am (EXTRA_DIST): Add new files.
	* configure.ac [$default_host_cpu == m68k*]: Define JITTER_ASSEMBLY_SUBDIRECTORY
	and jitter_has_host_assembly.

2020-12-10  Luca Saiu  <positron@gnu.org>

	mips, powerpc: make operate-and-branch-on-overflow code potentially more robust

	Add inline asm statements that may or may not be needed for correctness.  I have
	never seen problems with this code, but I am more confident in this new solution
	which appears correct and costs no extra instructions at execution time; using
	inline asm with operands as ordering constraint is something I should document.
	Add comments.

	* machine/mips/jitter/machine/jitter-machine.h
	(_JITTER_LOW_LEVEL_TIMES_BRANCH_FAST_IF_OVERFLOW_): Add inline asm statement with
	comment.

	* machine/powerpc/jitter/machine/jitter-machine.h
	(_JITTER_LOW_LEVEL_OPERATION_BRANCH_FAST_IF_OVERFLOW_): Likewise.

2020-12-10  Luca Saiu  <positron@gnu.org>

	uninspired: minor fixes, add example

	* example-vms/uninspired/uninspired.jitter (set-pending): Add comment.
	(handle-pending): Remove instruction, splitting its logic into ...
	(clear-pending): ...This new instruction, and ...
	(print-pending-signals): ...This new instruction.
	(safe-point): Add comment.

	* example-vms/uninspired/examples/signals.vm: New file, based on an old mailing
	list post of mine containing an example for José.  Make it into a clean example
	with comments..

	* Makefile.am (EXTRA_DIST): Distribute example.

2020-12-10  Luca Saiu  <positron@gnu.org>

	structured: make the register code generator the default

	The register code generator is much more impressive, and the user should see it
	first.

	* example-vms/structured/structured-main.c (structured_help): Update help text.
	(structured_initialize_command_line): Change the default.

2020-12-10  Luca Saiu  <positron@gnu.org>

	structured: add --print-routine option and make others more consistent

	Add --print-routine as an alias for --print.  Add negative options
	--no-print and --no-print-routine.

	The behaviour of --print-routine and --no-print-routine is now consistent across
	the hand-written structured main program and the automatically-generated drivers
	such as uninspired.

	* example-vms/structured/structured-main.c (structured_help): Update help.
	(structured_parse_command_line): Handle new options.

2020-12-10  Luca Saiu  <positron@gnu.org>

	jitterlisp: rename dump-data-locations to print-locations

	* example-vms/jitterlisp/jitterlisp-primitives.c (dump_data_locations): Rename
	primitive function to print_locations.
	(jitterlisp_primitives): Update primitive procedure struct fields containing name
	and function pointer.

	* example-vms/jitterlisp/doc/jitterlisp.texi: Update manual.

2020-12-10  Luca Saiu  <positron@gnu.org>

	make _JITTER_PROCEDURE_PROLOG take a mutable union instead of a pointer

	This makes the architecture-specific code easier to read and write; a void *
	pointer could always be dereferenced by mistake.

	There are no changes visible to the user.

	* jitterc/jitterc-generate.c
	(jitterc_emit_executor_ordinary_specialized_instructions): Change the generated
	code, by making _jitter_the_link a non-const union.  Pass the union to the macro
	in the generated code.  Update the cast.

	* jitter/jitter-executor.h (__JITTER_PROCEDURE_PROLOG_COMMON): Adapt the
	default implementations, for every dispatch.

	* machine/mips/jitter/machine/jitter-machine.h (_JITTER_PROCEDURE_PROLOG): Adapt.
	* machine/powerpc/jitter/machine/jitter-machine.h (_JITTER_PROCEDURE_PROLOG):
	Adapt.
	* machine/riscv/jitter/machine/jitter-machine.h (_JITTER_PROCEDURE_PROLOG):
	Adapt.
	* machine/sh/jitter/machine/jitter-machine.h (_JITTER_PROCEDURE_PROLOG):
	Adapt.
	* machine/sparc/jitter/machine/jitter-machine.h: Add fixme comment in
	commented-out code.
	* machine/x86_64/jitter/machine/jitter-machine.h (_JITTER_PROCEDURE_PROLOG)
	[JITTER_BRANCH_AND_LINK_NO_CALL]: Adapt.
	(_JITTER_PROCEDURE_PROLOG) [! JITTER_BRANCH_AND_LINK_NO_CALL]: Adapt.  Change
	the comment, which was likely wrong.

2020-12-10  Luca Saiu  <positron@gnu.org>

	disassemble: work around a qemu problem, mostly for my own testing

	* jitter/jitter-disassemble.c (jitter_disassemble_range_objdump): Return success
	when pclose fails with error ENOSYS.  This is benign, and the underlying
	operation in fact succeeds.
	I began observing this misbehaviour on riscv32 (not riscv64) when running under
	qemu-user since updating qemu from git, yesterday.  No other architecture I test
	is affected.  I may want to remove this workaround in the future.

2020-12-10  Luca Saiu  <positron@gnu.org>

	comment fixes

	* machine/powerpc/jitter/machine/jitter-machine.h
	(_JITTER_BRANCH_FAST_AND_LINK_INTERNAL): Fix comment, which was not adapted from
	the original written for RISC-V.

	* machine/riscv/jitter/machine/jitter-machine.h (_JITTER_PROCEDURE_PROLOG):
	Likewise, originally adapted from MIPS.

2020-12-10  Luca Saiu  <positron@gnu.org>

	comment fix

	* example-vms/structured/structured-main.c: Fill comment.

2020-12-10  Luca Saiu  <positron@gnu.org>

	fix structured bug: do not crash on --dry-run

	* example-vms/structured/structured-main.c: Only unpin the routine if it was
	actually made executable.

2020-12-10  Luca Saiu  <positron@gnu.org>

	simplify jitter/jitter-patch.c

	Make the entire file expand to nothing if the dispatch is not no-threading.
	Remove useless functions, now replaced by better macros from
	jitter-arithmetic.h.  Use macros instead of the deleted functions.

	* jitter/jitter-patch.c: Change comments.  Conditionalise on
	JITTER_DISPATCH_NO_THREADING instead of on JITTER_ENABLE_ASSEMBLY.
	(jitter_is_negative, jitter_fits_in_bits_zero_extended)
	(jitter_fits_in_bits_sign_extended): Remove functions.

	* jitter/jitter-patch.h: Change comments.  Conditionalise on
	JITTER_DISPATCH_NO_THREADING instead of on JITTER_ENABLE_ASSEMBLY.
	(jitter_is_negative, jitter_fits_in_bits_zero_extended)
	(jitter_fits_in_bits_sign_extended): Remove prototypes.

	* machine/mips/jitter/machine/jitter-machine-c.c: Include
	jitter/jitter-arithmetic.h .  Use macros from jitter-arithmetic.h instead of the
	now removed functions.  Add casts to make signedness explicit.
	* machine/powerpc/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/riscv/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/sh/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/sparc/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine-c.c: Likewise.

2020-12-10  Luca Saiu  <positron@gnu.org>

	fix comment

	* scripts/generate-fast-branches.in.m4sh: change ~(0 & y) to !(0 & y) in a
	comment.  The code had been fixed, but an old comment had survived.

2020-12-10  Luca Saiu  <positron@gnu.org>

	add uninspired instructions

	* example-vms/uninspired/uninspired.jitter (bltu, bgtu, bleu, bgeu): New VM
	instructions.

2020-12-10  Luca Saiu  <positron@gnu.org>

	fix JITTER_FITS_IN_BITS_ZERO_EXTENDED

	* jitter/jitter-arithmetic.h (JITTER_FITS_IN_BITS_ZERO_EXTENDED): Fix my
	previous correction, which introduced a bug: of course a range check for signed
	numbers should involve JITTER_MAXIMUM_UNSIGNED_IN_BITS (bit_no) and not its
	signed counterpart JITTER_MOST_POSITIVE_SIGNED_IN_BITS (bit_no).

2020-12-10  Luca Saiu  <positron@gnu.org>

	manual: minor changes

	* doc/jitter.texi: Documentation.

2020-11-30  Luca Saiu  <positron@gnu.org>

	fix fast branch generation bug

	* scripts/generate-fast-branches.in.m4sh (for_each_relation): Define new
	variable formals_protected, accessed by the callee through the dynamic scope...
	(emit_low_level): ...Here: use the new variables instead of incorrectly assuming
	that there are always two arguments.

2020-11-30  Luca Saiu  <positron@gnu.org>

	powerpc: add native overflow checks, branch-fast-on-and, branch-fast-on-notand

	* machine/powerpc/jitter/machine/jitter-machine.h [! __ASSEMBLER__]: Include
	headers.
	(JITTER_EXECUTION_BEGINNING_, JITTER_EXECUTION_END_): New macros, introducing...
	(jitter_xer_at_entry, jitter_xer_no_overflow): ...New executor automatic
	variables.
	(_JITTER_LOW_LEVEL_OPERATION_BRANCH_FAST_IF_OVERFLOW_)
	(JITTER_POWERPC_ANDI_IMMEDIATE_CANDIDATE): New internal macros.
	(_JITTER_LOW_LEVEL_PLUS_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_LOW_LEVEL_MINUS_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_LOW_LEVEL_TIMES_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_LOW_LEVEL_DIVIDED_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_LOW_LEVEL_REMAINDER_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_AND_OR_NOTAND_ASM_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_AND_OR_NOTAND_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_AND_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTAND_): New low-level fast branch macros.
	* machine/powerpc/jitter/machine/jitter-machine.h

2020-11-30  Luca Saiu  <positron@gnu.org>

	rename BRANCH_FAST_IF_NAND to BRANCH_FAST_IF_NOTAND, fix semantics, optimise

	The BRANCH_FAST_IF_NAND operation was misnamed and implemented inconsistently,
	with different semantics in C and assembly.  The only correct semantics for this
	condition in the feature's use case (tag checking) is a *logical* negation of a
	bitwise and -- not a bitwise complement of a bitwise and, also called nand.

	Make things coherent, rename for clarity, optimise.

	* scripts/generate-fast-branches.in.m4sh (binaries, binary_definitions)
	(symmetries, oppositions, zerolefts): Rename nand into notand.
	(binary_definitions): Change C definition, changing ~ to !.
	(emit_low_level): Add optimisation with comment.  The operation semantics was
	already the useful one here.  Cosmetic change.

	* example-vms/uninspired/uninspired.jitter (bnand): Rename instruction to
	bnotand.

	* jitter/jitter-executor.h (JITTER_BRANCH_IF_NAND): Rename macro to
	JITTER_BRANCH_IF_NOTAND.

	* jitter/jitter-fast-branch.h
	(JITTER_PATCH_IN_CASE_FAST_BRANCH_CONDITIONAL_NAND): Rename macro to
	JITTER_PATCH_IN_CASE_FAST_BRANCH_CONDITIONAL_NOTAND.

	* jitterc/jitterc-generate.c (jitter_fast_branch_macros): Rename "_IF_NAND"
	element to "_IF_NOTAND".

	* machine/x86_64/jitter/machine/jitter-machine.h
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NAND_): Rename macro to
	_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTAND_.  The implementation was already the
	useful one here.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Rename keyword for font
	lock.

	* doc/jitter.texi: Update documentation stub.

2020-11-30  Luca Saiu  <positron@gnu.org>

	change remaining use of renamed macro

	* jitter/jitter-arithmetic.h (JITTER_FITS_IN_BITS_ZERO_EXTENDED): Update a
	forgotten use JITTER_MAXIMUM_SIGNED_IN_BITS, long since renamed to
	JITTER_MOST_POSITIVE_SIGNED_IN_BITS.

2020-11-30  Luca Saiu  <positron@gnu.org>

	add architecture-specific execution beginning and ending macros

	* jitter/jitter-executor.h (JITTER_EXECUTION_BEGINNING_, JITTER_EXECUTION_END_):
	Add fallback definitions.  Undefine unless dispatch is minimal-threading or
	no-threading.  Add comments.

	* jitterc/jitterc-generate.c (jitterc_emit_executor_main_function): Emit code
	to call new macros.

2020-11-28  Luca Saiu  <positron@gnu.org>

	powerpc improvements

	Introduce native conditional branches and procedures for PowerPC.  It is not
	perfect yet (suboptimal: and, nand, overflow, conditional branches with non-zero
	immediates), but this is already a significant improvement.

	* machine/powerpc/jitter/machine/jitter-machine.h: Whitespace and comments.
	(JITTER_PATCH_IN_SIZE_FAST_BRANCH_BRANCH_AND_LINK)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_CONDITIONAL_UNARY_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_CONDITIONAL_BINARY_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_ZERO_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONZERO_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NEGATIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONNEGATIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_POSITIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONPOSITIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_EQUAL_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTEQUAL_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_LESS_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_GREATER_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTLESS_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTGREATER_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_LESS_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_GREATER_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTLESS_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTGREATER_UNSIGNED_)
	(JITTER_MACHINE_SUPPORTS_PROCEDURE)
	(_JITTER_PROCEDURE_PROLOG)
	(JITTER_RETURN)
	(JITTER_BRANCH_AND_LINK_INTERNAL)
	(JITTER_BRANCH_AND_LINK_WITH)
	(_JITTER_BRANCH_FAST_AND_LINK_INTERNAL): New macros, sometimes modeled after
	RISC-V, MIPS or SH.
	(enum jitter_snippet_to_patch): New cases
	jitter_snippet_jump_and_link_26bit_offset,
	jitter_snippet_jump_conditional_16bit_offset.

	* machine/powerpc/jitter/machine/jitter-machine-c.c
	(jitter_snippet_for_patch_in): Select new snippets.  Factor.
	(jitter_patch_patch_in): Patch new snippets.  Factor.

	* machine/powerpc/jitter/machine/jitter-machine-assembly.S
	(jump_unconditional_26bit_offset_no_link): Define using assembly rather than
	a hexadecimal encoding.
	(jump_and_link_26bit_offset, jump_conditional_16bit_offset): New snippets.

2020-11-28  Luca Saiu  <positron@gnu.org>

	add RISC-V port

	Add a complete RISC-V port, supporting both 32- and 64-bit CPUs.  It is probably
	the cleanest and most beautiful port yet, thanks in part to the architecture's
	own beauty.

	* machine/riscv/jitter/machine/jitter-machine-assembly.S: New file, modeled in
	part on the MIPS version.
	* machine/riscv/jitter/machine/jitter-machine-c.c: New file, modeled in part on
	the MIPS version.
	* machine/riscv/jitter/machine/jitter-machine.h: New file, modeled in part on
	the MIPS version.

	* configure.ac ($default_host_cpu case) [riscv*]: Set jitter_has_host_assembly.
	Set JITTER_ASSEMBLY_SUBDIRECTORY.

	* Makefile.am (EXTRA_DIST): Distribute new files.

2020-11-28  Luca Saiu  <positron@gnu.org>

	sh: distribute architecture-specific files

	Fix a minor build system issue related to distribution.

	* Makefile.am (EXTRA_DIST): Add architecture-specific SH files that I had always
	forgotten to explicitly put here: machine/sh/jitter/machine/jitter-machine.h,
	machine/sh/jitter/machine/jitter-machine-assembly.S,
	machine/sh/jitter/machine/jitter-machine-c.c.

2020-11-28  Luca Saiu  <positron@gnu.org>

	x86_64 improvements

	Add a new way of materialising constants from with %rip-relative lea.  This
	avoids the ugly and huge (64-bit immediate operand) movabsq instruction in some
	cases, particularly when materialising instruction addresses.

	Change assembly code to silence a warning from new binutils.

	* machine/x86_64/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): Add
	suffix in assembly template, silencing a warning from recent binutils.
	(enum jitter_snippet_to_patch): New cases
	jitter_snippet_set_pcrel_address_residual_register_0,
	jitter_snippet_set_pcrel_address_residual_register_1,
	jitter_snippet_set_pcrel_address_residual_register_2,
	jitter_snippet_set_pcrel_address_residual_register_3.

	* machine/x86_64/jitter/machine/jitter-machine-c.c (jitter_distance_from): New
	static function.
	(jitter_snippet_for_loading_register): Select new snippets.
	(jitter_patch_load_immediate_to_register): Patch new snippets.

	* machine/x86_64/jitter/machine/jitter-machine-assembly.S
	(set_pcrel_address_residual_register_0, set_pcrel_address_residual_register_1)
	(set_pcrel_address_residual_register_2, set_pcrel_address_residual_register_3):
	New snippets.

2020-11-28  Luca Saiu  <positron@gnu.org>

	test suite: add more materialisation test cases

	Add more test cases, particularly for stressing constant materialisation on RISC
	architectures.  Someday I should make these files machine-generated.

	* Makefile.am (EXTRA_DIST): Add new files.

	* tests/uninspired/fundamental.test.in: Change test case number.  Add new
	test cases.

	* tests/uninspired/load-0.vm: New file.
	* tests/uninspired/load-10-bit.vm: New file.
	* tests/uninspired/load-11-bit.vm: New file.
	* tests/uninspired/load-12-bit.vm: New file.
	* tests/uninspired/load-13-bit.vm: New file.
	* tests/uninspired/load-143010319.vm: New file.
	* tests/uninspired/load-1450166639.vm: New file.
	* tests/uninspired/load-1625250854.vm: New file.
	* tests/uninspired/load-17-bit.vm: New file.
	* tests/uninspired/load-21-bit.vm: New file.
	* tests/uninspired/load-22-bit.vm: New file.
	* tests/uninspired/load-23-bit.vm: New file.
	* tests/uninspired/load-24-bit.vm: New file.
	* tests/uninspired/load-25-bit.vm: New file.
	* tests/uninspired/load-256167675.vm: New file.
	* tests/uninspired/load-3-bit.vm: New file.
	* tests/uninspired/load-3761490317.vm: New file.
	* tests/uninspired/load-4-bit.vm: New file.
	* tests/uninspired/load-5-bit.vm: New file.
	* tests/uninspired/load-594116.vm: New file.
	* tests/uninspired/load-6-bit.vm: New file.
	* tests/uninspired/load-680185852.vm: New file.
	* tests/uninspired/load-7-bit.vm: New file.
	* tests/uninspired/load-823944.vm: New file.
	* tests/uninspired/load-9-bit.vm: New file.

2020-11-26  Luca Saiu  <positron@gnu.org>

	add uninspired instructions

	I bragged about it on the mailing list, but nobody really knows
	JITTER_BRANCH_FAST_IF_AND and JITTER_BRANCH_FAST_IF_NAND, and why they are
	useful.  Start using them.

	* example-vms/uninspired/uninspired.jitter (band, bnand): New VM instructions.

2020-11-26  Luca Saiu  <positron@gnu.org>

	uninspired: remove useless specialisations

	* example-vms/uninspired/uninspired.jitter (bz, bnz, bpos, bnpos, bneg, bnneg)
	(beq): Remove useless specialisations.

2020-11-26  Luca Saiu  <positron@gnu.org>

	fast branch generation: cast to signed types on sign checking

	It makes no sense to check for negativity on an unsigned argument.  The previous
	definition of high-level conditionals was breaking, for example, bneg in the
	Uninspired VM, even with correct low-level conditionals specified by each
	machine header.

	Add casts in sign-checking operations.

	* scripts/generate-fast-branches.in.m4sh (unary_definitions): Add casts.
	Fix typo.

2020-11-26  Luca Saiu  <positron@gnu.org>

	.gitignore: add private things I keep around in the source directory

2020-11-26  Luca Saiu  <positron@gnu.org>

	uninspired: add overflow-checking arithmetic

	Overflow-checking macros have been in Jitter for a long time, but there were no
	examples using them.

	* example-vms/uninspired/uninspired.jitter (addo, subo, mulo, divo, modo): New
	VM instructions.

2020-11-26  Luca Saiu  <positron@gnu.org>

	add JITTER_WORD_FIELD macro

	* jitter/jitter-bitwise.h (JITTER_WORD_FIELD): New macro.

2020-11-26  Luca Saiu  <positron@gnu.org>

	readline replacement: flush at prompt

	* jitter/jitter-readline.c (jitter_readline) [! JITTER_HAVE_READLINE]: Flush.

2020-11-24  Luca Saiu  <positron@gnu.org>

	grammar fix

	* configure.ac: User message spelling.

2020-11-24  Luca Saiu  <positron@gnu.org>

	move the GNU Readline wrapper to a separate library

	Just like the GNU Libcontextstyle print context, the GNU Readline wrapper or
	replacement library does not belong in the Jitter runtime library.  Move it to a
	separate library, not part of libjitter, and make it easy to link when needed.

	* configure.ac: Remove the old check for Readline.  Add a new check, modeled
	after the check for Libtextstyle; check for Readline's own dependencies without
	polluting LIBS.
	(JITTER_HAVE_GNU_READLINE): Rename CPP feature macro and Automake conditional to
	JITTER_HAVE_READLINE.
	(JITTER_READLINE_LDADD, JITTER_READLINE_LIBADD): New substitutions.
	Cosmetic changes elsewhere.

	* Makefile.am (lib_libjitterutility__partial_la_SOURCES): Remove
	jitter/jitter-readline.c which is no longer a source for this.
	(lib/libjitter-readline.la, non-convenience-lib/libjitter-readline.la): New
	libraries.
	(noinst_DATA): Add lib/libjitter-readline.a.
	(LDADD_FOR_JITTER_LIBTEXTSTYLE): Remove, now replaced by...
	(LDADD_FOR_EXAMPLES): ...This new variable.  Change uses everywhere in the file.
	Cosmetic comment changes elsewhere.

	* autoconf/jitter.m4 (AC_JITTER_CONFIG): New substitutions JITTER_READLINE_LDADD,
	JITTER_READLINE_LIBADD.  Update comments.

	* bin/jitter-config.in.m4sh: Update --help text.
	(--readline-ldadd, --readline-libadd): New options.
	(append_to_output_dispatch_independent, main loop): Handle new options.

	* jitter/jitter-config.h.in (JITTER_HAVE_GNU_READLINE): Rename feature macro to
	JITTER_HAVE_READLINE.  Add comments.  Improve comments elsewhere.

	* jitter/jitter-readline.h: Update comments.

	* jitter/jitter-readline.c: Update comments.  Define JITTER_INTERNAL in order to
	build out of libjitter, with no dispatch macro defined.  Update uses of renamed
	feature macro.

	* example-vms/jitterlisp/jitterlisp-banner.c: Update uses of renamed feature
	macro.
	* example-vms/jitterlisp/jitterlisp.c: Likewise.

2020-11-24  Luca Saiu  <positron@gnu.org>

	jitterlisp: rename example procedure, fixing the test suite

	I had introduced an example procedure defined as a constant, without remembering
	that a procedure is then redefined in the test suite.  Rename.

	* example-vms/jitterlisp/jitterlisp-library.lisp (fibo): Rename procedure to
	fibor.

2020-11-24  Luca Saiu  <positron@gnu.org>

	minor defensiveness change

	* jitter/jitter-print-libtextstyle.c: Do not conditionalise on
	JITTER_HAVE_LIBTEXTSTYLE; instead fail at compile time if compiling this source
	at all on a configuration where libtextstyle is not available.
	(jitter_print_context_libtextstyle_useless_global): Remove.

2020-11-24  Luca Saiu  <positron@gnu.org>

	print contexts and VM: change class names to use dashes instead of underscores

	This is a small incompatible change, which only affects styling.

	After confirming that CSS allows dashes in class names following a discussion
	with José Marchesi I decided to rename every class automatically used by Jittery
	VMs, plus the ones I defined by hand for JitterLisp data, from
	underscores_between_words to dashses-between-words.

	Thanks to José Marchesi for raising the issue.

	Minor related cleanup.

	* jitter/jitter-disassemble.c (jitter_disassemble_begin_class):  Compose class
	name using a dash instead of an underscore after the prefix.  Update comment.
	(jitter_disassemble_print_char, jitter_disassemble_range_objdump)
	(jitter_dump_range): Use new class names.
	* jitter/jitter-disassemble.h (jitter_executable_routine_disassemble): Update
	comment.  Fix minor comment mistake.

	* jitter/jitter-mutable-routine.c (jitter_mutable_routine_begin_class): Compose
	class name using a dash instead of an underscore after the prefix.  Update
	comment.
	* jitter/jitter-mutable-routine.h: Update comment.

	* jitter/jitter-data-locations.c (jitter_destroy_data_locations): Compose class
	name using a dash instead of an underscore after the prefix.  Update comment.

	* example-vms/structured/structured.jitter (structured_literal_printer): Use new
	class name.

	* example-vms/jitterlisp/jitterlisp-printer.c (jitterlisp_begin_class): Build
	class name using "jitterlisp-" as a prefix, rather than "jitterlisp_".
	(jitterlisp_print_recursive): Use new class names.  Remove now redundant uses of
	jitterlisp_begin_class and jitterlisp_end_class, which made sense earlier when
	dealing directly with terminal escape sequences; now classes nest and when one
	ends the previously active one comes back into force.

	* example-vms/uninspired/uninspired-style.css (uninspired_comment)
	(uninspired_punctuation, uninspired_instruction, uninspired_label)
	(uninspired_register, uninspired_number, uninspired_memory_address)
	(uninspired_native_instruction_hex, uninspired_disassembly): Rename classes
	to uninspired-comment, uninspired-punctuation, uninspired-instruction,
	uninspired-label, uninspired-register, uninspired-number,
	uninspired-memory-address, uninspired-native-instruction-hex,
	uninspired-disassembly.
	Reformat the CSS source to be more compact and table-like.

	* example-vms/structured/structured-style.css (structuredvm_comment)
	(structuredvm_punctuation, structuredvm_instruction, structuredvm_label)
	(structuredvm_register, structuredvm_number, structuredvm_memory_address)
	(structuredvm_native_instruction_hex, structuredvm_disassembly): Rename classes
	to structuredvm-comment, structuredvm-punctuation, structuredvm-instruction,
	structuredvm-label, structuredvm-register, structuredvm-number,
	structuredvm-memory-address, structuredvm-native-instruction-hex,
	structuredvm-disassembly.
	Reformat the CSS source to be more compact and table-like.

	* example-vms/jitterlisp/jitterlisp-style.css (jitterlisp_banner)
	(jitterlisp_banner_feature_name, jitterlisp_banner_feature_value)
	(jitterlisp_log, jitterlispvm_invalid, jitterlispvm_error, jitterlisp_error)
	(jitterlisp_invalid, jitterlisp_warning, jitterlispvm_warning)
	(jitterlispvm_comment jitterlispvm_punctuation, jitterlispvm_instruction)
	(jitterlispvm_label jitterlispvm_register, jitterlispvm_number)
	(jitterlispvm_memory_address, jitterlispvm_native_instruction_hex)
	(jitterlispvm_disassembly, jitterlisp_fixnum jitterlisp_unique)
	(jitterlisp_interned_symbol, jitterlisp_uninterned_symbol jitterlisp_character)
	(jitterlisp_cons, jitterlisp_vector, jitterlisp_box jitterlisp_primitive)
	(jitterlisp_closure, jitterlisp_primitive_macro jitterlisp_non_primitive_macro)
	(jitterlisp_ast, jitterlisp_circular): Rename classes to jitterlisp-banner,
	jitterlisp-banner-feature-name, jitterlisp-banner-feature-value,
	jitterlisp-log, jitterlispvm-invalid, jitterlispvm-error, jitterlisp-error,
	jitterlisp-invalid, jitterlisp-warning, jitterlispvm-warning,
	jitterlispvm-comment jitterlispvm-punctuation, jitterlispvm-instruction,
	jitterlispvm-label jitterlispvm-register, jitterlispvm-number,
	jitterlispvm-memory-address, jitterlispvm-native-instruction-hex,
	jitterlispvm-disassembly, jitterlisp-fixnum jitterlisp-unique,
	jitterlisp-interned-symbol, jitterlisp-uninterned-symbol jitterlisp-character,
	jitterlisp-cons, jitterlisp-vector, jitterlisp-box jitterlisp-primitive,
	jitterlisp-closure, jitterlisp-primitive-macro jitterlisp-non-primitive-macro,
	jitterlisp-ast, jitterlisp-circular.
	Reformat the CSS source to be more compact and table-like.

2020-11-23  Luca Saiu  <positron@gnu.org>

	jitterlisp: add a fun testing macro

	* example-vms/jitterlisp/jitterlisp-library.lisp (compiled-lambda): New macro.

2020-11-23  Luca Saiu  <positron@gnu.org>

	jitterlisp: add more example procedures

	These new procedures may turn to be useful later for testing and benchmarking.
	Right now it is all crudely stashed together in the "Scratch" section.

	* example-vms/jitterlisp/jitterlisp-library.lisp (fibo-tr, fibof, fibo): New
	procedures.

2020-11-23  Luca Saiu  <positron@gnu.org>

	change function attribute

	Allow jitter_print_context_make to receive NULL as its second argument (data).

	* jitter/jitter-print.h (jitter_print_context_make): Remove nonnull (2) from
	function attributes.

	Suggested by José Marchesi.

2020-11-23  Luca Saiu  <positron@gnu.org>

	tentative build system bug fix

	* autoconf/jitter.m4 (JITTER_HAVE_LIBTEXTSTYLE): Do not use test when
	executing a script for its exit code.

	Bug reported by José Marchesi.

2020-11-23  Luca Saiu  <positron@gnu.org>

	fix JitterLisp printer bug

	* example-vms/jitterlisp/jitterlisp-printer.c (jitterlisp_print_recursive)
	<invalid>: remove misplaced jitterlisp_end_class call.

2020-11-23  Luca Saiu  <positron@gnu.org>

	default style changes

	* example-vms/jitterlisp/jitterlisp-style.css (.jitterlisp_number): Change
	color.
	* example-vms/structured/structured-style.css (.structuredvm_number): Change
	color.
	* example-vms/uninspired/uninspired-style.css (.uninspired_number): Change
	color.

2020-11-22  Luca Saiu  <positron@gnu.org>

	default to -fvisibility=hidden in sub-package mode on ELF also when using clang

	Notice that clang is less well supported than GCC, and in particular that GCC
	will be the only usable compiler for advanced dispatches.  We discourage the use
	of clang as a non-copylefted project with a copyleft alternative.

	Now we compile by default with -fvisibility=hidden if all of the following are
	true:

	* the binary format is ELF;
	* Jitter is being configured in sub-package mode;
	* the compiler is one of:
	  - GCC version 4 or later;
	  - clang version 2 or later.

	Suggested by Mohammad-Reza Nabipoor.

	* configure.ac (JITTER_HAVE_CLANG, JITTER_CLANG_MAJOR_VERSION)
	(JITTER_CLANG_MINOR_VERSION, JITTER_CLANG_PATCHLEVEL_VERSION)
	(JITTER_CLANG_COMBINED_VERSION): New shell variables and CPP feature macros.
	Check for clang and its version.
	(JITTER_HAVE_ACTUAL_GCC): Define CPP feature macro as 1 instead of yes when
	GCC is found.
	(jitter_enable_visibility_hidden_default): Change the conditions for defining
	to yes, also accepting clang version 2 or later.

	* jitter/jitter-config.h.in (JITTER_HAVE_CLANG, JITTER_CLANG_MAJOR_VERSION)
	(JITTER_CLANG_MINOR_VERSION, JITTER_CLANG_PATCHLEVEL_VERSION)
	(JITTER_CLANG_COMBINED_VERSION): New macros.  Add comments.

2020-11-22  Luca Saiu  <positron@gnu.org>

	introduce print contexts and libjitter-libtextstyle

	Perform output from Jitter functions using an abstract an extensible "print
	context" rather than stdout.  Provide several print context definitions,
	including one wrapping over GNU Libtextstyle; the Libtextstyle wrapper is
	distributed in a separate optional library, not part of the Jitter runtime.

	The new functionality is well explained in the new header jitter/jitter-print.h.

	Update the build system, in particular jitter-config , AC_JITTER and
	AC_JITTER_SUBPACKAGE to make the new wrapper easy to use where available and
	explicitly selected.

	Update the examples to use print contexts.  The usage of Libtextstyle itself in
	the examples is not particularly clean yet, but the current code is enough for
	testing and will not create incompatibilities.

	Minor cleanups elsewhere.

	* jitter/jitter-print.h: New file.
	* jitter/jitter-print.c: New file.
	* jitter/jitter-print-libtextstyle.c: New file.

	* configure.ac (JITTER_NON_INSTALLED_LDFLAGS): Use non-convenience-lib/ rather
	than lib/.
	(--with-libtextstyle): New configure option.
	(jitter_check_libtextstyle, jitter_have_libtextstyle_header)
	(jitter_have_libtextstyle): New shell variables.
	Check for optional dependencies for libtextstyle itslef, only temporarily
	modifying LIBS.
	(JITTER_HAVE_LIBTEXTSTYLE): New CPP feature macro.
	(JITTER_LIBTEXTSTYLE_CPPFLAGS, JITTER_LIBTEXTSTYLE_LDADD)
	(JITTER_LIBTEXTSTYLE_LIBADD): New substitutions.
	(JITTER_HAVE_LIBTEXTSTYLE): New Automake conditional.

	* jitter/jitter-config.h.in (JITTER_HAVE_LIBTEXTSTYLE): New CPP feature macro.
	Add extensive comment explaining how JITTER_WITH_LIBTEXTSTYLE is not defined
	here but must be explicitly supplied on the command line.

	* Makefile.am (lib_libjitterutility__partial_la_SOURCES): Add new sources
	jitter/jitter-print.h, jitter/jitter-print.c.
	Remove unused sources jitter/jitter-print-binary.h jitter/jitter-print-binary.c.
	(jitterinclude_HEADERS): Remove jitter/jitter-print-binary.h, add
	jitter/jitter-print.h.
	(lib/libjitter-libtextstyle.la, non-convenience-lib/libjitter-libtextstyle.la):
	New libraries.
	(AM_CPPFLAGS) [JITTER_HAVE_LIBTEXTSTYLE]: Globally enable the Libtextstyle
	wrapper, inside the Jitter distribution itself.
	(LDADD_FOR_JITTER_LIBTEXTSTYLE): New variable.
	(bin_uninspired__switch_LDADD, bin_uninspired__direct_threading_LDADD)
	(bin_uninspired__minimal_threading_LDADD, bin_uninspired__no_threading_LDADD)
	(bin_structured_LDADD, bin_structuredvm_LDADD)
	(bin_structured__switch_LDADD, bin_structuredvm__switch_LDADD)
	(bin_structured__direct_threading_LDADD)
	(bin_structuredvm__direct_threading_LDADD)
	(bin_structured__minimal_threading_LDADD)
	(bin_structuredvm__minimal_threading_LDADD)
	(bin_structured__no_threading_LDADD, bin_structuredvm__no_threading_LDADD)
	(bin_jitterlisp_LDADD, bin_jitterlisp__switch_LDADD)
	(bin_jitterlisp__direct_threading_LDADD)
	(bin_jitterlisp__minimal_threading_LDADD, bin_jitterlisp__no_threading_LDADD):
	Add $(LDADD_FOR_JITTER_LIBTEXTSTYLE).
	(EXTRA_DIST): Distribute CSS files.
	(documentationdisabledinsubpackagemode) [JITTER_SUBPACKAGE]: New target.
	(info, html, dvi, ps, pdf) [JITTER_SUBPACKAGE]: New targets.

	* bin/jitter-config.in.m4sh (help): Document new options.
	(append_to_output_dispatch_independent): New function.
	(append_to_output): Rename model to dispatch.
	(main loop): Handle new options --have-libtextstyle, --libtextstyle-cppflags,
	--libtextstyle-ldadd, --libtextstyle-libadd.
	User text cosmetic changes everywhere.  Comment cosmetic changes everywhere.

	* autoconf/jitter.m4 (AC_JITTER_CONFIG): Extend comment describing new user
	functionality.  Define new subsitutions JITTER_LIBTEXTSTYLE_CPPFLAGS,
	JITTER_LIBTEXTSTYLE_LDADD, JITTER_LIBTEXTSTYLE_LIBADD and new Automake
	conditional JITTER_HAVE_LIBTEXTSTYLE.

	* jitter/jitter-data-locations.c (jitter_locations_begin_class): New static
	function, not used yet.
	(jitter_dump_data_locations): Change paramteres, now using a print context.

	* jitter/jitter-data-locations.h: Include jitter/jitter-print.h.

	* jitter/jitter-disassemble.c: Include jitter/jitter-print.h.
	(jitter_disassemble_begin_class): New static function.
	(jitter_disassemble_executable_routine): Remove.
	(jitter_disassemble_executable_routine_to): Rename to
	jitter_executable_routine_disassemble, and change API to take a print context
	instead of a FILE *.
	(enum disassemble_objdump_state): New type.
	(jitter_disassemble_print_char): New function, parsing objdump output in order
	to recognise fields and use correct classes.
	(jitter_disassemble_range_objdump): Update arguments.  Use the new function.
	Print with classes.
	(jitter_dump_range, jitter_disassemble_range): Update arguments.
	(jitter_disassemble_show_specialized_instruction): Omit thread address with
	advanced dispatches.
	Update uses.
	* jitter/jitter-disassemble.h: Update prototype following the changes above.
	(jitter_executable_routine_disassemble): Document classes used in the output
	inside a comment.

	* jitter/jitter-instruction.c: Include jitter/jitter-print.h.
	(jitter_default_literal_parameter_printer): Change argument, using a print
	context.
	* jitter/jitter-instruction.h: Likewise.
	(jitter_literal_parameter_printer): Likewise.  Include jitter/jitter-print.h.

	* jitter/jitter-mutable-routine.c (jitter_mutable_routine_begin_class): New
	static function.
	(jitter_mutable_routine_print): Update arguments, now using a print context.
	Remove newlines after labels.  Indent instructions as shallowly as the label
	name length allows, now that they are easy to parse even when crammed into
	little space thanks to colours.
	* jitter/jitter-mutable-routine.h: Include jitter/jitter-print.h.  Do not
	include stdio.h.
	(jitter_mutable_routine_print): Update arguments.  Document classes used in the
	output.

	* jitter/jitter-routine.c: Include jitter/jitter-print.h.
	(jitter_routine_print): Change argument type.
	(jitter_disassemble_routine): Rename to jitter_routine_disassemble.  Change
	argument type.
	* jitter/jitter-routine.h: Include jitter/jitter-print.h.  Do not include
	stdio.h.
	Update prototype according to the changes above.

	* jitter/jitter-specialize.h (struct jitter_executable_routine): New field vm.

	* jitter/jitter-specialize.c (jitter_initialize_executable_routine): Initialise
	new field vm inside struct jitter_executable_routine.

	* templates/vm.h: Include jitter/jitter-print.h.
	(vmprefix_disassemble_executable_routine, vmprefix_disassemble_routine): Remove.
	(vmprefix_disassemble_executable_routine_to, vmprefix_disassemble_routine_to):
	Rename to jitter_executable_routine_disassemble, jitter_routine_disassemble.
	(vmprefix_dump_data_locations): Change argument type, update comment.

	* templates/vm1.c: Include jitter/jitter-print.h.
	(vmprefix_dump_data_locations): Change argument type.
	(vmprefix_initialize): Initialise print subsystem.

	* templates/vm-main.c (main): Initialise a Libtextstyle ostream if
	JITTER_WITH_LIBTEXTSTYLE is defined.  Initialise a print context, using either
	the ostream of stdout.  Update parameters of called functions.  Destroy
	context.  Finalise the ostream if used.

	* example-vms/uninspired/uninspired-style.css: New file.
	* example-vms/structured/structured-style.css: New file.
	* example-vms/jitterlisp/jitterlisp-style.css: New file.

	* example-vms/structured/structured.jitter (structured_literal_printer): Print
	to a print context instead of stdout.  Use number class.

	* example-vms/structured/structured-main.c (structured_work): Initialise a
	Libtextstyle ostream if JITTER_WITH_LIBTEXTSTYLE is defined.  Use a context,
	based on the ostream if JITTER_WITH_LIBTEXTSTYLE and on stdout otherwise, in
	every case.  Update printing, disassembling and location printing calls using
	the new API.

	* example-build-systems/bootstrap: Copy structured-style.css into example source
	directories.

	* example-build-systems/structured-simple/Makefile.am (bin_structured_CPPFLAGS):
	Add $(JITTER_LIBTEXTSTYLE_CPPFLAGS).
	(bin_structured_LDADD): Add $(JITTER_LIBTEXTSTYLE_LDADD).
	(EXTRA_DIST): Distribute structured-style.css.

	* example-build-systems/structured-with-library/Makefile.am
	(AM_CPPFLAGS): Define as $(JITTER_LIBTEXTSTYLE_CPPFLAGS).
	(bin_structured_LDADD): Add (JITTER_LIBTEXTSTYLE_LDADD).
	(EXTRA_DIST): Distribute structured-style.css.

	* example-vms/jitterlisp/jitterlisp.jitter: Use jitterlisp_print instead of
	jitterlisp_print_to_stream as a literal printer.
	(jitterlispvm_error_invalid_primitive_argument_type_friendly): Use new
	functions instead of printing to stdout.

	* example-vms/jitterlisp/jitterlisp-banner.c
	(jitterlisp_interactive_banner_text): Update printed copyright notice.  Remove
	the trailing part, now no longer a literal constant.
	(jitterlisp_interactive_banner_feature): New function.
	(jitterlisp_interactive_banner): Use new function.

	* example-vms/jitterlisp/jitterlisp-printer.c: Change to use print contexts.
	Replace non-portable ANSI terminal sequences with proper uses of print context
	classes.
	(jitterlisp_dynamic_buffer_char_printer_function, jitterlisp_print_pointer)
	(jitterlisp_stream_char_printer_function, jitterlisp_print_long_long)
	(jitterlisp_print_ulong_long_recursive, jitterlisp_print_char)
	(jitterlisp_print_decoration): Remove now obsolete functions.
	(ESC, NOATTR, BOLD, FAINT, ITALIC, UNDERLINE, REVERSE, CROSSOUT, BLACK, WHITE)
	(BLUE, LIGHTBLUE, GREEN, LIGHTGREEN, CYAN, LIGHTCYAN, RED, LIGHTRED, MAGENTA)
	(LIGHTMAGENTA, BROWN, LIGHTGRAY, DARKGRAY, LIGHTBLUE, YELLOW, NOTERMINAL)
	(BOXATTR, CONSATTR, CHARACTERATTR, FIXNUMATTR, INTERNEDSYMBOLATTR)
	(UNINTERNEDSYMBOLATTR, UNIQUEATTR, CLOSUREATTR, NONPRIMITIVEMACROATTR)
	(PRIMITIVEATTR, PRIMITIVEMACROATTR, VECTORATTR, ASTATTR, CIRCULARATTR)
	(ERRORATTR): Remove now obsolete macros.
	(jitterlisp_begin_class, jitterlisp_end_class) : New functions.
	(jitterlisp_print_string, jitterlisp_print_character_name)
	(jitterlisp_print_recursive, jitterlisp_print_cdr, jitterlisp_print_subs)
	(jitterlisp_print_ast, jitterlisp_print): Change parameters, now using a print
	context.
	(jitterlisp_print_to_string): Reimplement using a memory print context.
	Update uses.
	(jitterlisp_print_char_star_internal, jitterlisp_print_internal)
	(jitterlisp_print_error_char_star, jitterlisp_print_error)
	(jitterlisp_log_char_star, jitterlisp_log): New functions.
	(jitterlisp_print_context): New global variable.
	(jitterlisp_printer_initialize, jitterlisp_printer_finalize): New functions.

	* example-vms/jitterlisp/jitterlisp-printer.h: Include jitter/jitter-print.h.
	(jitterlisp_print_context): New extern variable.  Fix prototypes according to
	the changes above.
	(jitterlisp_begin_class, jitterlisp_end_class, jitterlisp_log_char_star)
	(jitterlisp_log, jitterlisp_print_error_char_star, jitterlisp_print_error)
	(jitterlisp_print): New prototypes.
	(jitterlisp_printer_initialize, jitterlisp_printer_finalize): New prototypes.

	* example-vms/jitterlisp/jitterlisp-code-generator.c: Use the new printer
	instead of stdout.
	* example-vms/jitterlisp/jitterlisp-error.c: Likewise.
	* example-vms/jitterlisp/jitterlisp-eval-interpreter.c: Likewise.
	* example-vms/jitterlisp/jitterlisp-macros.c: Likewise.
	* example-vms/jitterlisp/jitterlisp-operations.h: Likewise.
	* example-vms/jitterlisp/jitterlisp-primitives.c: Likewise.
	* example-vms/jitterlisp/jitterlisp-utility.c: Likewise.
	* example-vms/jitterlisp/jitterlisp-run-input.c: Likewise.
	(jitterlisp_repl): Flush print context before prompt.

	* example-vms/jitterlisp/jitterlisp-settings.c (jitterlisp_settings_set_default):
	Change jitterlisp_settings.colorize default.

	* example-vms/jitterlisp/jitterlisp.c (jitterlisp_finalize): Call
	jitterlisp_printer_finalize.  Do not do the same for initalisation.

	* example-vms/jitterlisp/jitterlisp.h: Comments.

	* example-vms/jitterlisp/jitterlisp-main.c (enum jitterlisp_negative_option)
	(enum jitterlisp_long_only_option): Remove jitterlisp_negative_option_no_colorize
	and jitterlisp_long_only_option_colorize, add jitterlisp_negative_option_colorize
	and jitterlisp_long_only_option_no_colorize.
	(jitterlisp_option_specification): Use changed options: --colorize is now the
	default.
	(argp_program_version): Update printed copyright notice.
	(parse_opt): Use changed options.
	(main): Call jitterlisp_printer_initialize.  Update comments.

	* jitter/jitter-print-binary.h: Remove unused source, subsumed by print context
	functionality.
	* jitter/jitter-print-binary.c: Likewise.

	* .gitignore: Add new files to ignore.

2020-11-22  Luca Saiu  <positron@gnu.org>

	jitterlisp: add example procedures

	Add a few example/benchmarking procedures to the Scratch section.

	* example-vms/jitterlisp/jitterlisp-library.lisp (prime?, primes-naif)
	(prime?-knowing, primes): New procedures.

2020-10-26  Luca Saiu  <positron@gnu.org>

	build system: support for -fvisibility=hidden: bug fix in GCC version check

	* configure.ac (jitter_enable_visibility_hidden_default): check
	JITTER_GCC_MAJOR_VERSION, instead of JITTER_GCC_MINOR_VERSION.

2020-10-26  Luca Saiu  <positron@gnu.org>

	build system: support for -fvisibility=hidden: add to dispatch-specific flags

	* configure.ac (JITTER_FLAGS_CFLAGS, JITTER_FLAGS_LDFLAGS)
	[jitter_enable_visibility_hidden]: Use -fvisibility=hidden on every dispatch.

2020-10-26  Luca Saiu  <positron@gnu.org>

	build system: experimental support for -fvisibility=hidden

	As requested by the poke people, I am now tentatively supporting the use of
	-fvisibility=hidden for building Jitter libraries.  I am still hesitant about
	which symbols to explicitly export from Jitter, but this should satisfy their
	requirements for the time being.

	Now -fvisibility=hidden is used by default if all of the following are true:
	* the binary format it ELF;
	* the compiler is GCC, at least version 4;
	* sub-package mode is enabled.

	* configure.ac (--enable-visibility-hidden): New configure option.
	(jitter_enable_visibility_hidden_default, jitter_enable_visibility_hidden): New
	shell variables.
	(JITTER_ENABLE_VISIBILITY_HIDDEN): New Automake conditional.

	* Makefile.am (AM_CFLAGS, AM_LDFLAGS): Explicitly define as empty by default.
	(AM_CFLAGS, AM_LDFLAGS) [JITTER_ENABLE_VISIBILITY_HIDDEN]: Augment with
	-fvisibility=hidden.

2020-08-17  Luca Saiu  <positron@gnu.org>

	change pointer set to word set

	Now that finalisation works in the new garbage collector, I can also support
	large objects as in-heap objects containing pointers to malloc-allocated
	buffers; such buffers in their turn can point to heap objects.  The presence of
	out-of-heap-to-heap pointers breaks the current remembered set, which stores
	object *field* pointers assuming that it is possible, from such pointers, to
	discover which block contains the object.

	The solution is changing the remembered set data, storing tagged object pointers
	(always in-heap) rather than fields.

	This change unfortunately breaks my clever optimisation in the pointer set data
	structure (hashes computing offsets rather than indices, with h1 being the
	identity function); the "pointer set" will in fact no longer be a pointer set,
	but rather a set of generic words, with no requirement on low bits.

	Give up on the clever opitmisation and change the pointer set into a word set:
	use unsigned word-sized elements, rather than pointers, as keys.

	* jitter/jitter-pointer-set.h: Rename to jitter/jitter-word-set.h.
	* jitter/jitter-pointer-set.c: Rename to jitter/jitter-word-set.c.

	* Makefile.am: Update references to files as specified above.

	* jitter/jitter-word-set.h (pointer_type): Remove type definition.  Remove
	now redundant casts to the type.
	(struct jitter_pointer_set): Rename to struct jitter_word_set.
	(JITTER_WORD_SET_HASH1_CHAR_STAR_OFFSET): Redefine, now left-shifting.
	(JITTER_WORD_SET_HASH2_CHAR_STAR_OFFSET): Cosmetic change.
	(JITTER_POINTER_SET_INITIAL_ELEMENT_NO)
	(JITTER_POINTER_SET_RECIPROCAL_FILL_RATIO, JITTER_POINTER_SET_UNUSED)
	(JITTER_POINTER_SET_DELETED, JITTER_POINTER_SET_HASH1_CHAR_STAR_OFFSET)
	(JITTER_POINTER_SET_HASH2_CHAR_STAR_OFFSET, jitter_pointer_set_initialize)
	(jitter_pointer_set_finalize, jitter_pointer_set_clear)
	(jitter_pointer_set_clear_and_minimize)
	(jitter_pointer_set_clear_and_possibly_minimize, jitter_pointer_set_rebuild)
	(jitter_pointer_set_rebuild_and_minimize)
	(jitter_pointer_set_rebuild_and_possibly_minimize, JITTER_POINTER_SET_ADD_NEW)
	(JITTER_POINTER_SET_ADD_UNIQUE, JITTER_POINTER_SET_SET_HAS)
	(JITTER_POINTER_SET_REMOVE, JITTER_POINTER_SET_SET_PROBE_NO)
	(jitter_pointer_set_print, jitter_pointer_set_print_statistics)
	(JITTER_POINTER_SET_IS_USED, JITTER_POINTER_SET_IS_UNUSED)
	(JITTER_POINTER_SET_IS_VALID, JITTER_POINTER_SET_ELEMENT_NO_TO_LIMIT)
	(JITTER_POINTER_SET_ACCESS_BUFFER, JITTER_POINTER_SET_MATCHES)
	(JITTER_POINTER_SET_BUFFER_SEARCH, JITTER_POINTER_SET_RESIZE_IF_NEEDED)
	(JITTER_POINTER_SET_SEARCH, jitter_pointer_set_double): Rename to
	JITTER_WORD_SET_INITIAL_ELEMENT_NO, JITTER_WORD_SET_RECIPROCAL_FILL_RATIO,
	JITTER_WORD_SET_UNUSED, JITTER_WORD_SET_DELETED,
	JITTER_WORD_SET_HASH1_CHAR_STAR_OFFSET, JITTER_WORD_SET_HASH2_CHAR_STAR_OFFSET,
	jitter_word_set_initialize, jitter_word_set_finalize, jitter_word_set_clear,
	jitter_word_set_clear_and_minimize,
	jitter_word_set_clear_and_possibly_minimize, jitter_word_set_rebuild,
	jitter_word_set_rebuild_and_minimize,
	jitter_word_set_rebuild_and_possibly_minimize, JITTER_WORD_SET_ADD_NEW,
	JITTER_WORD_SET_ADD_UNIQUE, JITTER_WORD_SET_SET_HAS,
	JITTER_WORD_SET_REMOVE, JITTER_WORD_SET_SET_PROBE_NO,
	jitter_word_set_print, jitter_word_set_print_statistics,
	JITTER_WORD_SET_IS_USED, JITTER_WORD_SET_IS_UNUSED,
	JITTER_WORD_SET_IS_VALID, JITTER_WORD_SET_ELEMENT_NO_TO_LIMIT,
	JITTER_WORD_SET_ACCESS_BUFFER, JITTER_WORD_SET_MATCHES,
	JITTER_WORD_SET_BUFFER_SEARCH, JITTER_WORD_SET_RESIZE_IF_NEEDED,
	JITTER_WORD_SET_SEARCH, jitter_word_set_double.
	Update comments.

	* jitter/jitter-word-set.c: Rename definitions and uses as specified above.
	Adapt casts to no longer existing key type as specified above.
	(jitter_pointer_set_empty_buffer, jitter_pointer_set_allocate_and_empty_buffer)
	(jitter_pointer_set_double, jitter_pointer_set_sanity_checks)
	(jitter_pointer_set_print_possibly_with_statistics, jitter_pointer_set_test0)
	(jitter_pointer_set_test1, jitter_pointer_set_test2, jitter_pointer_set_test3)
	(jitter_pointer_set_test4, jitter_pointer_set_test5)
	(jitter_pointer_set_test_hash, jitter_pointer_set_pointer_set_test): Rename to
	jitter_word_set_empty_buffer, jitter_word_set_allocate_and_empty_buffer
	jitter_word_set_double, jitter_word_set_sanity_checks
	jitter_word_set_print_possibly_with_statistics, jitter_word_set_test0
	jitter_word_set_test1, jitter_word_set_test2, jitter_word_set_test3
	jitter_word_set_test4, jitter_word_set_test5
	jitter_word_set_test_hash, jitter_word_set_word_set_test.

2020-08-17  Luca Saiu  <positron@gnu.org>

	jitter-bitwise: fix macro definition

	* jitter/jitter-bitwise.h (JITTER_POINTER_NON_MISALIGNMENT_BITS_MASK):
	Fix definition, using JITTER_POINTER_MISALIGNMENT_BITS_MASK rather than
	a macro which was renamed long ago.

2020-08-16  Luca Saiu  <positron@gnu.org>

	jitter-time: trivial changes

	* jitter/jitter-time.h (jitter_point_in_time_make): Add malloc attribute.
	Rephrase comment.

2020-08-12  Luca Saiu  <positron@gnu.org>

	comment change

	* jitter/jitter-aligned-block.c (jitter_aligned_block_make)
	[JITTER_ALIGNED_BLOCK_USE_MMAP]: Fix comment.

2020-08-12  Luca Saiu  <positron@gnu.org>

	aligned block comment and error message fixes, following better understanding

	I am slightly embarrassed to admit that I have just discovered how munmap works
	on addresses aligned to a size which is *double* the page size; I had always
	thought that single page alignment sufficed, but the GNU libc documentation for
	unmap is correct, speaking as it does of "an even number of pages" -- not in the
	sense of "round".

	I confirm that munmap sometimes fails on GNU/Linux x86_64 when unmapping 4KB
	sub-ranges from 8KB mappings: this is what led me to discover the problem.
	Using 8KB sub-ranges within 16KB mappings completely solves the issue.

	Change comments and error messages to reflect this new understanding.  No
	functional changes.

	* jitter/jitter-aligned-block.c (jitter_aligned_block_make): Change comments
	and jitter_fatal error messages.

	* jitter/jitter-aligned-block.h: Change comment.  Recommend a larger minimum
	size.

2020-08-07  Luca Saiu  <positron@gnu.org>

	comment change

	* jitter/jitter-list.h (JITTER_LIST_UNLINK_NONEMPTY): Improve comment.

2020-08-07  Luca Saiu  <positron@gnu.org>

	add offsetof replacement where missing

	* configure.ac: Add offsetof test.
	(ac_cv_have_offsetof): New shell variable.
	(JITTER_HAVE_OFFSETOF): New CPP feature macro.

	* jitter/jitter-config.h.in (JITTER_HAVE_OFFSETOF): New CPP feature macro.

	* jitter/jitter-missing.h: Include stddef.h , making the predefined offsetof
	always accessible if available.
	[! JITTER_HAVE_OFFSETOF] (offsetof): New macro.

2020-07-22  Luca Saiu  <positron@gnu.org>

	aligned block: fix the aligned_alloc version following Bruno Haible's bug report

	Bruno let me know that aligned_alloc requires the allocated size to be a
	multiple of the required alignment.  This restriction is explicitly documented
	in the GNU libc manual, but had escaped me.

	Round the size up: the aligned block implementation based on aligned_alloc will
	be a little more wasteful (in theory: in practice the alignment is the same as
	the size, the way I use aligned blocks from the garbage collector), but now
	correct.

	When deciding on which implementation to use, give priority to posix_memalign
	which lacks this restriction.  mmap is still preferable to either.

	* jitter/jitter-aligned-block.c (jitter_aligned_block_make)
	[JITTER_ALIGNED_BLOCK_USE_ALIGNED_ALLOC]: Round size_in_bytes up.  Add comment.

	* jitter/jitter-aligned-block.h (JITTER_ALIGNED_BLOCK_USE_ALIGNED_ALLOC)
	[JITTER_HAVE_ALIGNED_ALLOC]: Reorder CPP conditional cases: in light of the
	restriction, prefer posix_memalign to aligned_alloc.
	Update the comment explaining the various implementations, mentioning the
	problem.

	Thanks to Bruno Haible for his bug report.

2020-07-22  Luca Saiu  <positron@gnu.org>

	aligned block: comment and whitespace changes

	* jitter/jitter-aligned-block.c (jitter_aligned_block_make): Fix whitespace.
	Comment grammar fixes and improvements.

	* jitter/jitter-aligned-block.h (Introduction): Improve comment.
	Fix comment grammar elsewhere.

2020-07-19  Luca Saiu  <positron@gnu.org>

	aligned block improvements

	Add an implementation based on mmap, automatically preferred on configurations
	supporting anonymous mappings.  Minor changes and factoring.  No incompatible
	API changes.

	* jitter/jitter-aligned-block.h [JITTER_HAVE_MMAP_ANONYMOUS]: New feature macro
	JITTER_ALIGNED_BLOCK_USE_MMAP.  Uncomment conditional code defining a feature
	macro.
	Remove commented out testing feature macro definitions.
	(struct jitter_aligned_block) [JITTER_ALIGNED_BLOCK_USE_MMAP]: New fields
	initial_map, mapping_length_in_bytes.
	(jitter_aligned_block_make): Add function attributes.
	Expand and improve comments.  Whitespace.

	* jitter/jitter-aligned-block.c: Make jitter/jitter-bitwise.h inclusion
	unconditional.
	[JITTER_ALIGNED_BLOCK_USE_MMAP]: Conditionally
	include mmap headers.
	(jitter_aligned_block_make) [JITTER_ALIGNED_BLOCK_USE_MMAP]: Add new conditional
	code.
	(jitter_aligned_block_make) [JITTER_ALIGNED_BLOCK_USE_FALLBACL]: Factor with new
	code.
	(jitter_aligned_block_destroy) [JITTER_ALIGNED_BLOCK_USE_MMAP]: Add conditional
	code.
	Whitespace.

2020-07-19  Luca Saiu  <positron@gnu.org>

	new list macros

	Add a few macros used in the new garbage collector.

	* jitter/jitter-list.h (_JITTER_TWO_LISTS_LOCALS_): New internal macro.
	(JITTER_LIST_PREPEND_LIST, JITTER_LIST_APPEND_LIST): New macros.

2020-07-19  Luca Saiu  <positron@gnu.org>

	jitter-config: user output change

	* bin/jitter-config.in.m4sh (version): Update copyright years in output.

2020-07-09  Luca Saiu  <positron@gnu.org>

	jitterlisp: minor documentation changes

	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation.

2020-07-09  Luca Saiu  <positron@gnu.org>

	add arithmetic macro JITTER_QUOTIENT_CEILING

	* jitter/jitter-arithmetic.h (JITTER_QUOTIENT_CEILING): New macro.

2020-07-05  Luca Saiu  <positron@gnu.org>

	aligned block: comment changes

	* jitter/jitter-aligned-block.h: Comment changes

2020-07-05  Luca Saiu  <positron@gnu.org>

	minor cosmetic changes in comments

	Thanks to Galex, who reported a few typos.

	* jitter/jitter-pointer-set.h: Fix comment typos and occasional other mistakes.
	Improve comments.  No code changes.

	* THANKS: Documentation.

2020-06-28  Luca Saiu  <positron@gnu.org>

	aligned block support

	Add a general facility for allocating and freeing blocks on the heap with a
	given alignment.

	* jitter/jitter-aligned-block.c: New file.

	* jitter/jitter-aligned-block.h: New file.

	* configure.ac: Check for functions aligned_alloc posix_memalign.
	(ac_cv_func_aligned_alloc, ac_cv_func_posix_memalign): New shell variables.
	(JITTER_HAVE_ALIGNED_ALLOC, JITTER_HAVE_POSIX_MEMALIGN): New CPP feature macros.

	jitter/jitter-config.h.in (JITTER_HAVE_ALIGNED_ALLOC)
	(JITTER_HAVE_POSIX_MEMALIGN): New CPP feature macros.

	* Makefile.am (lib_libjitterutility__partial_la_SOURCES): Add new sources
	jitter/jitter-aligned-block.h and jitter/jitter-aligned-block.c.
	(jitterinclude_HEADERS): Add new header jitter/jitter-aligned-block.h.

2020-06-27  Luca Saiu  <positron@gnu.org>

	pointer set: minor changes

	* jitter/jitter-pointer-set.h (JITTER_POINTER_SET_BUFFER_SEARCH): Improve
	comment.

	* jitter/jitter-pointer-set.c (jitter_pointer_set_test1b): New test function.

2020-06-23  Luca Saiu  <positron@gnu.org>

	pointer set optimisation and factoring

	Improve hash access macro after looking at generated assembly.

	* jitter/jitter-pointer-set.h (JITTER_POINTER_SET_BUFFER_SEARCH): Heavily
	rewrite, unrolling the first loop iteration and using __builtin_expect.
	Change type meaning for the third parameter.
	(JITTER_POINTER_SET_MATCHES): New macro.
	(JITTER_POINTER_SET_IS_UNUSED): New macro.
	(JITTER_POINTER_SET_RECIPROCAL_FILL_RATIO): Improve Emacs Lisp code in comment.
	Adapt every JITTER_POINTER_SET_BUFFER_SEARCH caller.

	* jitter/jitter-pointer-set.c (test0, test1, test2, test3, test4, test5)
	(test_hash, pointer_set_test): Rename to jitter_pointer_set_test0,
	jitter_pointer_set_test1, jitter_pointer_set_test2, jitter_pointer_set_test3,
	jitter_pointer_set_test4, jitter_pointer_set_test5, jitter_pointer_set_test_hash,
	jitter_pointer_set_pointer_set_test.
	(jitter_pointer_set_test1): Remove normalisation into bool.
	Adapt JITTER_POINTER_SET_BUFFER_SEARCH caller.

2020-06-21  Luca Saiu  <positron@gnu.org>

	documentation files

	* AUTHORS: Documentation.
	* README: Documentation.
	* THANKS: Documentation.

2020-06-21  Luca Saiu  <positron@gnu.org>

	add pointer set data structure

	This is a very efficient specialised hash table intended for the remembered set
	in the new generational garbage collector.

	Thanks to Bruno Haible for his intelligent suggestions.

	* jitter/jitter-pointer-set.c: New file.
	* jitter/jitter-pointer-set.h: New file.

	* Makefile.am (lib_libjitterutility__partial_la_SOURCES): Add new sources.
	(jitterinclude_HEADERS): Add new header.

	* THANKS: Documentation file.

2020-06-16  Luca Saiu  <positron@gnu.org>

	build system and portability changes

	* configure.ac: Add GCC builtin checks.
	(ac_cv_have_gcc_builtin_constant_p, ac_cv_have_gcc_builtin_expect): New shell
	variables.
	(JITTER_HAVE_GCC_BUILTIN_CONSTANT_P, JITTER_HAVE_GCC_BUILTIN_EXPECT): New CPP
	feature macros.
	(host CPU conditional): reorganise.
	(JITTER_HOST_CPU_IS_AARCH64, JITTER_HOST_CPU_IS_ALPHA, JITTER_HOST_CPU_IS_ARM)
	(JITTER_HOST_CPU_IS_I386, JITTER_HOST_CPU_IS_M68K, JITTER_HOST_CPU_IS_MIPS)
	(JITTER_HOST_CPU_IS_PARISC, JITTER_HOST_CPU_IS_POWERPC, JITTER_HOST_CPU_IS_RISCV)
	(JITTER_HOST_CPU_IS_S390, JITTER_HOST_CPU_IS_SH, JITTER_HOST_CPU_IS_SPARC)
	(JITTER_HOST_CPU_IS_X86_64): New CPP feature macros.

	* jitter/jitter-config.h.in: Comment improvements.
	(JITTER_HOST_CPU_IS_AARCH64, JITTER_HOST_CPU_IS_ALPHA, JITTER_HOST_CPU_IS_ARM)
	(JITTER_HOST_CPU_IS_I386, JITTER_HOST_CPU_IS_M68K, JITTER_HOST_CPU_IS_MIPS)
	(JITTER_HOST_CPU_IS_PARISC, JITTER_HOST_CPU_IS_POWERPC, JITTER_HOST_CPU_IS_RISCV)
	(JITTER_HOST_CPU_IS_S390, JITTER_HOST_CPU_IS_SH, JITTER_HOST_CPU_IS_SPARC)
	(JITTER_HOST_CPU_IS_X86_64): New CPP feature macros.
	(JITTER_HAVE_GCC_BUILTIN_CONSTANT_P, JITTER_HAVE_GCC_BUILTIN_EXPECT): New CPP
	feature macros.

	* jitter/jitter-missing.h (__builtin_constant_p)
	[! JITTER_HAVE_GCC_BUILTIN_CONSTANT_P]: New compatibility macro.
	(__builtin_expect_p) [! JITTER_HAVE_GCC_BUILTIN_EXPECT_P]: New compatibility
	macro.
	Comment change.

	* jitter/jitter.h: Comment change.

	* THANKS: Documentation.

2020-06-15  Luca Saiu  <positron@gnu.org>

	add bitwise macros, configure checks, CPP feature macros

	* configure.ac (AC_CHECK_ALIGNOF): Check alignment of types.
	(ac_cv_alignof_void_p, ac_cv_alignof_void_p_p, ac_cv_alignof_short)
	(ac_cv_alignof_int, ac_cv_alignof_long, ac_cv_alignof_long_long)
	(ac_cv_alignof_float, ac_cv_alignof_double, ac_cv_alignof_long_double): New
	shell variables.
	(JITTER_ALIGNOF_VOID_P, JITTER_ALIGNOF_VOID_P_P, JITTER_ALIGNOF_SHORT)
	(JITTER_ALIGNOF_INT, JITTER_ALIGNOF_LONG, JITTER_ALIGNOF_LONG_LONG)
	(JITTER_ALIGNOF_FLOAT, JITTER_ALIGNOF_DOUBLE, JITTER_ALIGNOF_LONG_DOUBLE): New
	CPP feature macros.

	* jitter/jitter-bitwise.h (JITTER_POINTER_MISALIGNMENT_BITS_MASK)
	(JITTER_POINTER_MISALIGNMENT_BITS_MASK)
	(JITTER_POINTER_NON_MISALIGNMENT_BITS_MASK)
	(JITTER_UNMISALIGNED_BITMASK): New macros.  Add comments.

	* jitter/jitter-config.h.in: Here.
	(JITTER_ALIGNOF_VOID_P, JITTER_ALIGNOF_VOID_P_P, JITTER_ALIGNOF_SHORT)
	(JITTER_ALIGNOF_INT, JITTER_ALIGNOF_LONG, JITTER_ALIGNOF_LONG_LONG)
	(JITTER_ALIGNOF_FLOAT, JITTER_ALIGNOF_DOUBLE, JITTER_ALIGNOF_LONG_DOUBLE): New
	CPP feature macros.
	(JITTER_WORDS_BIGENDIAN): Move CPP feature macro to new "Data representation"
	section.  Comments.

2020-06-14  Luca Saiu  <positron@gnu.org>

	expand dynamic buffer macro API

	Add macros as alternative to functions that I found to be hotspots in the
	new garbage collector.

	* jitter/jitter-dynamic-buffer.h (JITTER_DYNAMIC_BUFFER_TO_CONST_POINTER)
	(JITTER_DYNAMIC_BUFFER_TO_CONST_VOID_POINTER)
	(JITTER_DYNAMIC_BUFFER_FIRST_UNUSED_CHAR_CONST): New macros.
	Add FIXME comments elsewhere in the file.

2020-06-13  Luca Saiu  <positron@gnu.org>

	trivial configure fix

	* configure.ac (AC_CHECK_DECLS): Remove comma at the end of symbol list.

2020-06-13  Luca Saiu  <positron@gnu.org>

	minor portability improvements

	Prevent GCC warnings in obscure situations.

	* jitter/jitter-heap-debug.c (jitter_heap_debug_block): Cast to jitter_uint
	instead of to unsigned long.  This is useful on non-LP64 64-bit configurations.

	* jitter/jitter-parse-int.c (jitter_string_to_long_long_unsafe_radix): Replace
	assert with conditional and jitter_fatal call.

2020-06-12  Luca Saiu  <positron@gnu.org>

	configure: check for type support, not only for sizes; add unrelated checks

	I noticed that only on some configurations JITTER_HAVE_LONG_LONG_INT and
	JITTER_HAVE_UNSIGNED_LONG_LONG_INT did not get defined.  It turns out that I
	was not explicitly calling AC_TYPE_LONG_LONG_INT and friends, but only on some
	machines I could still get the shell variables set by other tests, because of
	some dependency.  Obvious fix.

	Add a configure tests and CPP feature macros.

	* configure.ac (AC_TYPE_LONG_LONG_INT, AC_TYPE_UNSIGNED_LONG_LONG_INT): Add.
	(AC_TYPE_LONG_DOUBLE): Move.
	(JITTER_HAVE_SYSCONF, JITTER_HAVE_GETPAGESIZE): New CPP feature macros.
	Add tests for "definitions".
	(ac_cv_have_decl__SC_PAGESIZE, ac_cv_have_decl__SC_PHYS_PAGES)
	(ac_cv_have_decl__SC_AVPHYS_PAGES, ac_cv_have_decl__SC_NPROCESSORS_CONF)
	(ac_cv_have_decl__SC_NPROCESSORS_ONLN, ac_cv_have_decl__SC_LEVEL1_ICACHE_SIZE)
	(ac_cv_have_decl__SC_LEVEL1_DCACHE_SIZE, ac_cv_have_decl__SC_LEVEL2_CACHE_SIZE)
	(ac_cv_have_decl__SC_LEVEL3_CACHE_SIZE, ac_cv_have_decl__SC_LEVEL4_CACHE_SIZE):
	New shell variables.
	(JITTER_HAVE__SC_PAGESIZE, JITTER_HAVE__SC_PHYS_PAGES)
	(JITTER_HAVE__SC_AVPHYS_PAGES, JITTER_HAVE__SC_NPROCESSORS_CONF)
	(JITTER_HAVE__SC_NPROCESSORS_ONLN, JITTER_HAVE__SC_LEVEL1_ICACHE_SIZE)
	(JITTER_HAVE__SC_LEVEL1_DCACHE_SIZE, JITTER_HAVE__SC_LEVEL2_CACHE_SIZE)
	(JITTER_HAVE__SC_LEVEL3_CACHE_SIZE, JITTER_HAVE__SC_LEVEL4_CACHE_SIZE): New CPP
	feature macros.
	Comments.

	* jitter/jitter-config.h.in (JITTER_HAVE_SYSCONF, JITTER_HAVE_GETPAGESIZE)
	(JITTER_HAVE__SC_PAGESIZE, JITTER_HAVE__SC_PHYS_PAGES)
	(JITTER_HAVE__SC_AVPHYS_PAGES, JITTER_HAVE__SC_NPROCESSORS_CONF)
	(JITTER_HAVE__SC_NPROCESSORS_ONLN, JITTER_HAVE__SC_LEVEL1_ICACHE_SIZE)
	(JITTER_HAVE__SC_LEVEL1_DCACHE_SIZE, JITTER_HAVE__SC_LEVEL2_CACHE_SIZE)
	(JITTER_HAVE__SC_LEVEL3_CACHE_SIZE, JITTER_HAVE__SC_LEVEL4_CACHE_SIZE): New CPP
	feature macros.
	Comments.

2020-06-12  Luca Saiu  <positron@gnu.org>

	jitter-malloc: allow allocating 0 bytes or resizing to 0 bytes

	It turns out that my wrappers had never supported sizes of zero chars; but now I
	have run into that requirement in the dynamic buffer structure, when compacting.

	* jitter/jitter-malloc.h (jitter_xmalloc, jitter_xrealloc): Change comments.
	Change function attributes removing returns_nonnull.

	* jitter/jitter-malloc.c (jitter_xmalloc, jitter_xrealloc): Check for zero size
	and return NULL in that case, freeing the buffer in jitter_xrealloc.  Add
	comments.

2020-06-12  Luca Saiu  <positron@gnu.org>

	dynamic buffer: add compact operation

	The new operation is useful to release no longer needed memory after the buffer
	has been pushed to and popped from many times.  The buffer is widened
	dynamically as needed but not automatically shrunk -- which I find a sensible
	choice.  Now there is a way to compact on demand.

	* jitter/jitter-dynamic-buffer.h (jitter_dynamic_buffer_compact): New prototype.
	* jitter/jitter-dynamic-buffer.c (jitter_dynamic_buffer_compact): New function.

2020-06-11  Luca Saiu  <positron@gnu.org>

	build system: cosmetic changes and defensiveness in shebang logic

	This should make the checks for the shell to use in shebang lines a little
	nicer and more reliable in pathological cases.  Use JITTER_SHEBANG rather
	than JITTER_SHELL.

	No user-visible changes on sane systems.

	Thanks to xelxebar for testing on an unusual system.

	* configure.ac (AC_SYS_INTERPRETER): Move up.  Use...
	(JITTER_SHELL): ...Here.  Remove JITTER_SHELL substitution.  Add JITTER_SHEBANG
	in its place.  Remove jitter_comment_about_JITTER_SHELL, introduce
	jitter_comment_about_JITTER_SHEBANG in its place.  Warn in hypothetical bizarre
	cases when SHELL does not get set.
	(jitter_warn_about_shebang, jitter_shebang_prefix): New variables.

	* amend-autom4te-output: Change comments.
	(Work).  Emit @JITTER_SHEBANG@ insted of #!@JITTER_SHELL@.

2020-06-10  Luca Saiu  <positron@gnu.org>

	build system: define JITTER_SHELL from $SHELL rather than $CONFIG_SHELL

	This might solve an issue reported by xelxebar (thanks).

	* configure.ac [! jitter_cross_compiling] (JITTER_SHELL): Define using $SHELL
	rather than $CONFIG_SHELL.  Explain why in a comment.  Add user output.
	(jitter_comment_about_JITTER_SHELL): New shell variable.

2020-06-09  Luca Saiu  <positron@gnu.org>

	amend-autom4te-output: trivial changes

	* amend-autom4te-output (handle_gnu_option): Improve output.

2020-06-09  Luca Saiu  <positron@gnu.org>

	build system: factor m4sh amending into new script, call from Makefile

	Factor the M4sh shebang amend functionality from bootstrap.conf into a new
	script.  Call the script from the Makefile when re-generating .in files as
	part of a rule.

	* bootstrap.conf (unm4sh): Replace code with a call, factoring into...

	* amend-autom4te-output: ...This new file.

	* Makefile.am (.in.m4sh.in): Call new script after $(AUTOM4TE) --language=M4sh.
	(EXTRA_DIST): Distribute amend-autom4te-output.

2020-06-09  Luca Saiu  <positron@gnu.org>

	build system: make portable shell scripts actually use @JITTER_SHELL@ as shell

	My portable shell scripts preprocessed by autom4te were not using
	@JITTER_SHELL@, despite an initial shebang line containing it in their .in.m4sh
	sources.  Work around the problem by prepending a line to every .in file built
	by autom4te from a .in.m4sh file.  Explain the reasoning in comments.

	Thanks to xelxebar for reporting a build issue, which made me discover and fix
	this old bug.

	* bootstrap.conf (unm4sh): Amend $output file by prepending a shebang line with
	@JITTER_SHELL@ along with a comment.  Add comment within the shell function.
	Rephrase unrelated comment.

	* bin/jitter-config.in.m4sh (shebang): Remove the explicit shebang line, which
	had never had any effect anyway.
	* scripts/generate-fast-branches.in.m4sh (shebang): Likewise.

2020-06-09  Luca Saiu  <positron@gnu.org>

	build system: rename and redefine substitution SHELL_OR_BIN_SH

	Use CONFIG_SHELL instead of SHELL in configure.ac .  Rename the substitution to
	have the JITTER_ prefix in its name, following the current convention.

	This might fix a portability problem under investigation.

	* configure.ac (SHELL_OR_BIN_SH): Rename substitution to JITTER_SHELL.
	In non-cross configurations define using $CONFIG_SHELL rather than $SHELL.
	Change comment.

	* bin/jitter-config.in.m4sh (shebang): Rename used substitution.
	* scripts/generate-fast-branches.in.m4sh (shebang): Likewise.

2020-06-03  Luca Saiu  <positron@gnu.org>

	linked lists cleanup

	Rename an internal macro to have an initial "_" (because it is internal) as well
	as a final "_" (following the Jitter convention, as it does not expand to a
	single statement or expression) in its name.

	No changes in the user API.

	* jitter/jitter-list.h (JITTER_LIST_LOCALS_): Rename to _JITTER_LIST_LOCALS_.
	Change uses.  Fix whitespace.

2020-05-31  Luca Saiu  <positron@gnu.org>

	dynamic buffer: add macro API

	Add an optimised macro API for the most critical dynamic buffer operations.  The
	new functionality considerably speeds up the new garbage collector, and other
	applications using a dynamic stack like a stack in a tight loop.

	* jitter/jitter-dynamic-buffer.h (JITTER_DYNAMIC_BUFFER_USED_SIZE)
	(JITTER_DYNAMIC_BUFFER_REDUCE_USED_SIZE, JITTER_DYNAMIC_BUFFER_PUSH): New macros.
	Add comments.

2020-05-31  Luca Saiu  <positron@gnu.org>

	human readable prefix fixes

	Fix a bug due to which 0 was given a yocto- prefix.

	Remove binary fractional prefixes altogether.  They are not IEC-standard and,
	even if fractional prefixes are useful for averages, they are not in wide use.

	One byte every 1000 seconds could still maybe be called a millibyte and given
	the prefixed unit "mB", but it is hard to see a case where calling one byte
	every 1024 seconds a mibibyte ("miB") would be of any use.  Binary powers are
	useful for expressing measures in relation to quantities which are nonnegative
	powers of two, not really for fractions.

	No API changes.

	* jitter/jitter-human-prefix.c (jitter_human_descriptor_binary): Remove
	descriptors for fractional binary prefixes.
	(jitter_human_readable): Fix the algorithm by changing in which case the
	function returns.

2020-05-31  Luca Saiu  <positron@gnu.org>

	cosmetic change

	* jitter/jitter-human-prefix.c (jitter_human_readable): Remove unused variables.
	Fix comment.

2020-05-31  Luca Saiu  <positron@gnu.org>

	human prefixes: cosmetic changes

	* jitter/jitter-human-prefix.c (jitter_human_readable_with): Remove useless
	check.
	(jitter_human_readable_with): Whitespace.

2020-05-31  Luca Saiu  <positron@gnu.org>

	human prefixes: fixes and improvements

	Change the internal algorithm to make sure that every number is printed with the
	smallest prefix which is strictly larger than it, or the smallest prefix if the
	number is smaller than the smallest prefix, or the largest prefix if the number
	is larger than the largest prefix.  Simplify the algorithm.  Minor cleanups.

	* jitter/jitter-human-prefix.c (jitter_human_readable_with): Completely change
	the algorithm.  Whitespace.
	(jitter_human_readable): Rename formal from scale to prefix.  Whitespace.

	* jitter/jitter-human-prefix.h (JITTER_HUMAN_READABLE_): Comment fix.

2020-05-31  Luca Saiu  <positron@gnu.org>

	add new facility for printing number with human-readable metric or IEC prefixes

	* jitter/jitter-human-prefix.h: New file.
	* jitter/jitter-human-prefix.c: New file.

	* Makefile.am (lib_libjitterutility__partial_la_SOURCES): Add new sources
	jitter/jitter-human-prefix.h and jitter/jitter-human-prefix.c.
	(jitterinclude_HEADERS): Install new header jitter/jitter-human-prefix.h.

2020-05-27  Luca Saiu  <positron@gnu.org>

	utility: add timing module

	Add a new compilation unit, a simple wrapper over clock_gettime making it more
	convenient to use and falling back to gettimeofday if the better function is not
	available.  Use it in JitterLisp.

	* jitter/jitter-time.c: New file.
	* jitter/jitter-time.h: New file.

	* Makefile.am (lib_libjitterutility__partial_la_SOURCES): Add new files
	jitter/jitter-time.c and jitter/jitter-time.h.
	(jitterinclude_HEADERS): Add new header jitter/jitter-time.h.

	* configure.ac (clock_gettime): New AC_CHECK_FUNCS test.
	(HAVE_CLOCK_GETTIME, JITTER_HAVE_CLOCK_GETTIME): New CPP feature macros.

	* jitter/jitter-config.h.in (JITTER_HAVE_CLOCK_GETTIME): New CPP feature macro.

	* example-vms/jitterlisp/jitterlisp-run-input.c (jitterlisp_repl): Use the new
	functionality instead of gettimeofday, simplifying.

2020-05-24  Luca Saiu  <positron@gnu.org>

	unconditionally disable readline in sub-package mode

	Bringing readline as a dependency is a gratuitous annoyance at least in
	sub-package mode.  Disable it unconditionally in that case, even ignoring
	the command-line option.

	This prevents poke glitches.

	* configure.ac (readline): Disable in sub-package mode.

	Thanks to John Darrington for his report.

2020-05-21  Luca Saiu  <positron@gnu.org>

	executable routines, unified routines: implement reference counting

	Now executable routines can be pinned and unpinned, so that the same VM routine
	can be shared for multiple user objects to be destroyed at different times,
	typically from GC finalisation.

	* jitter/jitter-routine.h (jitter_pin_routine, jitter_unpin_routine): New
	prototypes.

	* jitter/jitter-routine.c (jitter_pin_routine, jitter_unpin_routine): New
	functions.

	* jitter/jitter-specialize.h (struct jitter_executable_routine): New field
	reference_count.
	(jitter_pin_executable_routine, jitter_unpin_executable_routine): New prototypes.
	Update comments.

	* jitter/jitter-specialize.c (jitter_initialize_executable_routine): Initialize
	new field reference_count.
	(jitter_destroy_executable_routine): Add reference count consistency check.
	(jitter_pin_executable_routine, jitter_unpin_executable_routine): New functions.

	* templates/vm.h (vmprefix_pin_routine, vmprefix_unpin_routine): New wrapper
	macros.

	* example-vms/jitterlisp/jitterlisp-code-generator.c
	(jitterlisp_finalize_closure): Change to use structuredvm_unpin_routine.
	Invalidate closure fields out of defensiveness.

	* example-vms/structured/structured-main.c (structured_work): Change to use
	structuredvm_unpin_routine.

2020-05-19  Luca Saiu  <positron@gnu.org>

	build system minor fix

	* configure.ac [JITTER_SUBPACKAGE] (enable_shared): set shell variable to yes
	after it was previously set to no by the user, instead of setting it to yes
	when it was yes already.  Update user message.

2020-05-19  Luca Saiu  <positron@gnu.org>

	sub-package mode: enable both static and dynamic libraries; only use the former

	See the new comments in configure.ac for an explanation.

	* configure.ac (Sub-package mode support): Adapt comment.
	(Libtool support): Likewise.  Update user message.
	(AC_DISABLE_SHARED): Replace with AC_ENABLE_SHARED.

	* Makefile.am (Jitter runtime libraries for every enabled dispatching model):
	Improve comment.

	This fixes a regression in poke reported by José Marchesi.  Thanks José.

2020-05-19  Luca Saiu  <positron@gnu.org>

	fix example bug

	* example-build-systems/bootstrap (Copy files): do not fail if the symlink named
	jitter is not present yet.

2020-05-19  Luca Saiu  <positron@gnu.org>

	cosmetic change

	* Makefile.am (.la.a): Remove commented-out line.

2020-05-19  Luca Saiu  <positron@gnu.org>

	use Libtool convenience libraries to generate ordinary library: force PIC objects

	Update the build system to build ordinary libraries from Libtool convenience
	libraries: this makes Jitter runtime libraries easy to embed within other
	libraries, which is meant to be a common use case -- and the poke people are
	doing it already, with a trick to work around previous limitations of Jitter
	libraries.  Develop such a use case into an example.

	New JITTER_LIBADD substitution and variable.  New --libadd option for
	jitter-config.

	Split the Structured example build system into two versions: simple, and with a
	Libtool library.  Factor the bootstrap script.

	Rename directories and files with particularly long names, which was causing
	problems with make distcheck within the build-system examples, which now also
	have long names.

	Minor documentation updates.

	* configure.ac (JITTER_FLAGS_LIBADD): New shell variable.  Generate new flag
	file flags/$dispatch_model/LIBADD.
	(JITTER_LIBADD, JITTER_SWITCH_LIBADD, JITTER_DIRECT_THREADING_LIBADD)
	(JITTER_MINIMAL_THREADING_LIBADD, JITTER_NO_THREADING_LIBADD): New
	substitutions.

	* Makefile.am: Update comments.
	(lib_LTLIBRARIES): Move.
	(lib_LTLIBRARIES, noinst_LTLIBRARIES): Remove variables.
	(lib/libgnulib--convenience.la, lib/libgnulib-extension--convenience.la)
	(lib/libjitterutility--convenience.la, lib/libjitter--switch--convenience.la)
	(lib/libjitter--direct-threading--convenience.la)
	(lib/libjitter--minimal-threading--convenience.la)
	(lib/libjitter--no-threading--convenience.la, lib/libjitter--convenience.la):
	Rename to lib/libgnulib--partial.la, lib/libgnulib-extension--partial.la,
	lib/libjitterutility--partial.la, lib/libjitter--switch--partial.la,
	lib/libjitter--direct-threading--partial.la,
	lib/libjitter--minimal-threading--partial.la,
	lib/libjitter--no-threading--partial.la, lib/libjitter--partial.la.
	(non-convenience-lib/libjitter--switch.la)
	(non-convenience-lib/libjitter--direct-threading.la)
	(non-convenience-lib/libjitter--minimal-threading.la)
	(non-convenience-lib/libjitter--no-threading.la): New targets, serving as
	dependencies to...
	(lib/libjitter--switch.la, lib/libjitter--direct-threading.la)
	(lib/libjitter--minimal-threading.la, lib/libjitter--no-threading.la):
	...These, redefined.  Update all definitions.
	(.la.a): Generate with libtool in link mode rather than install mode.
	Handle renamed files.
	(EXTRA_DIST): Use new files in example-build-systems rather than
	example-vms/structured.  Simplify.

	* autoconf/jitter.m4 (jitter_flags): Add new libadd flag.
	(AC_JITTER_CONFIG): Change comments.

	* bin/jitter-config.in.m4sh (help): Document --libadd.
	Main loop: Handle --libadd.

	* example-vms/structured/bootstrap: Move to...
	* example-build-systems/bootstrap: ...Here, but rewrite it more or less
	completely.
	* example-vms/structured/COPYING: Delete, now copied by bootstrap from the
	source directory.

	* example-vms/structured/configure.ac: Move into...
	* example-build-systems/structured-simple/configure.ac... This, changing the
	package name.
	* example-build-systems/structured-with-library/configure.ac: Also fork from
	example-vms/structured/configure.ac, with just the package name and LT_LIBTOOL
	being different.

	* example-vms/structured/Makefile.am: Move into...
	* example-build-systems/structured-simple/Makefile.am:... This.
	* example-build-systems/structured-with-library/Makefile.am: Also fork from
	example-vms/structured/Makefile.am, with heavier changes.  Update comments.
	(FRONTEND_GENERATED_FILES, JITTER_GENERATED_FILES, noinst_LTLIBRARIES): New
	variables.  Use them.
	(libstructuredvm.la): New rule.
	(libstructuredvm_la_SOURCES, libstructuredvm_la_CFLAGS)
	(libstructuredvm_la_CPPFLAGS, libstructuredvm_la_LIBADD)
	(libstructuredvm_la_LDFLAGS): New variables.  Use them.

	* example-vms/structured/README: Move into...
	* example-build-systems/README: ...This, and adapt.
	* example-vms/structured/AUTHORS: Move into...
	* example-build-systems/AUTHORS: ...This, with changes.
	* example-vms/structured/ChangeLog: Move into...
	* example-build-systems/ChangeLog: This, with changes.
	* example-vms/structured/NEWS: Move into...
	* example-build-systems/NEWS: This, with changes.

	* example-vms/structured/examples/count-down-unoptimized.structuredvm: Move
	to...
	* example-vms/structured/examples/count-down-nonopt.structuredvm: This.
	* example-vms/structured/examples/count-down-optimized.structuredvm: Move to...
	* example-vms/structured/examples/count-down-opt.structuredvm: This.

	* example-vms/jitterlisp/compatibility: Rename directory to...
	* example-vms/jitterlisp/compat: ...This.
	* example-vms/jitterlisp/compatibility/common-lisp-compatibility.lisp: Move
	to...
	* example-vms/jitterlisp/compat/common-lisp-compatibility.lisp: New file.
	* example-vms/jitterlisp/compatibility/gambit-compatibility.scm: Move to...
	* example-vms/jitterlisp/compat/gambit-compatibility.scm: New file.
	* example-vms/jitterlisp/compatibility/guile-compatibility.scm: Move to...
	* example-vms/jitterlisp/compat/guile-compatibility.scm: New file.
	* example-vms/jitterlisp/compatibility/mit-gnu-scheme-compatibility.scm: Move
	to...
	* example-vms/jitterlisp/compat/mit-gnu-scheme-compatibility.scm: New file.
	* example-vms/jitterlisp/compatibility/racket-compatibility.scm: Move to...
	* example-vms/jitterlisp/compat/racket-compatibility.scm: New file.
	* example-vms/jitterlisp/compatibility/scm-compatibility.scm: Move to...
	* example-vms/jitterlisp/compat/scm-compatibility.scm: New file.
	* example-vms/jitterlisp/compatibility/siod-compatibility.scm: Move to...
	* example-vms/jitterlisp/compat/siod-compatibility.scm: New file.
	* example-vms/jitterlisp/compatibility/sisc-compatibility.scm: Move to...
	* example-vms/jitterlisp/compat/sisc-compatibility.scm: New file.
	* example-vms/jitterlisp/compatibility/tinyscheme-compatibility.scm: Move to...
	* example-vms/jitterlisp/compat/tinyscheme-compatibility.scm: New file.

	* NEWS: Minor documentation changes.
	* README: Minor documentation changes.
	* README-hacking: Minor documentation changes.
	* THANKS: Minor documentation changes.  Thank contributors.

	* .gitignore: Update generated files.

2020-05-17  Luca Saiu  <positron@gnu.org>

	fix bootstrap requirements (thanks to Darshit Shah)

	* bootstrap.conf (automake): Raise required version.
	(flex): Lower required version.

	Thanks to Darshit Shah who had sent a patch including this change a long time
	ago.

2020-05-17  Luca Saiu  <positron@gnu.org>

	manuals: omit @documentlanguage for English (thanks to Bruno Haible)

	Specifying
	  @documentlanguage en
	is in fact counter-productive for English documentation, as Bruno told me:
	https://lists.gnu.org/archive/html/bug-bison/2019-05/msg00034.html , and can
	make building harder on some systems.

	* example-vms/jitterlisp/doc/jitterlisp.texi (@documentlanguage): Comment out.
	Add comment.

	* doc/jitter.texi: Add the same comment as a reminder to myself.

	Suggested by Bruno Haible.

2020-05-16  Luca Saiu  <positron@gnu.org>

	avoid prerequisite on suffix rule (reported and fixed by Bruno Haible)

	Suffix rules cannot have dependencies according to POSIX, and in fact GNU Make
	ignores them.  Thanks to Bruno for noticing.  I did not know.

	* Makefile.am [JITTER_HAVE_AUTOM4TE] (.in.m4sh.in): Remove prerequisite.
	[JITTER_HAVE_AUTOM4TE] (scripts/generate-fast-branches.in)
	[JITTER_HAVE_AUTOM4TE] (bin/jitter-config.in):  New rules.  Add comments.

	Reported by Bruno Haible, who suggested a change essentially identical to this.

2020-05-16  Luca Saiu  <positron@gnu.org>

	do not use sed in the test suite

	I am fed up with all the incompatibilities between sed versions.  After running
	into two separate unexpected behaviors in two separate implementations within a
	few days I decided to reimplement the functionality I needed in C, for the
	Jitter test suite.  Do exactly that.

	* tests/filter-test-case-output.c: New file.

	* Makefile.am (check_PROGRAMS): Add new program tests/filter-test-case-output.
	(tests_filter_test_case_output_SOURCES, tests_filter_test_case_output_LDADD)
	(tests_filter_test_case_output_CPPFLAGS): New variables.

	* tests/utility.in (jitter_run_case_checking_output): Use the new script (with
	an emulator, when running the test suite in cross-compilation) instead of sed.

2020-05-16  Luca Saiu  <positron@gnu.org>

	fix non-sub-package mode make

	Fix my previous change set.  Simplify Automake condition logic, by reverting
	the previous Makefile.am change and instead defining the existing Automake
	conditional JITTER_CAN_REBUILD_MAN_PAGES to false in sub-package mode.

	* configure.ac (jitter_can_rebuild_man_pages): Change definition.  Update
	comment.

	* Makefile.am (jitterc/jitter.1, bin/jitter-config.1): Revert previous change,
	simplifying the conditional.  No more decisions based on JITTER_SUBPACKAGE here.

2020-05-16  Luca Saiu  <positron@gnu.org>

	do not build man pages in sub-package mode

	* Makefile.am (jitterc/jitter.1, bin/jitter-config.1): Conditionalize man page
	building so that man pages always become empty stubs in sub-package mode, like
	Info pages already do.  This saves time and prevents any problem with help2man.

2020-05-16  Luca Saiu  <positron@gnu.org>

	uninspired example: portability fix

	Fix failure on systems not supporting sigaction.

	* example-vms/uninspired/uninspired.jitter [! JITTER_HAVE_SIGACTION]
	(install-signal-handler): Rename forgotten call of jitter_handle_signal to
	jitter_my_signal_handler.

2020-05-16  Luca Saiu  <positron@gnu.org>

	configure: cosmetic fix

	Make configure suppress output not meant for the user to see.

	* configure.ac (jitter_host_os_is_elf): fix grep redirection, throwing away
	stdout instead of stderr.  No behaviour change.

2020-05-16  Luca Saiu  <positron@gnu.org>

	build system: use autoconf substitution or shell variables instead of just 'sed'

	* Makefile.am ($(srcdir)/example-vms/jitterlisp/jitterlisp-constant-strings.c):
	Change sed to @SED@.

	* autoconf/jitter.m4 (AC_JITTER_SUBPACKAGE): Require AC_PROG_SED.  Change sed to
	$SED.

	* bin/jitter-config.in.m4sh (suppress_redundant_spaces, main loop): Change sed
	to @SED@.

2020-05-15  Luca Saiu  <positron@gnu.org>

	more portability fixes

	Revert my previous simplification, which had removed special ELF support for
	sections; it was in fact needed when generating native code on ELF, and this
	might not be the first time I make this specific mistake.

	Check for ELF and, separately, whether the assembler supports an ELF section
	stack with subsection numbers.  Add more configure checks, particularly with
	respect to C language and inline assembly.

	* configure.ac (ac_cv_have_alignas): Fix comments.
	(ac_cv_have_mixed_declarations_and_statements): New shell variable / test.
	(JITTER_HAVE_MIXED_DECLARATIONS_AND_STATEMENTS): New CPP feature macro.
	(ac_cv_have_gnu_c_statement_expressions): New shell variable / test.
	(JITTER_HAVE_GNU_C_STATEMENT_EXPRESSIONS): New CPP feature macro.
	(ac_cv_have_gnu_c_inline_asm): New shell variable / test.
	(JITTER_HAVE_GNU_C_INLINE_ASM): New CPP feature macro.
	(ac_cv_have_gnu_c_asm_goto): New shell variable / test.
	(JITTER_HAVE_GNU_C_ASM_GOTO): New CPP feature macro.
	(jitter_host_os_is_elf): Improve comments.  Add a second test checking for
	.pushsection support with numbered subsections...
	(jitter_host_os_is_elf): ...With this variable / test, affecting the final value
	of JITTER_HOST_OS_IS_ELF.  This will become very important when advanced
	dispatches are enabled by default.

	* jitter/jitter-config.h.in (JITTER_HOST_OS_IS_ELF): Expand and update comment.
	(JITTER_HAVE_MIXED_DECLARATIONS_AND_STATEMENTS)
	(JITTER_HAVE_GNU_C_STATEMENT_EXPRESSIONS, JITTER_HAVE_GNU_C_INLINE_ASM)
	(JITTER_HAVE_GNU_C_ASM_GOTO): New CPP feature macros.

	* jitter/jitter-patch-in.h (Inclusion of jitter/jitter-machine-common.h and
	jitter/machine/jitter-machine.h): conditionalise differently, based on
	JITTER_DISPATCH_NO_THREADING only.  Explain why in comment.

	* jitter/jitter-sections.h (JITTER_ASM_ENTER_SUBSECTION_ELF,
	JITTER_ASM_EXIT_SUBSECTION_ELF): Re-define, using the same definition removed in
	the previous change set.  Update comments explaining why this is needed.
	(JITTER_ASM_ENTER_SUBSECTION, JITTER_ASM_EXIT_SUBSECTION): Change
	conditionalisation, like before.  But keep #error instead of #warning, with an
	updated message.

	* jitter/jitter.h: Add sanity checks to fail cleanly in case of contradictory
	configure options.

	* example-vms/structured/structured-main.c (structured_help, structured_version):
	Cosmetic changes in the output.

2020-05-15  Luca Saiu  <positron@gnu.org>

	portability fixes, following reports by Alfred M. Szmidt

	No longer rely on Gas supporting an ELF section stack, even on ELF system: I
	had not actually made use of the feature for some time anyway, and it caused
	portability problems on OpenBSD.  I can use the generic Gas feature on every
	system where the assembler is Gas.

	Do not unconditionally rely on __builtin_unreachable, which is not available
	on very old GCCs.

	Include the assembly-specific machine.h when using assembly from execution:
	machine-specific primitives must prevail over generic fallback versions.

	Avoid -fno-lto on netbsd, where I noticed it causes problems.

	Alfred was concerned with OpenBSD.  I checked other free-software BSD variants
	myself.  The situation should definitely have improved now, but is not yet
	perfect.

	* configure.ac (jitter_cpp_preprocess): New shell function, factoring some code
	which relied on $CC -P -E and fixing it: I was relying on $CC -P -E expanding
	macros from its input and producing nothing else, which is not portable.
	(AC_PROG_CC_C99): Fix comment grammar.
	(JITTER_HAVE_ACTUAL_GCC): Fix generated comment.
	(JITTER_GCC_MAJOR_VERSION, JITTER_GCC_MINOR_VERSION)
	(JITTER_GCC_PATCHLEVEL_VERSION): Use jitter_cpp_preprocess to define shell
	variables instead of the non-portable $CC -P -E.
	(JITTER_GCC_MAJOR_VERSION, JITTER_GCC_MINOR_VERSION)
	(JITTER_GCC_PATCHLEVEL_VERSION): New CPP feature macros.
	(ac_cv_have_gcc_builtin_unreachable): New shell variable.  New test for
	__builtin_expect.
	(JITTER_HAVE_GCC_BUILTIN_UNREACHABLE): New CPP feature macro.
	(jitter_host_os_is_elf): Check for the __ELF__ CPP macros on GNU and other
	systems, instead of assuming that every GNU system is ELF.  This lets me
	recognize many other ELF systems as well, for free.
	(jitter_host_os_is_freebsd, jitter_host_os_is_openbsd, jitter_host_os_is_netbsd):
	New shell variables.
	(JITTER_HOST_OS_IS_FREEBSD, JITTER_HOST_OS_IS_OPENBSD, JITTER_HOST_OS_IS_NETBSD):
	New CPP feature macros.
	(-fno-lto): Do not check cc option on NetBSD.

	* jitter/jitter-config.h.in (JITTER_GCC_MAJOR_VERSION, JITTER_GCC_MINOR_VERSION)
	(JITTER_GCC_PATCHLEVEL_VERSION, JITTER_GCC_COMBINED_VERSION)
	(JITTER_HOST_OS_IS_FREEBSD, JITTER_HOST_OS_IS_NETBSD, JITTER_HOST_OS_IS_OPENBSD)
	(JITTER_HAVE_GCC_BUILTIN_UNREACHABLE): New CPP feature macros.

	* jitter/jitter-executor.h: Include jitter/machine/jitter-machine.h if
	assembly is enabled.  This should fix CPP warnings about multiple definitions
	of some execution macros, with conflicts between machine-independent and
	machine-specific definitions as reported by José Marchesi.

	* jitter/jitter-missing.h [! JITTER_HAVE_GCC_BUILTIN_UNREACHABLE]
	(__builtin_unreachable): New macro.

	* jitter/jitter-sections.h (JITTER_ASM_ENTER_SUBSECTION_ELF)
	(JITTER_ASM_EXIT_SUBSECTION_ELF): Remove macros.
	(JITTER_ASM_ENTER_SUBSECTION, JITTER_ASM_EXIT_SUBSECTION): Change CPP
	conditional.  Change #warning to #error in case of unknown binary format.
	Update comments.

	* machine/x86_64/jitter/machine/jitter-machine-assembly.S
	(jump_unconditional_32bit_offset): Avoid the jmp.d32 syntax, only supported by
	comparatively recent versions of GNU Binutils.  Directly use the instruction
	hexadecimal encoding instead, with a comment.

	* example-vms/structured/configure.ac: when checking whether Flex and Bison are
	needed test the presence of structured-scanner.c and structured-parser.c, rather
	than generated C files from Jitter.  This was a trivial kill/yank mistake, which
	still could cause gratuitous failures on systems without Flex and Bison.

	Thanks to Alfred M. Szmidt who reported problems on OpenBSD and was very helpful
	discussing several issues.

2020-05-12  Luca Saiu  <positron@gnu.org>

	new user code places for C files

	Generalize the previous change set by adding code places at the beginning of
	every generated file C: the new code places are
	initial-header-c, initial-header-c

	* jitterc/jitterc-vm.h (struct jitterc_vm): New fields initial_vm1_c_code,
	initial_vm2_c_code, initial_vm_main_c_code.  Whitespace change.

	* jitterc/jitterc-vm.c (jitterc_make_vm): Initialize new res fields
	initial_vm1_c_code, initial_vm2_c_code, initial_vm_main_c_code.

	* jitterc/jitterc.l ("initial-vm1-c", "initial-vm2-c", "initial-vm-main-c")
	("initial-vmmain-c"): New literal tokens.

	* jitterc/jitterc.y (INITIAL_VM1_C, INITIAL_VM2_C, INITIAL_VM_MAIN_C): New
	terminals.
	(c_section): Add new rules using new tokens.

	* jitterc/jitterc-generate.c (jitterc_fopen_w_and_remember_basename): Add
	unused attribute to the function, now in fact unused.
	(jitterc_emit_initial_vm1_c, jitterc_emit_initial_vm2_c)
	(jitterc_emit_initial_vm_main_c): New functions.
	(jitterc_emit_executor): Open file in "a" rather than "w" mode.  The "w"
	mode is no longer used anywhere, at present.
	(jitterc_generate): Factor.  New variable initial_comment.  Call new
	functions.  Update comments.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Font-lock new keywords.

	Generalized after a suggestion by José Marchesi.

2020-05-12  Luca Saiu  <positron@gnu.org>

	new user C code place: initial-header-c

	Allow the user to emit custom core *before* the header template in VM code.
	This permits to make some VM code work well with Gnulib, for example, and
	to insert very early CPP directives.

	This new user code comes at the very beginning of the output, before any CPP
	inclusion directive and even before multiple-inclusion checks.

	* jitterc/jitterc-vm.h (struct jitterc_vm): New field initial_header_c_code.

	* jitterc/jitterc-vm.c (jitterc_make_vm): Initialize new field
	res->initial_header_c_code.

	* jitterc/jitterc.l ("initial-header-c"): New literal token.
	* jitterc/jitterc.y (INITIAL_HEADER_C): New terminal.
	(c_section): New rule for INITIAL_HEADER_C code END.

	* jitterc/jitterc-generate.c (jitterc_fopen_w_or_a_and_remember_basename): New
	function, with code adapted from jitterc_fopen_w_and_remember_basename.
	(jitterc_fopen_w_and_remember_basename): Redefine using new function above.
	(jitterc_fopen_a_and_remember_basename): New function using new function above.
	(jitterc_emit_text_to_stream): New function.
	(jitterc_emit_initial_header_c): New function.
	(jitterc_copy_file_to_tmp): Open file in "a" more, not "w": the file is no
	longer always empty at this point.
	(jitterc_generate): Before what already exists emit a new initial comment and
	call jitterc_emit_initial_header_c.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Font-lock new keyword
	initial-header-c.

	Thanks to José Marchesi who expressed the need for this feature and suggested
	the gist of it.

2020-05-12  Luca Saiu  <positron@gnu.org>

	portability fix: do not insert \n with sed

	Some weak versions of sed do not insert a newline character in the place of \n
	when \n occurs in the replacement part.  This surprising behavior broke Jitter's
	test suite machinery on at least one platform, where even correct output never
	compared as equal to the expected result.

	Fix by not relying on sed expanding \n as a newline character.

	* tests/utility.in (jitter_run_case_checking_output): Use sed and tr rather than
	just sed.  Forbid the '$' character (now used in the intermediate step) in
	expected output.  Add comment.

	Thanks to Niobos for reporting and running my test code to help me to locate the
	issue.

2020-05-11  Luca Saiu  <positron@gnu.org>

	fix build on Mach-O systems

	Do not rely on binary formats and assembly when not needed, in particular for
	simple dispatches.  Clearly distinguish enabled features from available fetures
	in CPP feature macros and Automake conditionals.

	This is supposed to fix other "unsupported" systems as well, as long as only
	simple dispatches are used.

	* jitter/jitter-config.h.in (JITTER_ENABLE_ASSEMBLY)
	(JITTER_HAVE_KNOWN_BINARY_FORMAT, JITTER_HOST_OS_IS_MACHO): New feature macros.

	* configure.ac (JITTER_HAVE_ASSEMBLY): Remove Automake conditional.
	(JITTER_ENABLE_ASSEMBLY): New Automake conditional.
	(jitter_host_os_is_macho, jitter_have_known_binary_format): New shell globals.
	(JITTER_HOST_OS_IS_MACHO, JITTER_HAVE_KNOWN_BINARY_FORMAT): New CPP feature
	macros.
	Update comments.  Whitespace change.

	* Makefile.am (JITTER_HAVE_ASSEMBLY conditional): Rename to
	JITTER_ENABLE_ASSEMBLY.  Update comment.

	* jitter/jitter-defect.h (jitter/jitter-sections.h inclusion): Conditionalize on
	JITTER_HAVE_KNOWN_BINARY_FORMAT.
	* jitter/jitter-executor.h (jitter/jitter-sections.h inclusion): Likewise.
	* jitter/jitter-patch-in.h (jitter/jitter-sections.h inclusion): Likewise.
	* jitter/jitter-sections.c (jitter/jitter-sections.h inclusion): Likewise.
	* jitter/jitter-data-locations.h (jitter/jitter-sections.h inclusion): Likewise.
	0(JITTER_ASM_DATA_LOCATION_SUBSECTION, JITTER_DATA_LOCATION_NAME)
	(JITTER_DATA_LOCATION_HEADER, JITTER_DATA_LOCATION_FOOTER)
	(JITTER_DATA_LOCATION_DATUM): Conditionalize on JITTER_HAVE_KNOWN_BINARY_FORMAT,
	only defining JITTER_DATA_LOCATION_HEADER, JITTER_DATA_LOCATION_FOOTER and
	JITTER_DATA_LOCATION_DATUM as stubs if the binary format is unknown.

	* jitter/jitter-machine-common.S [JITTER_HAVE_ASSEMBLY CPP conditional]:
	Conditionalize instead on both JITTER_HAVE_ASSEMBLY and
	JITTER_HAVE_KNOWN_BINARY_FORMAT.

	* jitter/jitter-patch.h (JITTER_HAVE_ASSEMBLY conditional): Conditionalize
	on JITTER_ENABLE_ASSEMBLY instead.
	* jitter/jitter-patch.c (JITTER_HAVE_ASSEMBLY conditional): Likewise.

	* jitter/jitter-sections.h (JITTER_HAVE_SECTIONS): Remove definition.  Now it
	comes from configure.

	* jitter/jitter.h (jitter/machine/jitter-machine.h inclusion): Conditionalize
	on JITTER_ENABLE_ASSEMBLY rather than JITTER_ASSEMBLY_SUBDIRECTORY.

	* jitterc/jitterc-generate.c (jitter/machine/jitter-machine.h inclusion in
	generated code): Conditionalize on JITTER_ENABLE_ASSEMBLY rather than
	JITTER_HAVE_ASSEMBLY in generated code.

	* templates/vm1.c (JITTER_DATA_LOCATION_NAME(vmprefix)): Conditionalize on
	JITTER_HAVE_KNOWN_BINARY_FORMAT.
	(vmprefix_dump_data_locations): Conditionalize initialization of
	the_vmprefix_vm.data_locations, using JITTER_DATA_LOCATION_NAME(vmprefix) only
	on JITTER_HAVE_KNOWN_BINARY_FORMAT.

	Thanks to Niobos for reporting the bug and testing the fix for me.

2020-01-31  Luca Saiu  <positron@gnu.org>

	turn global variable into extern variable in template

	* templates/vm.h (jitterlispvm_states): Make variable extern.

	Thanks to José Marchesi for reporting.  I had already noticed and fixed this in
	a branch, but I did not know that the problem was also present on master.

2020-01-10  Luca Saiu  <positron@gnu.org>

	thank José Marchesi and Darshit Shah

	* THANKS: Documentation change.

2020-01-10  Luca Saiu  <positron@gnu.org>

	fix info stub generation for out-of-tree builds in sub-package mode

	Thanks to Darshit Shah for reporting the exact problem and submitting a patch.
	This fix is only very slightly different from his.

	* Makefile.am (doc/jitter.info, example-vms/jitterlisp/doc/jitterlisp.info):
	Make the directory containing the info file before touching it.

2020-01-06  Luca Saiu  <positron@gnu.org>

	fix compatibility with recent Bison versions; avoid (benign) Bison warnings

	I had been using, for years,
	  %require "2.3b"
	in my Bison sources.  Dan Čermák reported that Bison 3.5 no longer accepts this,
	and the reason appears to be the "b" character.  I confirmed the issue, and also
	discovered that 2.3b is not an official GNU release.

	Bump the requirement to a higher version, which is required anyway by the
	bootstrap script.  Seize the occasion to prevent other unrelated, distracting
	Bison warnings.

	Add macro definitions to Flex sources to work around Bison not renaming every
	identifier starting with yy or YY when switching to a non-deprecated Bison
	option.

	Thanks to Dan Čermák for reporting the issue when building Poke with a recent
	release of Bison.

	* Makefile.am (BISONFLAGS): New variable.
	($(srcdir)/jitterc/jitterc-parser.c): Call $(YACC) with $(BISONFLAGS).
	($(srcdir)/jitter/jitter-routine-parser.c): Likewise.
	($(srcdir)/example-vms/structured/structured-parser.c): Likewise.

	* example-vms/structured/structured.y (%require): Bump "2.3b", now rejected, to
	"3.0".
	(%name-prefix): Switch from this deprecated syntax...
	(%define api.prefix): ...To this non-deprecated alternative, despite the problem
	below.  Update comments.
	* jitter/jitter-routine.y (%require, %name-prefix, %define api.prefix): Likewise.
	* jitterc/jitterc.y (%require, %name-prefix, %define api.prefix): Likewise.

	* example-vms/structured/structured.l (YYSTYPE, YYLTYPE): New macros, for
	compatibility with the change from %name-prefix to %define api.prefix in
	the companion Bison file.
	* jitter/jitter-routine.l (YYSTYPE, YYLTYPE): Likewise.
	* jitterc/jitterc.l (YYSTYPE, YYLTYPE): Likewise.

2020-01-06  Luca Saiu  <positron@gnu.org>

	configure: check GCC version

	This will be useful in no-therading to enable and disable features which are
	difficult to check for, particularly when cross-compiling, and possibly for
	version-specific performance tuning.

	* configure.ac [JITTER_HAVE_ACTUAL_GCC]: Add GCC version check.
	(JITTER_GCC_MAJOR_VERSION, JITTER_GCC_MINOR_VERSION)
	(JITTER_GCC_PATCHLEVEL_VERSION, JITTER_GCC_COMBINED_VERSION): New shell
	variables.

2020-01-06  Luca Saiu  <positron@gnu.org>

	expand assembly file to whitespace only unless JITTER_HAVE_ASSEMBLY is defined

	This might be enough to completely support TCC under switch and direct-threading
	dispatch.  Too many unrelated things are currently broken in this branch for me
	to test now, but I feel optimistic.

	* jitter/jitter-machine-common.S: Conditionalize most of the file on the
	definition of JITTER_HAVE_ASSEMBLY.  Update comments.

2020-01-05  Luca Saiu  <positron@gnu.org>

	portability fixes

	This should solve a few issues (possibly not all yet) on OpenBSD.  Thanks to
	Alfred M. Szmidt for reporting bugs.

	* configure.ac: Check for alignas and stdalign.h.
	(ac_cv_have_alignas): New shell variable.
	(JITTER_HAVE_ALIGNAS): New CPP definition.

	* Makefile.am (.la.a): Remove -Wnone option from libtool command line.  Change
	comment.
	doc/jitter.info, example-vms/jitterlisp/doc/jitterlisp.info, info
	[JITTER_SUBPACKAGE]: Add trivial override in sub-package mode not requiring
	Texinfo.

	* jitter/jitter-config.h.in (JITTER_HAVE_ALIGNAS): New CPP definition.

	* jitter/jitter-missing.h (alignas, alignof) [! JITTER_HAVE_ALIGNAS]: Define
	replacements.
	(funlockfile): Rename second flockfile declaration.
	(flockfile, funlockfile): Do not specify formal parameters, to prevent
	issues with FILE.

	* jitter/jitter-heap.h (stdalign.h inclusion): Conditionalize on
	JITTER_HAVE_ALIGNAS.

2020-01-05  Luca Saiu  <positron@gnu.org>

	configure: disable assembly support with compilers falsely claiming to be GCC

	Clang's integrated assembler does not play well with the way I use Gas and CPP
	macros in Jitter, even together in the same source file.  This caused build
	problems on clang, even with advanced dispatches disabled (Thanks to Dan Čermák
	for reporting the issue as a Poke bug).

	Add configure-time checks to distinguish an actual GCC from some compiler
	incorrectly claiming to be a compatible replacement, and change dispatch
	defaults based on that check.

	Add a new check for computed goto: in that respect some compilers *are*
	compatible with GCC, and that is already enough for direct-threading.  Exploit
	this to decide whether direct threading is enabled.

	* configure.ac (Utility functions for configure): Move higher up in the file.
	(JITTER_TR): Move check into "Utility functions for configure".
	(JITTER_HAVE_ACTUAL_GCC): New shell variable, substitution, CPP definition,
	Automake conditional.
	(ac_cv_have_gnu_c_computed_goto): New shell variable.
	(JITTER_HAVE_GNU_C_COMPUTED_GOTO): New CPP definition.
	(default_host_cpu): Set to 'no-assembly' when JITTER_HAVE_ACTUAL_GCC is 'no'.
	(jitter_enable_dispatch_direct_threading): Use ac_cv_have_gnu_c_computed_goto
	instead of GCC.  Change user message.
	(jitter_enable_dispatch_minimal_threading, jitter_enable_dispatch_no_threading):
	Use JITTER_HAVE_ACTUAL_GCC instead of GCC.  Change user message.

	* jitter/jitter-config.h.in (JITTER_HAVE_ACTUAL_GCC)
	(JITTER_HAVE_GNU_C_COMPUTED_GOTO): New CPP feature macros.

2020-01-05  Luca Saiu  <positron@gnu.org>

	no-threading: bug workaround in residual access

	Add a very very ugly workaround for a bug.

	* templates/vm.h [JITTER_ARRAY_BIAS]: Add temporary workaround and comment.

2019-12-20  Luca Saiu  <positron@gnu.org>

	jitterlisp: manual changes

	* example-vms/jitterlisp/doc/jitterlisp.texi: Manual changes.

2019-12-17  Luca Saiu  <positron@gnu.org>

	Merge branch 'signals' of ageinghacker.net:jitter

2019-12-17  Luca Saiu  <positron@gnu.org>

	implement support for asynchronous notifications, signals, VM state list

	Add support for cleanly sending and receiving asynchronous
	notifications in general and signals in particular directed to a
	specific thread/VM state.  Make safe-points very efficient, using
	The Array.

	Link every VM state into a doubly linked list, easy to iterate on.

	No specific suppor for synchronization yet.

	Add example code in the Uninspired VM, to make the new features
	easy to play with.  Document at least the new identifiers.

	* jitter/jitter-signals.c: New file.
	* jitter/jitter-signals.h: New file.

	* Makefile.am (SOURCES_FOR_LIBJITTER, jitterinclude_HEADERS): Add
	new header and source.

	* example-vms/uninspired/uninspired.jitter (jitter_my_signal_handler): New
	static function in late-c.
	(install-signal-handler, set-pending, handle-pending, safe-point): New VM
	instructions.

	* jitter/jitter-vm.h: Include jitter/jitter-list.h.
	(struct jitter_vm): New field states.

	* jitterc/jitterc-generate.c (jitterc_emit_state_h): New field links in
	generated struct vmprefix_state.
	(jitterc_emit_state): Call vmprefix_initialize_special_purpose_data in
	generated code.  Link state at initialization, unlink at finalization in
	generated code.
	(jitterc_emit_executor_special_purpose_state_data_access_macros): New function.
	(jitterc_emit_executor): Call
	jitterc_emit_executor_special_purpose_state_data_access_macros.

	* jitterc/jitterc-vm.c (jitterc_add_implicit_wraps): New static function.
	(jitterc_make_vm): Call jitterc_add_implicit_wraps.

	* templates/vm.h: Include jitter/jitter-signals.h.  Include jitter/jitter-list.h.
	(vmprefix_states): New extern variable.
	(VMPREFIX_OWN_STATE, VMPREFIX_FOR_EACH_STATE): New macros.
	(struct jitter_special_purpose_state_data): New struct.
	(VMPREFIX_ARRAY_VOLATILE_QUALIFIER)
	(VMPREFIX_ARRAY_TO_SPECIAL_PURPOSE_STATE_DATA_PRIVATE): New internal macros.
	(JITTER_ARRAY_BIAS): Add commented-out alternative, appropriate for some
	architectures.
	(VMPREFIX_FIRST_MEMORY_RESIDUAL_UNBIASED_OFFSET): Redefine.
	(VMPREFIX_SPECIAL_PURPOSE_STATE_DATA_UNBIASED_OFFSET): New macro.
	(VMPREFIX_SPECIAL_PURPOSE_STATE_DATA_OFFSET)
	(VMPREFIX_ARRAY_TO_SPECIAL_PURPOSE_STATE_DATA)
	(VMPREFIX_OWN_SPECIAL_PURPOSE_STATE_DATA)
	(VMPREFIX_STATE_TO_SPECIAL_PURPOSE_STATE_DATA)
	(VMPREFIX_STATE_TO_PENDING_NOTIFICATIONS)
	(VMPREFIX_STATE_AND_SIGNAL_TO_PENDING_SIGNAL_NOTIFICATION): New macros.
	(vmprefix_vm): Change pointed object constness for extern variable.
	Add and improve comments.

	* templates/vm1.c (vmprefix_vm): Change pointed object constness.
	(vmprefix_states): New global variable.
	(vmprefix_initialize_special_purpose_data)
	(vmprefix_finalize_special_purpose_data): New static functions.
	(vmprefix_initialize): Initialize state list.
	(vmprefix_finalize): Add assertions: there must be zero states in the list.

	* doc/jitter.texi: Add documentation stubs.

2019-12-05  Luca Saiu  <positron@gnu.org>

	unified routines: fix bug in routine printing

	I forgot to automatically make an executable routine whenever a unified routine
	is printed.  This caused a surprising bug in Structured, where routines worked
	correctly and disassembled to correct native code but printed with misplaced
	labels.  Labels are resolved at the time an executable routine is made.

	Poke should not be affected, as I took care of explicitly generating executable
	routines as soon as possible when I ported it to the unified routine API, in
	order to prevent reentrancy problems later when a routine is executed for the
	first time.

	JitterLisp is not affected because it does not use the unified API.  Likewise,
	machine-generated frontends for VMs do not use the unified API.

	Do not make jitter_routine_print just a macro alias for
	jitter_mutable_routine_print: turn it into a real C function doing the missing
	part of the job.  Fix macro wrappers.

	No visible changes in the user API.

	* jitter/jitter-routine.h (jitter_routine_print): New prototype.

	* jitter/jitter-routine.c (jitter_routine_print): New function.

	* templates/vm.h (vmprefix_routine_print): Redefine as a macro alias for
	jitter_routine_print instead of jitter_mutable_routine_print.  Now that
	vmprefix_routine_print fits the same pattern as vmprefix_disassemble_routine
	and vmprefix_disassemble_routine_to merge the comments for all three.

2019-12-05  Luca Saiu  <positron@gnu.org>

	manual changes

	* doc/jitter.texi: Manual changes.

2019-12-05  Luca Saiu  <positron@gnu.org>

	cosmetic change

	* jitterc/jitterc-generate.c (jitterc_emit_executor_register_access_macros):
	Remove obsolete comment.  Fix indentation.

2019-12-05  Luca Saiu  <positron@gnu.org>

	build system: check for sigaction

	* configure.ac: Add check for sigaction.  Conditionally define CPP feature macro
	JITTER_HAVE_SIGACTION.
	* jitter/jitter-config.h.in (JITTER_HAVE_SIGACTION): New CPP feature macro.

2019-12-01  Luca Saiu  <positron@gnu.org>

	build system: support Automake older than 1.16

	Automake 1.16 fixed a bug related to the expansion of .deps files whose pathname
	contained Make variables.  Switch from Make variables to Autoconf substitutions
	to avoid triggering it.

	* Makefile.am (AM_CPPFLAGS) [JITTER_HAVE_ASSEMBLY]: Change
	$(JITTER_ASSEMBLY_SUBDIRECTORY) to @JITTER_ASSEMBLY_SUBDIRECTORY@.
	(SOURCES_FOR_LIBJITTER) [JITTER_HAVE_ASSEMBLY]: Likewise.
	(jittermachineinclude_HEADERS) [JITTER_HAVE_ASSEMBLY]: Likewise.

	Bug reported by John Darrington, who also found the relevant Automake bug.

2019-11-29  Luca Saiu  <positron@gnu.org>

	new stack operation bulge

	Add a new stack operation, a generalization of the "over swap" pattern for
	duplicating a non-top element.

	* jitter/jitter-stack.h (JITTER_STACK_TOS_BULGE, JITTER_STACK_NTOS_BULGE): New
	macros.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions): Emit
	friendly user definition for the bulge operation.

	* example-vms/uninspired/uninspired.jitter (bulge, bulgeforth): New VM
	instructions.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Add font lock support for
	JITTER_BULGE_.

2019-11-29  Luca Saiu  <positron@gnu.org>

	stack header: move comment to a better position

	* jitter/jitter-stack.h: Move and rephrase comment.

2019-11-29  Luca Saiu  <positron@gnu.org>

	new stack operation whirl

	Add a new stack operation, a generalization of the "nip swap" pattern.

	* jitter/jitter-stack.h (JITTER_STACK_TOS_WHIRL, JITTER_STACK_NTOS_WHIRL): New
	macros.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions): Emit
	friendly user definition for the whirl operation.

	* example-vms/uninspired/uninspired.jitter (whirl, whirlforth): New VM
	instructions.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Add font lock support for
	JITTER_WHIRL_.

2019-11-29  Luca Saiu  <positron@gnu.org>

	align snippet code to a conservatively safe power of 2

	This fixes snippets on SH and possibly on other architectures with the same
	requirement.

	* jitter/jitter_snippet (jitter_snippet): Align to 8 bytes before the label.

2019-11-28  Luca Saiu  <positron@gnu.org>

	new stack operation: slide

	Add a new stack operation, slide.  This is a generalization of nip allowing to
	remove a given number of elements at a given depth from a TOS or non-TOS stack.
	The operation is fast when the arguments are known at compile time, but can be
	dangerous if used carelessly: replacing the top is forbidden.

	Add VM instructions for slide in the Uninspired example.

	* jitter/jitter-stack.h (JITTER_STACK_TOS_SLIDE, JITTER_STACK_NTOS_SLIDE): New
	macros.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions): Emit
	friendly user definitions for the slide operation.

	* example-vms/uninspired/uninspired.jitter (slide, slideforth): New VM
	instructions.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Add font lock support for
	JITTER_SLIDE_.

2019-11-28  Luca Saiu  <positron@gnu.org>

	stack macros: accept unsigned depths

	Add casts inside stack macro definitions accepting depth arguments so that the
	code does the right thing even when the argument happens to be unsigned.  Stacks
	can be accessed relative to the top or under-top pointer using array notation,
	and either the final index or some intermediate expression may well be negative.

	* jitter/jitter-stack.h (JITTER_STACK_NTOS_AT_NONZERO_DEPTH)
	(JITTER_STACK_NTOS_SET_AT_DEPTH JITTER_STACK_TOS_SET_AT_NONZERO_DEPTH): Add
	cast to signed type.
	(JITTER_STACK_TOS_AT_NONZERO_DEPTH): Likewise.  Seize the occasion to fix a
	missing parentheses around the macro argument.

2019-11-28  Luca Saiu  <positron@gnu.org>

	uninspired VM: make debugging instructions non-relocatable

	This reduces noise when disassembling.

	* example-vms/uninspired/uninspired.jitter (push-depths, push-increasing)
	(print-topmost): Make non-relocatable.

2019-11-27  Luca Saiu  <positron@gnu.org>

	cosmetic changes

	* configure.ac (jitter_define_prefixed_macro_string): New M4 macro.
	(JITTER_PACKAGE_NAME, JITTER_PACKAGE_VERSION, (JITTER_PACKAGE_BUGREPORT): Remove
	ad-hoc definition, define using jitter_define_prefixed_macro_string.
	Comment changes.  Indentation changes.

	* jitter/jitter-machine-common.S: Update after a change which made it incorrect.

	* jitter/jitter-cpp.h: Add comment.

	* jitter/jitter-stack.h: Cosmetic changes in comments.

2019-11-27  Luca Saiu  <positron@gnu.org>

	comment changes

	* jitter/jitter-config.h.in: Comment changes.

2019-11-27  Luca Saiu  <positron@gnu.org>

	jitterlisp bug fix

	* example-vms/jitterlisp/jitterlisp-eval-vm.c (jitterlisp_apply_compiled): Do
	not violate the VM ABI in native procedure call.

2019-11-25  Luca Saiu  <positron@gnu.org>

	add windows support

	Add support for executable memory in windows.  Recognize windows at
	configuration time.

	Windows support is, of course, not at all a priority.  I only test,
	occasionally, using a cross-GCC with mingw and in emulation with Wine.

	* configure.ac: Add check for VirtualAlloc and VirtualProtect.
	(JITTER_HOST_OS_IS_WINDOWS): New CPP feature macro definition.

	* jitter/jitter-config.h.in (JITTER_HOST_OS_IS_GNU_HURD)
	(JITTER_HOST_OS_IS_GNU_LINUX, JITTER_HOST_OS_IS_WINDOWS): New CPP feature
	macros.

	* jitter/jitter-mmap.c: Add comments.  Make header inclusion conditional.
	Fail if JITTER_HAVE_MMAP_ANONYMOUS and JITTER_HOST_OS_IS_WINDOWS are both
	undefined.
	(jitter_executable_make_block_primitive): Conditionalize on
	JITTER_HAVE_MMAP_ANONYMOUS.  Add JITTER_HOST_OS_IS_WINDOWS case.
	(jitter_executable_destroy_block_primitive): Likewise.
	(jitter_initialize_executable): Likewise.

2019-11-25  Luca Saiu  <positron@gnu.org>

	rename misnamed feature macro

	* configure.ac (JITTER_HAVE_MMAP_ANONYMOUS): Rename from
	JITTER_HAVE_MAP_ANONYMOUS.
	* jitter/jitter-config.h.in: Likewise.
	* tests/unit/heap-test.c: Likewise.

2019-11-25  Luca Saiu  <positron@gnu.org>

	build system sanity check

	* configure.ac (Dispatching models to be enabled): Fail with an explicit
	error message if no dispatch is enabled.

2019-11-25  Luca Saiu  <positron@gnu.org>

	lots of portability improvements

	In order to avoid dist and distcheck problems with architectures lacking
	assembly support and to let me use variables in a more convenient way in
	Makefile.am, introduce a "dummy" architecture, containing dummy
	architecture-specific files.

	Add more configure checks.  Add previously overlooked CPP macros in
	configuration template.

	Do not unconditionally rely on ELF features in assembly sources, building some
	higher-level abstraction instead -- there is now some redundancy with similar
	features in C.  Support COFF from assembly.

	Simplify and clean up.

	* configure.ac: In case a machine has no host assembly support, substitute
	JITTER_ASSEMBLY_SUBDIRECTORY to "dummy".
	Check for popen, pclose.
	(JITTER_HAVE_POPEN): New CPP definition.

	* Makefile.am (SOURCES_FOR_LIBJITTER) [JITTER_HAVE_ASSEMBLY]: Remove obsolete
	comment.  Replace @JITTER_ASSEMBLY_SUBDIRECTORY@ substitution with $(VARIABLE)
	for uniformity.  The asymmetry was a workaround for a long since fixed bug.
	(EXTRA_DIST): Add new dummy machine files.

	* machine/dummy/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/dummy/jitter/machine/jitter-machine-c.c: New file.
	* machine/dummy/jitter/machine/jitter-machine.h: New file.

	* jitter/jitter-config.h.in (JITTER_HAVE_LONG_DOUBLE): New (previously
	forgotten) CPP definition.
	(JITTER_HAVE_POPEN): New CPP definition.

	* jitter/jitter-disassemble.c: Conditionalize over JITTER_HAVE_POPEN.
	(jitter_disassemble_range) [! JITTER_HAVE_POPEN]: Provide clean alternative.

	* jitter/jitter-machine-common.S: Clean up and improve comments.
	(jitter_asm_word): New Gas macro.
	(jitter_asm_enter_section, jitter_asm_exit_section): New Gas macros.
	(JITTER_ASM_WITH_COFF_GLOBAL_PREFIX): New CPP macro.
	(jitter_global_begin, jitter_global_end): New Gas macros.
	(jitter_arrays): Remove parameter, now obsolete thanks to jitter_asm_word.
	Cleanup and factor using the new facilities.  Remove commented-out code.
	(jitter_native_snippet_sizes): Make elements word-sized, in the sense of Jitter,
	instead of 32-bit.  Guaranteeing a known size on every architecture does not
	seem practical.

	* jitter/jitter-patch.h (jitter_native_snippet_sizes): Change element type to
	jitter_uint, in accordance to above.

	* bin/jitter-config.in.m4sh: Check for "dummy" as an the subdirectory name
	instead of an empty string.

	* machine/mips/jitter/machine/jitter-machine-assembly.S: Remove jitter_arrays
	argument.
	* machine/powerpc/jitter/machine/jitter-machine-assembly.S: Likewise.
	* machine/sh/jitter/machine/jitter-machine-assembly.S: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine-assembly.S: Likewise.
	* machine/sparc/jitter/machine/jitter-machine-assembly.S: Likewise.  Remove
	conditional on word size, subsumed by the new element type for jitter_arrays.

2019-11-25  Luca Saiu  <positron@gnu.org>

	manual change

	* doc/jitter.texi: Manual change.

2019-11-25  Luca Saiu  <positron@gnu.org>

	comment fix

	* jitter/jitter-machine-common.S [.note.GNU-stack]: Fix closing comment after
	CPP conditional.

2019-11-25  Luca Saiu  <positron@gnu.org>

	make support for .section .note.GNU-stack conditional even on GNU

	Do not unconditionally assume that .section .note.GNU-stack (see
	jitter/jitter-machine-common.S for more information) is available,
	even on an ELF platform using the GNU binutils; my toolchain for ARM,
	for example, does not support it.

	Add a clean configure check to check from C, using inline assembly.

	This fixes support for my ARM target, and likely others in the same condition.

	* configure.ac: Add comment.  New configuration check.
	(ac_cv_have_section_note_gnu_stack): New shell variable.
	(JITTER_HAVE_SECTION_NOTE_GNU_STACK): New feature macro CPP definition.

	* jitter/jitter-config.h.in (JITTER_HAVE_SECTION_NOTE_GNU_STACK): New feature
	  macro.

	* jitter/jitter-machine-common.S (.section .note.GNU-stack): Conditionalize.

2019-11-25  Luca Saiu  <positron@gnu.org>

	cosmetic change

	* jitter/jitter-stack.h (JITTER_STACK_TOS_DROP): Cosmetic improvement.  Add
	comments.

2019-11-25  Luca Saiu  <positron@gnu.org>

	stack: tentative optimization for over in the TOS case

	* jitter/jitter-stack.h (JITTER_STACK_TOS_OVER_LONGER): New name for what was
	JITTER_STACK_TOS_OVER.
	(JITTER_STACK_TOS_OVER_SHORTER): New macro.
	(JITTER_STACK_TOS_OVER): New macro.
	Add comment.

2019-11-25  Luca Saiu  <positron@gnu.org>

	new stack primitive: tuck

	Add a new stack primitive, tuck.  As in standard Forth its effect is
	( a b -- b a b ).

	* jitter/jitter-stack.h (JITTER_STACK_TOS_TUCK, JITTER_STACK_NTOS_TUCK): New
	macros.
	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions): Emit
	friendly user definitions for the tuck operation.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Add font-lock support for
	JITTER_TUCK_.

	* example-vms/uninspired/uninspired.jitter (tuck): New VM instruction.

2019-11-25  Luca Saiu  <positron@gnu.org>

	new stack micro-primitive: quake

	Add a new stack primitive, with effect ( a b c -- b a c ).

	* jitter/jitter-stack.h (JITTER_STACK_TOS_QUAKE, JITTER_STACK_NTOS_QUAKE): New
	macros.
	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions): Emit
	friendly user definitions for the quake operation.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Add font-lock support for
	JITTER_QUAKE.

	* example-vms/uninspired/uninspired.jitter (quake): New VM instruction.

2019-11-25  Luca Saiu  <positron@gnu.org>

	uninspired example: new VM instructions

	Add Forth-style roll and -roll, taking the depth argument from the stack.

	* example-vms/uninspired/uninspired.jitter (rollforth, mrollforth): New VM
	instructions.

2019-11-23  Luca Saiu  <positron@gnu.org>

	comment fix

	* bootstrap (bootstrap_post_import_hook): Fix comment.

2019-11-23  Luca Saiu  <positron@gnu.org>

	move config.h to a subdirectory, to prevent collision with the super-package

	Sub-package mode: even if collisions are unlikely when the super-package behaves
	sensibly (it will give priority to its own build directory with -I options
	rather than to Jitter's build directory) I have always been worried about the
	problem of having two different files named config.h, one in jitter/ and another
	in its super-package.

	Unfortunately renaming config.h in Jitter is not feasible as Gnulib relies very
	strongly on its name.  However I discovered a very easy workaround: Jitter's
	config.h can still be named config.h, but live in a different directory.  Gnulib
	has no problem with that, and there is not even any need to change anything in
	the build system: the directory containing config.h is automatically searched
	for through a -I option when building Jitter itself.

	The new directory will not be visible by the super-package, which will therefore
	not see Jitter's config.h at all.  That is fine, since jitter/jitter-config.h
	will remain visible, and it is designed to contain all the relevant information
	while avoid collisions in both file names and CPP macro names.

	* configure.ac (AC_CONFIG_HEADERS): Move config.h to a config-private/config.h.
	Add comment.
	* bootstrap.conf (bootstrap_post_import_hook): Make config-private/ directory.

2019-11-23  Luca Saiu  <positron@gnu.org>

	structured example: add a bootstrap script

	* example-vms/structured/bootstrap: New file.
	* Makefile.am (EXTRA_DIST): Distribute new file.
	* example-vms/structured/Makefile.am (EXTRA_DIST): Distribute new file.  Add
	comments.

2019-11-23  Luca Saiu  <positron@gnu.org>

	make JITTER_CPPFLAGS mandatory for every Jitter header: fail if forgotten

	JITTER_CPPFLAGS and its dispatch-specific variants contain the required -I flags
	to make headers from a sub-package Jitter take precedence over another installed
	Jitter, which may be older, newer, or configured in a different way.

	Forcing the user to always supply the flags at preprocessing time will prevent
	subtle, difficult to understand bugs.

	Fail at preprocessing time if the user forgets to supply the required flags,
	showing a long error message explaining the issue in detail.

	Some compilation units within Jitter itself (in the utility library and the C
	code generator) use Jitter headers but are in fact dispatch-independent.  These
	compilation units are now preprocessed with a new macro JITTER_INTERNAL defined
	on the command line, which the user never needs to see but has the effect of
	preventing the intentional failure.

	Update the build system to compile such internal files with JITTER_INTERNAL
	defined.

	* Makefile.am (CPPFLAGS_FOR_INTERNAL_USE): New variable.
	(lib_libjitterutility__convenience_la_CPPFLAGS, tests_unit_heap_test_CPPFLAGS):
	New variables.
	(bin_jitter_CPPFLAGS): Add $(CPPFLAGS_FOR_INTERNAL_USE).

	* jitter/jitter.h [no dispatch chosen at CPP time]: No longer automatically
	define a best dispatching mode in the header file.  Instead, fail at
	preprocessor time unless JITTER_INTERNAL is defined.
	(JITTER_DISPATCH_NAME, JITTER_DISPATCH_NAME_STRING): Do not fail if
	JITTER_INTERNAL is defined.

	* jitter/jitter-specialize.h (struct jitter_executable_routine): Accept
	that no dispatch is selected without failing, if JITTER_INTERNAL is
	defined.  Add an #else branch only containing an explanation in a comment.
	All of the above twice, in two different CPP conditionals.

2019-11-23  Luca Saiu  <positron@gnu.org>

	jitter-config: improve --help message explaining where to use flags

	* bin/jitter-config.in.m4sh (help): Improve --help message.

2019-11-23  Luca Saiu  <positron@gnu.org>

	minor manual changes

	Add a few nodes, mostly stubs, which I will soon need to link from Jitter error
	messages.  Even if the content is not there yet I need names for the nodes to
	refer to.

	* doc/jitter.texi: Documentation changes.

2019-11-23  Luca Saiu  <positron@gnu.org>

	make JITTER_DISPATCH_NAME_STRING prettier

	Redefine JITTER_DISPATCH_NAME_STRING so as to contain dashes rather than
	underscores to separate words.

	* jitter/jitter.h (JITTER_DISPATCH_NAME): Move definition.  Redefine.  Update
	comments.

2019-11-23  Luca Saiu  <positron@gnu.org>

	prefixed feature macros: convert forgotten uses of unprefixed versions

	* jitter/jitter-disassemble.c: Change WORDS_BIGENDIAN to JITTER_WORDS_BIGENDIAN.
	* machine/mips/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/powerpc/jitter/machine/jitter-machine-c.c: Likewise.

2019-11-23  Luca Saiu  <positron@gnu.org>

	configure: user message change

	* configure.ac (jitter_define_prefixed_macro): Change user message.

2019-11-23  Luca Saiu  <positron@gnu.org>

	remove FIXME comment

	* jitter/jitter-config.h.in: Remove FIXME comment.

2019-11-23  Luca Saiu  <positron@gnu.org>

	build system: define CPP macros with JITTER_ prefix in installed header

	Since jitter/jitter-config.h ends up installed, or included by user code in a
	super-package typically using its own config.h , I need to prevent macro name
	clashes.

	Define macros with a JITTER_ prefix in header jitter/jitter-config.h , generated
	by config.status.  Rename unprefixed macros defined by Autoconf or Gnulib tests
	to fit this pattern.

	Use the new prefixed macros instead of their usual unprefixed counterparts.

	* configure.ac: Define non-colliding alternatives to Autoconf feature macros.
	(jitter_define_prefixed_macro, jitter_define_prefixed_feature_macro): New M4
	macros.
	(JITTER_WORDS_BIGENDIAN, JITTER_HAVE_LONG_LONG_INT)
	(JITTER_HAVE_UNSIGNED_LONG_LONG_INT, JITTER_HAVE_LONG_DOUBLE)
	(JITTER_HAVE_ALARM, JITTER_HAVE_MAP_ANONYMOUS, JITTER_HAVE_SETRLIMIT)
	(JITTER_HAVE_FLOCKFILE): New conditional definitions.
	(JITTER_SIZEOF_VOID_P, JITTER_SIZEOF_SHORT, JITTER_SIZEOF_INT)
	(JITTER_SIZEOF_LONG, JITTER_SIZEOF_LONG_LONG, JITTER_SIZEOF_FLOAT)
	(JITTER_SIZEOF_DOUBLE, JITTER_SIZEOF_LONG_DOUBLE): New definitions.
	New section "Generated C headers".  Add comment.
	(AC_TYPE_LONG_DOUBLE): Add check.
	(JITTER_HAVE_ASSEMBLY): Conditionally define as 1 instead of yes.

	* jitter/jitter-config.h.in: Improve comment.  Use prefixed macro names instead
	of unprefixed macro names as predefined by Autoconf or Gnulib tests.

	* jitter/jitter.h: Use the new prefixed macros instead of their unprefixed
	counterparts.
	* jitter/jitter-missing.c:
	* jitter/jitter-routine.y: Likewise.
	* jitter/jitter-sections.h: Likewise.
	* machine/sparc/jitter/machine/jitter-machine-assembly.S: Likewise.
	* machine/sparc/jitter/machine/jitter-machine-c.c: Likewise.
	* templates/vm-main.c: Likewise.
	* tests/unit/heap-test.c: Likewise.

2019-11-23  Luca Saiu  <positron@gnu.org>

	jitterlisp: explicitly include Gnulib's config.h in a few places

	* example-vms/jitterlisp/jitterlisp-run-input.c: Include Gnulib's config.h.
	* example-vms/jitterlisp/jitterlisp-run-input.h: Likewise.
	* example-vms/jitterlisp/jitterlisp.h: Likewise.

2019-11-23  Luca Saiu  <positron@gnu.org>

	bootstrap: provisionally disable --conditional-dependencies for gnulib-tool

	When enabling --conditional-dependencies I am seeing link failures in JitterLisp
	on GNU, with rpl_gettimeofday (not needed on GNU) not found.  I may investigate
	the issue later.

	Disable --conditional-dependencies for the time being.

	* bootstrap.conf (gnulib_tool_option_extras): Remove --conditional-dependencies,
	keeping the alternative version with it commented out.

2019-11-23  Luca Saiu  <positron@gnu.org>

	add local private script to .gitignore

	* .gitignore: Add BREAK-INSTALLATION.

2019-11-23  Luca Saiu  <positron@gnu.org>

	minor changes in including config.h , which is affected by Gnulib

	Avoid including config.h in any file not depending on Gnulib.  The intent is
	keeping the installed library from relying on Gnulib.  Gnulib is only used for
	Jitter executables (the C generator, and some examples), and for configuration.

	The jitter/jitter-config.h header can be included anywhere, and in fact it is
	installed.  That is safe to use everywhere.  A coming change set will rename
	feature macros by adding a JITTER_ prefix to prevent clashes, where such prefix
	does not exist already.

	* example-vms/structured/structured.l: Remove config.h inclusion.
	* jitter/jitter-disassemble.c: Likewise.
	* jitter/jitter-mutable-routine.c: Likewise.

	* jitterc/jitterc-generate.c: Add comment.  Remove commented-out inclusion
	in generated code.

	* jitterc/jitterc-generate.h: Add comment about config.h inclusion.
	* jitterc/jitterc-main.c: Likewise.
	* jitterc/jitterc-mangle.c: Likewise.
	* jitterc/jitterc-utility.c: Likewise.
	* jitterc/jitterc-utility.h: Likewise.
	* jitterc/jitterc-vm.c: Likewise.
	* jitterc/jitterc-vm.h: Likewise.
	* jitterc/jitterc.l: Likewise.
	* jitterc/jitterc.y: Likewise.

	* jitter/jitter-missing.c: Remove config.h inclusion.  Include
	jitter/jitter-config.h instead.

	* example-vms/structured/structured.y: Remove config.h inclusion.  Remove
	commented-out includes.

	* machine/mips/jitter/machine/jitter-machine-c.c: Remove commented-out inclusion
	of config.h.
	* machine/powerpc/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/sh/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/sparc/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine-c.c: Likewise.

2019-11-23  Luca Saiu  <positron@gnu.org>

	bootstrap: configure Gnulib so as to make executables potentially smaller

	* bootstrap.conf (gnulib_tool_option_extras): Add --conditional-dependencies
	option.

2019-11-23  Luca Saiu  <positron@gnu.org>

	uninspired VM: make it slower but faster to build

	The Uninspired VM takes a ridiculously long time and a ridiculously large
	amount of RAM to build, for an example.

	Lower the number of fast registers to one, at least for the time being
	until I reduce combinatorial explosion in specialization.

	* example-vms/uninspired/uninspired.jitter (register class r): Change fast
	register number.

2019-11-23  Luca Saiu  <positron@gnu.org>

	structured VM: make it slower but faster to build

	The Structured VM takes a ridiculously long time and a ridiculously large
	amount of RAM to build, for an example.

	Lower the number of fast registers to two, at least for the time being
	until I reduce combinatorial explosion in specialization.

	* example-vms/structured/structured.jitter (register-class r): Change fast
	register number.

2019-11-12  Luca Saiu  <positron@gnu.org>

	rename JITTER_UNINSTALLED_LDFLAGS to JITTER_NON_INSTALLED_LDFLAGS

	Being in a "not installed" state is different from being "uninstalled".  I had
	chosen a bad name for this substitution.  Rename.

	* configure.ac (JITTER_UNINSTALLED_LDFLAGS): Rename substitution to
	JITTER_NON_INSTALLED_LDFLAGS.

	* Makefile.am (JITTER_UNINSTALLED_LDFLAGS): Likewise

2019-11-12  Luca Saiu  <positron@gnu.org>

	fix make tags, working around Automake bug 38139

	'make tags' failed in Jitter because of this Automake bug:
	  https://debbugs.gnu.org/cgi/bugreport.cgi?bug=38139
	  https://lists.gnu.org/archive/html/automake/2019-10/msg00001.html

	I reported the bug along with a trivial one-character fix and Karl Berry
	provisionally acknowledged the problem.  The Automake maintainers have not
	responded yet, but that is not terribly important: older Automake installations
	will remain in use for some time, so it is better to work around the issue and
	ensure compatibility with all versions.  Do that.

	* Makefile.am (dist_lisp_LISP): Replace with dist_lisp_DATA, to work around
	an Automake bug.  Add comments.

2019-11-08  Luca Saiu  <positron@gnu.org>

	bootstrap: lower required version of flex

	José Marchesi reported that flex 2.6.1 works fine as well.  I was erring on the
	safe side recommending the version I happened to have installed, but since 2.6.1
	has been tested as well, the requirement can be lowered.

	* bootstrap.conf (buildreq): Lower required flex version.

2019-11-06  Luca Saiu  <positron@gnu.org>

	update .gitignore

	Now that Poke is using Jitter in sub-package mode, Poke builders will see
	the output of git status polluted by generated files if I am not careful
	with this.  Update .gitignore in Jitter.

	Reported by José Marchesi.

	* .gitignore: Update, ignoring generated files and files I keep in my
	working directory.

2019-11-06  Luca Saiu  <positron@gnu.org>

	add non-Jitter benchmarking examples

	* example-vms/structured/examples/primes.java: New file.
	* example-vms/structured/examples/primes.py: New file.
	* Makefile.am (EXTRA_DIST): Distribute new files.
	* example-vms/structured/Makefile.am (EXTRA_DIST): Distribute new files.
	* THANKS: New file.

2019-11-06  Luca Saiu  <positron@gnu.org>

	change comments describing jitter_routine_make_executable_if_needed as internal

	I changed my mind about jitter_routine_make_executable_if_needed: there are
	reasonable use cases, likely common in realistic applications, where the user
	may want to call the function explicitly.

	Change the comments saying the function is for internal use, describing the
	intended use case.

	* jitter/jitter-routine.h (jitter_routine_make_executable_if_needed): Change
	comment.

	* jitter/jitter-routine.c (jitter_routine_make_executable_if_needed): Remove
	sectioning comment.

2019-11-06  Luca Saiu  <positron@gnu.org>

	whitespace fix

	* templates/vm.h (VMPREFIX_MUTABLE_ROUTINE_APPEND_REGISTER_PARAMETER): Remove
	trailing whitespace in comment.

2019-11-06  Luca Saiu  <positron@gnu.org>

	build system: silence harmless warning

	Remove some noise from the Jitter build output in sub-package mode.

	* Makefile.am (.la.a): Silence a warning in the explicit libtool invocation
	extracting static libraries from Libtool libraries.  This is used in sub-package
	mode, and the message might worry some Jitter users.

2019-11-06  Luca Saiu  <positron@gnu.org>

	change a forgotten reference "program" into "routine" in a comment

	* templates/vm.h (VMPREFIX_MUTABLE_ROUTINE_APPEND_REGISTER_PARAMETER): Comment
	fix.

2019-11-06  Luca Saiu  <positron@gnu.org>

	build system: change user message

	* autoconf/jitter.m4 (AC_JITTER_SUBPACKAGE): Change message.

2019-11-06  Luca Saiu  <positron@gnu.org>

	check bootstrap requirements

	* bootstrap.conf (buildreq): Add missing bootstrap-time requirements.
	Bug reported by Darshit Shah.

2019-10-30  Luca Saiu  <positron@gnu.org>

	build system: disable "examples" and "benchmarking-examples" in sub-package mode

	I do not want Jitter's (very heavyweight) examples to be built as a side effect
	when just building the examples in a super-package, which may well have similarly
	named targets.

	* Makefile.am (examples, benchmarking-examples): Wrap around an Automake
	conditional ! JITTER_SUBPACKAGE.  Add comments.

2019-10-30  Luca Saiu  <positron@gnu.org>

	rewrite: small API change

	Rename a formal parameter visible from user C extensions to rewriting.

	* jitterc/jitterc-generate.c (jitterc_emit_rewriter): Rename formal parameter of
	vmprefix_rewrite from jitter_routine_p to jitter_mutable_routine_p in generated
	code.
	(jitterc_emit_rewrite_rule_instruction_template): Likewise.

	* templates/vm.h (vmprefix_rewrite): Change comment.  Rename formal in prototype
	from jitter_routine_p to jitter_mutable_routine_p in generated code, to be more
	clear even if this has no effect on the API.

	* jitter/jitter-rewrite.h (JITTTER_REWRITE_FUNCTION_PROLOG_)
	(JITTER_RULE_BEGIN_BODY, JITTER_RULE_APPEND_INSTRUCTION_)
	(JITTER_RULE_APPEND_PLACEHOLDER_): Fix uses of renamed formal parameter, from
	jitter_routine_p to jitter_mutable_routine_p.

2019-10-30  Luca Saiu  <positron@gnu.org>

	introduce the unified routine API

	As per José Marchesi's request, I am introducing an alternative optional API
	handling a single kind of routine, which serves the purpose of hiding the
	complexity, and the very existence, of executable routines, trading some
	flexibility and performance for simplicity.

	The old Jittery "routines" are now called "mutable routines".  Executable
	routines remain executable routines.  Jittery "routines", in the API, now refer
	to the unified API.

	Massive renaming.  Wrap a lot of functionality to make it available from both
	APIs.

	Port the Structured example, which is supposed to be simple, to the unified API.
	Do not port JitterLisp or the machine-generated VM template file.

	* jitter/jitter-mutable-routine.h: Rename from jitter/jitter-routine.h.
	(struct jitter_mutable_routine): Rename from struct jitter_routine.  Rename
	uses.
	(jitter_make_mutable_routine, jitter_mutable_routine_instruction_no)
	(jitter_mutable_routine_instruction_no)
	(jitter_set_mutable_routine_option_slow_registers_only)
	(jitter_set_mutable_routine_option_slow_literals_only)
	(jitter_set_mutable_routine_option_slow_literals_and_registers_only)
	(jitter_set_mutable_routine_option_add_final_exitvm)
	(jitter_set_mutable_routine_option_optimization_rewriting)
	(jitter_destroy_mutable_routine, jitter_mutable_routine_resolve_labels)
	(jitter_mutable_routine_jump_targets): Rename from jitter_make_routine,
	jitter_routine_instruction_no, jitter_set_routine_option_slow_registers_only,
	jitter_set_routine_option_slow_literals_only,
	jitter_set_routine_option_slow_literals_and_registers_only,
	jitter_set_routine_option_add_final_exitvm,
	jitter_set_routine_option_optimization_rewriting,
	jitter_destroy_routine, jitter_routine_resolve_labels,
	jitter_routine_jump_targets.
	(jitter_mutable_routine_append_label)
	(jitter_mutable_routine_append_symbolic_label)
	(jitter_mutable_routine_append_instruction_name)
	(jitter_mutable_routine_append_instruction_id)
	(jitter_mutable_routine_append_meta_instruction)
	(jitter_mutable_routine_append_literal_parameter)
	(jitter_mutable_routine_append_signed_literal_parameter)
	(jitter_mutable_routine_append_unsigned_literal_parameter)
	(jitter_mutable_routine_append_pointer_literal_parameter)
	(jitter_mutable_routine_append_register_parameter)
	(jitter_mutable_routine_append_symbolic_label_parameter)
	(jitter_mutable_routine_append_label_parameter)
	(jitter_mutable_routine_append_instruction)
	(jitter_mutable_routine_append_parameter_copy)
	(jitter_mutable_routine_print): Rename mutable routine construction and mutation
	facilities from jitter_append_label, jitter_append_symbolic_label,
	jitter_append_instruction_name, jitter_append_instruction_id,
	jitter_append_meta_instruction, jitter_append_literal_parameter,
	jitter_append_signed_literal_parameter, jitter_append_unsigned_literal_parameter,
	jitter_append_pointer_literal_parameter, jitter_append_register_parameter,
	jitter_append_symbolic_label_parameter, jitter_append_label_parameter,
	jitter_append_instruction, jitter_append_parameter_copy.
	Add and improve comments.

	* jitter/jitter-mutable-routine.c: Rename from jitter/jitter-routine.c.
	Change uses as per above.

	* jitter/jitter-routine.h: New file, now for the unified routine API.

	* jitter/jitter-routine.c: New file, now for the unified routine API.

	* templates/vm.h (VMPREFIX_ROUTINE_APPEND_INSTRUCTION)
	(VMPREFIX_ROUTINE_APPEND_INSTRUCTION_ID)
	(VMPREFIX_ROUTINE_APPEND_REGISTER_PARAMETER)
	(VMPREFIX_EXECUTABLE_ROUTINE_BEGINNING): New macros.
	(vmprefix_make_routine): New prototype.
	(vmprefix_label, vmprefix_fresh_label, vmprefix_print_vm_configuration)
	(vmprefix_set_mutable_routine_option_slow_literals_only)
	(vmprefix_set_mutable_routine_option_slow_registers_only)
	(vmprefix_set_mutable_routine_option_slow_literals_and_registers_only)
	(vmprefix_set_mutable_routine_option_add_final_exitvm)
	(vmprefix_set_mutable_routine_option_optimization_rewriting)
	(vmprefix_mutable_routine_print, vmprefix_disassemble_executable_routine)
	(vmprefix_disassemble_executable_routine_to): Move macro definitions within the
	same file.
	(vmprefix_ensure_enough_slow_registers_for): Rename prototype to
	vmprefix_ensure_enough_slow_registers_for_executable_routine.
	(vmprefix_ensure_enough_slow_registers_for_routine, vmprefix_execute_routine):
	New prototypes.
	(vmprefix_mutable_routine_append_label)
	(vmprefix_mutable_routine_append_symbolic_label)
	(vmprefix_mutable_routine_append_instruction_name)
	(vmprefix_mutable_routine_append_instruction_id)
	(vmprefix_mutable_routine_append_meta_instruction)
	(vmprefix_mutable_routine_append_literal_parameter)
	(vmprefix_mutable_routine_append_signed_literal_parameter)
	(vmprefix_mutable_routine_append_unsigned_literal_parameter)
	(vmprefix_mutable_routine_append_pointer_literal_parameter)
	(vmprefix_mutable_routine_append_register_parameter)
	(vmprefix_mutable_routine_append_symbolic_label_parameter)
	(vmprefix_mutable_routine_append_label_parameter)
	(vmprefix_mutable_routine_append_instruction)
	(vmprefix_mutable_routine_append_parameter_copy)
	(vmprefix_mutable_routine_print): Rename wrappers, and change definitions as per
	above.
	Add and improve comments.

	* jitter/jitter-routine.y (jitter_parse_file_star, jitter_parse_file)
	(jitter_parse_string): Rename to jitter_parse_mutable_routine_from_file_star,
	jitter_parse_mutable_routine_from_file, jitter_parse_mutable_routine_from_string.
	Rename uses as per above.

	* jitter/jitter-specialize.c (jitter_add_program_epilog): Rename static function
	to jitter_mutable_routine_add_epilog.

	* templates/vm1.c (vmprefix_make_routine)
	(vmprefix_ensure_enough_slow_registers_for_routine, vmprefix_execute_routine):
	New functions.
	(vmprefix_ensure_enough_slow_registers_for): Rename function to
	vmprefix_ensure_enough_slow_registers_for_executable_routine.

	* jitterlisp_sexpression.h (struct jitterlisp_compiled_closure): Rename field
	routine to mutable_routine.

	* jitter/jitter-specialize.h (jitter_make_executable_routine): Add
	returns_nonnull attribute.  Remove warn_unused_result atrtibute: there are
	legitimate use cases where the result is not used, and it is still pointed
	by the mutable routine anyway.

	* example-vms/structured/structured-main.c: Switch to the unified API.  Rename
	uses as per above.  Update comments.
	(structured_work): Do not generate executable routine.

	* jitter/jitter-routine.l: Likewise.
	* jitter/jitter-disassemble.c: Likewise.
	* jitter/jitter-instruction.h: Likewise.
	* jitter/jitter-replicate.c: Likewise.
	* jitter/jitter-replicate.h: Likewise.
	* jitter/jitter-rewrite.c: Likewise.
	* jitter/jitter-rewrite.h: Likewise.
	* jitter/jitter-routine.c: Likewise.
	* jitter/jitter-routine.h: Likewise.
	* jitter/jitter-specialize.c: Likewise.
	* jitter/jitter-specialize.h: Likewise.
	* jitter/jitter-vm.c: Likewise.
	* jitter/jitter-vm.h: Likewise.
	* example-vms/jitterlisp/jitterlisp-code-generator.c: Rename uses, as per above.
	* example-vms/structured/structured-code-generator-register.c: Likewise.
	* example-vms/structured/structured-code-generator-register.h: Likewise.
	* example-vms/structured/structured-code-generator-stack.c: Likewise.
	* example-vms/structured/structured-code-generator-stack.h: Likewise.
	* example-vms/jitterlisp/jitterlisp-eval-vm.c: Likewise.

	* jitterc/jitterc-generate.c: Likewise, in generated code.

	* templates/vm-main.c: Likewise.  Do *not* switch to the unified API.

	* Makefile.am: Rename file uses as per above.
	(SOURCES_FOR_LIBJITTER, jitterinclude_HEADERS): Add new files.

2019-10-30  Luca Saiu  <positron@gnu.org>

	structured code generator: comment fixes and improvements

	Fix a few more remaining occurrences of "program" in comments, referring to what
	is now called a routine.  Other comment fixes.

	* example-vms/structured/structured-code-generator-register.c: Comment changes.

	* example-vms/structured/structured-code-generator-stack.c: Comment changes.

2019-10-01  Luca Saiu  <positron@gnu.org>

	rename assembly "routines" (for patch-ins) to "snippets"

	The "routine" name was overloaded already, and I am introducing another change
	to it shortly.  This change set is relatively large, but should not affect the
	user API.

	The replacements are all trivial and systematic except in
	jitter/jitter-replicate.c, where "snippets" (new name) are used alongside
	"routines".

	* jitter/jitter-machine-common.S (jitter_routine_pointer_type)
	(jitter_native_routine_sizes, jitter_native_routine_pointers)
	(jitter_native_routine_names): Rename to jitter_snippet_pointer_type,
	jitter_native_snippet_sizes, jitter_native_snippet_pointers,
	jitter_native_snippet_names.
	(jitter_routine): Rename to jitter_snippet.  Update uses.  Update comments.

	* jitter/jitter-patch.h (enum jitter_routine_to_patch): Rename to
	enum jitter_snippet_to_patch.
	(jitter_native_routine_sizes, jitter_native_routine_pointers)
	(jitter_native_routine_names):
	Rename to jitter_native_snippet_sizes, jitter_native_snippet_pointers,
	jitter_native_snippet_names.
	(jitter_routine_for_loading_register, jitter_routine_for_loading_memory)
	(jitter_routine_for_patch_in, jitter_routine_for_loading, jitter_copy_routine)
	(jitter_routine_code, jitter_routine_size, jitter_routine_name):
	Rename to jitter_snippet_for_loading_register, jitter_snippet_for_loading_memory,
	jitter_routine_for_patch_in, jitter_snippet_for_loading, jitter_copy_snippet,
	jitter_snippet_code, jitter_snippet_size, jitter_snippet_name.
	Rename constant in array sizes from jitter_routine_no to jitter_snippet_no.
	Rename and retype formal parameters systematically replacing "routine" with
	"snippet".  Update uses.  Update comments.
	* jitter/jitter-patch.c: Likewise.

	* machine/mips/jitter/machine/jitter-machine-assembly.S: Update uses in accord
	to the renaming above.
	* machine/mips/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/mips/jitter/machine/jitter-machine.h: Likewise.
	* machine/powerpc/jitter/machine/jitter-machine-assembly.S: Likewise.
	* machine/powerpc/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/powerpc/jitter/machine/jitter-machine.h: Likewise.
	* machine/sh/jitter/machine/jitter-machine-assembly.S: Likewise.
	* machine/sh/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/sh/jitter/machine/jitter-machine.h: Likewise.
	* machine/sparc/jitter/machine/jitter-machine-assembly.S: Likewise.
	* machine/sparc/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/sparc/jitter/machine/jitter-machine.h: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine-assembly.S: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine-c.c: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine.h: Likewise.

	* jitter/jitter-replicate.c (struct jitter_backpatch): Rename field routine
	to snippet.
	(jitter_replicate_program): Rename locals sample_routine, sample_routine_size,
	actual_routine, actual_routine_size, routine to sample_snippet,
	sample_snippet_size, actual_snippet, actual_snippet_size, snippet.
	Update uses following the changes above.  Update comments.

	* doc/jitter.texi: Update documentation.

2019-10-01  Luca Saiu  <positron@gnu.org>

	build system: improve message

	Improve the message printed by make with install, uninstall, distcheck and
	related rules.  The behavior is not changed.

	* Makefile.am (do-nothing-on-sub-package-mode-install) [JITTER_SUBPACKAGE]:
	Improve message.

2019-09-20  Luca Saiu  <positron@gnu.org>

	jitter-config: make sub-package headers take priority over installed headers

	In sub-package mode installed headers from a different Jitter version may
	conflict with the headers in the sub-package.  Make the sub-package copy take
	priority.

	* bin/jitter-config.in.m4sh (main loop, --cppflags): Make the -I option for the
	installed headers appear at the end rather than at the beginning.

2019-09-18  Luca Saiu  <positron@gnu.org>

	do not automatically trap or break on division or remainder by 0 on MIPS

	GCC defaults to generate a conditional trap or break instruction after divisions
	on MIPS, which is wasteful.  In C division and remainder by zero have undefined
	semantics anyway, and safe languages compiled to VM code will need to add their
	own check in addition to this.

	Do not generate a trap-on-zero or break-on-zero instruction at division time on
	MIPS, with any dispatch.

	* configure.ac (Flags) [MIPS]: Check for availability of the compiler option
	-mno-check-zero-division, and use it.
	(Flags): Unrelated comment indentation fix.

2019-09-17  Luca Saiu  <positron@gnu.org>

	configure: update help string

	* configure.ac (--enable-dispatch-switch): Update long-obsolete help string.

2019-09-17  Luca Saiu  <positron@gnu.org>

	build system: cosmetic change

	* configure.ac (Select files generated by config.status): New sectioning
	comment.

2019-09-17  Luca Saiu  <positron@gnu.org>

	disable test suite by default in sub-package mode

	Rename the configure option --enable-test-suite to --enable-jitter-test-suite,
	in order to prevent collisions with configuration option for the super-package
	in sub-package mode.

	By default disable Jitter's test suite in sub-package mode.  In sub-package
	mode, when enabled, Jitter's test suite would run as a side effect of running
	the test suite of the super-package, which would be time consuming and
	distracting.

	Now, in sub-package mode with Jitter's test suite disabled, attempting to run
	the test suite anyway by means of make check or make recheck will not fail, but
	will not actually run the tests either, or print distracting output.

	* configure.ac (Test suite support, default): Change to no in sub-package mode.
	Update comments and user messages.
	(test-suite): Rename configure option --enable-test-suite to
	--enable-jitter-test-suite.  Update help string.
	(TEST_SUITE_LOG): Define as a substitution in order to override the Automake
	default.  Explain why in a comment.

	* Makefile.am (Test suite) [! JITTER_ENABLE_TEST_SUITE]: Add comment, explaining
	behavior in sub-package mode with the test suite disabled.  No change needed in
	the actual code.

2019-09-17  Luca Saiu  <positron@gnu.org>

	build system: do not provide --with-jitter with AC_JITTER_SUBPACKAGE

	The configure command-line option --with-jitter makes sense for AC_JITTER, but
	not for AC_JITTER_SUBPACKAGE.  Make AC_JITTER_SUBPACKAGE not provide it.

	Factor.

	* autoconf/jitter.m4 (AC_JITTER_WITH_JITTER_COMMAND_LINE_OPTION): New macro,
	factored from...
	(AC_JITTER_CONFIG): ...Here.  Update comments.
	(Jitter Autoconf macros, intended for the user): Add comment.
	(AC_JITTER): Require new macro.  Update comments.

2019-09-17  Luca Saiu  <positron@gnu.org>

	build system: rephrase help string for JITTER_SUBPACKAGE precious variable

	* configure.ac (JITTER_SUBPACKAGE): Rephrase help string.

2019-09-16  Luca Saiu  <positron@gnu.org>

	comment changes

	* autoconf/jitter.m4 (AC_JITTER): Comment changes.
	Comment changes elsewhere.

2019-09-15  Luca Saiu  <positron@gnu.org>

	install a C header which I was not installing by mistake

	* Makefile.am (jitterinclude_HEADERS): Add jitter/jitter-missing.h.

2019-09-15  Luca Saiu  <positron@gnu.org>

	bitwise arithmetic: revert clever but incorrect optimization

	* jitter/jitter-bitwise.h (JITTER_CONDITIONAL_IF_POSITIVE): Redefine in a
	trivial way.  Add a comment explaining why other alternatives are wrong.

2019-09-15  Luca Saiu  <positron@gnu.org>

	implement sub-package mode

	The Jitter source directory can now be easily embedded within another source
	distribution in the style of Gnulib, and configured easily from its
	super-package's configure script.  This is convenient for users, rather than
	developers, of Jitter, particularly while Jitter's API and ABI keep changing.

	In sub-package mode Jitter's installation becomes a no-op, only the best
	dispatch is enabled, and libraries are only built statically -- both as Libtool
	libraries and as ordinary static libraries.

	The new Autoconf macro AC_JITTER_SUBPACKAGE([subdirectory]) behaves just like
	AC_JITTER, except that AC_JITTER_SUBPACKAGE configures Jitter as a sub-package
	while AC_JITTER relies on an already installed Jitter as a dependency.  They
	both use the jitter-config script, which in subpackage mode refers to the Jitter
	source and build directories in pathnames.

	AC_JITTER_SUBPACKAGE relies on a new internal macro AC_JITTER_CONFIG_SUBDIRS_NOW
	(distributed along with Jitter but independent from it: other people may find it
	useful as well) to configure a sub-package by recursing into the sub-directory
	configure script immediately, rather than at the time of AC_OUTPUT.  The
	predefined Autoconf macro AC_CONFIG_SUBDIRS allows for configure recursion only
	at that late time, which prevents information from flowing back from the
	sub-package configuration to the super-package configuration and build.

	Restructure Jitter's build system to allow for sub-package mode.  Add new
	macros.  Convert the build system in the Structured example to use sub-package
	mode.

	Move scripts/jitter-config, along with its template scripts/jitter-config.in and
	the actual source scripts/jitter-config.in.m4sh, to the bin/ in the source
	directory.

	The idea of embedding Jitter as a sub-package was proposed by José Marchesi.

	* autoconf/jitter.m4 (AC_JITTER_CONFIG_SUBDIRS_NOW): New macro.
	(AC_JITTER_CONFIG, AC_JITTER_USING_AUTOMAKE): Comment and help string changes.
	(AC_JITTER_CONFIG): Check for the new environment variable JITTER_SUBPACKAGE,
	setting ac_jitter_path in a different way in sub-package mode.
	(AC_JITTER_SUBPACKAGE): New macro.

	* configure.ac (jitter_abs_top_builddir): Move to a new section near the
	beginning, redefine.
	(jitter_abs_top_srcdir): New environment variable.
	(JITTER_SUBPACKAGE): New precious variable.  Check it.
	(JITTER_SUBPACKAGE): New Automake conditional.
	(Libtool support): in sub-package mode force enable_static and enable_shared
	to fixed values, printing warnings if this contradicts command-line options.
	(Dispatching models to be enabled): Reorder code to handle sub-package mode.
	Improve comments.
	(jitter_subpackage_disclaimer): New environment variable.
	(Flags): Remove obsolete comment.  Add comment.  Change the logic for setting
	JITTER_FLAGS_CPPFLAGS and JITTER_FLAGS_LDFLAGS to handle sub-package mode.
	(Output): Change scripts/jitter-config to bin/jitter-config in AC_CONFIG_FILES.

	* Makefile.am [JITTER_SUBPACKAGE] (noinst_DATA): New variable, in fact used for
	static libraries built in an unusual way by extracting them from Libtool
	libraries.
	(flagdir, templatedir): Conditionalize on JITTER_SUBPACKAGE.
	(bin_SCRIPTS, EXTRA_DIST, dist_man1_MANS, Rules for always-installed programs):
	Update path for jitter-config and jitter-config.in.m4sh, moving from
	scripts/jitter-config to bin/jitter-config and from scripts/jitter-config.in.m4sh
	to bin/jitter-config.in.m4sh.  Likewise for manual pages: change
	scripts/jitter-config.1 to bin/jitter-config.1.
	(Non-Libtool static libraries for sub-package mode): New section.
	(.la.a): New rule.
	(noinst_DATA) [JITTER_SUBPACKAGE, JITTER_ENABLE_DISPATCH_SWITCH]: New
	conditional update.
	(noinst_DATA) [JITTER_SUBPACKAGE, JITTER_ENABLE_DISPATCH_DIRECT_THREADING]: New
	conditional update.
	(noinst_DATA) [JITTER_SUBPACKAGE, JITTER_ENABLE_DISPATCH_MINIMAL_THREADING]: New
	conditional update.
	(noinst_DATA) [JITTER_SUBPACKAGE, JITTER_ENABLE_DISPATCH_NO_THREADING]: New
	conditional update.
	(noinst_DATA) [JITTER_SUBPACKAGE]: New conditional update.
	(Installation): New section.
	(do-nothing-on-sub-package-mode-install) [JITTER_SUBPACKAGE]: New rule.
	(install, install-data, install-exec, install-info, install-ps, install-dvi)
	(install-pdf, install-html, install-man, uninstall, uninstall-data)
	(uninstall-exec, uninstall-info, uninstall-ps, uninstall-dvi, uninstall-pdf)
	(uninstall-html, uninstall-man) [JITTER_SUBPACKAGE]: New rules, overriding the
	default.
	(clean-local): Also clean up $(noinst_DATA), unconditionally, which is harmless.

	* example-vms/structured/configure.ac (Check for Jitter): Rename section to
	"Configure Jitter as a sub-package".  Remove call to AC_JITTER and subsequent
	test.  Use AC_JITTER_SUBPACKAGE instead.

	* example-vms/structured/Makefile.am (Jitter as a sub-package): New section.
	(SUBDIRS): Add jitter.  This has to be manually copied or linked to, as the
	comment says.
	(What we have to build): Comment change.
	(Jitter C-code generation): Comment change.
	($(srcdir)/structuredvm-vm.h): Add recursive make invocation in rule body.
	(Frontend C-code generation): Comment change.
	(Cleanup): Comment change.

	* scripts/jitter-config.in.m4sh: Rename to bin/jitter-config.in.m4sh.
	* bootstrap.conf (unm4sh_all): Change directory for jitter-config.in.m4sh.

2019-09-14  Luca Saiu  <positron@gnu.org>

	jitterc: cosmetic change in --help

	* jitterc/jitterc-main.c (jitterc_option_specification): Cosemtic change in
	string literal.

2019-09-14  Luca Saiu  <positron@gnu.org>

	cosmetic changes in jitter/jitter-config.h.in

	* jitter/jitter-config.h.in: Add sectioning comments, reorder.  No new or
	deleted macros.

2019-09-07  Luca Saiu  <positron@gnu.org>

	another build system bug fix, consistent with the previous one

	* autoconf/jitter.m4 (AC_JITTER_C_GENERATOR): Use either the given prefix,
	or $PATH.  Again the implementation was not consistent with the comment
	and the intended behavior, and it was even inconsistent with the behavior
	of AC_JITTER_CONFIG.

2019-09-07  Luca Saiu  <positron@gnu.org>

	fix build system bug: make --with-jitter optional, as it should be

	* autoconf/jitter.m4 (AC_JITTER_CONFIG): Use the prefix given with the configure
	option --with-jitter only if the option was actually specified; otherwise, use
	$PATH.  This was always the intended behavior as in fact was specified in the
	AC_JITTER_CONFIG comment, but the implementation was not really using $PATH.

2019-08-10  Luca Saiu  <positron@gnu.org>

	fix long option name --no-print-locations in VM program

	* templates/vm-main.c (vmprefix_main_option_specification): Fix long
	option name, renaming a duplicate "--print-locations" into the correct
	"--no-print-locations".

2019-07-30  Luca Saiu  <positron@gnu.org>

	update comment in JitterLisp

	* example-vms/jitterlisp/jitterlisp-allocator.c (jitterlisp_memory_initialize):
	Update comment.  Move code across comment within the function.

2019-07-19  Luca Saiu  <positron@gnu.org>

	conditionally define dummy macros for GNU C attributes, where unsupported

	The machinery works, but right now supports only one specific attribute.  This
	will be expanded as needed.  Right now I check for the presence of the attribute
	returns_nonnull, which some old GCCs don't support.

	* jitter/jitter-missing.h: Update initial comment.
	Include jitter/jitter-config.h.
	(attribute, __attribute__, returns_nonnull, __returns_nonnull__): New
	conditionally defined macros.
	Add comment to delimit the I/O part, which was already there.

	* jitter/jitter-config.h.in (JITTER_HAVE_GNU_C_ATTRIBUTE)
	(JITTER_HAVE_ATTRIBUTE_RETURNS_NONNULL): New feature macros.

	* jitter/jitter.h: Include jitter/jitter-missing.h.

2019-07-19  Luca Saiu  <positron@gnu.org>

	configure: fix bug; check for GNU C attributes

	When checking for the presence of __builtin_add_overflow_p and other builtins
	I have to actually link; compiling alone is not enough to check whether the
	compiler knows about the builtins.

	Check for the presence of GNU C attributes, and (at this time) one specific
	attribute.

	* configure.ac [JITTER_HAVE_GCC_OVERFLOW_CHECKING]: Use AC_LINK_IFELSE instead
	of AC_COMPILE_IFELSE.
	[JITTER_HAVE_GNU_C_ATTRIBUTE, JITTER_HAVE_ATTRIBUTE_RETURNS_NONNULL]: New
	checks.  Not used yet.

2019-07-11  Luca Saiu  <positron@gnu.org>

	comments: replace "Jittery program" by "Jittery routine", again

	* example-vms/structured/structured-main.c (structured_work): Fix comments.

2019-07-11  Luca Saiu  <positron@gnu.org>

	comments: replace old remaining uses of "Jittery program" by "Jittery routine"

	* example-vms/structured/structured-main.c (structured_work): Fix comments.

2019-07-10  Luca Saiu  <positron@gnu.org>

	structured VM: minor cleanups

	* example-vms/structured/structured.jitter (register class r): Remove comments.
	(set-r): Remove instruction, subsumed by mov.
	(r-to-r): Remove instruction, subsumed by mov.
	(push-pop--rtor): Rename to push-pop--movr, do not use removed instruction.
	(push-pop--setr): Rename to push-pop--movn, do not use removed instruction.
	Change comment in the first line.

2019-07-08  Luca Saiu  <positron@gnu.org>

	make Structured example work on 32-bit machines as well

	* example-vms/structured/examples/euclid.structured (a): Make constant smaller,
	to work on 32-bit machines as well.

2019-06-15  Luca Saiu  <positron@gnu.org>

	comment fix

	* jitter/jitter_hash_random_words (jitter_hash_random_words): Update comment,
	making the new version of the suggested code work with more recent versions
	of openssl as well.

2019-06-12  Luca Saiu  <positron@gnu.org>

	jitterlisp bugfix: make remainder-by-two of a negative return a negative

	My previous attempt and effectively returned the absolute value of the
	remainder, ignoring the sign of the argument.

	With a negative dividend I want to return a negative remainder, as C99 does.
	This new solution, by myself, is not the most beautiful but at least is
	branchless, and now correct.

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTERLISP_EXP_F_F_2REMAINDER):
	Redefine macro, now conditionally according to JITTERLISP_FIXNUM_TAG's value.

2019-06-11  Luca Saiu  <positron@gnu.org>

	make the masking-off optimization, now used for 2/ in jitterlisp, conditional

	* configure.ac (jitter_have_fast_mask_off): New shell variable.
	(JITTER_HAVE_FAST_MASK_OFF): New feature macro.
	Reword section comment.

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTER_HAVE_FAST_MASK_OFF):
	Remove unconditional definition.
	(JITTERLISP_EXP_F_F_2DIVIDED) [JITTERLISP_FIXNUM_TAG == 0]
	[JITTER_HAVE_FAST_MASK_OFF]: Fix indentation.
	(JITTERLISP_EXP_F_F_2DIVIDED) [JITTERLISP_FIXNUM_TAG == 0]: Change comment.

	* jitter/jitter-config.h.in (JITTER_HAVE_FAST_MASK_OFF): New feature macro.

2019-06-10  Luca Saiu  <positron@gnu.org>

	make the straight-line negativity check optimization conditional

	* configure.ac: Add architecture-dependent test section.
	(jitter_have_fast_straight_line_negativity): New shell variable.
	(JITTER_HAVE_FAST_STRAIGHT_LINE_NEGATIVITY): New feature macro.

	* jitter/jitter-bitwise.h (JITTER_HAVE_GOOD_SHIFT): Rename macro to
	JITTER_HAVE_FAST_STRAIGHT_LINE_NEGATIVITY.  Do not define here.

	* jitter/jitter-config.h.in (JITTER_HAVE_FAST_STRAIGHT_LINE_NEGATIVITY): New
	feature macro.

2019-06-07  Luca Saiu  <positron@gnu.org>

	whitespace fix in a JitterLisp header

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTERLISP_EXP_F_F_2DIVIDED)
	[JITTERLISP_FIXNUM_TAG != 0]: Whitespace.

2019-06-07  Luca Saiu  <positron@gnu.org>

	low-level optimizations; minor JitterLisp library improvement

	* example-vms/jitterlisp/jitterlisp-library.lisp (vmap-internal, vmap-reversed)
	(vmap, vmap!): New macros, tentatively named.

	* jitter/jitter-bitwise.h (JITTER_IS_NEGATIVE_ALL_ONES)
	(JITTER_CONDITIONAL_IF_NEGATIVE, JITTER_CONDITIONAL_IF_NEGATIVE_STRAIGHT_LINE)
	(JITTER_CONDITIONAL_IF_NEGATIVE_TRIVIAL, JITTER_CONDITIONAL_IF_NONNEGATIVE)
	(JITTER_CONDITIONAL_IF_POSITIVE, JITTER_CONDITIONAL_IF_NONPOSITIVE): New macros.
	(JITTER_HAVE_GOOD_SHIFT): New macro, to be made conditional.

	* jitter/jitter-tagging.h (JITTER_WITH_TAG_MASKED_OFF): Rename first formal,
	which had been named incorrectly for a long time.

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTERLISP_EXP_F_F_2DIVIDED)
	(JITTERLISP_EXP_F_F_2REMAINDER): New macros.
	(JITTERLISP_EXP_FF_F_DIVIDED): Whitespace.
	(JITTERLISP_2DIVIDED_, JITTERLISP_2REMAINDER_, JITTERLISP_POSITIVEP_)
	(JITTERLISP_NON_POSITIVEP_, JITTERLISP_NEGATIVEP_, JITTERLISP_NON_NEGATIVEP_):
	Rewrite macro definitions, using the new functionality.
	(JITTER_HAVE_FAST_MASK_OFF): New macro, to be made conditional.

2019-06-07  Luca Saiu  <positron@gnu.org>

	jitterlisp: manual changes

	* example-vms/jitterlisp/doc/jitterlisp.texi: Manual changes.

2019-06-07  Luca Saiu  <positron@gnu.org>

	register-based Structured compiler: bug fix

	Using a conditional primitive in some contexts, for example as the operand of
	print, failed with
	  FATAL ERROR: invalid instruction operand: anywhere
	. The problem was that the result location was completely generic, and the code
	generator for compiling conditional primitives did nothing to restrict it.

	Fix the bug.

	I wonder if I should make such restriction decisions later; I suppose the code
	would get simpler.  Add FIXME comment to remind myself of this possibility.

	* example-vms/structured/structured-code-generator-register.c
	(structured_translate_expression_conditional_primitive): Restrict the result
	location in case it is still generic, preferring a temporary.
	(structured_emit_operand): Add FIXME comments.

2019-05-22  Luca Saiu  <positron@gnu.org>

	jitterlisp manual changes

	* example-vms/jitterlisp/doc/jitterlisp.texi: Manual changes

2019-05-11  Luca Saiu  <positron@gnu.org>

	x86_64 overflow checking: minor change

	* machine/x86_64/jitter/machine/jitter-machine.h
	(_JITTER_LOW_LEVEL_OPERATION_BRANCH_FAST_IF_OVERFLOW_): Make inline asm
	volatile.  Add comment.

2019-05-11  Luca Saiu  <positron@gnu.org>

	trivial manual changes

	* doc/jitter.texi: Trivial manual changes.

2019-05-05  Luca Saiu  <positron@gnu.org>

	overflow known-constantness predicates: no longer rely on GCC builtins

	Relying on GCC overflow-checking builtins as arguments to __builtin_constant_p
	is not portable and inconvenient to conditionalize, does not give satisfactory
	results anyway which is the very reason for the presence of my own macros,
	and makes VM compilation heavier.

	* jitter/jitter-arithmetic.h (JITTER_PLUS_OVERFLOWS_KNOWN_CONSTANT_GCC)
	(JITTER_MINUS_OVERFLOWS_KNOWN_CONSTANT_GCC)
	(JITTER_TIMES_OVERFLOWS_KNOWN_CONSTANT_GCC): No longer use the GCC builtin.

2019-05-04  Luca Saiu  <positron@gnu.org>

	trivial MIPS fixes

	* machine/mips/jitter/machine/jitter-machine.h (JITTER_ASM_MIPS_NOP)
	(JITTER_MIPS_NOP): Fix grammar mistakes and typos in comments.
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_LESS_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_GREATER_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTLESS_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTGREATER_UNSIGNED_): Add obvious macros that
	I had forgotten before.

2019-05-03  Luca Saiu  <positron@gnu.org>

	huge fast branch overhaul; introduce efficient overflow checking

	Completely reorganize the way fast branches are implemented in machine-specific
	files, moving the complexity from machine-specific to machine-independent files;
	this will make porting much easier.

	Add a new portable shell script, preprocessed by M4sh and then by config.in, to
	generate a new header file containing fast-branch macro definitions.  The header
	contains very regular and repetitive definitions, tricky to define by hand,
	which rely on algebraic properties of relations.  A shell script is better than
	CPP at expressing this kind of declarative knowledge, and therefore the new
	script generates CPP macro definitions.  The new definitions are meant to expand
	to smaller C code, replacing constant C expressions with logic at header
	generation and preprocessing time.

	Reorganize x86_64 and MIPS following the new style.

	Add support for overflow-checking operations -- using machine-specific support
	where available, and generic portable macros where not.  The new primitives are
	complex in their definition but easy to use, and compile to excellent code.

	Add new conditionals for fast-branching on and and nand predicates, which are
	useful for tag checking.

	* scripts/generate-fast-branches.in.m4sh: New file.

	* jitter/jitter-executor.h (_JITTER_BRANCH_IF): Add first parameter named
	outer_operator, improve whitespace.  Change uses.
	(JITTER_BRANCH_IF_AND, JITTER_BRANCH_IF_NAND): New macros.
	(JITTER_BRANCH_IF_OPERATION_OVERFLOWS, JITTER_BRANCH_IF_PLUS_OVERFLOWS)
	(JITTER_BRANCH_IF_MINUS_OVERFLOWS, JITTER_BRANCH_IF_TIMES_OVERFLOWS)
	(JITTER_BRANCH_IF_DIVIDED_OVERFLOWS, JITTER_BRANCH_IF_REMAINDER_OVERFLOWS)
	(JITTER_BRANCH_IF_NEGATE_OVERFLOWS, JITTER_OPERATION_BRANCH_IF_OVERFLOW)
	(JITTER_PLUS_BRANCH_IF_OVERFLOW, JITTER_MINUS_BRANCH_IF_OVERFLOW)
	(JITTER_TIMES_BRANCH_IF_OVERFLOW, JITTER_DIVIDED_BRANCH_IF_OVERFLOW)
	(JITTER_REMAINDER_BRANCH_IF_OVERFLOW, JITTER_NEGATE_BRANCH_IF_OVERFLOW): New
	macros.

	* jitter/jitter-fast-branch.h: Massive reorganization.  Include
	jitter/jitter-arithmetic.h.  Massive comment update and improvement.
	(_JITTER_BRANCH_FAST): Remove macro.
	(_JITTER_LOW_LEVEL_BRANCH_FAST_): New macro.
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_PLUS_OVERFLOWS_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_MINUS_OVERFLOWS_): New conditionally defined
	macros.
	(_JITTER_MIDDLE_LEVEL_PLUS_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_MIDDLE_LEVEL_MINUS_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_MIDDLE_LEVEL_TIMES_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_MIDDLE_LEVEL_DIVIDED_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_MIDDLE_LEVEL_REMAINDER_BRANCH_FAST_IF_OVERFLOW_): New macros.
	(_JITTER_NEGATE_BRANCH_FAST_IF_OVERFLOW)
	(_JITTER_BRANCH_FAST_IF_NEGATE_OVERFLOWS): New macros.
	(_JITTER_BRANCH_FAST): New macro.
	(_JITTER_BRANCH_FAST_IF_POSITIVE, _JITTER_BRANCH_FAST_IF_NONPOSITIVE)
	(_JITTER_BRANCH_FAST_IF_NEGATIVE, _JITTER_BRANCH_FAST_IF_NONNEGATIVE)
	(_JITTER_BRANCH_FAST_IF_EQUAL, _JITTER_BRANCH_FAST_IF_NOTEQUAL)
	(_JITTER_BRANCH_FAST_IF_LESS_SIGNED, _JITTER_BRANCH_FAST_IF_LESS_UNSIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTLESS_SIGNED, _JITTER_BRANCH_FAST_IF_NOTLESS_UNSIGNED)
	(_JITTER_BRANCH_FAST_IF_GREATER_SIGNED, _JITTER_BRANCH_FAST_IF_GREATER_UNSIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTGREATER_SIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTGREATER_UNSIGNED): Remove macros, now defined in the
	machine-generated header possibly using architecture-specific low-level fast
	branches.
	(_JITTER_BRANCH_FAST_IF_NEVER_UNARY, _JITTER_BRANCH_FAST_IF_ALWAYS_UNARY)
	(JITTER_FAST_UNCONDITIONAL_BRANCH_PLACEHOLDER): Remove now obsolete macros.
	Include jitter/jitter-fast-branch-machine-generated.h.
	(_JITTER_BRANCH_FAST_AND_LINK_INTERNAL): Whitespace.
	(JITTER_PATCH_IN_CASE_FAST_BRANCH_CONDITIONAL_AND)
	(JITTER_PATCH_IN_CASE_FAST_BRANCH_CONDITIONAL_NAND): New macros.
	(JITTER_PATCH_IN_CASE_FAST_BRANCH_CONDITIONAL_ANY)
	(JITTER_PATCH_IN_CASE_FAST_BRANCH_BRANCH_AND_LINK): Renumber.

	* jitterc/jitterc-generate.c (jitter_fast_branch_macros): Add names for the
	new primitives.
	(jitter_fast_branching_operation_macros)
	(jitter_fast_branching_operation_macro_no): New global variables.
	(jitterc_emit_executor_fast_branch_definitions): Emit macro definitions for
	the new operators.

	* machine/mips/jitter/machine/jitter-machine.h: Massive reorganization, comment
	improvements.
	(JITTER_ASM_MIPS_NOP, JITTER_MIPS_NOP): New macros.
	(JITTER_ASM_MIPS_CONDITIONAL_BRANCH_PATCH_IN)
	(JITTER_MIPS_BRANCH_FAST_CONDITIONAL_R)
	(JITTER_MIPS_BRANCH_FAST_CONDITIONAL_R_R)
	(JITTER_MIPS_BRANCH_FAST_CONDITIONAL_Z_R)
	(JITTER_MIPS_BRANCH_FAST_CONDITIONAL_R_Z)
	(JITTER_MIPS_BRANCH_FAST_CONDITIONAL_UNARY)
	(_JITTER_BRANCH_FAST_IF_ZERO, _JITTER_BRANCH_FAST_IF_NONZERO)
	(_JITTER_BRANCH_FAST_IF_POSITIVE, _JITTER_BRANCH_FAST_IF_NONPOSITIVE)
	(_JITTER_BRANCH_FAST_IF_NEGATIVE, _JITTER_BRANCH_FAST_IF_NONNEGATIVE)
	(_JITTER_BRANCH_FAST_IF_EQUAL, _JITTER_BRANCH_FAST_IF_NOTEQUAL)
	(_JITTER_BRANCH_FAST_IF_BINARY_GENERAL, _JITTER_BRANCH_FAST_IF_BINARY)
	(_JITTER_BRANCH_FAST_IF_LESS_SIGNED, _JITTER_BRANCH_FAST_IF_LESS_UNSIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTLESS_SIGNED, _JITTER_BRANCH_FAST_IF_NOTLESS_UNSIGNED)
	(_JITTER_BRANCH_FAST_IF_GREATER_SIGNED, _JITTER_BRANCH_FAST_IF_GREATER_UNSIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTGREATER_SIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTGREATER_UNSIGNED): Remove macros.  Replaced by...
	(_JITTER_LOW_LEVEL_BRANCH_FAST_CONDITIONAL_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_ZERO_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONZERO_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NEGATIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONNEGATIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_POSITIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONPOSITIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_EQUAL_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTEQUAL_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_LESS_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_GREATER_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTLESS_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTGREATER_SIGNED_)
	(_JITTER_LOW_LEVEL_TIMES_BRANCH_FAST_IF_OVERFLOW_): ...New macros.
	(JITTER_BRANCH_AND_LINK_INTERNAL): Reword comment.

	* machine/mips/jitter/machine/jitter-machine-assembly.S (load_32bit_to_memory)
	(jump_and_link_28bit_pseudo_direct): Use new macro JITTER_MIPS_NOP.

	* machine/x86_64/jitter/machine/jitter-machine-assembly.S: Improve comments.
	(jump_on_zero_32bit_offset, jump_on_nonzero_32bit_offset)
	(jump_on_sign_32bit_offset, jump_on_nonsign_32bit_offset)
	(jump_on_equal_32bit_offset, jump_on_notequal_32bit_offset)
	(jump_on_above_32bit_offset, jump_on_notbelow_32bit_offset)
	(jump_on_below_32bit_offset, jump_on_notabove_32bit_offset)
	(jump_on_less_32bit_offset, jump_on_notgreater_32bit_offset)
	(jump_on_greater_32bit_offset, jump_on_notless_32bit_offset): Remove routines.
	(empty_after_conditional_jump_32bit_offset): New routine, empty.

	* machine/x86_64/jitter/machine/jitter-machine-c.c (jitter_routine_for_patch_in):
	Remove cases for old routines.  Add one for the new empty routine
	empty_after_conditional_jump_32bit_offset.
	(jitter_patch_patch_in): Likewise.

	* machine/x86_64/jitter/machine/jitter-machine.h: Improve comments.  Factor
	and reorganize.
	(JITTER_RESIDUAL_REGISTER_NO) [JITTER_BRANCH_AND_LINK_NO_CALL]
	(JITTER_RESIDUAL_REGISTER_NO) [! JITTER_BRANCH_AND_LINK_NO_CALL]: Temporarily
	redefine.
	(JITTER_PATCH_IN_SIZE_FAST_BRANCH_CONDITIONAL): Remove macro, replaced by...
	(JITTER_PATCH_IN_SIZE_0_FAST_BRANCH_AFTER_CONDITIONAL): New macro.
	(_JITTER_BRANCH_FAST_CMP, _JITTER_BRANCH_FAST_TEST)
	(_JITTER_BRANCH_FAST_TEST_ONE_OPERAND, _JITTER_BRANCH_FAST_IF_ZERO)
	(_JITTER_BRANCH_FAST_IF_NONZERO, _JITTER_BRANCH_FAST_IF_POSITIVE)
	(_JITTER_BRANCH_FAST_IF_NONPOSITIVE, _JITTER_BRANCH_FAST_IF_NEGATIVE)
	(_JITTER_BRANCH_FAST_IF_NONNEGATIVE, _JITTER_BRANCH_FAST_IF_EQUAL)
	(_JITTER_BRANCH_FAST_IF_NOTEQUAL, _JITTER_BRANCH_FAST_IF_LESS_SIGNED)
	(_JITTER_BRANCH_FAST_IF_LESS_UNSIGNED, _JITTER_BRANCH_FAST_IF_NOTGREATER_SIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTGREATER_UNSIGNED)
	(_JITTER_BRANCH_FAST_IF_GREATER_SIGNED)
	(_JITTER_BRANCH_FAST_IF_GREATER_UNSIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTLESS_SIGNED)
	(_JITTER_BRANCH_FAST_IF_NOTLESS_UNSIGNED): Remove macros.
	(_JITTER_LOW_LEVEL_BRANCH_FAST_CONDITIONAL_): New macro.
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_ZERO_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONZERO_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_POSITIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONPOSITIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NEGATIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NONNEGATIVE_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_EQUAL_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTEQUAL_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_LESS_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_LESS_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_GREATER_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_GREATER_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTLESS_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTLESS_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTGREATER_UNSIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NOTGREATER_SIGNED_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_AND_)
	(_JITTER_LOW_LEVEL_BRANCH_FAST_IF_NAND_)
	(_JITTER_LOW_LEVEL_OPERATION_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_LOW_LEVEL_PLUS_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_LOW_LEVEL_MINUS_BRANCH_FAST_IF_OVERFLOW_)
	(_JITTER_LOW_LEVEL_TIMES_BRANCH_FAST_IF_OVERFLOW_): New macros.
	(enum jitter_routine_to_patch): Remove cases for removed routines.
	New case jitter_routine_empty_after_conditional_jump_32bit_offset.

	* jitter/jitter-arithmetic.h (JITTER_WOULD_PLUS_OVERFLOW_SIGNED_WORD): Comment
	change.

	* emacs/jitter-mode.el: Add font-lock support for new keywords.

	* configure.ac: New output file, scripts/generate-fast-branches, from
	scripts/generate-fast-branches.in, from scripts/generate-fast-branches.in.m4sh.

	* Makefile.am (BUILT_SOURCES): Build the new machine-generated file
	jitter/jitter-fast-branch-machine-generated.h.
	($(srcdir)/jitter/jitter-fast-branch-machine-generated.h): New rule.
	(EXTRA_DIST): Distribute the generated script source.
	(SOURCES_FOR_LIBJITTER, jitterinclude_HEADERS): Use the new header
	jitter/jitter-fast-branch-machine-generated.h, machine-generated from
	the new script.

	* bootstrap.conf (unm4sh_all): Generate scripts/generate-fast-branches.in
	from scripts/generate-fast-branches.in.m4sh.

	* scripts/jitter-config.in.m4sh: Update project copyright years.

2019-05-03  Luca Saiu  <positron@gnu.org>

	overflow: make overflow-checking signed words have a signed type

	* jitter/jitter-arithmetic.h (JITTER_WOULD_PLUS_OVERFLOW_SIGNED_WORD)
	(JITTER_WOULD_MINUS_OVERFLOW_SIGNED_WORD): Add cast.

2019-05-01  Luca Saiu  <positron@gnu.org>

	fix jitterc buglet

	* jitterc/jitterc-generate.c (jitterc_emit_configuration): Emit
	the value for max_fast_register_no_per_class, within the VM structure,
	as a signed int.

2019-05-01  Luca Saiu  <positron@gnu.org>

	little programming pearl: add known-overflow macros

	* jitter/jitter-arithmetic.h (JITTER_MOST_NEGATIVE_SIGNED)
	(JITTER_MOST_POSTITIVE_SIGNED, JITTER_MAXIMUM_UNSIGNED, JITTER_KNOWN_TO_BE)
	(JITTER_KNOWN_NOT_TO_BE, JITTER_KNOWN_TO_BE_EQUAL, JITTER_KNOWN_TO_BE_DIFFERENT)
	(JITTER_KNOWN_TO_BE_POSITIVE, JITTER_KNOWN_TO_BE_NONNEGATIVE)
	(JITTER_PLUS_OVERFLOWS_KNOWN_CONSTANT_GCC)
	(JITTER_MINUS_OVERFLOWS_KNOWN_CONSTANT_GCC)
	(JITTER_TIMES_OVERFLOWS_KNOWN_CONSTANT_GCC)
	(JITTER_DIVIDED_OVERFLOWS_KNOWN_CONSTANT_GCC)
	(JITTER_REMAINDER_OVERFLOWS_KNOWN_CONSTANT_GCC): New macros

2019-05-01  Luca Saiu  <positron@gnu.org>

	overflow checking: minor fix

	* jitter/jitter-arithmetic.h (JITTER_WOULD_DIVIDED_OVERFLOW): Add casts and
	implementation comment.

2019-04-30  Luca Saiu  <positron@gnu.org>

	overflow: fix bug, or make the code friendlier

	* jitter/jitter-arithmetic.h (JITTER_WOULD_PLUS_OVERFLOW_GCC)
	(JITTER_WOULD_MINUS_OVERFLOW_GCC, JITTER_WOULD_TIMES_OVERFLOW_GCC): Add casts
	to make the operand signed, in case they were not already.  This prevents
	subtle bugs.

2019-04-29  Luca Saiu  <positron@gnu.org>

	add sign function macro

	* jitter/jitter-arithmetic.h (JITTER_SIGN): New macro.

2019-04-28  Luca Saiu  <positron@gnu.org>

	trivial bug fix

	Fix trivial compilation errors introduced by changed macros.

	* example-vms/jitterlisp/jitterlisp-sexpression.c
	(jitterlisp_platform_sanity_check): Call JITTER_RIGHT_SHIFT_SIGN_EXTENDS with
	arguments.

	* jitter/jitter-tagging.h (JITTER_WITH_BITS_ASHIFTED_OFF): Add new arguments
	to JITTER_ARITHMETIC_SHIFT_RIGHT.

2019-04-28  Luca Saiu  <positron@gnu.org>

	trivial header include fixes

	* jitter/jitter-tagging.h: Include jitter/jitter-bitwise.h and
	jitter/jitter-arithmetic.h.

	* templates/vm.h: Include jitter/jitter-arithmetic.h.

2019-04-28  Luca Saiu  <positron@gnu.org>

	new overflow checking macros; redefine and improve existing bitwise operators

	Define new overflow-checking macros, using GCC builtins when available and
	supported in the given number of bits, falling back to generic implementations
	otherwise.
	Redefine JITTER_FITS_IN_BITS_ZERO_EXTENDED and JITTER_FITS_IN_BITS_SIGN_EXTENDED
	as macros.  Factor bitwise and integer arithmetic code.

	* jitter/jitter-arithmetic.h: New header.

	* configure.ac: Check for GCC overflow-checking builtins.
	(JITTER_HAVE_GCC_OVERFLOW_CHECKING): New feature macro.

	* jitter/jitter-config.h.in: (JITTER_HAVE_GCC_OVERFLOW_CHECKING): New feature
	macro.

	* jitter/jitter.h (JITTER_BITS_PER_WORD): Remove macro from here, moved to
	jitter-bitwise.h.

	* jitter/jitter-bitwise.h (JITTER_BITS_PER_WORD): Move macro definition here,
	from jitter/jitter.h, and redefine.
	(JITTER_SIZEOF_IN_BITS): New macro.
	(JITTER_ARITHMETIC_SHIFT_RIGHT, JITTER_ARITHMETIC_SHIFT_RIGHT_GENERIC): New
	macros.  The generic implementation is new and better, not the old one removed
	from jitter/jitter-tagging.h.
	(JITTER_RIGHT_SHIFT_SIGN_EXTENDS, JITTER_ARITHMETIC_SHIFT_RIGHT_GCC): Move macro
	definition here from jitter/jitter-tagging.h.

	* Makefile.am (lib_libjitterutility__convenience_la_SOURCES)
	(jitterinclude_HEADERS): Add new header jitter/jitter-arithmetic.h.

	* jitter/jitter-patch.h (jitter_fits_in_bits_zero_extended)
	(jitter_fits_in_bits_sign_extended): Add FIXME comments.

	* jitter/jitter-tagging.h (JITTER_WITH_BITS_ASHIFTED_OFF)
	(JITTER_RIGHT_SHIFT_SIGN_EXTENDS, JITTER_WITH_BITS_ASHIFTED_OFF_GCC)
	(JITTER_WITH_BITS_ASHIFTED_OFF_GENERIC): Remove, replacing with a new
	implementation in jitter/jitter-bitwise.h.
	(JITTER_WITH_BITS_ASHIFTED_OFF): Redefine using the new macros.

	* jitterc/jitterc.y: Include jitter/jitter-bitwise.h, now needed for the
	word size in bits.

2019-04-24  Luca Saiu  <positron@gnu.org>

	whitespace

	* jitter/jitter-executor.h (JITTER_PRETEND_TO_POSSIBLY_JUMP_TO_): Fix
	whitespace.

2019-04-24  Luca Saiu  <positron@gnu.org>

	remove obsolete comment in generated code

	* jitterc/jitterc-generate.c (jitterc_emit_executor_main_function)
	[NO_THREADING]: Remove obsolete comment in generated code.

2019-04-24  Luca Saiu  <positron@gnu.org>

	no-threading: avoid jitter_ip except at initialization, freeing a register

	* jitterc/jitterc-generate.c (jitterc_emit_executor_main_function)
	[NO_THREADING]: In emitted code, remove commented-out CPP conditional around
	the declaration of jitter_ip.  Later, in emitting code to branch to the first
	VM instruction, emit a comment and emit a macro definition making jitter_ip
	an alias for vmprefix_array_base_register_variable, except when jumping to
	the first VM instruction.  This kills the variable soon, and in my tests frees
	up one hardware register which would be completely wasted on no-threading;
	occasionally this even avoids spurious register moves.

	* jitter/jitter-executor.h (JITTER_PRETEND_TO_POSSIBLY_JUMP_TO_): Rename
	assembly operand from jitter_ip to to the_jitter_ip, so that the new CPP
	expansion does not generate something in C which does not match the
	assembly template.

2019-04-24  Luca Saiu  <positron@gnu.org>

	x86_64: support patch-ins for positive and non-positive conditions

	Support two cases I had forgotten a long time ago.  The existing code does not
	use them yet, but a coming change set will, fixing the behavior of
	branch-if-non-negative fast branches, which was broken, in the process.

	* machine/x86_64/jitter/machine/jitter-machine-c.c(jitter_routine_for_patch_in):
	Add missing cases for JITTER_PATCH_IN_CASE_FAST_BRANCH_CONDITIONAL_POSITIVE
	and JITTER_PATCH_IN_CASE_FAST_BRANCH_CONDITIONAL_NONPOSITIVE.

2019-04-24  Luca Saiu  <positron@gnu.org>

	sh: do not reserve GOT context pointer register

	Looking at disassemblies where r12 was read without ever having been set, and
	where it was supposed to be Jitter's scratch register, I discovered an important
	fact that had escaped me: r12, at least for PIC code, is the GOT context
	pointer.

	Change which registers are reserved.

	* machine/sh/jitter/machine/jitter-machine.h: Change comment.
	(JITTER_SCRATCH_REGISTER): Make it r13 instead of r12.

2019-04-15  Luca Saiu  <positron@gnu.org>

	jitterlisp, GC stub: factor primitive-cons-special into multiple instructions

	This new factoring is tentative, and should match my recommendation to minimize
	defects.

	* example-vms/jitterlisp/jitterlisp-code-generator.c
	(jitterlisp_translate_primitive) <cons primitive>: Emit three VM instructions
	heap-allocate, gc-if-needed and then primitive-cons-special instead of just
	primitive-cons-special.  Improve comment.

	* example-vms/jitterlisp/jitterlisp.jitter (heap-allocate): New instruction,
	factoring some code originally in primitive-cons-special.  Without JITTER_GC_STUB
	this does nothing.
	(gc-if-needed): New instruction, factoring some code originally in
	primitive-cons-special.  Again, this does nothing without JITTER_GC_STUB.
	(primitive-cons-special): Restructure slightly.  With JITTER_GC_STUB only keep
	the cons initialization part; the rest has been moved to the new instructions.
	(useless-cons-elimination): Adapt rewrite rule to the new instructions.

2019-04-15  Luca Saiu  <positron@gnu.org>

	jitterlisp: remove cruft

	* example-vms/jitterlisp/jitterlisp.jitter (register-class r): Set fast register
	number to 0, to make compilation faster.
	(late-c, late-header-c, late-c): Remove old testing cruft, in part already
	commented-out: the_jitter_state_runtime_pointer, the_jitter_state_runtime_type,
	state_runtime_selector, foo, boo.

	(early-header-c): Comment out JITTER_GC_STUB definition.

2019-04-15  Luca Saiu  <positron@gnu.org>

	jitterlisp: add stub Jitter GC, to evaluate allocation fast path performance

	The slow path is not there yet and only the cons primitive actually uses this
	new functionality, but this is useful to evaluate performance.  Right now the
	generated code looks more or less like what I was expecting, which is to say
	looks good.

	* example-vms/jitterlisp/jitterlisp.jitter (early-header-c): New block.
	JITTER_GC_STUB: New feature macro.
	(state-struct-runtime-c) [JITTER_GC_STUB]: New state runtime fields
	allocation_next, allocation_limit.
	(state-initialization-c) [JITTER_GC_STUB]: Initialize new state runtime fields.
	(primitive-cons-special): New fast-label argument.
	(primitive-cons-special) [JITTER_GC_STUB]: Introduce fast path heap allocation.

	* example-vms/jitterlisp/jitterlisp-code-generator.c
	(jitterlisp_translate_primitive) <cons primitive>: Emit the VM instruction
	primitive-cons-special with a new fast-label parameter, actually a stub, for
	branching to the slow allocation path.

2019-04-14  Luca Saiu  <positron@gnu.org>

	jitterlisp: support constants defined in C, and define a few

	* example-vms/jitterlisp/jitterlisp-constants.c: New file.
	* example-vms/jitterlisp/jitterlisp-constants.h: New file.

	* Makefile.am (SOURCES_FOR_JITTERLISP): Add
	example-vms/jitterlisp/jitterlisp-constants.h and
	example-vms/jitterlisp/jitterlisp-constants.c.

	* example-vms/jitterlisp/jitterlisp-sexpression.h
	(JITTERLISP_FIXNUM_NON_TAG_BIT_NO): New macro.
	(JITTERLISP_FIXNUM_MOST_NEGATIVE, JITTERLISP_FIXNUM_MOST_POSITIVE): New macros.

	* example-vms/jitterlisp/jitterlisp.h: Include new file jitterlisp-constants.h.

	* example-vms/jitterlisp/jitterlisp.c (jitterlisp_initialize): Call new function
	jitterlisp_constants_initialize.
	(jitterlisp_finalize): Call new function jitterlisp_constants_finalize.

	* example-vms/jitterlisp/doc/jitterlisp.texi: Add documentation stubs.

2019-04-14  Luca Saiu  <positron@gnu.org>

	jitterlisp library: minor changes

	Add a few functions that will be useful to stress the compiler.  They are not
	really usable yet, as the compiler is still missing the case for lambda.

	* example-vms/jitterlisp/jitterlisp-library.lisp (interpreted-closure-names)
	(compile-all-sequentially!, compile-all!): New procedures.

2019-04-10  Luca Saiu  <positron@gnu.org>

	prevent inclusion of jitter/jitter-executor.h from random code

	Including <jitter/jitter-executor.h> may lead to subtle bugs in the future, and
	the user should not do it.  Add a CPP check with #error preventing such
	mistakes.

	Unrelated tentative changes in the executor header.

	* jitter/jitter-executor.h: Add #ifndef .. #error .. #endif, based on
	JITTER_THIS_CAN_INCLUDE_JITTER_EXECUTOR_H.
	(JITTER_PRETEND_TO_POSSIBLY_JUMP_ANYWHERE): Define as a zero-argument
	function-like macro, to delay expansion.  This changes the macro semantics
	by allowing it to refer to the current specialized instruction name and id
	from any context where it is used.  Update uses.
	(JITTER_INSTRUCTION_PROLOG_, JITTER_INSTRUCTION_EPILOG_): Tentative changes,
	to be cleaned up.  The previous solution was not completely satisfactory, nor
	is this.

	* jitterc/jitterc-generate.c (jitterc_emit_executor): In generated C code,
	define JITTER_THIS_CAN_INCLUDE_JITTER_EXECUTOR_H.

	* templates/vm1.c: No longer include jitter/jitter-executor.h.  Add comment.

2019-04-10  Luca Saiu  <positron@gnu.org>

	fix distcheck

	* Makefile.am (clean-local, distclean-local, maintainer-clean-local): Tolerate
	failure on recursive cleaning in gnulib-local.

2019-04-09  Luca Saiu  <positron@gnu.org>

	build system and distribution: link jitterlisp-constant-strings.o only once

	* Makefile.am (GENERATED_C_FILES_FOR_JITTERLISP): Remove
	example-vms/jitterlisp/jitterlispvm-vm2.c from the list; otherwise a second
	copy will be compiled and linked per dispatching model.

2019-04-09  Luca Saiu  <positron@gnu.org>

	large generated files and distribution: undo previous change

	The previous change was a bad idea, as it unfortunately broke distcheck.
	Essentially undo it, just adding
	example-vms/jitterlisp/jitterlisp-constant-strings.c to the list of generated
	files, to be cleaned up *manually* (not on dist) where required.

	* Makefile.am (BUILT_SOURCES): Do not add
	example-vms/jitterlisp/jitterlisp-constant-strings.c , which can be built by an
	ordinary make rule.
	(GENERATED_C_FILES_FOR_JITTERLISP): Add
	example-vms/jitterlisp/jitterlisp-constant-strings.c, to be able to clean it
	easily along with other generated files, only on request, by hand.
	(dist-hook): Remove dist-hook-delete-generated-c-files dependency, re-add
	generated-c-files dependency.

2019-04-09  Luca Saiu  <positron@gnu.org>

	build system: do not distribute huge generated files

	* Makefile.am (dist-hook-delete-generated-c-files): New rule.
	(dist-hook): depend on the new dist-hook-delete-generated-c-files rather
	than on generated-c-files.

2019-04-09  Luca Saiu  <positron@gnu.org>

	structured: add command-line options --print-locations and --no-print-locations

	* example-vms/structured/structured-main.c (struct structured_command_line): New
	field print_locations.
	(structured_initialize_command_line): Initialize new field.
	(structured_usage): New parameter.  Update comment.  Update callers.
	(structured_help): Print help about new options --print-locations and
	--no-print-locations.
	(structured_parse_command_line): Handle new options.
	(structured_work): Dump locations when requested by the user.

2019-04-09  Luca Saiu  <positron@gnu.org>

	build system: fail more cleanly when Texinfo tools for hardcopy are missing

	Fail with a clean error message if the tools for building DVI, PostScript and
	PDF are missing.

	In an unrelated change, compile with options meant to make vm2 compilation more
	efficient.

	* configure.ac: (JITTER_HAVE_TEXI2DVI): New Automake conditional.
	(JITTER_FLAGS_CFLAGS): Experimentally enable options to make vm2 compilation
	less heavyweight.

	* Makefile.am [! JITTER_HAVE_TEXI2DVI] (missinghardcopytools)
	[! JITTER_HAVE_TEXI2DVI] (missinghardcopytools, dvi, pdf, ps): New rules,
	failing with an error message.

2019-04-09  Luca Saiu  <positron@gnu.org>

	minor manual changes

	* doc/jitter.texi: Manual changes.

2019-04-08  Luca Saiu  <positron@gnu.org>

	jitterlisp manual change

	* example-vms/jitterlisp/doc/jitterlisp.texi: Document dump-data-locations.

2019-04-08  Luca Saiu  <positron@gnu.org>

	don't dump data locations by default; make the functionality nice to use instead

	Add a convenient VM-dependent wrapper in the template.  Add command-line options
	for dumping locations to VM drivers.  Add a JitterLisp primitive doing the same
	at run time.

	* templates/vm.h (vmprefix_dump_data_locations): New prototype.

	* templates/vm1.c (vmprefix_dump_data_locations): New function, either
	a trivial wrapper around jitter_dump_data_locations or a stub printing
	a fixed message saying that there is no information available.
	(vmprefix_initialize): No longer dump locations at initialization.

	* jitter/jitter-data-locations.c (jitter_dump_data_locations): Omit final
	newline.  Flush out instead of stderr.

	* templates/vm-main.c (struct vmprefix_main_command_line): New field
	print_locations.
	(enum vmprefix_vm_negative_option): New case
	vmprefix_vm_negative_option_no_print_locations.  Renumber other cases.
	(enum vmprefix_vm_long_only_option): New case
	vmprefix_vm_long_only_option_print_locations.  Renumber other cases.
	(parse_opt): Handle new options.
	(argp_option): Define new options.
	(main): Check option status, dump locations if true.
	When checking for need of flushing buffers, also consider locations.

	* example-vms/jitterlisp/jitterlisp-primitives.c (dump_data_locations): New
	primitive.

2019-04-08  Luca Saiu  <positron@gnu.org>

	sections: support COFF

	Add some section support for COFF.  While simple, it is enough for mingw.
	Tested with 32- and 64-bit cross-compilers.

	* configure.ac (jitter_host_os_is_coff): New variable.
	(JITTER_HOST_OS_IS_COFF): New defined feature macro.

	* jitter/jitter-config.h.in (JITTER_HOST_OS_IS_COFF): New feature macro.

	* jitter/jitter-sections.h: Use #warning and #error rather than just a comment
	if the binary format is unsupported.
	(JITTER_ASM_OPEN_DEFINITION_IN_CURRENT_SECTION)
	(JITTER_ASM_CLOSE_DEFINITION_IN_CURRENT_SECTION): Rename to
	JITTER_ASM_OPEN_DEFINITION_IN_CURRENT_SECTION_ELF and
	JITTER_ASM_CLOSE_DEFINITION_IN_CURRENT_SECTION_ELF.
	(JITTER_ASM_OPEN_DEFINITION_IN_CURRENT_SECTION_COFF)
	(JITTER_ASM_CLOSE_DEFINITION_IN_CURRENT_SECTION_COFF): New macros.
	JITTER_ASM_OPEN_DEFINITION_IN_CURRENT_SECTION,
	JITTER_ASM_CLOSE_DEFINITION_IN_CURRENT_SECTION: New macros, now conditionally
	defined.
	Improve comments.

2019-04-08  Luca Saiu  <positron@gnu.org>

	configure: allow to disable assembly or to override its detection

	* configure.ac (jitter_has_host_assembly): Rename to enable_host_assembly.
	Change default from "yes" to "auto".
	(jitter_has_host_assembly, default_host_cpu): New variables.
	(architecture conditional): explicitly set jitter_has_host_assembly to yes
	whenever a CPU name is matched.
	Fail when assembly support is required but not found.
	Fail if no-threading dispatch was enabled without assembly support.
	configure help messages: use M4sh escapes for "[" and "]".
	Add and improve comments and whitespace.

2019-04-07  Luca Saiu  <positron@gnu.org>

	improve specialized instruction epilog

	* jitter/jitter-executor.h (JITTER_INSTRUCTION_EPILOG_) [no-threading ||
	minimal-threading]: Simplify, add comments, make more efficient.

2019-04-06  Luca Saiu  <positron@gnu.org>

	jitter C generator, VM C templates, executor runtime: cleanup

	Change The Array type from volatile union vmprefix_any_register * to simply
	char *.  The elements are not all of the same type, and accessing different
	parts of The Array requires internally complex macros anyway.

	Cleanup the executor header.  Simplify instruction VM epilogs.

	* jitter/jitter-executor.h: No longer explicitly include jitter/jitter-cpp.h,
	now included by jitter.h.
	(JITTER_COMMENT_IN_ASM): Rename to JITTER_COMMENT_IN_ASM_.
	(JITTER_COMMENT_IN_ASM_UNIQUE): Rename to JITTER_COMMENT_IN_ASM_UNIQUE_.
	(JITTER_ASM_DEBUGGING_NOP): Improve comment.
	(_JITTER_ASM_CRASH, JITTER_CRASH_): New macros.
	(JITTER_MARK_RVALUE_AS_READ_BY_ASSEMBLY): Remove memory clobber.  Improve
	whitespace.
	(JITTER_MARK_LVALUE_AS_DEFINED_BY_ASSEMBLY)
	(JITTER_MARK_LVALUE_AS_SET_BY_ASSEMBLY)
	(JITTER_MARK_REGISTER_AS_DEFINED_BY_ASSEMBLY)
	(JITTER_MARK_REGISTER_AS_SET_BY_ASSEMBLY)
	(JITTER_MARK_MEMORY_AS_DEFINED_BY_ASSEMBLY)
	(JITTER_MARK_MEMORY_AS_SET_BY_ASSEMBLY)
	(JITTER_MARK_ARRAY_ELEMENT_AS_SET_BY_ASSEMBLY): Improve whitespace.
	(JITTER_IP_INPUT_CONSTRAINT): Define non-conditionally.
	(JITTER_INSTRUCTION_PROLOG, JITTER_INSTRUCTION_EPILOG): Rename to
	JITTER_INSTRUCTION_PROLOG_, JITTER_INSTRUCTION_EPILOG_.  Greatly simplify and
	clean up.
	(JITTER_SPECIALIZED_INSTRUCTION_WORD_NO) [once per disaptch]: Whitespace.
	(JITTER_SKIP_RESIDUALS) [every dispatch]: Rename to JITTER_SKIP_RESIDUALS_.
	(JITTER_COMPUTED_GOTO_IN_ASM): Remove commented-out cruft.
	Remove old FIXME about disabling JITTER_COMPUTED_GOTO.

	* jitterc/jitterc-generate.c (jitterc_emit_state_h): In emitted C code, declare
	jitter_array, field of struct vmprefix_state_backing, as char *.
	(jitterc_emit_state): In emitted C code, remove cast at Array allocation.
	(jitterc_emit_executor_reserve_registers): Remove already commented-out line.
	(jitterc_emit_executor_ordinary_specialized_instructions)
	(jitterc_emit_executor_data_locations): Emit information about the VM link
	register, when used and when not mapped to a hardware-machine link register.
	(jitterc_emit_executor_main_function): In emitted C code, change type for
	jitter_array_base, an automatic variable pointing to The Array, with a bias.
	Add comment and comment-out volatile qualifier.
	(jitterc_emit_executor_main_function): Add comments.  Comment-out memory
	clobberings, likely unneeded and inefficient.
	In emitted C code, rename uses of JITTER_COMMENT_IN_ASM.
	In emitted C code, rename uses of JITTER_SKIP_RESIDUALS.
	In emitted C code, rename uses of renamed macro JITTER_INSTRUCTION_PROLOG and
	JITTER_INSTRUCTION_EPILOG.

	* templates/vm.h (vmprefix_make_place_for_slow_registers): Change prototype
	result type.

	* templates/vm1.c (vmprefix_make_place_for_slow_registers): Change function
	result type.  Remove unneeded parentheses.  Remove cast, now unneeded.

2019-04-06  Luca Saiu  <positron@gnu.org>

	machine-specific code: cleanup and minor improvements

	Define _JITTER_ASM_CRASH on architectures where it was still missing.
	Reintroduce __builtin_unreachable where I had tried to use
	JITTER_JUMP_TO_SPECIALIZED_INSTRUCTION_END instead, in the vain hope of not
	generating defective instructions.  Again, this might affect performance and I
	might want to selectively disable __builtin_unreachable thru CPP with some
	dispatches on some architectures, but defect handling will guarantee correctness
	in every case.

	x86_64: Do not reserve %rbp.  Explain why in a comment.  Re-enable the correct
	(high) number of reserved residual registers, but make it dependent on whether
	we are using the experimental JITTER_BRANCH_AND_LINK_NO_CALL mode.  If we are,
	then the number of residual registers changes because one register is kept as
	scratch.

	* machine/x86_64/jitter/machine/jitter-machine.h: Reserved registers: change
	comments.
	(JITTER_RESIDUAL_REGISTER_NO): Conditionalize over
	JITTER_BRANCH_AND_LINK_NO_CALL, change value.
	(JITTER_RESIDUAL_REGISTER_0, JITTER_RESIDUAL_REGISTER_0_32BIT)
	(JITTER_RESIDUAL_REGISTER_1, JITTER_RESIDUAL_REGISTER_1_32BIT)
	(JITTER_RESIDUAL_REGISTER_2, JITTER_RESIDUAL_REGISTER_2_32BIT)
	(JITTER_RESIDUAL_REGISTER_3, JITTER_RESIDUAL_REGISTER_3_32BIT): Redefine, keeping
	the order of the old definition but removing %rbp.  Add comment.
	(JITTER_SCRATCH_REGISTER, JITTER_SCRATCH_REGISTER_32BIT): Conditionalize over
	JITTER_BRANCH_AND_LINK_NO_CALL.  Add comment.

	* machine/mips/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): New macro.
	(JITTER_BRANCH_AND_LINK_INTERNAL): Whitespace.
	(_JITTER_BRANCH_FAST_AND_LINK_INTERNAL): Whitespace.  Replace
	JITTER_JUMP_TO_SPECIALIZED_INSTRUCTION_END with __builtin_unreachable.

	* machine/powerpc/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): New macro.

	* machine/sh/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): New macro.

	* machine/sparc/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): New macro.

2019-04-06  Luca Saiu  <positron@gnu.org>

	x86_64: do away with the scratch register by default, freeing up one register

	I decided to remove the scratch register, to free up a register in a
	register-starved architecture.  I had to change the way of materializing
	literals into memory, and seized the occasion to make it more efficient
	as well.

	Remove cruft.  Add (clean) debugging definitions not yet used in published code.

	Re-enable some correct uses of __builtin_unreachable, which may actually make
	some defects more likely to happen.  In any case, defects will be dealt with
	systematically and correctness will be guaranteed.  Whether, for example,
	__builtin_unreachable should be made a noop with some dispatching mode, is still
	an idea worth considering for performance's sake.  Right now, I want everything
	to be correct and clean.

	* machine/x86_64/jitter/machine/jitter-machine-assembly.S
	(set_64bit_residual_memory_small_offset, set_64bit_residual_memory_zero_offset)
	(set_64bit_residual_memory_big_offset, set_32bit_residual_memory_small_offset)
	(set_32bit_residual_memory_zero_offset, set_32bit_residual_memory_big_offset):
	Remove routines.
	(set_64bit_residual_memory_two_32bit_stores)
	(set_32bit_sign_extended_residual_memory): New routines.

	* machine/x86_64/jitter/machine/jitter-machine-c.c
	(jitter_routine_for_loading_memory, jitter_patch_load_immediate_to_memory):
	Support new routines.

	* machine/x86_64/jitter/machine/jitter-machine.h (_JITTER_ASM_CRASH): New macro,
	not yet used in published code.
	(JITTER_SCRATCH_REGISTER, JITTER_SCRATCH_REGISTER_32BIT): Conditionalize on
	JITTER_BRANCH_AND_LINK_NO_CALL.  Add explanation in comment.
	(JITTER_RETURN, JITTER_BRANCH_AND_LINK_WITH, JITTER_RETURN [! callq])
	(JITTER_BRANCH_AND_LINK_WITH [!callq]): Reenable __builtin_unreachable use.
	(JITTER_BRANCH_AND_LINK_INTERNAL, _JITTER_BRANCH_FAST_AND_LINK_INTERNAL): Change
	JITTER_JUMP_TO_SPECIALIZED_INSTRUCTION_END to __builtin_unreachable, as the
	code was really unreachable.  Update comments.
	(JITTER_BRANCH_AND_LINK_INTERNAL) <commented-out version>: Remove.
	(JITTER_BRANCH_AND_LINK_INTERNAL): Remove cruft, whitespace.
	(_JITTER_BRANCH_FAST_AND_LINK_INTERNAL): Whitespace.
	(enum jitter_routine_to_patch): Remove cases
	jitter_routine_set_64bit_residual_memory_small_offset,
	jitter_routine_set_64bit_residual_memory_zero_offset,
	jitter_routine_set_64bit_residual_memory_big_offset,
	jitter_routine_set_32bit_residual_memory_small_offset,
	jitter_routine_set_32bit_residual_memory_zero_offset,
	jitter_routine_set_32bit_residual_memory_big_offset.  New cases
	jitter_routine_set_64bit_residual_memory_two_32bit_stores,
	jitter_routine_set_32bit_sign_extended_residual_memory.

2019-04-06  Luca Saiu  <positron@gnu.org>

	assembly source: add an empty .note.GNU-stack section on ELF with no "x"

	* jitter/jitter-machine-common.S [ELF]: Define the section.  Explain the details
	in a long comment.  Cosmetic changes: sectioning.

2019-04-06  Luca Saiu  <positron@gnu.org>

	x86_64: rename sign-extending routines writing to registers

	Since I am writing 32-bit immediates sign-extended to 64-bits, I should call
	routines for setting such values "32bit_sign_extended".  Make the change.

	* machine/x86_64/jitter/machine/jitter-machine-assembly.S
	(set_64bit_sign_extended_residual_register_0)
	(set_64bit_sign_extended_residual_register_1)
	(set_64bit_sign_extended_residual_register_2)
	(set_64bit_sign_extended_residual_register_3): Rename to
	set_32bit_sign_extended_residual_register_0,
	set_32bit_sign_extended_residual_register_1,
	set_32bit_sign_extended_residual_register_2,
	set_32bit_sign_extended_residual_register_3.

	* machine/x86_64/jitter/machine/jitter-machine.h (enum jitter_routine_to_patch):
	(jitter_routine_set_64bit_sign_extended_residual_register_0)
	(jitter_routine_set_64bit_sign_extended_residual_register_1)
	(jitter_routine_set_64bit_sign_extended_residual_register_2)
	(jitter_routine_set_64bit_sign_extended_residual_register_3): Rename to
	jitter_routine_set_32bit_sign_extended_residual_register_0,
	jitter_routine_set_32bit_sign_extended_residual_register_1,
	jitter_routine_set_32bit_sign_extended_residual_register_2,
	jitter_routine_set_32bit_sign_extended_residual_register_3.

	* machine/x86_64/jitter/machine/jitter-machine-c.c: Update uses.

2019-04-06  Luca Saiu  <positron@gnu.org>

	x86_64: sign-extend 32-bit literals to a 64-bit register where possible

	Do not generate movabsq for loading 64-bit values to a residual register when
	such values fit sign-extended in 32 bits.  Use much smaller movq instructions
	instead.

	* machine/x86_64/jitter/machine/jitter-machine-assembly.S
	(set_64bit_sign_extended_residual_register_0)
	(set_64bit_sign_extended_residual_register_1)
	(set_64bit_sign_extended_residual_register_2)
	(set_64bit_sign_extended_residual_register_3): New routines.
	(set_64bit_residual_register_0, set_32bit_residual_register_0): Improve comments
	for existing routines.

	* machine/x86_64/jitter/machine/jitter-machine.h (enum jitter_routine_to_patch):
	New cases for new routines: add
	jitter_routine_set_64bit_sign_extended_residual_register_0,
	jitter_routine_set_64bit_sign_extended_residual_register_1,
	jitter_routine_set_64bit_sign_extended_residual_register_2,
	jitter_routine_set_64bit_sign_extended_residual_register_3.

	* machine/x86_64/jitter/machine/jitter-machine-c.c
	(jitter_routine_for_loading_register)
	(jitter_patch_load_immediate_to_register): Handle new cases.
	(jitter_routine_for_loading_memory): Fix mistake in comment.

2019-04-06  Luca Saiu  <positron@gnu.org>

	fits_in_bits: improve comments, without really changing the implementation

	* jitter/jitter-patch.h (jitter_fits_in_bits_zero_extended)
	(jitter_fits_in_bits_sign_extended): Improve prototype comments.

	* jitter/jitter-patch.c (jitter_fits_in_bits_zero_extended)
	(jitter_fits_in_bits_sign_extended): Improve implementation comments.  Trivial
	changes in the source, which will not affect behavior.

2019-04-06  Luca Saiu  <positron@gnu.org>

	minor change in program-point type definition

	* jitter/jitter-specialize.h (jitter_program_point) [NO_THREADING]: Make it a
	pointer to constant.

2019-04-06  Luca Saiu  <positron@gnu.org>

	jitterlisp VM evaluation: C code cleanup

	* example-vms/jitterlisp/jitterlisp-eval-vm.c
	(jitterlisp_jump_to_driver_and_return_result): Change commented out code
	to be compatible with executable routine changes.  Remove other commented-out
	code which is now useless.
	(jitterlisp_call_compiled): Remove old commented-out cruft.  Whitespace.

2019-04-06  Luca Saiu  <positron@gnu.org>

	test suite in cross configuration: make time out longer

	tests/utility.in (jitter_timeout) [CROSS]: Redefine to a bigger value.

2019-04-06  Luca Saiu  <positron@gnu.org>

	minor manual changes

	* doc/jitter.texi: Minor changes.

2019-04-06  Luca Saiu  <positron@gnu.org>

	specialization: don't trim dynamic buffer when extracting specialized programs

	Fix a serious bug probably affecting every dispatch other than no-threading.
	A specialized program is an array containing pointers to elements of itself.
	by using realloc I was potentially breaking it.

	* jitter/jitter-specialize.c (jitter_make_executable_routine): Don't trim
	the dynamic buffer at extraction.

2019-04-06  Luca Saiu  <positron@gnu.org>

	fix _JITTER_ASM_DEBUGGING_NOP on SPARC, for real

	* machine/sparc/jitter/machine/jitter-machine.h (_JITTER_ASM_DEBUGGING_NOP)
	[SPARC]: Don't stringify what is already a string literal.  Fix comment.

2019-04-06  Luca Saiu  <positron@gnu.org>

	fix debugging nop on SPARC

	For some reason I thought that SPARC used an "i" suffix in instruction mnemonics
	taking immediate operands, like MIPS does.  I used such a suffix in my
	definition of debugging nops for SPARC, clearly forgetting to ever test it.
	Obvious fix.

	* machine/sparc/jitter/machine/jitter-machine.h (_JITTER_ASM_DEBUGGING_NOP)
	[SPARC]: Fix instruction name in inline asm.

2019-04-06  Luca Saiu  <positron@gnu.org>

	important bugfix in memory residual offsets within The Array

	Memory residuals, just like globals and (right now) transfer registers, must be
	as wide as the jitter_int type.  Slow registers may be larger.  There was a
	discrepancy between patch-in code, assuming word-sized memory residuals, and
	offset macros from the vm.h template assuming every item in the Array to be
	register-sized.

	Seize the occasion to force slow registers in The Array to be aligned.

	* jitter/jitter-bitwise.h (JITTER_NEXT_MULTIPLE_OF_POSITIVE): New macro.

	* templates/vm.h: Include jitter/jitter-bitwise.h.
	(VMPREFIX_TRANSFER_REGISTER_NO, VMPREFIX_RESIDUAL_UNBIASED_OFFSET)
	(VMPREFIX_RESIDUAL_OFFSET): Move down in the file, which makes more sense
	aesthetically.
	(VMPREFIX_MAX_MEMORY_RESIDUAL_ARITY) [! no-threading]: Redefine as 0,
	since some residuals may be in The Array only under no-threading dispatch.
	(VMPREFIX_FIRST_SLOW_REGISTER_UNBIASED_OFFSET): Make the definition
	different and now unconditional, relying on new macros.
	(VMPREFIX_FIRST_GLOBAL_UNBIASED_OFFSET)
	(VMPREFIX_FIRST_MEMORY_RESIDUAL_UNBIASED_OFFSET)
	(VMPREFIX_FIRST_TRANSFER_REGISTER_UNBIASED_OFFSET): New macros.
	Update comment.

2019-04-06  Luca Saiu  <positron@gnu.org>

	allow data locations to be generated with any non-switch dispatch

	* jitterc/jitterc-generate.c (jitterc_emit_patch_in_header): Emit data
	location header within emitted CPP conditional on dispatch, not on patch-ins.
	(jitterc_emit_patch_in_footer): Emit data location footer within emitted CPP
	conditional on dispatch, not on patch-ins.
	(jitterc_emit_executor_data_locations): Make CPP conditional around generated
	code check dispatch, not patch-ins.  Emit another CPP conditional about
	dispatch around residual register data.
	Remove commented-out test code which I had forgotten about.

	* templates/vm1.c (vmprefix_initialize): Conditionalize the call to
	jitter_dump_data_locations according to dispatch, not patch-ins.

2019-04-06  Luca Saiu  <positron@gnu.org>

	fix includes and CPP conditionals

	* jitter/jitter-data-locations.h: Include jitter/jitter.h, which also
	exposes configuration macros, instead of just jitter/jitter-cpp.h.

	* templates/vm1.c: Include jitter/jitter-data-locations.h.
	(JITTER_DATA_LOCATION_NAME(vmprefix)): Conditionalize over
	! defined (JITTER_DISPATCH_SWITCH) rather than JITTER_HAVE_PATCH_IN.
	Neither solution is really satisfactory, but as a stopgap this is
	at least consistent.

2019-04-06  Luca Saiu  <positron@gnu.org>

	cleanup feature macro names and header inclusion

	No longer directly include jitter/jitter-config.h or
	jitter/machine/jitter-machine.h when it is possible to include jitter/jitter.h,
	or it was in fact already included.
	Rename feature macros whose name starts with "JITTER_HAS_" to start
	with "JITTER_HAVE".  Don't do this for tagging-related macros, whose
	name has a different grammatical meaning.

	* jitter/jitter.h: Update comments.

	* Makefile.am (JITTER_HAS_AUTOM4TE): Rename to JITTER_HAVE_AUTOM4TE.
	(JITTER_HAS_ASSEMBLY): Rename to JITTER_HAVE_ASSEMBLY.

	* configure.ac: Likewise.
	(JITTER_HAS_GNU_READLINE): Rename to JITTER_HAVE_GNU_READLINE.

	* example-vms/jitterlisp/jitterlisp-allocator.c: Likewise.
	* example-vms/jitterlisp/jitterlisp-banner.c: Likewise.
	* example-vms/jitterlisp/jitterlisp.c: Likewise.
	* jitter/jitter-config.h.in: Likewise.
	* jitter/jitter-sections.h: Likewise.

	* jitter/jitter-defect.h: Likewise.  Don't include jitter/jitter-config.h.
	* jitter/jitter-patch-in.h: Likewise.
	* jitter/jitter-patch.c: Likewise.
	* templates/vm-main.c: Likewise.
	* tests/unit/heap-test.c: Likewise.

	* jitter/jitter-executor.h: Likewise.  Don't conditionally include
	jitter/machine/jitter-machine.h.

	* jitter/jitter-patch.h: Likewise.  Include jitter/jitter.h instead.
	* jitter/jitter-readline.c: Likewise.
	* jitter/jitter-replicate.c: Likewise.

	* jitterc/jitterc-generate.c (jitterc_emit_executor): No longer include
	jitter/jitter-config.h in generated code.  Likewise, in generated code.

	* machine/sparc/jitter/machine/jitter-machine.h: No longer include
	jitter/jitter-cpp.h and jitter/jitter-config.h.  Include jitter/jitter.h
	instead.

2019-04-06  Luca Saiu  <positron@gnu.org>

	improve data locations; prepare for derived feature macros

	Remove jitter/jitter-dispatch.h, and move its functionality to jitter/jitter.h .
	Add a new section there, to contain feature macros depending on configuration
	(including architecture) and dispatch mode; this will be used later, for data
	locations and, more importantly, for defects.

	Cleanup data locations.

	* jitter/jitter-dispatch.h: Delete file, moving definitions to jitter/jitter.h.

	* Makefile.am (bin_jitter_CPPFLAGS): Add $(AM_CPPFLAGS), so that we can always
	include machine-specific files from jitter/jitter.h -- even when not actually
	used, like here.
	(SOURCES_FOR_LIBJITTER, jitterinclude_HEADERS): Remove every mention of
	jitter/jitter-dispatch.h.

	* jitter/jitter-config.h.in (JITTER_ASSEMBLY_SUBDIRECTORY): New macro, made
	available from configure.

	* jitter/jitter-data-locations.h: Include stdio.h, for the FILE type.  Include
	jitter/jitter-vm.h.
	(struct jitter_data_locations): New field reliable.
	(jitter_make_data_locations): Change parameter to const struct jitter_vm *.
	Add attributes.
	(jitter_destroy_data_locations): Add attributes.
	Update comments.
	(jitter_dump_data_locations): New prototype.

	* jitter/jitter-data-locations.c: No longer conditionally include
	jitter/machine/jitter-machine.h, now coming for free thanks to jitter/jitter.h.
	Include jitter/jitter-specialize.h.
	(jitter_data_location_set_register): Remove useless abstraction.  Replace use.
	(jitter_make_data_locations): Change parameter to const struct jitter_vm *.
	Adapt so as to behave differently on JITTER_DISPATCH_SWITCH -- not actually
	used yet.  Compute reliability.
	(jitter_dump_data_locations): New function, adapted from dump_locations in
	templates/vm1.c, now removed.

	* jitter/jitter.h: Include string.h, needed for JITTER_ARCHITECTURE_IS.
	Include jitter/jitter-cpp.h, needed for what was in jitter/jitter-dispatch.h.
	Change inclusion style for jitter/jitter-config.h.
	Incorporate what was in jitter/jitter-dispatch.h.
	(JITTER_ARCHITECTURE_IS): New macro.
	Add comments.

	* jitter/jitter-defect.h: Don't include jitter/jitter-dispatch.h, now gone.
	* jitter/jitter-disassemble.c: Likewise.
	* jitter/jitter-executor.h: Likewise
	* jitter/jitter-replicate.h: Likewise.
	* jitter/jitter-sections.h: Likewise
	* jitter/jitter-specialize.c: Likewise.
	* jitter/jitter-specialize.h: Likewise.
	* jitter/jitter.c: Likewise
	* templates/vm.h: Likewise.
	* jitter/jitter-mmap.c: Likewise.  Include jitter/jitter.h instead.
	* jitter/jitter-patch-in.h: Likewise.

	* jitter/jitter-vm.h (struct jitter_vm): New field data_locations.

	* jitterc/jitterc-generate.c: Remove commented-out line in generated code
	mentioning jitter/jitter-dispatch.h, now gone.
	(jitterc_emit_executor_data_locations): Generate code showing the instruction
	pointer as a datum for data locations, within a generated CPP conditional over
	dispatch.
	(jitterc_emit_executor): No longer emit inclusion for jitter/jitter-dispatch.h,
	now gone.

	* templates/vm1.c: Don't include jitter/jitter-dispatch.h, now gone.
	(JITTER_DATA_LOCATION_NAME(vmprefix)): Change comment.
	(vmprefix_initialize): Initialize new data_locations field.
	Call jitter_dump_data_locations instead of dump_locations, now gone.
	(dump_locations): Remove, moving most of the code to jitter_dump_data_locations
	in jitter/jitter-data-locations.c.

2019-04-06  Luca Saiu  <positron@gnu.org>

	manual: update SPARC information

	* doc/jitter.texi: Documentation changes.

2019-04-06  Luca Saiu  <positron@gnu.org>

	make section-handling work even on non-ELF system, when the assembler is GNU

	This requires a few specific options in CFLAGS, now added by configure.

	* configure.ac: Check for the GNU assembler.
	(JITTER_GNU_ASSEMBLER): New variable.
	(JITTER_HOST_ASSEMBLER_IS_GNU): New feature macro visible from C.
	Compilation flags: Add -fno-lto.
	Compilation flags [! ELF]: Add -fno-dwarf2-cfi-asm , -fno-reorder-functions.

	* jitter/jitter-config.h.in (JITTER_HOST_ASSEMBLER_IS_GNU): New feature macro.

	* jitter/jitter-sections.h (JITTER_HAS_SECTIONS): Now define even on non-ELF
	system as long as the assembler is GNU.
	(JITTER_ASM_ENTER_SUBSECTION_GAS, JITTER_ASM_EXIT_SUBSECTION_GAS): New macros.
	(JITTER_ASM_ENTER_SUBSECTION, JITTER_ASM_EXIT_SUBSECTION): Now define in one
	of two possible ways, either relying on ELF or on the GNU assembler.
	Restructure comments and sections.
	Trivial whitespace change.

2019-04-06  Luca Saiu  <positron@gnu.org>

	minor manual changes

	* doc/jitter.texi: Minor changes.

2019-04-06  Luca Saiu  <positron@gnu.org>

	only include jitter/machine/jitter-machine.h when assembly support is there

	* jitter/jitter-data-locations.c: Conditionalize inclusion of
	jitter/machine/jitter-machine.h.

2019-04-06  Luca Saiu  <positron@gnu.org>

	build system: no longer call jitter with --no-line

	The --no-line option is useful for debugging, but I should not use it in
	production, or when building examples.

	* Makefile.am ($(srcdir)/example-vms/uninspired/uninspired-vm.h)
	($(srcdir)/example-vms/structured/structuredvm-vm-main.c)
	($(srcdir)/example-vms/jitterlisp/jitterlispvm-vm.h): Remove --no-line option
	from command lines invoking jitter.

2019-04-06  Luca Saiu  <positron@gnu.org>

	build system: fix index generation in manual hardcopy

	Remove my redefinition of TEXI2PDF, which relied on TEXIINFO_OPTIONS.  At some
	point (I suppose after some recent change) this started to interfere with index
	generation so that I got "(Skipped sorted index file in obsolete format)" in the
	hardcopy index.
	The default definition for TEXI2PDF provided by Automake works correctly, so I'm
	switching to just that.  I no longer remember why I even wanted to include
	TEXIINFO_OPTIONS, consisting in -I directives, in the first place.

	* Makefile.am: TEXIINFO_OPTIONS: Remove definition.

2019-04-06  Luca Saiu  <positron@gnu.org>

	format hardcopy jitter manual for A4 paper by default

	* doc/jitter.texi: Add @afourpaper.

2019-04-06  Luca Saiu  <positron@gnu.org>

	comment about frame pointer register reservation on x86_64

	* machine/x86_64/jitter/machine/jitter-machine.h: Comment (mostly FIXME) change.

2019-04-06  Luca Saiu  <positron@gnu.org>

	jitterlisp VM: remove more cruft

	* example-vms/jitterlisp/jitterlisp.jitter (log_): Remove function.
	(wrapped-functions): Remove log_ and putchar.
	(call, tail-call): Remove commented out debugging calls to putchar.

2019-04-06  Luca Saiu  <positron@gnu.org>

	sh: fix incorrect comment about callee-save registers

	r15 is, by convention, the stack pointer.  I should certainly not treat it as a
	generic callee-save register I can reserve.

	* machine/sh/jitter/machine/jitter-machine.h: Comment fixes.

2019-04-06  Luca Saiu  <positron@gnu.org>

	jitterlisp VM: remove old cruft

	Remove old commented-out debug code from the Jittery VM specification.

	* example-vms/jitterlisp/jitterlisp.jitter (initialization-c, finalization-c)
	(early-c, late-c, instruction-beginning-c, instruction-end-c): Empty.
	(jitter_log_instruction, dump_stacks): Remove functions.
	(wrapped-functions): Remove removed functions from the list of wrapped functions.
	(debug): Remove instruction.
	(call-from-c, call): Remove commented-out code.

2019-04-06  Luca Saiu  <positron@gnu.org>

	improve comment from the previous change

	* machine/sh/jitter/machine/jitter-machine.h (_JITTER_PROCEDURE_PROLOG) [SH]:
	Improve comment.

2019-04-06  Luca Saiu  <positron@gnu.org>

	sh bugfix

	Fix procedure prolog -- even if the current implementation of procedure prologs
	is not necessarily reliable, and will be replaced.

	* machine/sh/jitter/machine/jitter-machine.h (_JITTER_PROCEDURE_PROLOG) [SH]:
	Remove incorrect commented-out code.  Add volatile to inline asm in the
	non-commented out version, explaining why in a comment.

2019-04-06  Luca Saiu  <positron@gnu.org>

	build system: recursively clean the gnulib subdirectory as well when cleaning

	* Makefile.am (clean-local, distclean-local, maintainer-clean-local):
	Recursively call make for the same target on gnulib-local.

2019-04-06  Luca Saiu  <positron@gnu.org>

	build system: no longer distribute jitter-generated C files

	In an ordinary application it would make sense to distribute generated files as
	well, as per the ordinary GNU convention; but here we are in the build system of
	Jitter itself, which allows to rebuild those files.  And they are only examples,
	so they are not crucial to build, nor indeed built by default.  If the user is
	able to run the examples or the testsuite, then there is some emulator allowing
	her to regenerate the files as well.

	* Makefile.am (EXTRA_DIST): Do not add $(JITTER_GENERATED_FILES).  Explain why
	in a long comment.

2019-04-06  Luca Saiu  <positron@gnu.org>

	introduce data locations

	* jitter/jitter-data-locations.h: New file.
	* jitter/jitter-data-locations.c: New file.

	* Makefile.am (SOURCES_FOR_LIBJITTER): Add jitter/jitter-data-locations.c and
	jitter/jitter-data-locations.h.
	(jitterinclude_HEADERS): Add jitter/jitter-data-locations.h.

	* configure.ac (JITTER_FLAGS_CFLAGS): Use -mregnames when available.

	* jitter/jitter-executor.h: Include jitter/jitter-sections.h.  Add comment.

	* jitter/jitter-specialize.h (enum jitter_specialized_instruction_opcode):
	Renumber cases jitter_specialized_instruction_opcode_UNREACHABLE0,
	jitter_specialized_instruction_opcode_UNREACHABLE1,
	jitter_specialized_instruction_opcode_UNREACHABLE2.  New cases
	jitter_specialized_instruction_opcode_DATALOCATIONS,
	jitter_specialized_instruction_opcode_NOP.  Update comment.

	* jitterc/jitterc-generate.c (jitterc_emit_patch_in_header): In emitted C code,
	generate data location header.
	(jitterc_emit_patch_in_footer): In emitted C code, generate data location footer.
	(jitterc_emit_executor_special_specialized_instruction): Factor, moving code
	into...
	(jitterc_emit_executor_special_specialized_instruction_beginning): ...New
	function, and...
	(jitterc_emit_executor_special_specialized_instruction_end): ...New function.
	(jitterc_emit_executor_data_locations): New function.
	(jitterc_emit_executor_main_function): Whitespace.  Add commented-out code.
	Emit C code for new special specialized instructions !DATALOCATIONS and !NOP.
	Fix the fatal error message for !UNREACHABLE1 and !UNREACHABLE2, which was
	incorrectly mentioning !UNREACHABLE0.

	* jitterc/jitterc-vm.c (jitterc_analyze_vm): Make new special specialized
	instructions !DATALOCATIONS and !NOP.

	* templates/vm.h: Include jitter/jitter-data-locations.h.  Add placeholder
	comments for prototypes to come.

	* templates/vm1.c: Include jitter/jitter-executor.h.
	(vmprefix_check_specialized_instruction_opcode_once): Do not rely on the numeric
	values for each case of enum jitter_specialized_instruction_opcode.  Use symbolic
	names instead.  Also handle the new special specialized instructions.
	(JITTER_DATA_LOCATION_NAME(vmprefix)) [patch-in]: New extern variable.
	(dump_locations) [patch-in]: New temporary function.
	(vmprefix_initialize) [patch-in]: Call dump_locations.

2019-03-21  Luca Saiu  <positron@gnu.org>

	minor manual changes

	* doc/jitter.texi: Update manual.

2019-03-17  Luca Saiu  <positron@gnu.org>

	build system: always distribute the stub man page

	I will from now on consider the stub man page as a piece of data, rather
	than a page of man: for the purposes of make dependencies it's just used
	as a source file, confitionally, to build other (literally copied) man
	pages.

	My previous solution did not reliably cause the stub file to be distributed
	in tarballs.

	* Makefile.am (dist_noinst_MANS): Remove.
	(doc/missing-man-page.1): Move from dist_noinst_MANS to EXTRA_DIST.

2019-03-17  Luca Saiu  <positron@gnu.org>

	build system: do not regenerate man pages when cross-compiling

	Using help2man thru the missing script with an emulator is painful, and is
	probably not worth the trouble.

	* configure.ac (jitter_can_rebuild_man_pages): Make this "no" when
	cross-compiling.  Make the check verbose.  The Automake conditional to be
	generated was already there, I'm just changing the criterion to make the
	decision.

	* doc/missing-man-page.1: Improve stub documentation.

2019-03-17  Luca Saiu  <positron@gnu.org>

	powerpc fixes

	PowerPC: do not reserve %r30, which is apparently not callee-save as I thought
	it was.  This will not be a problem: PowerPC has a huge number of available
	registers anyway.

	PowerPC assembly: fix syntax for some weird operands which are encoded as
	registers but are not actually registers.

	Using code such as
	  addi %r10, %r0, 42
	, where %r0 is encoded in the instruction as a register argument but is
	taken to mean a literal zero (%r0 is *not* hardwired to zero on PowerPC)
	used to work fine with older versions of Gas, but now I'm seeing warnings
	-- and still the same correct code.
	I suppose this counterintuitive use or %r0 has been deprecated, even if I
	find nothing specific in the documentation at a quick look.
	I'm noticing that the alternative
	  addi %r10, 0, 42
	is accepted with no issue, so I'm switching to that.
	I prefer never to use extended mnemonic or pseudo-instructions such as "li", out
	of fear that their encoding may change in the future, breaking my patch
	mechanism.

	* machine/powerpc/jitter/machine/jitter-machine.h: Add comment.
	(JITTER_RESIDUAL_REGISTER_NO): Decrement, so as not to use %r30.
	(JITTER_RESIDUAL_REGISTER_14): Remove.
	(JITTER_SCRATCH_REGISTER): Redefine from %r30 to %r29.
	(enum jitter_routine_to_patch): Remove cases
	jitter_routine_load_sign_extended_16bit_to_register_14 and
	jitter_routine_load_32bit_to_register_14, keeping the order

	* machine/powerpc/jitter/machine/jitter-machine-assembly.S
	(load_sign_extended_16bit_to_register_0): Add comment explaining the syntax
	change.
	(load_sign_extended_16bit_to_register_0, load_sign_extended_16bit_to_register_1)
	(load_sign_extended_16bit_to_register_2, load_sign_extended_16bit_to_register_3)
	(load_sign_extended_16bit_to_register_4, load_sign_extended_16bit_to_register_5)
	(load_sign_extended_16bit_to_register_6, load_sign_extended_16bit_to_register_7)
	(load_sign_extended_16bit_to_register_8, load_sign_extended_16bit_to_register_9)
	(load_sign_extended_16bit_to_register_10)
	(load_sign_extended_16bit_to_register_11)
	(load_sign_extended_16bit_to_register_12)
	(load_sign_extended_16bit_to_register_13): Change syntax, writing 0 instead of
	%r0.
	(jitter_routine_load_sign_extended_16bit_to_register_14)
	(jitter_routine_load_32bit_to_register_14): Remove routines, keeping the order.

	* machine/powerpc/jitter/machine/jitter-machine-c.c (jitter_invalidate_icache):
	Inline asm: write operand as 0 instead of %%r0; dcbf and icbi have the same
	encoding weirdness as addi.  Explain in a comment.
	Switch to the more modern extended asm syntax taking a named input argument.
	(jitter_routine_for_loading_register): Remove support for removed routines
	jitter_routine_load_sign_extended_16bit_to_register_14 and
	jitter_routine_load_32bit_to_register_14.

2019-03-17  Luca Saiu  <positron@gnu.org>

	rename "interpreter" to "executor"

	Jitter's source code said "intepreter", often in quotes, independently from the
	dispatch, even when referring to code which does no interpretation at all at run
	time.

	Change this, renaming occurrences of "interpreter" and related words in
	comments, identifiers and file names.

	No visible API changes for the user: I had already renamed generated functions
	with "interpreter" or "interpret" a few days ago, seizing the occasion of an
	incompatible API change when introducing executable routines.

	* Makefile.am (SOURCES_FOR_LIBJITTER): Rename
	jitter/jitter-interpreter-private.h to jitter/jitter-executor.h.
	(jitterinclude_HEADERS): Likewise.

	* jitter/jitter-interpreter-private.h: Rename to...
	* jitter/jitter-executor.h: ...This.
	Update file comments.  Rename multiple-inclusion macro from
	JITTER_INTERPRETER_PRIVATE_H_ to JITTER_EXECUTOR_H_.  Update comments.

	* jitterc/jitterc-generate.c: Global comment changes.
	(jitterc_emit_register_access_macros_h): Comment changes.

	(jitterc_emit_interpreter_register_access_macros)
	(jitterc_emit_interpreter_reserve_registers)
	(jitterc_emit_interpreter_global_wrappers)
	(jitterc_emit_interpreter_sarg_definition)
	(jitterc_emit_interpreter_fast_branch_definitions)
	(jitterc_emit_interpreter_ordinary_specialized_instructions)
	(jitterc_emit_interpreter_special_specialized_instruction)
	(jitterc_emit_interpreter_main_function)
	(jitterc_emit_interpreter_wrappers, jitterc_emit_interpreter)
	: Rename to
	jitterc_emit_executor_register_access_macros,
	jitterc_emit_executor_reserve_registers,
	jitterc_emit_executor_global_wrappers,
	jitterc_emit_executor_sarg_definition,
	jitterc_emit_executor_fast_branch_definitions,
	jitterc_emit_executor_ordinary_specialized_instructions,
	jitterc_emit_executor_special_specialized_instruction,
	jitterc_emit_executor_main_function,
	jitterc_emit_executor_wrappers, jitterc_emit_executor.
	Update comments, in the generator or in generated code.  Update uses of these.
	Include jitter/jitter-executor.h instead of jitter/jitter-interpreter-private.h
	in generated code.
	(jitterc_emit_patch_in_header, jitterc_emit_patch_in_footer): Update comments,
	in the generator or in generated code.
	(jitterc_generate): Update uses of renamed functions.
	(jitterc_emit_vm_name_macros_vm1): Update comment.

	* machine/powerpc/jitter/machine/jitter-machine.h: Mention
	jitter/jitter-executor.h instead of jitter/jitter-interpreter-private.h in a
	global comment.
	* machine/sh/jitter/machine/jitter-machine.h: Likewise.
	* machine/sparc/jitter/machine/jitter-machine.h: Likewise.
	* machine/x86_64/jitter/machine/jitter-machine.h: Likewise.
	* machine/mips/jitter/machine/jitter-machine.h: Likewise.
	(_JITTER_PROCEDURE_PROLOG): Update comment.

	* templates/vm1.c (vmprefix_initialize_threads): Update global comments.
	* jitter/jitter-patch-in.h (JITTER_PATCH_IN_HEADER): Update comment.
	* jitter/jitter-sections.h: Update comment.
	* jitter/jitter.h (jitter_thread): Update comment.

	* doc/jitter.texi: Rename "interpreter" to "executor" in the manual.

2019-03-16  Luca Saiu  <positron@gnu.org>

	actually use The Array

	Start actually using The Array, removing the slow_registers field in the
	executor function and using a base pointer to The Array instead.  This frees up
	one register on no-threading, as The Array base is accessed thru a global
	register variable (the old "residual base", now renamed to "base").  On other
	dispatches, if no free registers are gained, none is lost either: the base
	replaces slow_register, as an ordinary automatic variable.

	Most of The Array logic was already there; this change set implements
	essentially one fix, and then just finally uses the mechanisms that I had
	already put in place some time ago.

	Seize the occasion of renaming reserved register macros to change which
	registers are reserved in a few cases.  Add code for reserving more registers
	on x86_64.
	It is not yet possible to ask, in a VM, to reserve fewer registers than the
	maximum required by the VM: this feature will come.

	* templates/vm.h: Whitespace change.
	(VMPREFIX_MAX_MEMORY_RESIDUAL_ARITY): New macro.  Use it instead of
	VMPREFIX_MAX_RESIDUAL_ARITY.  Add important comments about preventing in the
	future a problem I had.
	(VMPREFIX_RESIDUAL_UNBIASED_OFFSET) [JITTER_DISPATCH_NO_THREADING]: Change
	definition, fixing a bug: the given residual offset will now be automatically
	reduced by JITTER_RESIDUAL_REGISTER_NO units in order to skip reserved
	registers.  Improve comment.

	* jitterc/jitterc-generate.c (jitterc_emit_register_access_macros_h): Remove
	old commented-out code.
	(jitterc_emit_interpreter_register_access_macros): Use jitter_array_base instead
	of the old jitter_slow_registers in generated code.
	(jitterc_emit_interpreter_reserve_registers): Comment change in generated code.
	In generated code, make the residual base register mandatory and always used with
	no-threading; remove the generated feature macro JITTER_NEEDS_RESIDUAL_BASE.
	Rename vmprefix_residual_base_register_variable to
	vmprefix_array_base_register_variable in generated code. Change definition of
	JITTER_RESIDUAL_ARGUMENT_%i in generated code, now using VMPREFIX_RESIDUAL_OFFSET
	to access residuals from The Array base.
	(jitterc_emit_interpreter_sarg_definition): In generated code, redefine
	JITTER_SLOW_REGISTER_OFFSET%i.  Cosmetic changes in generated code.
	(jitterc_emit_interpreter_main_function): Commented-out emission of debugging
	code, to be used later in a new separate function.  Cosmetic changes, in the
	generator and in the generated code.  Remove jitter_slow_registers from generated
	code, replacing it with jitter_array_base, conditionally defined as a macro
	expanding to a register variable name or an automatic variable.  Initialize it
	from The Array, taken from the state backing and biased.  Remove residual base
	emission, now subsumed by The Array.  Remove freeing of the no longer existing
	jitter_slow_registers array from generated code, at exit.

	* machine/mips/jitter/machine/jitter-machine.h: Rename JITTER_SCRATCH_REGISTER
	to JITTER_BASE_REGISTER.  Renumber registers so that the base comes before
	residual registers, in numerical order, with the scratch register being last.

	* machine/powerpc/jitter/machine/jitter-machine.h: Likewise.

	* machine/sparc/jitter/machine/jitter-machine.h: Likewise.

	* machine/sh/jitter/machine/jitter-machine.h: Likewise, plus a comment.

	* machine/x86_64/jitter/machine/jitter-machine.h: Likewise.
	(JITTER_RESIDUAL_REGISTER_NO, enum jitter_routine_to_patch): Seize the occasion
	to reserve up to four registers, adding new routines (in an order consistent with
	machine/x86_64/jitter/machine/jitter-machine-assembly.S below).

	* machine/x86_64/jitter/machine/jitter-machine-assembly.S
	(load_0_to_64bit_residual_register_2, load_0_to_64bit_residual_register_3)
	(load_minus_1_to_64bit_residual_register_2)
	(load_minus_1_to_64bit_residual_register_3)
	(set_64bit_residual_register_2, set_64bit_residual_register_3)
	(set_32bit_residual_register_2, set_32bit_residual_register_3): New routines.
	Elsewhere in the file, rename uses of JITTER_RESIDUAL_BASE_REGISTER to uses of
	JITTER_BASE_REGISTER.  Update comments mentioning The Array instead of a residual
	array.

	* machine/x86_64/jitter/machine/jitter-machine-c.c
	(jitter_routine_for_loading_register, jitter_patch_load_immediate_to_register):
	Support the new routines.

	* jitter/jitter-interpreter-private.h
	(JITTER_INSTRUCTION_EPILOG) [NO_THREADING]: re-add JITTER_PRETEND_TO_UPDATE_IP_
	macros around instruction-end macro.  This will get cleaned up later, when I
	seriously work on defects.

2019-03-16  Luca Saiu  <positron@gnu.org>

	jitterlisp manual updates

	* example-vms/jitterlisp/doc/jitterlisp.texi: Manual changes.

2019-03-10  Luca Saiu  <positron@gnu.org>

	jitterlisp manual: minor changes

	* example-vms/jitterlisp/doc/jitterlisp.texi: Minor manual changes.

2019-03-10  Luca Saiu  <positron@gnu.org>

	jitterlisp: optionally destroy non-executable routines

	Optionally destroy non-executable routines, keeping only an executable routine
	per compiled closure.  This saves memory, at the cost of making debugging much
	less nice.
	Add command-line options  --free-routines and --no-free-routines (default) to
	control this behavior.

	* example-vms/jitterlisp/jitterlisp-settings.h (struct jitterlisp_settings): New
	field free_routines.

	* example-vms/jitterlisp/jitterlisp-settings.c (jitterlisp_settings_set_default):
	Initialize free_routines.

	* example-vms/jitterlisp/jitterlisp-code-generator.c (jitterlisp_compile): Check
	global options, and if freeing routines free the non-executable version and
	set the compiled closure field to NULL.

	* example-vms/jitterlisp/jitterlisp-main.c (enum jitterlisp_negative_option):
	New case jitterlisp_negative_option_no_free_routines.
	(enum jitterlisp_long_only_option): New field
	jitterlisp_long_only_option_free_routines.
	(jitterlisp_option_specification): Add new elements for the new options.
	(parse_opt): Handle new command-line options.

	* example-vms/jitterlisp/doc/jitterlisp.texi: Document new command-line options.

2019-03-03  Luca Saiu  <positron@gnu.org>

	incompatible user API changes: introduce executable routines

	There are now two separate structs representing routines, one non-executable for
	a routine still being composed and another for an executable routine ready to be
	executed.  After the executable routine has been made from the non-executable
	routine, either can be freed independently.  The executable routine is the only
	part required for actually running code.
	The non-executable routine allows better disassembly output and allows VM code
	printing.
	When both routine kinds exist for a given piece of code they point to each
	other.  Destroying one sets the pointer to itself in the other to NULL.

	This requires incompatible, but quite easy, changes in user code.

	Update generation API and templates.

	Update all the examples to use the new API.  Add JitterLisp options to destroy
	non-executable routines right after compilation, to save memory at the cost of
	less friendly disassembly and disabled VM program printing.

	* jitter/jitter-routine.h (struct jitter_executable_routine): New struct
	declaration -- the actual definition is not here.
	(struct jitter_routine): New field executable_routine, either NULL or pointing
	to the associated executable routine.

	* jitter/jitter-routine.c: Include jitter/jitter-specialize.h.
	(jitter_initialize_routine): Set executable_routine field to NULL at
	initialization.
	(jitter_finalize_routine): Cosmetic changes.
	(jitter_destroy_routine): Unlink the executable routine, if any.

	* jitter/jitter-disassemble.h (jitter_disassemble_routine)
	(jitter_disassemble_routine_to): Rename to
	jitter_disassemble_executable_routine and
	jitter_disassemble_executable_routine_to, which now take an executable routine.
	Include jitter/jitter-specialize.h.

	* jitter/jitter-disassemble.c (jitter_disassemble_routine_to) [! SWITCH]: Rename
	to jitter_disassemble_executable_routine_to, which now takes an executable
	routine.  Check whether the non-executable routine still exists, and in that
	case disassemble a single instruction range for the entire routine.
	Change specialized_instructions from char * to a union jitter_word pointer,
	as it is more natural now with the new API where specialized instructions are
	lo longer in a dynamic_array within the executable routine.
	(jitter_disassemble_routine_to) [SWITCH]: Same renaming and formal type change,
	here with a trivial implementation.
	(jitter_disassemble_routine): Adapt to the new API.

	* jitter/jitter-replicate.c (jitter_replicate_program): Set p->native_code_size
	to the exact number of executable instruction bytes rather than an upper bound.
	This is needed for disassembling from an executable routine when the
	non-executable routine has been destroyed, as it allows to show all the native
	instructions, and only them.

	* jitter/jitter-specialize.h: Include jitter/jitter-dispatch.h , as some fields
	in struct jitter_executable_routine are dispatch-dependent.
	Remove very old commented out inclusion of vmprefix-frontend.h.
	(struct jitter_executable_routine): New struct definition.
	(jitter_make_executable_routine): New prototype.
	(jitter_destroy_executable_routine): New prototype.
	(jitter_program_point): New VM-independent but dispatch-dependent type, moved
	and adapted from the template header
	(JITTER_EXECUTABLE_ROUTINE_BEGINNING): Likewise, adapt from template.
	(jitter_specialize_program): Remove prototype for removed function.
	Add comments.

	* jitter/jitter-specialize.c: Remove very old commented out header inclusion.
	Include jitter/jitter-mmap.h, needed for executable deallocation.
	(jitter_initialize_executable_routine): New static function, used in
	jitter_make_executable_routine.
	(jitter_destroy_executable_routine): New function.
	(jitter_specialize_program): Remove, and adapt body into...
	(jitter_make_executable_routine): ...This new function.

	* jitterc/jitterc-generate.c (jitterc_emit_patch_in_header): Rename generated
	C function from vmprefix_interpret_or_initialize to
	vmprefix_execute_or_initialize.
	(jitterc_emit_interpreter_main_function): Likewise.  The new generated function
	takes a program point rather than a routine as its argument.  In the generated
	function, set jitter_ip to the argument rather than to the beginning of a
	routine.  This will make multiple-entry-point routines and stepping easier, when
	I get to implement these features.
	(jitterc_emit_interpreter_wrappers): Update generated comments.  Generate
	prototype for the new vmprefix_execute_or_initialize rather than the old
	vmprefix_interpret_or_initialize.  Generate new function
	vmprefix_execute_executable_routine.
	(jitterc_emit_interpreter_wrappers): In generated code, change calls of
	vmprefix_interpret_or_initialize to vmprefix_execute_or_initialize.
	In generated code, change call of vmprefix_interpret to
	vmprefix_branch_to_program_point.  In generated code, change call of
	vmprefix_interpret_or_initialize to vmprefix_execute_or_initialize.
	(jitterc_emit_interpreter): Update comment.

	* templates/vm.h (vmprefix_interpret): Remove prototype:
	(vmprefix_executable_routine): New wrapper macro.
	(vmprefix_specialize_program, vmprefix_disassemble_routine)
	(vmprefix_disassemble_routine_to): Remove wrapper macros.
	(vmprefix_make_executable_routine, vmprefix_destroy_executable_routine)
	(vmprefix_disassemble_executable_routine)
	(vmprefix_disassemble_executable_routine_to): New wrapper macros.
	(vmprefix_program_point): Remove type definition.  It is now elsewhere.
	(vmprefix_program_point): New typedef, providing a VM-dependent alias for an
	actually VM-independent, but dispatch-dependent, type name.
	(VMPREFIX_EXECUTABLE_ROUTINE_BEGINNING): Likewise.
	(vmprefix_ensure_enough_slow_registers_for): New prototype.
	(vmprefix_branch_to_program_point): New prototype.
	(vmprefix_execute_executable_routine): New prototype.

	* templates/vm1.c (vmprefix_ensure_enough_slow_registers_for): New function.

	* templates/vm-main.c (main): Adapt to the new API.

	* example-vms/jitterlisp/jitterlisp-sexpression.h
	(struct jitterlisp_compiled_closure): Split old vm_program field into new fields
	routine and executable_routine.
	* example-vms/jitterlisp/jitterlisp-code-generator.c [BOEHM]: Include Boehm GC
	headers.
	(jitterlisp_finalize_closure) [BOEHM]: New static function.
	(jitterlisp_compile) [BOEHM]: Use jitterlisp_finalize_closure in GC finalizers
	instead of leaking routines.
	(jitterlisp_compile): Initialize routine and executable_routine fields instead
	of the old program field.
	(jitterlisp_print_compiled_closure): Print executable routine, unless it was
	freed.  In that case print a fixed message.
	* example-vms/jitterlisp/jitterlisp-eval-vm.c
	(jitterlisp_driver_vm_executable_routine): New static global.  Update comment.
	(jitterlisp_vm_initialize, jitterlisp_jump_to_driver_and_return_result)
	(jitterlisp_vm_finalize): Use new API, using executable and non-executable
	driver routines.

	* example-vms/structured/structured-main.c (structured_work): Use new API.

2019-03-10  Luca Saiu  <positron@gnu.org>

	dynamic buffer: make it possible to finalize after extraction

	It is convenient to be able to finalize a dynamic buffer even if its content has
	been extracted.

	* jitter/jitter-dynamic-buffer.c (jitter_dynamic_buffer_finalize): Add
	conditional, doing nothing if the region has been already set to NULL.
	(jitter_dynamic_buffer_extract): Update comment.

	* jitter/jitter-dynamic-buffer.h (Extraction section): Update comment.

2019-03-10  Luca Saiu  <positron@gnu.org>

	jitterlisp whitespace, again

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTERLISP_EXP_FF_F_TIMES)
	[JITTERLISP_FIXNUM_TAG zero]: Whitespace changes.

2019-03-10  Luca Saiu  <positron@gnu.org>

	jitterlisp: whitespace

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTERLISP_EXP_FF_F_DIVIDED)
	[JITTERLISP_FIXNUM_TAG zero]: Whitespace changes.

2019-03-10  Luca Saiu  <positron@gnu.org>

	jitterlisp: optimize division

	Make division slightly faster, avoiding operand shifts, when the fixnum tag is
	zero -- which is the case.

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTERLISP_EXP_FF_F_DIVIDED):
	Remove unconditional definition...
	(JITTERLISP_EXP_FF_F_DIVIDED) [JITTERLISP_FIXNUM_TAG zero]: New conditionally
	defined macro.
	(JITTERLISP_EXP_FF_F_DIVIDED) [JITTERLISP_FIXNUM_TAG non-zero]: New
	conditionally defined macro.

2019-03-10  Luca Saiu  <positron@gnu.org>

	jitterlisp: optimize multiplication

	Make multiplication faster, particularly in the case of multiplication by a
	constant, when the fixnum tag is zero -- which is the case.

	* example-vms/jitterlisp/jitterlisp-operations.h (JITTERLISP_EXP_FF_F_TIMES):
	Remove unconditional definition.
	(JITTERLISP_EXP_FF_F_TIMES) [JITTERLISP_FIXNUM_TAG zero]: New conditionally
	defined macro.
	(JITTERLISP_EXP_FF_F_TIMES) [JITTERLISP_FIXNUM_TAG non-zero]: New conditionally
	defined macro.

2019-03-09  Luca Saiu  <positron@gnu.org>

	new JitterLisp procedure pam-syntactically

	* example-vms/jitterlisp/jitterlisp-library.lisp (pam-syntactically): New
	procedure.

2019-03-09  Luca Saiu  <positron@gnu.org>

	test suite: make test case timeouts longer when running thru an emulator

	When running the testsuite thru emulation there is considerable overhead, and I
	have seen many false failures due to timeouts where in fact the test case would
	have succeeded.

	Give more time when running thru an emulator.

	* tests/utility.in [JITTER_EMULATOR non-empty] (jitter_timeout): Increment.

2019-03-02  Luca Saiu  <positron@gnu.org>

	build system: add feature macro in header template

	* jitter/jitter-config.h.in (JITTER_BEST_DISPATCHING_MODEL_IS_SWITCH): New
	conditionally defined macro.

2019-03-02  Luca Saiu  <positron@gnu.org>

	program->routine renaming: cosmetic changes

	Rename a few remaining instances of "program" to "routine".  This is just about
	comments and static function names.

	* jitter/jitter-routine.h: Comment and section names: program -> routine.
	* jitter/jitter-routine.c: Comment and fatal error message changes: program ->
	routine.
	(jitter_initialize_options, jitter_routine_make_options_unchangeable)
	(jitter_fail_unless_options_changeable, jitter_symbolic_label)
	(jitter_set_label_instruction_index, jitter_append_label)
	(jitter_append_symbolic_label, jitter_close_current_instruction)
	(jitter_check_paremater_compatibility, jitter_advance_past_next_parameter)
	(jitter_append_uninitialized_paremater, jitter_append_register_parameter)
	(jitter_append_meta_instruction, jitter_append_instruction)
	(jitter_maximum_instruction_name_length): Comment changes: program -> routine.
	(jitter_initialize_program, jitter_finalize_program): Rename static functions
	to jitter_initialize_routine and jitter_finalize_routine.  Fix uses.
	(jitter_finalize_program): Whitespace fix.

2019-03-02  Luca Saiu  <positron@gnu.org>

	whitespace

	* jitter/jitter-routine.h: Whitespace fix.

2019-03-02  Luca Saiu  <positron@gnu.org>

	jitterlisp manual: indexing changes, mostly trivial

	* example-vms/jitterlisp/doc/jitterlisp.texi: Indexing changes.

2019-03-02  Luca Saiu  <positron@gnu.org>

	jitterlisp AST printer: keep the compact notation for primitives, but in color

	* example-vms/jitterlisp/jitterlisp-printer.c (jitterlisp_print_ast): Amend the
	previous change in AST primitive printing, by keeping the compact notation but
	printing the primitive name using the primitive terminal attributes.  This costs
	nothing in terms of space, but makes the code easier to parse at a glance.

2019-03-02  Luca Saiu  <positron@gnu.org>

	jitterlisp manual improvements

	* example-vms/jitterlisp/doc/jitterlisp.texi: Document ASTs.  Minor changes
	elsewhere.

2019-03-02  Luca Saiu  <positron@gnu.org>

	jitterlisp printer: print primitive ASTs in a leaner notation

	* example-vms/jitterlisp/jitterlisp-printer.c (jitterlisp_print_ast): If the AST
	is a primitive, just print the primitive name inside it instead of the entire,
	much more verbose, primitive object..

2019-03-02  Luca Saiu  <positron@gnu.org>

	documentation changes

	* example-vms/jitterlisp/doc/jitterlisp.texi: Documentation changes.

2019-03-01  Luca Saiu  <positron@gnu.org>

	more program->routine renaming

	These are all incompatible API changes, but the important change is still to
	come, and this change should be the last one before it: there will be two
	different structs: one for a routine being edited, another for a routine ready
	to be executed.
	* jitter/jitter-routine.h (JITTER_PROGRAM_H_): Rename multiple-inclusion
	prevention macro from JITTER_PROGRAM_H_ to JITTER_ROUTINE_H_.
	(jitter_make_program): Rename to jitter_make_routine.
	(jitter_destroy_program): Rename to jitter_destroy_routine.
	(jitter_set_program_option_slow_registers_only)
	(jitter_set_program_option_slow_literals_only)
	(jitter_set_program_option_slow_literals_and_registers_only)
	(jitter_set_program_option_add_final_exitvm)
	(jitter_set_program_option_optimization_rewriting): Rename to
	jitter_set_routine_option_slow_registers_only,
	jitter_set_routine_option_slow_literals_only,
	jitter_set_routine_option_slow_literals_and_registers_only,
	jitter_set_routine_option_add_final_exitvm,
	jitter_set_routine_option_optimization_rewriting.
	(jitter_print_program): Rename to jitter_print_routine.
	(jitter_resolve_labels_in_unspecialized_program): Rename to
	jitter_resolve_labels_in_unspecialized_routine.

	* jitter/jitter-routine.c: Likewise.

	* jitter/jitter-disassemble.h (jitter_disassemble_program): Rename to
	jitter_disassemble_routine.
	(jitter_disassemble_program_to): Rename to
	jitter_disassemble_routine_to.

	* jitter/jitter-disassemble.c: Likewise.
	Whitespace change.
	(jitter_replicate_program): Comment update.

	* jitter/jitter-specialize.c (jitter_backpatch_labels_in_specialized_program):
	Rename to jitter_backpatch_labels_in_specialized_routine.  Update comment.
	(jitter_resolve_labels_in_unspecialized_program): Rename to
	jitter_resolve_labels_in_unspecialized_routine.

	* example-vms/jitterlisp/jitterlisp-code-generator.c: Change uses of the
	renamed identifiers mentioned above.
	* example-vms/jitterlisp/jitterlisp-eval-vm.c: Likewise.
	* example-vms/structured/structured-main.c: Likewise.
	* jitter/jitter-replicate.h: Likewise.
	* templates/vm-main.c: Likeise.
	* templates/vm1.c: Likewise.
	* jitter/jitter-replicate.c: Likewise.
	Remove unistd.h inclusion, which is no longer needed.

	* jitter/jitter-instruction.h (struct jitter_parameter): Update function name
	in a comment, following renaming.

	* templates/vm.h: Likewise.
	(VMPREFIX_APPEND_INSTRUCTION, VMPREFIX_APPEND_REGISTER_PARAMETER): Update formal
	name.
	(vmprefix_print_program_possibly_with_slow_registers_only): Remove obsolete
	wrapper macro, which I had forgotten before.
	(vmprefix_destroy_program, vmprefix_print_program, vmprefix_disassemble_program)
	(vmprefix_disassemble_program_to)
	(vmprefix_set_program_option_slow_literals_only)
	(vmprefix_set_program_option_slow_registers_only)
	(vmprefix_set_program_option_slow_literals_and_registers_only)
	(vmprefix_set_program_option_add_final_exitvm)
	(vmprefix_set_program_option_optimization_rewriting): Rename to
	vmprefix_destroy_routine, vmprefix_print_routine, vmprefix_disassemble_routine,
	vmprefix_disassemble_routine_to, vmprefix_set_routine_option_slow_literals_only,
	vmprefix_set_routine_option_slow_registers_only,
	vmprefix_set_routine_option_slow_literals_and_registers_only,
	vmprefix_set_routine_option_add_final_exitvm,
	vmprefix_set_routine_option_optimization_rewriting.

	jitter/jitter-vm.h (jitter_print_vm_configuration): Update comment.
	(struct jitter_vm): Add comment.

2019-03-01  Luca Saiu  <positron@gnu.org>

	more renaming of "program" to "routine"

	Rename the template macro providing a VM-specific alias for the VM-independent
	struct jitter_routine.  The new template macro is now vmprefix_routine rather
	than vmprefix_program.  Fix every use.

	* templates/vm.h (vmprefix_program): Rename to vmprefix_routine.
	(VMPREFIX_ROUTINE_BEGINNING): Update formal name.

	* templates/vm-main.c (struct vmprefix_main_command_line): Rename fields
	print_program, disassemble_program, run_program to print_routine,
	disassemble_routine, run_routine.  Fix uses.
	(enum vmprefix_vm_negative_option): Rename case
	vmprefix_vm_negative_option_no_print_program to
	vmprefix_vm_negative_option_no_print_routine.  Fix uses.

	* example-vms/jitterlisp/jitterlisp-code-generator.c: Fix uses of
	struct jitterlispvm_program to use the new name struct jitterlispvm_routine.

	* example-vms/structured/structured-code-generator-register.c: Fix uses of
	struct structuredvm_program to use the new name struct structuredvm_routine.
	* example-vms/structured/structured-code-generator-register.h: Likewise.
	* example-vms/structured/structured-code-generator-stack.c: Likewise.
	* example-vms/structured/structured-code-generator-stack.h: Likewise.
	* example-vms/structured/structured-main.c: Likewise.

	* example-vms/jitterlisp/jitterlisp-eval-vm.c (jitterlisp_driver_vm_program):
	Rename to jitterlisp_driver_vm_routine.  Fix uses.

	* example-vms/jitterlisp/jitterlisp.jitter: Fix comment uses of "program" in the
	sense of a VM routine.

2019-03-01  Luca Saiu  <positron@gnu.org>

	rename "VM programs" into "VM routine"; no other API change yet

	Rename struct jitter_program to struct jitter_routine.  Rename some source files
	mentioning VM programs as well.  This is an incompatible API change, but the
	actually important change is still to come: there will be two different structs,
	one for a routine still being composed and another for an executable routine.

	* jitter/jitter-program.h: Rename to...
	* jitter/jitter-routine.h: ...This.
	Rename struct jitter_program to struct jitter_routine.  Update every use.  Fix
	comments.

	* jitter/jitter-program.c: Rename to...
	* jitter/jitter-routine.c: ...This.
	Rename struct jitter_program to struct jitter_routine.  Update every use.  Fix
	comments.

	* jitter/program.l: Rename to...
	* jitter/jitter-routine.l: ...This.  Update every use.  Fix comments.

	* jitter/program.y: Rename to...
	* jitter/jitter-routine.y: This.  Update every use.  Fix comments.
	(struct parser_arg): Rename program field to routine.

	* Makefile.am: Refer to files with the new names.  Fix a few comments.

	* example-vms/jitterlisp/jitterlisp-code-generator.c: Update every
	occurrence of struct jitter_program to use the new name.  Update comments.
	* example-vms/jitterlisp/jitterlisp-error.h: Likewise.
	* example-vms/jitterlisp/jitterlisp-sexpression.h: Likewise.
	* example-vms/structured/structured-code-generator-register.c: Likewise.
	* example-vms/structured/structured-code-generator-register.h: Likewise.
	* example-vms/structured/structured-code-generator-stack.c: Likewise.
	* example-vms/structured/structured-code-generator-stack.h: Likewise.
	* example-vms/structured/structured-main.c: Likewise.
	* jitter/jitter-disassemble.c: Likewise.
	* jitter/jitter-disassemble.h: Likewise.
	* jitter/jitter-instruction.h: Likewise.
	* jitter/jitter-interpreter-private.h: Likewise.
	* jitter/jitter-replicate.c: Likewise.
	* jitter/jitter-replicate.h: Likewise.
	* jitter/jitter-rewrite.c: Likewise.
	* jitter/jitter-rewrite.h: Likewise.
	* jitter/jitter-specialize.c: Likewise.
	* jitter/jitter-specialize.h: Likewise.
	* jitter/jitter-vm.c: Likewise.
	* jitter/jitter-vm.h: Likewise.
	* jitterc/jitterc-generate.c: Likewise.
	* jitterc/jitterc-rewrite.h: Likewise.
	* templates/vm-main.c: Likewise.
	* templates/vm.h: Likewise.
	* templates/vm1.c: Likewise.

	* doc/jitter.texi: Update manual.

2019-03-01  Luca Saiu  <positron@gnu.org>

	WIP tentative changes

	Add a lot of temporary, dirty changes that I had laying around in my local
	repository.  This will need a cleanup later when I seriously attack defective
	instructions, but having too many unchecked changes is bothering me and impeding
	other work.

	* jitter/jitter-interpreter-private.h: Here.
	* jitterc/jitterc-generate.c: Here.
	* jitterc/jitterc-vm.c: Here.
	* jitterc/jitterc-vm.h: Here.
	* machine/mips/jitter/machine/jitter-machine.h: Here.
	* machine/powerpc/jitter/machine/jitter-machine.h: Here.
	* machine/sh/jitter/machine/jitter-machine.h: Here.
	* machine/sparc/jitter/machine/jitter-machine.h: Here.
	* machine/x86_64/jitter/machine/jitter-machine.h: Here.

2019-03-01  Luca Saiu  <positron@gnu.org>

	uninspired VM: trivial changes

	* example-vms/uninspired/uninspired.jitter (r): Use two fast registers.
	(push-depths, push-increasing, reverse, roll, mroll): Change non-residual
	literals.

2019-03-01  Luca Saiu  <positron@gnu.org>

	jitterlisp VM: minor temporary changes

	* example-vms/jitterlisp/jitterlisp.jitter (primitive-primordial-plus):
	Add conditional experimental code, to be tested against later with stack
	operands.
	(rewrite rules): Add comment.

2019-03-01  Luca Saiu  <positron@gnu.org>

	jitterlisp library: add procedures

	* example-vms/jitterlisp/jitterlisp-library.lisp (interpreted-closure-optimize)
	(closure-optimize, even?, odd?): New procedures.

2019-02-28  Luca Saiu  <positron@gnu.org>

	minor manual changes

	* doc/jitter.texi: Minor changes.
	* example-vms/jitterlisp/doc/jitterlisp.texi: Minor changes.

2019-02-25  Luca Saiu  <positron@gnu.org>

	manual: trivial changes

	* doc/jitter.texi: Trivial manual changes.

2019-02-25  Luca Saiu  <positron@gnu.org>

	structured: add command-line options --{,no}slow-{literals,registers}-only

	Add individual command-line options --slow-literals-only, --slow-registers-only
	and their negative counterparts --no-slow-literals-only and
	--no-slow-registers-only.  Also keep --slow-only and --no-slow-only for
	convenience.

	The Structured example is a good simple way of benchmarking, and letting the
	user have more control in this case makes sense.

	* example-vms/structured/structured-main.c (structured_help): Update --help text
	to mention the new options.
	(struct structured_command_line): Remove field slow_only.  Add fields
	slow_literals_only and slow_registers_only.
	(structured_initialize_command_line): Initialize the two new fields instead of
	the old one.
	(structured_parse_command_line): Handle new options, updating the appropriate
	struct fields.
	(structured_work): Set the two options individually.

2019-02-25  Luca Saiu  <positron@gnu.org>

	machine-generated VM driver: bugfixes for slow-literals

	* templates/vm-main.c (vmprefix_main_option_specification): Associate the key
	vmprefix_vm_negative_option_no_slow_literals_only to --no-slow-literals-only,
	rather than the vmprefix_vm_negative_option_no_slow_registers_only, key I had
	associated by mistake before, copying too fast.
	(parse_opt): Initialize cl->slow_literals_only, which I had forgotten.

2019-02-25  Luca Saiu  <positron@gnu.org>

	actually implement the option slow_literals_only

	Add a new boolean parameter to Jitter-generated instruction recognizers.  This
	parameters tells whether fast literals are enabled or not.  The rest of the API
	does not need to change: the first call to the recognizer receives a VM program
	pointer as an argument, and the program contains the option slow_literals_only.

	Specializer functions don't need any change: all the relevant decisions are
	taken by recognizer functions.

	* jitterc/jitterc-generate.c (jitterc_emit_specializer_recognizer_prototypes):
	Add boolean parameter in generated prototypes for
	vmprefix_recognize_specialized_instruction_INSTRUCTION.
	(jitterc_emit_specializer_recognizers): Add boolean argument in generated
	recognizer functions.  Use it in generated code in && with value comparison
	in the non-residual literal case, so as to make the condition never fire when
	fast literals are disabled.  At the end of the generated recognizer function,
	when calling the recognizer for the next VM instruction parameter, pass the
	boolean parameter unchanged.
	(jitterc_emit_specializer): Extract the boolean from the program option.  Pass
	it to the first recognizer.

2019-02-25  Luca Saiu  <positron@gnu.org>

	* jitterc/jitterc-mangle.c (jitterc_mangle): Improve comments.

2019-02-25  Luca Saiu  <positron@gnu.org>

	optimization rewriting as an option: fix Structured

	* example-vms/structured/structured-main.c (structured_work): Set the rewriting
	option on the program rather than on the VM, according to the new API.

2019-02-25  Luca Saiu  <positron@gnu.org>

	make optimization rewriting enabling/disabling into a program option

	* jitter/jitter-program.h (struct jitter_program_options): New field
	optimization_rewriting.
	(jitter_set_program_option_optimization_rewriting): New prototype.
	(jitter_set_program_option_add_final_exitvm): Comment punctuation.

	* jitter/jitter-program.c (jitter_initialize_options): Set default for
	optimization_rewriting.
	(jitter_set_program_option_optimization_rewriting): New function.
	(jitter_close_current_instruction): add a conditional on the new option, and
	only if the option is enabled call the rewrite function.  Before I was
	unconditionally calling a function via pointer, and that pointed function could
	be a dummy do-nothing function according to a VM-level setting.

	* jitter/jitter-vm.h (jitter_vm_enable_optimization_rewriting)
	(jitter_vm_disable_optimization_rewriting): Remove prototypes and entire
	section.
	(struct jitter_vm): Remove field actually_rewrite, and make the existing field
	rewrite play the role of the old actually_rewrite.
	(jitter_dont_rewrite): Remove dummy prototype.

	* jitter/jitter-vm.c (jitter_vm_enable_optimization_rewriting)
	(jitter_vm_disable_optimization_rewriting, jitter_dont_rewrite): Remove
	functions function and entire section.

	* templates/vm.h (vmprefix_enable_optimization_rewriting)
	(vmprefix_disable_optimization_rewriting): Remove wrapper prototypes and
	entire section.
	(vmprefix_set_program_option_optimization_rewriting): New wrapper macro.

	* templates/vm1.c (vmprefix_initialize): Initialize the_vmprefix_vm.rewrite
	rather than the now removed the_vmprefix_vm.actually_rewrite.  Do not call
	jitter_vm_enable_optimization_rewriting, which is now replaced by an option
	working at the granularity of programs rather than VMs.
	(vmprefix_enable_optimization_rewriting)
	(vmprefix_disable_optimization_rewriting): Remove wrapper functions and
	entire section.

	* templates/vm-main.c (main): Use the new API described above, by setting
	options on a program rather than on a VM.

	* example-vms/jitterlisp/jitterlisp-code-generator.c
	(jitterlisp_generate_jittery): Set options on each freshly allocated VM program
	for the user (the driver is generated only once, and separately).

	* example-vms/jitterlisp/jitterlisp-main.c (main): Don't set the option at the
	VM level.

2019-02-25  Luca Saiu  <positron@gnu.org>

	update Structured example to use renamed instructions

	* example-vms/structured/examples/count-down-optimized.structuredvm: Update to
	use now renamed stack instructions.

2019-02-25  Luca Saiu  <positron@gnu.org>

	make add_final_exitvm a VM program option

	Move the logic about add_final_exitvm from VM to program, and make it into a
	program option, easy to set individually for each program.

	* jitter/jitter-program.h (struct jitter_program_options): New field
	add_final_exitvm.
	(jitter_set_program_option_slow_registers_only)
	(jitter_set_program_option_slow_literals_only): New attribute.
	(jitter_set_program_option_residualize): Rename into the more consistent
	jitter_set_program_option_slow_literals_and_registers_only.
	(jitter_set_program_option_add_final_exitvm): New function.

	* jitter/jitter-program.c (jitter_initialize_options): Set default for
	add_final_exitvm.
	(jitter_set_program_option_add_final_exitvm): New function.
	(jitter_set_program_option_residualize): Rename into the more consistent
	jitter_set_program_option_slow_literals_and_registers_only.

	* jitter/jitter-vm.h (struct jitter_vm): Remove field add_final_exitvm.
	(jitter_vm_disable_final_exitvm, jitter_vm_enable_final_exitvm): Remove
	prototypes.

	* jitter/jitter-vm.c: (jitter_vm_disable_final_exitvm)
	(jitter_vm_enable_final_exitvm): Remove functions.

	* jitter/jitter-specialize.c (jitter_add_program_epilog): Refer program option
	instead of VM struct field.

	* templates/vm.h (vmprefix_disable_final_exitvm, vmprefix_enable_final_exitvm):
	Remove prototypes.
	(vmprefix_set_program_option_add_final_exitvm): New macro.
	(vmprefix_set_program_option_slow_literals_and_registers_only): New macro, which
	I had forgotten earlier for the pre-rename version.

	* templates/vm1.c (vmprefix_initialize): Don't call
	jitter_vm_enable_final_exitvm.
	(vmprefix_disable_final_exitvm, vmprefix_enable_final_exitvm): Remove functions.

	* example-vms/jitterlisp/jitterlisp-code-generator.c
	(jitterlisp_generate_jittery): Set add_final_exitvm option for each user program.

	* example-vms/jitterlisp/jitterlisp-eval-vm.c (jitterlisp_vm_initialize): Don't
	call jitterlispvm_disable_final_exitvm.  Don't even do the equivalent thing
	in the driver here, which does use exitvm, and add a comment instead.  Don't
	explicitly add an exitvm instruction, since now it comes automatically here.

2019-02-25  Luca Saiu  <positron@gnu.org>

	new Structured example, count-up-down

	Add a Structured language example program.

	* example-vms/structured/examples/count-up-down.structured: New file.

	* Makefile.am (EXTRA_DIST): add the example.

	* example-vms/structured/Makefile.am (EXTRA_DIST): add the example.

2019-02-24  Luca Saiu  <positron@gnu.org>

	minor manual changes

	Grammar, minor updates.

	* doc/jitter.texi: Manual changes.

2019-02-21  Luca Saiu  <positron@gnu.org>

	build system: disable minimal-threading and no-threading dispatches by default

	Now that Jitter has a few users it is better to disable unreliable dispatching
	models by default, until I finish implementing defect replacement to make them
	usable in production.

	* configure.ac: Change dispatching-mode enabling default for minimal-threading
	and no-threading.  The modes remain available when explicitly selected at
	configure time.  Even if enabled by the user in that way, give a warning when
	they are chosen.

2019-02-21  Luca Saiu  <positron@gnu.org>

	build system bugfix

	* Makefile.am (benchmarking-examples): add $(EXEEXT) to executable dependency
	file name.

2019-02-21  Luca Saiu  <positron@gnu.org>

	indentation

	* jitter/jitter-program.c (jitter_set_program_option_slow_registers_only)
	(jitter_set_program_option_slow_literals_only): Fix argument indentation.

2019-02-21  Luca Saiu  <positron@gnu.org>

	add VM parser functions to parse from a string in memory rather than from a file

	The new function vmprefix_parse_string is the recommended way for the user to
	parse VM code from a string in memory into the pointed VM program.  Such
	template code, as is the case for the other parser functions, simply calls
	a generic parser function taking a VM pointer as an argument.

	Some minor factoring in parser code.

	* jitter/program.y (jitter_parse_core): New static function, factoring common
	code for every parsing function.  jitter_parse_file remains based on
	jitter_parse_file_star.
	(jitter_parse_file_star): Change to use jitter_parse_core.
	(jitter_parse_string): New function, using jitter_parse_core.
	Comment change.

	* templates/vm.h (vmprefix_parse_string): New prototype.  Comment update.

	* templates/vm1.c (vmprefix_parse_string): New function.

2019-02-21  Luca Saiu  <positron@gnu.org>

	program option overhaul

	Rename the two currently existing VM program options.  Change the VM program
	parsing API so as not to take options as arguments to be used for a new program
	to be returned; instead, parsing routines now accept an existing program pointer
	as an argument, on which the user may have set options before.
	Add VM-specific aliases in the template header for setting options.
	Structured: add --slow-only, --no-slow-only.

	Adding new options will be much easier from now on, and the API will be easier
	to keep stable.

	The option disabling fast literals has no effect yet.

	* jitter/jitter-program.h (struct jitter_program_options): Rename
	always_residualize_registers to slow_registers_only.  Rename
	always_residualize_literals to slow_literals_only.
	(jitter_set_program_option_residualize_registers): Rename to
	jitter_set_program_option_slow_registers_only.
	(jitter_set_program_option_residualize_literals): Rename to
	jitter_set_program_option_slow_literals_only.
	Update comments.

	* jitter/jitter-program.c (jitter_initialize_options)
	(jitter_append_register_parameter): Use new struct field
	names.
	(jitter_set_program_option_residualize_registers)
	(jitter_set_program_option_residualize_literals): Rename like in the header.

	* jitter/program.y (jitter_parse_file_star, jitter_parse_file): Make those
	function take a struct jitter_program * argument and return void.
	(jitter_parse_file_possibly_with_slow_registers_only)
	(jitter_parse_file_star_possibly_with_slow_registers_only): Remove,
	integrating their bodies into jitter_parse_file_star and jitter_parse_file.

	* example-vms/structured/structured-code-generator-register.h
	(structured_make_vm_program_register): Rename to
	structured_translate_program_register, make return type void, add
	structuredvm_program pointer argument.

	* example-vms/structured/structured-code-generator-register.c
	(structured_make_vm_program_register): Likewise, in the implementation.

	* example-vms/structured/structured-code-generator-stack.h
	(structured_make_vm_program_stack): Rename to
	structured_translate_program_stack,  make return type void, add
	structuredvm_program pointer argument.

	* example-vms/structured/structured-code-generator-stack.c
	(structured_make_vm_program_stack): Likewise, in the implementation.

	* example-vms/structured/structured-main.c (structured_usage): Whitespace.
	(structured_help): Show help about new options.
	(struct structured_command_line): New field slow_only.
	(structured_initialize_command_line): Initialize slow_only.
	(structured_parse_command_line): Handle new options --slow-only, --no-slow-only.
	(structured_work): Use the new API for options and parsing.

	* templates/vm-main.c (struct vmprefix_main_command_line): New field
	slow_literals_only.  Whitespace changes.
	(enum vmprefix_vm_negative_option, vmprefix_vm_long_only_option): New
	options vmprefix_vm_negative_option_no_slow_literals_only,
	vmprefix_vm_negative_option_no_slow_only,
	vmprefix_vm_long_only_option_slow_only.  Renumber options to make
	more options easier to insert in the future without clashing with
	existing options, with long-only options having negative values
	below -100.
	(vmprefix_main_option_specification): Change the short option for
	slow-registers-only from -s to -L.  New options --slow-registers-only,
	--slow-only, --no-slow-literals-only, --no-slow-only.
	(parse_opt): Support new command-line options.  Rename 's' to 'L'
	short options.
	(main): Adapt to the new parser API.  Remove very old commented-out cruft.

	* templates/vm.h (vmprefix_parse_file_star, vmprefix_parse_file): Make
	the same change for this wrapper as for the parser function, except that
	this don't have the VM pointer argument (they didn't have it before this
	change either): now the result is void, and the VM program to update is a
	new pointer argument.
	(vmprefix_parse_file_star_possibly_with_slow_registers_only_star)
	(vmprefix_parse_file_possibly_with_slow_registers_only_star): Remove.
	(vmprefix_set_program_option_slow_literals_only)
	(vmprefix_set_program_option_slow_registers_only): New VM-specific wrapper
	macros.

	* templates/vm1.c (vmprefix_parse_file, vmprefix_parse_file_star): Same API
	change.
	(vmprefix_parse_file_star_possibly_with_slow_registers_only_star)
	(vmprefix_parse_file_possibly_with_slow_registers_only_star): Remove.

2019-02-21  Luca Saiu  <positron@gnu.org>

	jitterlisp: optimize tagged plus and minus

	On two's complement machines, which are the only machines supported by
	JitterLisp (and GNU) we can have the guarantee that the sum or subtraction of
	two tagged fixnums with a tag of 0 in low-order bits is itself automatically
	tagged the right way.  Of course I am currently ignoring overflow.

	No longer explicitly tag the result of a fixnum sum or subtraction.  Now a
	fixnum + or - takes one machine instruction (without counting type checks), as
	long as the machine instructions for summing and subtracting allow 16 as an
	immediate.

	Thanks to José Marchesi for confirming to me, with a convincing mathematical
	argument, that this optimization is actually correct.

	* example-vms/jitterlisp/jitterlisp-operations.h
	(JITTERLISP_EXP_FF_F_PLUS_OR_MINUS) [fixnum tag zero]: Redefine.
	Add comment about multiplication, which can probably benefit from a similar,
	if slightly less dramatic, optimization.

2019-02-21  Luca Saiu  <positron@gnu.org>

	add options always-residualize-registers and (for the future) always-residualize-literals

	Move the complexity of register index incrementation for benchmarking purposes
	from parsing and printing to a VM routine option.

	The effect of always-residualize-literals is not implemented yet, but the API is
	present and meant to be stable.

	* jitter/jitter-program.c (jitter_initialize_options): Initialize new options.
	(jitter_fail_unless_options_changeable): New static function.
	(jitter_set_program_option_residualize_registers)
	(jitter_set_program_option_residualize_literals)
	(jitter_set_program_option_residualize): New functions.
	(jitter_append_register_parameter): Increment register here in case we are
	always residualizing registers.
	(jitter_print_program_possibly_with_slow_registers_only): Remove, and
	merge code into jitter_print_program.
	(jitter_print_program): As above.

	* jitter/jitter-program.h (struct jitter_program_options): Update comment,
	new field always_residualize_registers, new field always_residualize_literals.
	(jitter_set_program_option_residualize_registers)
	(jitter_set_program_option_residualize_literals)
	(jitter_set_program_option_residualize): New functions.
	(jitter_print_program_possibly_with_slow_registers_only): Remove function:
	now jitter_print_program always looks at the option in the pointed program.

	* jitter/program.y (struct parser_arg): Remove field slow_registers_only, now
	redundant thanks to the new option.
	(argument rule): register rule: do not increment the index here: the new version of
	jitter_append_register_parameter now takes care of incrementing the index by
	itself, looking at the option.
	(jitter_parse_file_star_possibly_with_slow_registers_only): Do not save
	obsolete field in struct parser_arg.  Set the option instead.

	* templates/vm-main.c (main): Simply call vmprefix_print_program instead of
	the obsolete vmprefix_print_program_possibly_with_slow_registers_only.

2019-02-20  Luca Saiu  <positron@gnu.org>

	program options: add struct, initial support

	* jitter/jitter-program.h (struct jitter_program_options): New struct.
	(struct jitter_program): New field options.
	(Program options): New section, with no prototypes yet.

	* jitter/jitter-program.c (jitter_initialize_options): New static function.
	(jitter_program_make_options_unchangeable): New static function.
	(jitter_initialize_program, jitter_append_label)
	(jitter_append_meta_instruction): Call new functions.

2019-02-19  Luca Saiu  <positron@gnu.org>

	comment change

	* example-vms/structured/structured.y (begin): Improve comment.

2019-02-19  Luca Saiu  <positron@gnu.org>

	structured frontend: bugfix, undo some cosmetic changes

	Make syntactic sugar for multiple variable declarations work again with the
	intended syntax.  I had broken this two changes ago when factoring for
	introducing elif clauses in statements.

	Move VAR and, for consistency, IF terminals out of case-specific rules and back
	into the statement and expression rules.

	* example-vms/structured/structured.y (one_or_more_statements, block): Move VAR
	terminal back out of block and into one_or_more_statements.  The previous
	factoring attempt caused an unintended syntax to be recognized when multiple
	variables are declared, each requiring a separate VAR.  Only one VAR terminal
	is needed at the beginning.
	(statement, if_statement, expression, if_expression): move IF terminal into
	statement and expression out from if_statement and if_expression, out of
	consistency with VAR terminal.  Update attribute indices to fit.

2019-02-19  Luca Saiu  <positron@gnu.org>

	structured: add elif syntactic sugar for expressions as well

	Add elif clauses to expressions as well.  Rename statement nonterminals for elif
	to distinguish from the new syntax.

	* example-vms/structured/structured.y (if, if_rest): Rename nonterminals to
	if_statement and if_statement_rest.
	(if_expression, if_expression_rest): New nonterminals.
	(statement): Rename if to if_statement.
	(if_statement, if_statement_rest): Rename rule left-hand sides and recursive
	nonterminals on right-hand-sides from if and if_rest.
	(expression): Move conditional expression into new if_expression rule.
	(if_expression): New rule, factoring code from expression.
	(if_expression_rest): New rule, similar to the statement case.

2019-02-19  Luca Saiu  <positron@gnu.org>

	structured: add elif syntactic sugar

	Structured frontend: add elif as syntactic sugar for conditional statements.
	Minor factoring.

	* example-vms/structured/structured.l (elif): New keyword.

	* example-vms/structured/structured.y (ELIF): New token.
	(if, if_rest): New nonterminals.
	(statement): Factor conditional statements into if.
	(if, if_rest): New rules.
	(statements): Move terminal VAR into block, consistently with the
	new nonterminal if.
	(block): add VAR, change attribute indices to fit.

2019-02-17  Luca Saiu  <positron@gnu.org>

	uninspired: add instruction for new stack operations and for stack debugging

	* example-vms/uninspired/uninspired.jitter (push-depths, push-increasing)
	(print-topmost, reverse, roll, mroll, rot, mrot): New instructions.
	(vmprefix_print_topmost_format_string, vmprefix_newline_string): New wrapped
	globals.

2019-02-17  Luca Saiu  <positron@gnu.org>

	new stack operations: rot, -rot

	Add new stack operations, ROT and MROT, after Forth's "rot" and "-rot".

	* jitter/jitter-stack.h (JITTER_STACK_TOS_ROT, JITTER_STACK_NTOS_ROT)
	(JITTER_STACK_TOS_MROT, JITTER_STACK_NTOS_MROT): New macros.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions):
	Make the new stack operation accessible from VM instructions.

	* emacs/jitter-mode.el: Add font-lock-mode support for the new ROT_ and MROT_
	operations.

2019-02-17  Luca Saiu  <positron@gnu.org>

	new stack operation: -roll

	Add a new (potentially inefficient) stack operation, a variant of Forth's
	roll which is to roll like -rot is to rot.

	* jitter/jitter-stack.h (JITTER_STACK_TOS_MROLL, JITTER_STACK_NTOS_MROLL):
	New macros.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions):
	Make the new stack operation accessible from VM instructions.

	* emacs/jitter-mode.el: Add font-lock-mode support for the new MROLL_
	operation.

2019-02-17  Luca Saiu  <positron@gnu.org>

	new stack operation: roll

	Add a new (potentially inefficient) stack operation, the equivalent of Forth's
	roll word with the depth given in a macro argument.

	* jitter/jitter-stack.h (JITTER_STACK_TOS_ROLL, JITTER_STACK_NTOS_ROLL):
	New macros.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions):
	Make the new stack operation accessible from VM instructions.

	* emacs/jitter-mode.el: Add font-lock-mode support for the new ROLL_
	operation.

2019-02-17  Luca Saiu  <positron@gnu.org>

	new stack operation: reverse

	Add a new (potentially inefficient) stack operation, destructively reversing
	the order of the n topmost elements of a stack.

	* jitter/jitter-stack.h (JITTER_STACK_TOS_REVERSE, JITTER_STACK_NTOS_REVERSE):
	New macros.
	(JITTER_SWAP): New helper macro.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions):
	Make the new stack operation accessible from VM instructions.

	* emacs/jitter-mode.el: Add font-lock-mode support for the new REVERSE_
	operation.

2019-02-17  Luca Saiu  <positron@gnu.org>

	new stack operators: set_at_depth, set_at_nonzero_depth

	Add the update counterparts of AT_DEPTH and AT_NONZERO_DEPTH .

	* jitter/jitter-stack.h (JITTER_STACK_TOS_SET_AT_DEPTH)
	(JITTER_STACK_NTOS_SET_AT_DEPTH, JITTER_STACK_TOS_SET_AT_NONZERO_DEPTH)
	(JITTER_STACK_NTOS_SET_AT_NONZERO_DEPTH): New macros.

	* emacs/jitter-mode.el: Add font-lock support for SET_AT_DEPTH and
	SET_AT_NONZERO_DEPTH.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions):
	Make new stack operations accessible from VM instructions.

2019-02-17  Luca Saiu  <positron@gnu.org>

	structured examples and test cases: simplify syntax

	* example-vms/structured/examples/count-down.structured: Remove now redundant
	begin..end at the top level.  Indent in a more economical way.
	* example-vms/structured/examples/euclid.structured: Likewise.
	* example-vms/structured/examples/primes.structured: Likewise.
	* tests/structured/euclid.structured: Likewise.
	* tests/structured/primes.structured: Likewise.

2019-02-17  Luca Saiu  <positron@gnu.org>

	structured: make concrete syntax less Pascal-like and more convenient

	Structured parser: semicolons are now mandatory statement terminators rather
	than statement separators.  Semicolons are optional after "begin" and after
	"end".

	The main program is now a statement sequence, with no need
	for mandatory begin..end delimiters, even where the program begins by variable
	declarations.

	Change Structured examples and test cases to use the new syntax.

	* example-vms/structured/structured.y: Update Structured concrete syntax.

	* example-vms/structured/examples/count-down.structured: Change to new syntax.
	* example-vms/structured/examples/euclid.structured: Likewise.
	* example-vms/structured/examples/primes.structured: Likewise.
	* tests/structured/conditional.structured: Likewise.
	* tests/structured/euclid.structured: Likewise.
	* tests/structured/primes.structured: Likewise.
	* tests/structured/skip.structured: Likewise.

2019-02-15  Luca Saiu  <positron@gnu.org>

	grammar fix

	* README-hacking: Here.

2019-02-12  Luca Saiu  <positron@gnu.org>

	test suite: new Structured test case: primes

2019-02-12  Luca Saiu  <positron@gnu.org>

	test suite: test both code generators for Structured

	* tests/utility.in (jitter_run_structured_case_all_dispatches): Make into a
	two-iteration loop, providing --stack and --register option.

	* tests/structured/programs.test.in: Update test case count.

2019-02-12  Luca Saiu  <positron@gnu.org>

	test suite: update to respect new Structured syntax

	Variable declarations are now mandatory.

	* tests/structured/euclid.structured(a, b): Declare variables.

2019-02-12  Luca Saiu  <positron@gnu.org>

	unspecialized routine printer: save horizontal space when possible

	When printing an unspecialized VM routine, format instruction names to be just
	as wide as the longest instruction name *which is actually used* in the routine,
	plus one space.

	This allows for better space economy when instructions with long names exist but
	are uncommon.

	* jitter/jitter-program.c (jitter_maximum_instruction_name_length): New
	static function.
	(jitter_print_program_possibly_with_slow_registers_only): Use
	jitter_maximum_instruction_name_length to compute the format string.

2019-02-11  Luca Saiu  <positron@gnu.org>

	structured comment rephrasings

2019-02-11  Luca Saiu  <positron@gnu.org>

	structured code generator: remove obsolete comment

2019-02-10  Luca Saiu  <positron@gnu.org>

	structured: add --cross-disassemble

2019-02-10  Luca Saiu  <positron@gnu.org>

	structured examples: use new syntax

2019-02-10  Luca Saiu  <positron@gnu.org>

	structured example overhaul: now the register-based code generator works, and works awesomely

2019-02-10  Luca Saiu  <positron@gnu.org>

	structured primes example: minor example and build system fixes

2019-02-10  Luca Saiu  <positron@gnu.org>

	structured example: add a C translation of the primes example, for benchmarking

2019-02-09  Luca Saiu  <positron@gnu.org>

	structured: extend static environment to support register temporaries

2019-02-08  Luca Saiu  <positron@gnu.org>

	WIP structured: stuff

2019-02-07  Luca Saiu  <positron@gnu.org>

	structured example: make variable declarations mandatory; minor improvements

2019-02-03  Luca Saiu  <positron@gnu.org>

	bugfix jitterlisp operations: cast to jitter_int when untagging: this ensures signedness, which makes two-divided and two-remainder correct

	Everybody should read AIM-378 (thanks to Alfred M. Szmidt and José Marchesi for suggesting it).

2019-02-02  Luca Saiu  <positron@gnu.org>

	introducing The Array: minor changes

2019-02-02  Luca Saiu  <positron@gnu.org>

	structured example: factor code generation, making the new register-based system selectable from the command line

2019-01-31  Luca Saiu  <positron@gnu.org>

	structured example: add example, minor changes

2019-01-29  Luca Saiu  <positron@gnu.org>

	structured: add new experimental code generator

2019-01-28  Luca Saiu  <positron@gnu.org>

	structured VM: add examples

2019-01-27  Luca Saiu  <positron@gnu.org>

	jitter_stack_height: improve comment and suggest a use case

	José Marchesi suggested a reasonable use case, which I'm now recommending.

	* jitter/jitter-stack.h (jitter_stack_height): Improve comment.

2019-01-27  Luca Saiu  <positron@gnu.org>

	update copyright years in user banners

2019-01-27  Luca Saiu  <positron@gnu.org>

	jitterlisp: move banner to a separate source file

2019-01-26  Luca Saiu  <positron@gnu.org>

	build system: delete JitterLisp generated C files with clean-local (I had forgotten those, but was already correctly deleting generated files for the other examples)

2019-01-26  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp: re-disable printing the driver at the first invocation of native code

2019-01-26  Luca Saiu  <positron@gnu.org>

	jitterlisp: improve --no-time and --time, which is now --time[={yes,no,verbose}]

2019-01-25  Luca Saiu  <positron@gnu.org>

	jitterlisp banner: update copyright year

2019-01-25  Luca Saiu  <positron@gnu.org>

	jitterlisp: add --time and --no-time

2019-01-24  Luca Saiu  <positron@gnu.org>

	jitterlisp fibo example: compile the procedure, remove comparison with a Scheme version which is now perfectly equivalent in speed, define as constant, simplify

2019-01-24  Luca Saiu  <positron@gnu.org>

	jitterlisp library: add sign procedure

2019-01-24  Luca Saiu  <positron@gnu.org>

	jitterlisp, peano example: cosmetic changes

2019-01-24  Luca Saiu  <positron@gnu.org>

	emacs mode: add font-lock support for AT_NONZERO_DEPTH

2019-01-24  Luca Saiu  <positron@gnu.org>

	add jitter_meta_instruction_parameter_kind_literal_fixnum_or_literal_label parameter kind

	This adds support for a previously missing but sensible combination of
	unspecialized instruction parameter kinds.  Bug reported by José Marchesi.

	* jitter/jitter-instruction.h (enum jitter_meta_instruction_parameter_kind): New
	case jitter_meta_instruction_parameter_kind_literal_fixnum_or_literal_label.
	* jitter/jitter-program.c (jitter_check_paremater_compatibility): Use the new
	case.
	* jitterc/jitterc-generate.c (jitterc_emit_meta_instructions): Generate the new
	case when the instruction argument kind is exactly
	(jitterc_instruction_argument_kind_literal
	 | jitterc_instruction_argument_kind_label).

2019-01-24  Luca Saiu  <positron@gnu.org>

	WIP ntos stack push optimization, preventing GCC from being impeded by false aliasing in some cases

2019-01-24  Luca Saiu  <positron@gnu.org>

	stack: add cast

	Reported by José Marchesi.

	* jitter/jitter-stack.h(JITTER_STACK_TOS_PUSH): Add cast to type to cast out of
	constness.
	(JITTER_STACK_TOS_PUSH): Likewise.

2019-01-21  Luca Saiu  <positron@gnu.org>

	WIP cosmetic change

2019-01-21  Luca Saiu  <positron@gnu.org>

	stack: add const and restrict qualifiers

2019-01-21  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp: make sibling calls bulletproof, at the cost of non-reentrancy

2019-01-20  Luca Saiu  <positron@gnu.org>

	emacs mode: add font-lock support for the new stack operators

2019-01-20  Luca Saiu  <positron@gnu.org>

	WIP uninspired: stuff

2019-01-19  Luca Saiu  <positron@gnu.org>

	cosmetic fix (reported by José Marchesi)

	* templates/vm.h (VMPREFIX_PROGRAM_BEGINNING): rename formal parameter so as
	not to refer JitterLisp (reported by José Marchesi).

2019-01-09  Luca Saiu  <positron@gnu.org>

	WIP stuff

2019-01-06  Luca Saiu  <positron@gnu.org>

	no longer rely on the no_reorder attribute, using asm dependencies to enforce order in my asm subsection hack.  This almost fixes compatibility with GCC 4, which doesn't know about no_reorder; now GCC 4 only has a minor problem that I should be able to fix.

2019-01-06  Luca Saiu  <positron@gnu.org>

	WIP stuff

2019-01-06  Luca Saiu  <positron@gnu.org>

	stack: define and use AT_NONZERO_DEPTH operation

2019-01-06  Luca Saiu  <positron@gnu.org>

	WIP defective instruction handling: major progress

2019-01-04  Luca Saiu  <positron@gnu.org>

	WIP heap: stuff

2018-12-24  Luca Saiu  <positron@gnu.org>

	jitterlisp operations: optimize JITTERLISP_EXP_F_F_MINUS (arithmetic negation) when fixnum tag is zero: in this case arithmetic negation only takes one instruction

2018-12-24  Luca Saiu  <positron@gnu.org>

	jitterlisp test suite: fix by using the new variadic, and more convenient, interpreted-closure-compile!

2018-12-24  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp library: add testing procedures to the scratch section

2018-12-24  Luca Saiu  <positron@gnu.org>

	jitterlisp printer: fix invalid zero-extension, which caused negative numbers to be printed as positive on ILP32 machines

2018-12-23  Luca Saiu  <positron@gnu.org>

	jitterlisp library: add meta-level iteration, and use it in a few places

2018-11-18  Luca Saiu  <positron@gnu.org>

	WIP defective instructions: progress, cleanup and some temporary debugging code, other stuff

2018-11-18  Luca Saiu  <positron@gnu.org>

	test suite: move JitterLisp tests down

	The JitterLisp cases are the most complex of the currently included ones, and
	it makes sense to run them last in sequential test suite runs.

	* Makefile.am: Move entire conditional from JitterLisp section to Test suite
	section.

2018-11-08  Luca Saiu  <positron@gnu.org>

	WIP defects and replacements: big progress, stuff

2018-11-04  Luca Saiu  <positron@gnu.org>

	comment change

	* jitter/jitter-patch-in.c (jitter_make_patch_in_table): Comment change.

2018-11-04  Luca Saiu  <positron@gnu.org>

	remove debugging code left there by mistake

	* jitter/jitter-replicate.c (jitter_replicate_program): Remove debugging code.

2018-11-04  Luca Saiu  <positron@gnu.org>

	use the patch-in table at replication time

	* jitter/jitter-replicate.c (jitter_replicate_program) [JITTER_HAVE_PATCH_IN]:
	Use the new field patch_in_table in the VM struct, replacing the old inefficient
	implementation.

2018-11-04  Luca Saiu  <positron@gnu.org>

	initialize and finalize descriptor tables

	* jitter/jitter-vm.h (struct jitter_vm): New field patch_in_table.
	* templates/vm1.c (vmprefix_initialize) [JITTER_HAVE_PATCH_IN]: Initialize
	patch_in_table field.
	* templates/vm1.c (vmprefix_finalize) [JITTER_HAVE_PATCH_IN]: Free resources
	for patch_in_table field.

2018-11-04  Luca Saiu  <positron@gnu.org>

	patch-in: generate efficient descriptor tables indexed by opcode

	Generate efficient descriptor tables indexed by opcode, to avoid iterating over
	every patch-in descriptors *for every instruction* at replication time.

	* jitter/jitter-patch-in.h (struct patch_in_table_entry): New type.
	(jitter_make_patch_in_table, jitter_destroy_patch_in_table): New prototypes.

	* jitter/jitter-patch-in.c (jitter_make_patch_in_table): New function.
	(jitter_destroy_patch_in_table): New function.

2018-11-04  Luca Saiu  <positron@gnu.org>

	dynamic buffer: let the user specify an initial allocated size

	* jitter/jitter-dynamic-buffer.h:
	(jitter_dynamic_buffer_initialize_with_allocated_size): New prototype.
	* jitter/jitter-dynamic-buffer.c
	(jitter_dynamic_buffer_initialize_with_allocated_size): New function.
	(jitter_dynamic_buffer_initialize): Redefine using the new function.
	(jitter_dynamic_buffer_reserve): Change memory expansion formula, to
	allow for an initial allocated size of zero.
	Update copyright notice.

2018-11-03  Luca Saiu  <positron@gnu.org>

	WIP heap test: do nothing and print a message if mmap isn't available

2018-11-03  Luca Saiu  <positron@gnu.org>

	* jitter/jitter-config.h.in: New macro HAVE_MAP_ANONYMOUS.

2018-11-03  Luca Saiu  <positron@gnu.org>

	jitter-mmap portability: make the .c part expand to nothing unless mmap is available

2018-11-01  Luca Saiu  <positron@gnu.org>

	WIP heap improvements, other stuff

2018-10-29  Luca Saiu  <positron@gnu.org>

	configure: fix LTO static builds

	* configure.ac: Move AC_CHECK_TOOLS for RANLIB and AR up in the file,
	which appears to prevent the default to be chosen automatically,
	ignoring the tools provided as parameters in the AC_CHECK_TOOLS call.

2018-10-22  Luca Saiu  <positron@gnu.org>

	WIP lots of changes: in particular, add heap.

	Lots of unrelated changes, not logged.

	My way of auto-generating change logs has been a huge hassle, since I've not
	used branches in a strict way.  I will manually fix the ChangeLog file after
	merging, or possibly even forget history and restart with manually written
	change logs from now on.

2018-08-29  Luca Saiu  <positron@gnu.org>

	manual: punctuation

	* doc/jitter.texi: Punctuation change.

2018-08-29  Luca Saiu  <positron@gnu.org>

	jitter manual: fix email contact

	* doc/jitter.texi: Change the epsilon-discuss@ mailing list, which has never
	existed, into the correct epsilon-devel@.

2018-08-29  Luca Saiu  <positron@gnu.org>

	jitterlisp manual: minor fixes

	* example-vms/jitterlisp/doc/jitterlisp.texi: Minor manual changes.

2018-08-25  Luca Saiu  <positron@gnu.org>

	documentation: small improvements in Jitter manual

	* doc/jitter.texi: Cosmetic rephrasing and grammar fixes.

2018-08-11  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp documentation and stuff

2018-08-11  Luca Saiu  <positron@gnu.org>

	update .gitignore

	* .gitignore: Ignore more machine-generated files.

2018-03-28  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp compiler improvements and other stuff

2018-03-28  Luca Saiu  <positron@gnu.org>

	RISC-V disassembly: print numeric register names

	* configure.ac (architecture-specific conditional) [RISC-V]: Call objdump with
	the architecture-specific option "regnames" rather than reg-names=numeric,
	which was silently ignored and had no effect.  Indent better.

2018-03-28  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp library and manual

2018-03-27  Luca Saiu  <positron@gnu.org>

	add initial RISC-V support

	* configure.ac (architecture-specific conditional) [RISC-V]: Add a case matching
	any riscv* CPU.  This just sets objdump options, making disassembly readable.

	* doc/jitter.texi: Minor manual updates.

2018-03-24  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp: manual progress; command-line; other stuff

2018-03-24  Luca Saiu  <positron@gnu.org>

	add a third way for the user to add a VM instruction, by its unspecialized id

	The current two ways for the user of adding a VM instruction to a program are
	VMPREFIX_APPEND_INSTRUCTION, which requires the instruction name to be known
	at compile time, and vmprefix_append_instruction_name, which is more flexible
	but less efficient.

	Add VMPREFIX_APPEND_INSTRUCTION_ID as a third way, taking a C expression
	evaluating to an unspecialized instruction id (as an enum case) as an argument.

	* jitter/jitter-program.h (jitter_append_instruction_id): New prototype.

	* jitter/jitter-program.c (jitter_append_instruction_id): New function.

	* templates/vm.h (VMPREFIX_APPEND_INSTRUCTION_ID): New macro.
	(VMPREFIX_APPEND_INSTRUCTION): Update comment, comparing with the new macro as
	well.

	Original idea from a discussion with José Marchesi.

2018-03-22  Luca Saiu  <positron@gnu.org>

	make jitter_destroy_program and vmprefix_destroy_program work on NULL

	Allow jitter_destroy_program (and automatically also vmprefix_destroy_program ,
	which is just a macro wrapper) to work on a NULL argument, doing nothing in that
	case.  This might simplify user code.

	* jitter/jitter-program.h (jitter_destroy_program): Change prototype comment.
	Update copyright years.

	* jitter/jitter-program.c (jitter_destroy_program): Do nothing if the argument
	is NULL.

	Suggested by José Marchesi.

2018-03-21  Luca Saiu  <positron@gnu.org>

	cosmetic change

	* autoconf/jitter.m4 (AC_JITTER_CONFIG): Cosmetic change in variable comparison.

2018-03-21  Luca Saiu  <positron@gnu.org>

	AC_JITTER: add --with-jitter-dispatch option

	Support the new option --with-jitter-dispatch, controlling default Jitter flag
	variables; the default is still using the best available dispatch, but this is
	now easy to override from the configure command line.

	Slightly update the structured example, which can use the new functionality.

	* autoconf/jitter.m4 (AC_JITTER_CONFIG): Support --with-jitter-dispatch.
	Comment updates, describing the new option and substitutions.
	New variable ac_jitter_default_dispatch.  New substitution
	JITTER_DEFAULT_DISPATCH.  Make information printed by configure prettier
	and more explicit with respect to the difference between best and default
	dispatches.
	(AC_JITTER_C_GENERATOR): Minor comment fix.

	* example-vms/structured/Makefile.am: Update comment, in accord to the new flag
	variable semantics; we now use the default dispatch instead of the best
	dispatch.
	Update copyright years.

	Functionality suggested by José Marchesi.

2018-03-20  Luca Saiu  <positron@gnu.org>

	fast branch fallback macros: add missing parentheses protecting macro arguments

	* jitter/jitter-fast-branch.h (JITTER_BRANCH_FAST_IF_ZERO)
	(JITTER_BRANCH_FAST_IF_NONZERO, JITTER_BRANCH_FAST_IF_POSITIVE)
	(JITTER_BRANCH_FAST_IF_NONPOSITIVE, JITTER_BRANCH_FAST_IF_NEGATIVE)
	(JITTER_BRANCH_FAST_IF_NONNEGATIVE, JITTER_BRANCH_FAST_IF_EQUAL)
	(JITTER_BRANCH_FAST_IF_NOTEQUAL, JITTER_BRANCH_FAST_IF_LESS_SIGNED)
	(JITTER_BRANCH_FAST_IF_LESS_UNSIGNED, JITTER_BRANCH_FAST_IF_NOTLESS_SIGNED)
	(JITTER_BRANCH_FAST_IF_NOTLESS_UNSIGNED, JITTER_BRANCH_FAST_IF_GREATER_SIGNED)
	(JITTER_BRANCH_FAST_IF_GREATER_UNSIGNED)
	(JITTER_BRANCH_FAST_IF_NOTGREATER_SIGNED)
	(JITTER_BRANCH_FAST_IF_NOTGREATER_UNSIGNED): Add missing parentheses around
	formal references in macro definitions for operands and target expressions.

	Bug report by José Marchesi.

2018-03-19  Luca Saiu  <positron@gnu.org>

	comment fix

	* autoconf/jitter.m4 (AC_JITTER_CONFIG): Comment fix, mentioning defined
	substitutions which were not documented.

2018-03-18  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp manual changes

2018-03-18  Luca Saiu  <positron@gnu.org>

	fix the build system for non-standard prefix Jitter installations

	Remove the configure-time option --with-jitter-config.

	Change semantics for the configure-time option --with-jitter , using a prefix
	instead of the path of a bin directory (suggested by José Marchesi).  Use
	the same prefix for jitter-config as well.

	jitter-config: add a -I option to the output of --cppflags .
	jitter-config: change semantics for the option --include-path , now printing
	the path of the header directory containing jitter/ , rather than of the
	directory named jitter/ .  This new behavior is more useful.

	Update the structured build system used as an example, for the user's sake.

	* Makefile.am (example-vms/structured/build-aux/jitter.m4): Make a copy in
	the example subdirectory, just to present something reasonable to the user.
	Distribute the copy as well.

	* autoconf/jitter.m4 (AC_JITTER_CONFIG): Remove --with-jitter-config option.
	Support --with-jitter here, with the new semantics.  Comment changes.
	(AC_JITTER_C_GENERATOR): AC_PATH_PROG: add $PATH as fallback.
	Update copyright years.

	* example-vms/structured/configure.ac: Use AC_CONFIG_MACRO_DIR to make
	the copy of jitter.m4 visible from configure.  This is the recommended
	solution for users.

	* scripts/jitter-config.in.m4sh (includedir): Redefine not to include the
	"jitter" subdirectory.
	(help): Update help to describe the new semantics for --include-path.
	(Main loop): prepend "-I $includedir" to the output of --cppflags.
	Update copyright years.

2018-02-10  Luca Saiu  <positron@gnu.org>

	WIP-TO-REBASE stuff

2018-02-09  Luca Saiu  <positron@gnu.org>

	stacks: don't use restrict

	I am not completely sure that my usage of the restrict keyword in jitter-stack.h
	was correct; it's difficult to be sure about what aliases what, particularly
	when using _AT_DEPTH operations; by removing restrict I might lose performance,
	but I will feel safer.  This decision can be reconsidered later.

	* jitter/jitter-stack.h (JITTER_STACK_TOS_DECLARATION)
	(JITTER_STACK_NTOS_DECLARATION): Remove restrict qualifiers.
	(JITTER_STACK_TOS_INITIALIZE, JITTER_STACK_NTOS_INITIALIZE): Remove cast to
	restrict pointers.  Add unrelated comments.

2018-02-04  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp library: AST optimization; other stuff

2018-02-01  Luca Saiu  <positron@gnu.org>

	header inclusion fix

	jitter/jitter-readline.c [JITTER_HAS_GNU_READLINE]: Include <stdio.h> before
	<readline/readline.h>; some Readline versions seem to require it.
	Update copyright years.

2018-02-01  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp build system: make sure example-vms/jitterlisp/jitterlisp.jitter is distributed

2018-01-30  Luca Saiu  <positron@gnu.org>

	structured language: compile while..do loops as do..while loops

	Generate only one conditional branch per iteration, and one unconditional
	branch at the beginning.

	* example-vms/structured/structured-code-generator.c
	(structured_translate_statement): Here.
	Update copyright years.

2018-01-29  Luca Saiu  <positron@gnu.org>

	jitterc improvements

	Introduce two new Jitter code blocks instruction-beginning-c and
	instruction-end-c , to be respectively prepended and appended to instruction
	code.  These are particularly useful for debugging.

	Other minor improvements.

	* jitterc/jitterc-vm.h (struct jitterc_vm): New fields
	instruction_beginning_c_code and instruction_end_c_code.  Update copyright
	years.

	* jitterc/jitterc-vm.c (jitterc_make_vm): Initialize new struct fields
	instruction_beginning_c_code and instruction_end_c_code in res.

	* jitterc/jitterc.l: Recognize instruction-beginning-c and instruction-end-c as
	keywords.  Update copyright years.

	* jitterc/jitterc.y: Recognize instruction-beginning-c and instruction-end-c as
	new blocks.

	* jitterc/jitterc-generate.c (jitterc_emit_interpreter_wrap): Emit an #undef
	directive to undefine the name we are about to #define , in case it's available
	as both a macro and a non-macro.  Two identical changes, for globals and
	functions.
	(jitterc_emit_interpreter_ordinary_specialized_instructions): Emit user code
	from the instruction-beginning-c block.  Emit user code from the
	instruction-end-c block.
	(jitterc_emit_interpreter_main_function): Make original_state a pointer to
	const in the machine-generated prototype of vmprefix_interpret_or_initialize.
	Fill comment.
	Remove local instructions.  Redefine local ip.  Branch to the first VM
	instruction using VMPREFIX_PROGRAM_BEGINNING instead of the old conditional
	code.
	(jitterc_emit_interpreter_wrappers): Change the machine-generated definition
	for vmprefix_interpret_or_initialize in accord to the new prototype.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Font-lock new keywords
	instruction-beginning-c and instruction-end-c.

2018-01-29  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp improve interactive REPL and banner handling, other stuff

2018-01-29  Luca Saiu  <positron@gnu.org>

	try -mblock-move-inline-limit on any CPU, but only with replication

	* configure.ac (Flags): Don't limit the check for -mblock-move-inline-limit to
	PowerPC, instead simply using the option where it exists.  On the other hand
	avoid it with dispatching models not relying on replication (switch and
	direct-threading), as GCC's default solution is almost certainly more efficient.

2018-01-29  Luca Saiu  <positron@gnu.org>

	call GCC with -mblock-move-inline-limit=8192 when available, fixing PowerPC

	At least on GNU/Linux PowerPC GCC generates intrinsics/libc calls to string
	functions for copying buffers when passing parameters.  These calls appear
	to be optimized at link time into PC-relative branch-and-link instructions,
	which break my replicated code.
	Call GCC with an option to use inline code instead of library functions, at
	least for small buffers.

	* configure.ac (Flags): Use -mblock-move-inline-limit=8192 where GCC supports
	it.

2018-01-28  Luca Saiu  <positron@gnu.org>

	WIP JitterLisp and other stuff

2018-01-28  Luca Saiu  <positron@gnu.org>

	permit rewriting across implicit post-caller labels

	The notion I had about rewritable instruction sequences ending at the implicit
	label following a caller instruction was a mistake.  After playing with
	JitterLisp rewrite rules I convinced myself that it is often correct, and
	useful, to rewrite an instruction sequence including a caller instruction into
	something else.

	A similar restriction might be needed for the other kind of rewrite rules, the
	one intended to reduce the number of specialized instructions; but that is not
	implemented yet and in any case the implementation will be entirely separate,
	happening at C code generation time rather than at run time.

	* jitter/jitter-program.c (jitter_close_current_instruction): No longer set
	p->rewritable_instruction_no to zero when closing a caller instruction.
	Simplify the code, now that there is no longer a conditional.  Update
	copyright year.

	* jitter/jitter-rewrite.h: Update comments, removing some obsolete text and
	describing the lack of restriction above.  Other comment and sectioning changes.
	Update copyright year.

2018-01-28  Luca Saiu  <positron@gnu.org>

	define a program point type and a macro to get the first program point

	Jitter is still too limited with respect to extracting program points from
	a specialized program to be used from other specialized programs.  However
	I can easily extract the first program point, and that is already very
	useful.  Add a macro to do this.
	Define the type for run-time program points.

	Of course both definitions depend on the dispatching model.

	* templates/vm.h (vmprefix_program_point): New type.
	(VMPREFIX_PROGRAM_BEGINNING): New macro.
	Update copyright year.

2018-01-28  Luca Saiu  <positron@gnu.org>

	don't rely on argp_error knowing how to print long long numbers

	Don't use JITTER_PRIill to print an object which may be a long long using
	a Gnulib function (argp_error) which might not support it.  I can do this
	by losing no functionality, as the template in question was an error message
	reproducing input from the user: I can just print the string.

	* templates/vm-main.c (parse_opt): Print a string rather than a jitter_int.
	Update copyright year.

2018-01-28  Luca Saiu  <positron@gnu.org>

	WIP Makefile.am and other stuff

2018-01-27  Luca Saiu  <positron@gnu.org>

	Add c-ctype to the list of Gnulib modules.

	In the previous commit message I mistakenly wrote <ctype.h> instead of
	<c-ctype.h> a few times.  This change conceptually belongs with the
	previous commit, but I had forgotten it.

	* bootstrap.conf (gnulib_modules): Add c-ctype.

2018-01-27  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp minor Makefile.am fix

2018-01-27  Luca Saiu  <positron@gnu.org>

	use Gnulib's c-ctype module instead of the functions in <ctype.h>

	I had some weird problem on PowerPC after a Gnulib update.  The problem has
	been solved, but it was manifesting by function such as isalnum returning
	an incorrect result, even on ASCII characters.  I seized the occasion to
	make character handling stricter on the C-generation side of Jitter: only
	ASCII characters are allowed in user identifiers.  Switch from ctype to
	c-ctype everywhere in jitterc.

	This doesn't affect the generated code, which doesn't rely on Gnulib.

	* jitterc/jitterc-mangle.c (jitterc_mangle):  Use c_isdigit instead of
	isdigit.  Use c_isalnum instead of isalnum.  Improve error message.
	Include <ctype.h>.  Update copyright years.

	* jitterc/jitterc-vm.c (jitterc_vm_add_setting): Use c_isalpha and
	c_islower instead of isalpha and islower.  Improve error messages.
	(jitterc_vm_add_stack_declaration): Likewise.
	Include <ctype.h>.  Update copyright years.

	* jitterc/jitterc.y (jitterc_error):  Use c_isupper instead of isupper.
	Include <ctype.h>.  Update copyright years.

2018-01-26  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp makefile one-liner

2018-01-26  Luca Saiu  <positron@gnu.org>

	git: ignore generated C file

	.gitignore (example-vms/jitterlisp/jitterlisp-constant-strings.c): Ignore.

2018-01-24  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp compiler and other stuff

2018-01-24  Luca Saiu  <positron@gnu.org>

	stacks: add macros to access elements at a given depth

	* jitter/jitter-stack.h (JITTER_STACK_TOS_AT_DEPTH, JITTER_STACK_NTOS_AT_DEPTH):
	New macros.
	Update copyright year.

	* jitterc/jitterc-generate.c (jitterc_emit_stack_operation_definitions):
	Wrap at_depth into stack-dependent macros, like the other already existing
	stack operations.

	* emacs/jitter-mode.el (jitter-font-lock-keywords): Font-lock AT_DEPTH.
	Update copyright year.

2018-01-12  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp printer and other stuff

2018-01-12  Luca Saiu  <positron@gnu.org>

	hash table overhaul

	Implement word hash table convenience functions.  Factor with existing code.

	* jitter/jitter-hash.h (jitter_word_hash_function, jitter_word_hash_key_equal)
	(jitter_do_nothing_on_word, jitter_word_hash_table_has)
	(jitter_word_hash_table_add, jitter_word_hash_table_remove)
	(jitter_word_hash_finalize): New prototypes.
	Comment and whitespace changes.

	* jitter/jitter-hash.c (jitter_hash_combine_char, jitter_hash_memory_for)
	(jitter_hash_memory_until): New static functions, factoring functionality
	previously in jitter_string_hash_function.
	(jitter_string_hash_function): Redefine using the new static functions.
	(jitter_word_hash_function): New function, using the new static functions.
	(jitter_word_hash_key_equal, jitter_do_nothing_on_word)
	(jitter_word_hash_key_function, jitter_word_hash_table_has)
	(jitter_word_hash_table_get, jitter_word_hash_table_add)
	(jitter_word_hash_table_remove, jitter_word_hash_finalize): New functions.
	(jitter_int_to_word, jitter_word_hash_key_function): New static functions.
	Comment changes.

2018-01-09  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp library progress and other stuff

2018-01-09  Luca Saiu  <positron@gnu.org>

	hash debugging improvements

	Hash debugging function: print size variance information for every bucket and
	for non-empty buckets.

	* jitter/jitter-hash.c (jitter_hash_print_debug_stats): Compute variance.
	Cosmetic changes.
	(square): New static function.
	Whitespace changes.

2017-12-04  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp, printer and other stuff

2017-12-04  Luca Saiu  <positron@gnu.org>

	define jitter_ulong_long

	* jitter/jitter.h (jitter_ulong_long) [HAVE_LONG_LONG_INT, !HAVE_LONG_LONG_INT]:
	Define in one of two possible ways.

2017-12-02  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp reader/printer and other stuff

2017-12-01  Luca Saiu  <positron@gnu.org>

	improve string hash function

	At every step make res depend on its previous value as well, xor-ing it.  This
	drastically reduces collisions on long strings, where otherwise the first bytes
	would not affect the final result.

	* jitter/jitter-hash.c (jitter_string_hash_function): Here.

2017-11-22  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp stuff

2017-11-22  Luca Saiu  <positron@gnu.org>

	comment change

	* jitterc/jitterc-main.c: Here.

2017-11-22  Luca Saiu  <positron@gnu.org>

	jitter command line: fix mistake in option handling

	Fix a kill/yank mistake where I was providing the wrong identifier for a
	negative option.

	* jitterc/jitterc-main.c (jitterc_option_specification): Replace
	jitterc_negative_option_no_frontend with jitterc_negative_option_no_verbose.

2017-11-20  Luca Saiu  <positron@gnu.org>

	WIP jitterlisp overhaul

2017-11-20  Luca Saiu  <positron@gnu.org>

	[x86_64]: define one more residual register, not used

	It's convenient to have more available names of registers to reserve, and x86_64
	only had two up to this moment.  Add one more.  I'm using this to test
	JitterLisp, in what may evolve into a new garbage collector.

	* machine/x86_64/jitter/machine/jitter-machine.h (JITTER_RESIDUAL_REGISTER_2)
	(JITTER_RESIDUAL_REGISTER_2_32BIT): New macros.

2017-11-19  Luca Saiu  <positron@gnu.org>

	dynamic buffer: add trimming functions

	* jitter/jitter-dynamic-buffer.h, jitter/jitter-dynamic-buffer.c
	(jitter_dynamic_buffer_extract, jitter_dynamic_buffer_extract_trimmed): New
	functions.

2017-11-12  Luca Saiu  <positron@gnu.org>

	start JitterLisp example

	Start the implementation of efficient s-expressions.  This still needs comments
	and factoring.  And almost certainly machine-generation, in the long term...

	* example-vms/jitterlisp/jitterlisp-sexpression.c: New file.
	* example-vms/jitterlisp/jitterlisp-sexpression.h: New file.
	* example-vms/jitterlisp/jitterlisp-main.c: New, essentially only scratch, file.

	* Makefile.am: New bin/jitterlisp example.  Just one executable for now,
	with no VM.

2017-11-10  Luca Saiu  <positron@gnu.org>

	generate template expression operator macros in upper case

	* jitterc/jitterc-generate.c (jitterc_emit_rewrite_rule_template_expression):
	Generate a JITTER_RULE_EXPRESSION_operator macro by first converting the
	operator name to upper case, so that the operator matches the existing macros
	written in a style common for C.

2017-11-10  Luca Saiu  <positron@gnu.org>

	structured VM: minor changes

	* example-vms/structured/structured.jitter: Add rewrite rules, some commented
	out as they rely on template expression operators.  Remove 0 from specialized
	literals for plusi and minusi (it's better to rewrite away than to generate
	specialized instructions which do nothing).

2017-11-10  Luca Saiu  <positron@gnu.org>

	rewrite syntax: move the guard to the end

	Syntax change: the (optional) guard must now come at the end of a rule, after
	the "into" clause rather than at the beginning.  I find this new version more
	readable.

	* jitterc/jitterc.y (rule_section): Move the nonterminal rule_guard in the rule
	right side, adjust semantic value indices.

2017-11-10  Luca Saiu  <positron@gnu.org>

	generation-time rewrite header: comment updates

	* jitterc/jitterc-rewrite.h: Update and fix comments.

2017-11-10  Luca Saiu  <positron@gnu.org>

	rewriting semantic checks: progress

	Reorganize rule semantic checks.  Add a name_to_instruction hash to struct
	jitterc_vm.  Make instruction sorting a static function run along with
	the analysis part.  Check rewrites for instruction existence and arity, both in
	instruction patterns and instruction templates.

	No checks yet on kinds and modes, nor on template expressions.

	* jitterc/jitterc-rewrite.h (jitterc_check_rules): New prototype.

	* jitterc/jitterc-rewrite.c: Include jitter/jitter-hash.h.
	(jitterc_add_placeholders_from_argument_pattern)
	(jitterc_add_placeholders_from_pattern)
	(jitterc_add_placeholders_from_patterns): Change argument constness,
	which lets me avoid a cast on the result of gl_list_get_at.  Avoid
	the cast.
	(jitterc_check_placeholders_in_expression)
	(jitterc_check_placeholders_in_expressions)
	(jitterc_check_placeholders_in_expression)
	(jitterc_check_placeholders_in_template)
	(jitterc_check_placeholders_in_templates): Move down to the semantic-check
	section.  Change gl_list_get_at result constness where appropriate, like above.
	(jitterc_make_rule): Don't call jitterc_check_placeholders_in_expression
	and jitterc_check_placeholders_in_templates here.  Update comment.
	(JITTERC_SEMANTIC_ERROR): New macro.
	(jitterc_check_rule_placeholders): New static function, calling
	jitterc_check_placeholders_in_expression and
	jitterc_check_placeholders_in_templates at check time rather than at
	construction time.
	(jitterc_check_instruction_existence_and_arity)
	(jitterc_check_instructions_in_rule, jitterc_check_rule): New static functions.
	(jitterc_check_rules): New function.

	* jitterc/jitterc-vm.h: Include jitter/jitter-hash.h.
	(struct jitterc_instruction): Add name_to_instruction field.
	Update comment about the name field.
	(jitterc_sort_vm): Remove: the function is now static, called by
	jitterc_analyze_vm.
	(jitterc_analyze_vm): Update comment.

	* jitterc/jitterc-vm.c: Include jitterc/jitterc-rewrite.h and
	jitter/jitter-hash.h.
	(jitterc_make_vm): Initialize res->name_to_instruction.
	(jitterc_sort_vm): Make static, move comment here from header.
	(jitterc_fill_name_to_instruction): New function.
	(jitterc_analyze_vm): Call jitterc_sort_vm, now invisible out of the compilation
	unit.  Call jitterc_fill_name_to_instruction.  Call jitterc_check_rules.

	* jitterc/jitterc.y (jitterc_parse_file_star_with_name): Don't call
	jitterc_sort_vm.  Update comment.

2017-11-09  Luca Saiu  <positron@gnu.org>

	template expression ASTs: keep operator as struct pointers, not strings

	* jitterc/jitterc-rewrite.h (struct jitterc_template_expression): Change field
	operator_name to new field operator.
	(jitterc_make_template_expression_operation):
	Update comment.  Change prototype argument constness.
	* jitterc/jitterc-rewrite.c (jitterc_make_template_expression_operation): Change
	argument constness.  Use jitterc_lookup_expression_operator.

	* jitterc/jitterc-generate.c (jitterc_emit_rewrite_rule_template_expression):
	Use the new data structure.

2017-11-09  Luca Saiu  <positron@gnu.org>

	template expression operators: add a function to look them up by name

	* jitterc/jitterc-rewrite.h, jitterc/jitterc-rewrite.c
	(jitterc_lookup_expression_operator): New function.

2017-11-09  Luca Saiu  <positron@gnu.org>

	start defining template expression operators

	* jitterc/jitterc-rewrite.c (+jitterc_expression_types_fixnum_fixnum)
	(jitterc_expression_types_boolean_boolean, jitterc_expression_types_boolean):
	New static variables.
	(jitterc_expression_operators, jitterc_expression_operator_no): New variables.

	* jitterc/jitterc-rewrite.h: Sectioning changes.
	(fixnum_fixnum, plus): Remove testing cruft.
	(jitterc_expression_operators, jitterc_expression_operator_no): New extern
	variables.

2017-11-09  Luca Saiu  <positron@gnu.org>

	comment-out debugging prints in rewriting code

	I'm still keeping the commented-out fprintf calls, as they may be useful for
	debugging later.  But the messages are annoying.

	* jitterc/jitterc-generate.c: Here.

2017-11-09  Luca Saiu  <positron@gnu.org>

	add Scheme counter example, to benchmark against

	* example-vms/uninspired/examples/counter.scm: New file.

	* Makefile.am: Distribute the new benchmark file.

2017-11-09  Luca Saiu  <positron@gnu.org>

	add structuredvm rewrite rule

	* example-vms/structured/structured.jitter: Here.

2017-11-09  Luca Saiu  <positron@gnu.org>

	make optimization rewriting easy to disable, for debugging and benchmarking

	Add convenient C functions to enable and disable optimization rewriting.
	Optimization rewriting is on by default.  Add command line options to do so in
	the generated VM main file and in the high-level Structured example (GNU
	long-format only, in that simplified case).

	* templates/vm.h (vmprefix_enable_optimization_rewriting)
	(vmprefix_disable_optimization_rewriting): New prototypes for user functions.

	* templates/vm1.c (vmprefix_initialize): Initialize
	the_vmprefix_vm.actually_rewrite instead of the_vmprefix_vm.rewrite, then
	call jitter_vm_enable_optimization_rewriting on the static struct jitter_vm
	object which the user is never supposed to see.  No incompatible API changes.
	(vmprefix_enable_optimization_rewriting)
	(vmprefix_disable_optimization_rewriting): New functions, trivial wrappers
	around jitter_vm_enable_optimization_rewriting and
	jitter_vm_disable_optimization_rewriting hiding the struct jitter_vm*
	argument from the user.

	* jitter/jitter-vm.h (struct jitter_vm): New field actually_rewrite, playing
	the previous role of rewrite.  Now rewrite is either equal to actually_rewrite,
	when optimization rewriting is on, or equal to jitter_dont_rewrite when
	optimization rewriting is off.
	(jitter_dont_rewrite): New prototype.
	(jitter_vm_enable_optimization_rewriting)
	(jitter_vm_disable_optimization_rewriting): New prototypes, taking a struct
	jitter_vm* as parameter and therefore not intended for the user.
	Whitespace change.

	* jitter/jitter-vm.c (jitter_dont_rewrite)
	(jitter_vm_enable_optimization_rewriting)
	(jitter_vm_disable_optimization_rewriting): New functions.

	* templates/vm-main.c (struct vmprefix_main_command_line): New field
	optimization_rewriting.
	(enum vmprefix_vm_negative_option): New case
	vmprefix_vm_negative_option_optimization_rewriting.
	(enum vmprefix_vm_long_only_option): Change case value to make place
	for vmprefix_vm_negative_option_optimization_rewriting.
	(vmprefix_main_option_specification): Add new options
	-r/--no-optimization-rewriting and --optimization-rewriting.
	(parse_opt): Initialize cl->optimization_rewriting.  Handle new options.
	(main): Call vmprefix_disable_optimization_rewriting when
	cl.optimization_rewriting is false.  When cl.debug is true print
	progress message.

	* example-vms/structured/structured-main.c: (structured_help): Document the new
	options --no-optimization-rewriting and --optimization-rewriting.  Realign help
	text.
	(struct structured_command_line): New field optimization_rewriting.
	(structured_initialize_command_line): Initialize cl->optimization_rewriting.
	(structured_parse_command_line): Handle --optimization-rewriting and
	--no-optimization-rewriting.
	(structured_work): Move structuredvm_initialize to below parsing, for cosmetic
	reasons.  Call structuredvm_disable_optimization_rewriting if
	cl->optimization_rewriting is false.

2017-11-09  Luca Saiu  <positron@gnu.org>

	add comments

	* templates/vm.h (vmprefix_initialize, vmprefix_finalize): Add comments.

2017-11-09  Luca Saiu  <positron@gnu.org>

	comment changes

	* templates/vm.h: Add comment sectioning.

2017-11-09  Luca Saiu  <positron@gnu.org>

	comment typo

	* jitter/jitter-rewrite.h (JITTTER_REWRITE_FUNCTION_PROLOG_): Here.

2017-11-09  Luca Saiu  <positron@gnu.org>

	rewrite factoring and optimization

	Remove the library function jitter_rewrite calling vmprefix_rewrite_once.
	Instead use vmprefix_rewrite in the place of both.  The jitter_vm rewriting
	function pointer field (now called rewrite) now points to vmprefix_rewrite.

	This removes one level of indirect calls, and will make it easy to disable
	rewriting by setting the rewrite function pointer to a function doing
	nothing, at no cost in the common case where rewrites are enabled.

	* jitter/jitter-rewrite.c (jitter_last_instructions): Make the error message
	better, specifying how many instructions were to be popped, and how many were
	rewritable.
	(jitter_rewrite): Remove function.  Move its caller-instruction logic to...

	* jitter/jitter-program.c (jitter_close_current_instruction): ...To this
	function.  Call p->vm->rewrite instead of jitter_rewrite.
	(jitter_append_pointer_literal_parameter): Add comment.

	* jitter/jitter-rewrite.h (jitter_rewrite): Remove prototype and update
	comment.
	(JITTTER_REWRITE_FUNCTION_PROLOG_): New macro, to simplify the generator
	emitting fixed code at the beginning of vmprefix_rewrite.  The macro
	defines jitter_rewritable_instruction_no as a const variable, where it
	was a non-const function argument before.  This should help GCC generate
	better code.

	* jitter/jitter-vm.h (struct jitter_vm): Replace the rewrite_once field
	with rewrite, pointing to vmprefix_rewrite.  The new function pointer has a
	different, simpler type.

	* jitterc/jitterc-generate.c (jitterc_emit_rewriter): Emit vmprefix_rewrite
	instead of vmprefix_rewrite_once.  Emit JITTTER_REWRITE_FUNCTION_PROLOG_
	instead of some complicated code.

	* templates/vm.h: Update comments.
	(vmprefix_rewrite_once): Remove prototype.
	(vmprefix_rewrite): New prototype, without the second argument which
	is now computed within the function by JITTTER_REWRITE_FUNCTION_PROLOG_.

	* templates/vm1.c (vmprefix_initialize): Initialize the_vmprefix_vm.rewrite
	rather than the_vmprefix_vm.rewrite_once.

2017-11-09  Luca Saiu  <positron@gnu.org>

	structured example cleanup

	* example-vms/structured/structured.jitter (rewriter-c block): Remove.
	Minor changes elsewhere, still tentative.

2017-11-08  Luca Saiu  <positron@gnu.org>

	bin/jitter: add --line and --no-line command-line options

	Let the user choose whether to generate #line directives or not, referring the
	.jitter file.  Default: yes, but the default is not used within Jitter's build
	system, where bugs in Jitter itself are easier to find by looking at the
	generated C code.

	* jitterc/jitterc-vm.h (struct jitterc_vm): New field generate_line.

	* jitterc/jitterc-vm.c (jitterc_make_vm): Initialize res->generate_line.

	* jitterc/jitterc-generate.c (jitterc_emit_hash_line): Do nothing if
	vm->generate_line is false.
	Trivial whitespace changes elsewhere.

	* jitterc/jitterc.y (JITTERC_APPEND_CODE): Conditionalize #line generation
	before user code blocks.
	(jitterc_parse_file_star, jitterc_parse_file)
	(jitterc_parse_file_star_with_name): Add generate_line argument.  Unfortunately
	this must be supplied early, before parsing begins since some C code is
	generated, as strings, within the parser.
	(jitterc_parse_file_star_with_name): Set res->generate_line before parsing.
	The other changed functions in this file are wrappers on this one.

	* jitterc/jitterc-main.c (struct jitterc_command_line): Add generate_line field.
	(enum jitterc_negative_option): Add jitterc_negative_option_generate_line case.
	(enum jitterc_long_only_option): Change jitterc_long_only_option_dump_version
	value, to make place for jitterc_negative_option_generate_line.
	(jitterc_option_specification): Support "no-line" and "line".
	(parse_opt): Initialize cl->generate_line.  Handle options.
	(main): Print cl.generate_line on debugging.  Call the parser with its value.

	* Makefile.am: Call bin/jitter$(EXEEXT) with --no-line.

2017-11-08  Luca Saiu  <positron@gnu.org>

	remove old commented-out junk

	* jitterc/jitterc-main.c (main): Remove commented-out code.

2017-11-07  Luca Saiu  <positron@gnu.org>

	don't leave any part of struct jitter_parameter objects uninitialized

	Valgrind was detecting some conditionals based on uninitialized memory, even if
	I observed no misbehavior.  It turns out that the bug was there and could have
	been difficult to find, even if I've never seen it cause a problem: since I
	compare parameter data structures with memcmp it's important that every byte of
	the struct is initialized to some constant value, including the space left for
	any union field not in use.

	* jitter/jitter-instruction.c (jitter_make_instruction_parameter): memset the
	entire struct right after allocation, before setting the fields.

2017-11-07  Luca Saiu  <positron@gnu.org>

	jitterc rewrite rule parser: add instruction templates in the correct order

	When rewriting into more than one instruction I was seeing the rewritten
	instruction reversed in order.

	* jitterc/jitterc.y (rule_instruction_templates_zero_or_more): Call
	gl_list_add_first instead of gl_list_add_last.

2017-11-07  Luca Saiu  <positron@gnu.org>

	install the run-time rewriting header

	* Makefile.am (jitterinclude_HEADERS): Add jitter/jitter-rewrite.h.

2017-11-01  Luca Saiu  <positron@gnu.org>

	implement optimization rewrite rules

	Optimization rewrite rules now work, excluding nontrivial template expressions
	and semantic checks.

	There is now a substantial infrastructure for rewriting, split between
	the C-generation side in jitterc/jitterc-rewrite.h, jitterc-rewrite.c
	and the runtime part in jitter/jitter-rewrite.h, jitter/jitter-rewrite.c.

	The C-generation side is new and contains a good implementation of ASTs for
	rewrite rules, and even data structures for static typing (but static typing is
	this not implemented yet).

	The runtime part is massively expanded.  The idea is defining high-level
	macros for the generator to use when compiling rules to C.

	* jitterc/jitterc-rewrite.h, jitterc/jitterc-rewrite.c: New files.

	* jitter/jitter-rewrite.h: Add the new rewriting infrastructure.  Add several
	new sections to contain the new macros, organized rationally.
	(JITTER_RULE_BEGIN, JITTER_RULE_END, JITTER_RULE_BEGIN_PLACEHOLDER_DECLARATIONS)
	(JITTER_RULE_END_PLACEHOLDER_DECLARATIONS, JITTER_RULE_BEGIN_CONDITIONS)
	(JITTER_RULE_END_CONDITIONS, JITTER_RULE_BEGIN_PLACEHOLDER_CLONING)
	(JITTER_RULE_END_PLACEHOLDER_CLONING, JITTER_RULE_BEGIN_PLACEHOLDER_DESTRUCTION)
	(JITTER_RULE_END_PLACEHOLDER_DESTRUCTION, JITTER_RULE_BEGIN_BODY)
	(JITTER_RULE_END_BODY, JITTER_PLACEHOLDER_NAME)
	(JITTER_RULE_DECLARE_PLACEHOLDER_, JITTER_RULE_CLONE_PLACEHOLDER_)
	(JITTER_RULE_DESTROY_PLACEHOLDER_, JITTER_RULE_INSTRUCTION)
	(JITTER_RULE_INSTRUCTION_ARGUMENT, JITTER_RULE_ARGUMENT_TYPE)
	(JITTER_RULE_LITERAL_FIELD, JITTER_RULE_REGISTER_INDEX_FIELD)
	(JITTER_RULE_ARGUMENT_IS_A_REGISTER, JITTER_RULE_ARGUMENT_IS_A_LITERAL)
	(JITTER_RULE_ARGUMENT_IS_A_LABEL, JITTER_RULE_CONDITION)
	(JITTER_RULE_CONDITION_MATCH_OPCODE, JITTER_RULE_CONDITION_MATCH_PLACEHOLDER)
	(JITTER_RULE_CONDITION_MATCH_REGISTER_ARGUMENT)
	(JITTER_RULE_CONDITION_MATCH_LITERAL_ARGUMENT)
	(JITTER_RULE_CONDITION_ARGUMENT_IS_A_REGISTER)
	(JITTER_RULE_CONDITION_ARGUMENT_IS_A_LITERAL)
	(JITTER_RULE_CONDITION_ARGUMENT_IS_A_LABEL, JITTER_RULE_EXPRESSION_TRUE)
	(JITTER_RULE_EXPRESSION_FALSE, JITTER_RULE_EXPRESSION_INTEGER)
	(JITTER_RULE_EXPRESSION_LOGICAL_AND, JITTER_RULE_EXPRESSION_LOGICAL_OR)
	(JITTER_RULE_EXPRESSION_LOGICAL_NOT, JITTER_RULE_EXPRESSION_PLUS)
	(JITTER_RULE_EXPRESSION_MINUS, JITTER_RULE_EXPRESSION_TIMES)
	(JITTER_RULE_EXPRESSION_DIVIDED, JITTER_RULE_EXPRESSION_REMAINDER)
	(JITTER_RULE_EXPRESSION_EQUAL, JITTER_RULE_EXPRESSION_NOTEQUAL)
	(JITTER_RULE_EXPRESSION_LESS, JITTER_RULE_EXPRESSION_LESSEQUAL)
	(JITTER_RULE_EXPRESSION_GREATER, JITTER_RULE_EXPRESSION_GREATEREQUAL)
	(JITTER_RULE_APPEND_INSTRUCTION_, JITTER_RULE_APPEND_PLACEHOLDER_) : New
	macros.

	* jitter/jitter-rewrite.c (jitter_rewrite): Remove commented-out testing code,
	simplify, make actually correct and useful.

	* jitterc/jitterc-vm.h: Comment changes.
	(struct jitterc_vm): New field rewrite_rules.

	* jitterc/jitterc-vm.c (jitterc_make_vm): Initialize res->rewrite_rules.

	* jitterc/jitterc-generate.c (jitterc_emit_hash_line)
	(jitterc_emit_rewrite_rule_template_expression)
	(jitterc_emit_rewrite_rule_argument_condition)
	(jitterc_emit_rewrite_rule_condition)
	(jitterc_emit_rewrite_rule_instruction_template, jitterc_emit_rewrite_rule):
	New functions.
	(jitterc_emit_rewriter): Replace stub with actual implementation.

	* jitterc/jitterc.l, jitterc/jitterc.y: Support rewrite rules.  Factor.

	* example-vms/structured/structured.jitter: Example changes, some throwaway,
	with rewrite rules (some commented out as they rely on coming features).

	* Makefile.am (bin_jitter_SOURCES): Add jitterc/jitterc-rewrite.c
	and jitterc/jitterc-rewrite.h.

	* emacs/jitter-mode.el: Update font-lock keywords.  Font-lock placeholders.

2017-11-06  Luca Saiu  <positron@gnu.org>

	improve error message

	* jitter/jitter-program.c (jitter_check_paremater_compatibility): Show the
	expected actual argument type in case of mismatch.

2017-11-06  Luca Saiu  <positron@gnu.org>

	jitter_clone_instruction_parameter: remove program parameter

	The first parameter of jitter_clone_instruction_parameter, a VM program pointer,
	was useless.  Remove it.

	* jitter/jitter-instruction.h (jitter_clone_instruction_parameter): Fix
	prototype.
	* jitter/jitter-instruction.c (jitter_clone_instruction_parameter): Fix
	definition.

2017-11-06  Luca Saiu  <positron@gnu.org>

	jitterc: generate VM name macros in both C files

	Generate definitions for JITTER_VM_PREFIX_LOWER_CASE and
	JITTER_VM_PREFIX_UPPER_CASE in both C files (but not in the header).  Having
	them in vm1.c will come in handy for rewrites, where macros defined in a
	non-template header will be able to see their definitions.

	* jitterc/jitterc-generate.c (jitterc_emit_vm_name_macros)
	(jitterc_emit_vm_name_macros_vm1): New functions.
	(jitterc_emit_interpreter): Call jitterc_emit_vm_name_macros instead of
	executing its body.
	(jitterc_generate): Call jitterc_emit_vm_name_macros_vm1.

2017-11-02  Luca Saiu  <positron@gnu.org>

	remove old naïf rewriting properties

	Remove the hardwired commutativity and three-to-two-operands properties.  These
	will need generalization with actual rewrite rules.

	* jitterc/jitterc-generate.c (jitterc_emit_rewriter): Remove commented-out
	conditional.

	* jitterc/jitterc-vm.h (enum jitterc_rewriting): Remove.
	(struct jitterc_instruction): Remove field rewriting.
	* jitterc/jitterc-vm.c (jitterc_make_instruction)
	(jitterc_add_implicit_instruction): Don't set res->rewriting.

	* jitterc/jitterc.l, jitterc/jitterc.y: Remove syntax support for
	COMMUTATIVE and TWO_OPERANDS.

	* emacs/jitter-mode.el: remove commutative and two-operands keywords.

2017-11-05  Luca Saiu  <positron@gnu.org>

	jitterc-utility: add list-of-string functions

	These will be useful for rewrites.

	* jitterc/jitterc-utility.h (jitterc_list_has_string)
	jitterc_list_add_string_unique): New prototypes.

	* jitterc/jitterc-utility.c (jitterc_list_has_string)
	(jitterc_list_add_string_unique): New functions.

2017-11-05  Luca Saiu  <positron@gnu.org>

	invalid opcode fatal message: mention the opcode.

	* jitterc/jitterc-generate.c (jitterc_emit_interpreter_main_function): Add
	argument to jitter_fatal call.

2017-11-02  Luca Saiu  <positron@gnu.org>

	structured example: don't add a final nop to the generated code

	Now VM programs are allowed to end in a label, so I no longer need to add a
	final nop to the generated code just in case.

	* example-vms/structured/structured-code-generator.c
	(structured_translate_program): No longer append a final nop.

2017-11-01  Luca Saiu  <positron@gnu.org>

	allow VM programs to end with a label

	Define the concept of an unspecialized program "epilog", consisting of
	unspecialized instructions to be added automatically just before specialization.
	Right now the only added instruction is exitvm.  This plays the role of the old
	(specialized) !EXITVM which was automatically added, and no longer is, and will
	let me easily add more unspecialized instructions later as well, if needed.

	The advantage of the new solution is that we can have a label at the very end of
	an unspecialized program, and at the same time to keep every label associated to
	exactly one unspecialized instruction.

	!EXITVM still exists, but is now redundant.

	* jitter/jitter-specialize.c (jitter_add_program_epilog): New static function,
	which adds exitvm, a new implicit unspecialized instruction.
	(jitter_specialize_program): Call jitter_add_program_epilog at the beginning
	of the function.  Don't add !EXITVM.

	* jitter/program.y: Uncomment grammar rules recognizing a program ending with a
	label.  Remove the old version which prevented that.  The new set of recognized
	programs is a strict superset of the old one.

	* jitter/jitter-vm.h (struct jitter_vm): New field exitvm_meta_instruction.

	* templates/vm1.c (vmprefix_initialize): Initialize
	the_vmprefix_vm.exitvm_meta_instruction.

2017-11-01  Luca Saiu  <positron@gnu.org>

	jitterc VM and parser: factor, add implicit VM instruction exitvm

	Compute the maximum instruction name length in a separate pass, rather than in
	the parser after recognizing each instruction block.  This makes it easier to
	add unspecialized instructions from arbitrary C code, rather than from the
	parser.

	Do exactly that: as soon as a VM data structure is initialized, add an implicit
	unspecialized instruction "exitvm".  Implicit instructions are automatically
	present, but otherwise ordinary: user code is allowed to use them anywhere in
	her unspecialized programs.

	* jitterc/jitterc-vm.h (jitterc_analyze_vm): New prototype.

	* jitterc/jitterc-vm.c (jitterc_analyze_vm): New function.
	(jitterc_add_implicit_instruction): New function.
	(jitterc_add_implicit_instructions): New function.
	(jitterc_make_vm): Call jitterc_add_implicit_instructions.

	* jitterc/jitterc.y (jitterc_parse_file_star_with_name): Call
	jitterc_analyze_vm.
	(instruction_section action): Don't update maximum instruction name length.

2017-11-01  Luca Saiu  <positron@gnu.org>

	remove obsolete comment

	* jitterc/jitterc.y (instruction_section): Making instruction relocatable
	by default is the right thing..

2017-11-01  Luca Saiu  <positron@gnu.org>

	VM program parser: add, commented-out, rules allowing labels at the end

	The restriction preventing VM programs from ending in a label is annoying and
	difficult to understand for the user; it will be lifted.  In the mean time, add
	frontend support for the right solution.

	* jitter/program.y: Add commented-out rules replacing part of the grammar.

2017-11-01  Luca Saiu  <positron@gnu.org>

	patch-ins: clean up, comment well, fix compatibility with latest GCCs

	I used to generate the patch-in descriptor header and footer respectively at the
	beginning and end of the interpreter function, relying on -fno-reorder-blocks.
	That worked, until I tried a recent (October 2017) GCC snapshot which generated
	code leaving the assembler unhappy: Gas complained about
	  "CFI instruction used without previous .cfi_startproc"
	Switching sections between a function and its end confused the assembler.
	Moving the header and footer to the top level improved the situation to a
	degree, but debugging information was still a problem, until I switched to
	.pushsection and .popsection.  Those rely on ELF, which now I check for in
	configure -- the previous solution was not completely general either, as it
	relied on Gas.

	Comment the patch-in technique, restructure, conditionalize, clearly document
	what is dependent on ELF.

	New naming conventions: macros expanding to a C statement *not* protected by a
	do..while (false) loop have a name ending in an underscore.

	* jitter/jitter-patch-in.h (JITTER_ASM_DEFINE)
	(JITTER_ASM_FAST_LABEL_PLACEHOLDER_SUBSECTION)
	(JITTER_PATCH_IN_DESCRIPTORS_NAME_AS_STRING)
	(JITTER_PATCH_IN_DESCRIPTORS_NAME_END_AS_STRING): Move, comment.
	(JITTER_PATCH_IN_DESCRIPTOR_SIZE_IN_BYTES_AS_STRING): Rename into
	JITTER_ASM_PATCH_IN_DESCRIPTOR_SIZE_IN_BYTES_AS_STRING, comment.
	(JITTER_ASM_SKIP_BYTES): Move.
	(JITTER_ASM_PUSH_SUBSECTION, JITTER_ASM_POP_SUBSECTION): Redefine and rename
	into JITTER_ASM_ENTER_PATCH_IN_DESCRIPTOR_SUBSECTION and
	JITTER_ASM_EXIT_PATCH_IN_DESCRIPTOR_SUBSECTION, since I do not really
	rely on LIFO behavior, and this may be important in the future if I support
	non-ELF systems.
	(JITTER_ASM_ENTER_PATCH_IN_DESCRIPTOR_SUBSECTION,
	JITTER_ASM_EXIT_PATCH_IN_DESCRIPTOR_SUBSECTION) [ELF]: Define as simple
	wrappers around JITTER_ASM_ENTER_PATCH_IN_DESCRIPTOR_SUBSECTION_ELF and
	JITTER_ASM_EXIT_PATCH_IN_DESCRIPTOR_SUBSECTION_ELF.
	(JITTER_ASM_FAST_LABEL_PLACEHOLDER_SUBSECTION): Rename into
	JITTER_ASM_FAST_LABEL_PLACEHOLDER_SUBSECTION_ELF.
	(JITTER_ASM_PATCH_IN_HEADER, JITTER_ASM_PATCH_IN_FOOTER): Redefine using
	the new macros, now in theory configuration-independent as the definition
	no longer directly relies on ELF.
	(JITTER_ASM_PATCH_IN_PLACEHOLDER): Use the new macros.
	(JITTER_PATCH_IN_PLACEHOLDER_GOTO): Rename macro into
	JITTER_PATCH_IN_PLACEHOLDER_GOTO_, following the new convention.
	New header comment sections.  Add lots of comments.

	* jitterc/jitterc-generate.c (jitterc_emit_patch_in_header)
	(jitterc_emit_patch_in_footer): New functions, now separate from
	jitterc_emit_interpreter_main_function.
	(jitterc_emit_interpreter_main_function): Don't generate patch-in header and
	footer.
	(jitterc_emit_interpreter): Call the new functions.

	* jitter/jitter-fast-branch.h (JITTER_FAST_UNCONDITIONAL_BRANCH_PLACEHOLDER):
	Use JITTER_PATCH_IN_PLACEHOLDER_GOTO_, which is the new name for
	JITTER_PATCH_IN_PLACEHOLDER_GOTO according to the new convention.

2017-11-01  Luca Saiu  <positron@gnu.org>

	build system: check for ELF

	The current patch-in system relies on ELF subsections.  Check that the system
	binary format is actually ELF, or otherwise disable no-threading by default.

	* configure.ac: Check for the host OS binary format.
	(jitter_host_os_is_elf): New shell variable.
	(JITTER_HOST_OS_IS_ELF): New CPP feature macro.
	Disable no-threading (by default, overridable with a command-line option) when
	the host binary format is not ELF.
	Add section comments.

	* jitter/jitter-config.h.in (JITTER_HOST_OS_IS_ELF): New CPP feature macro.

2017-11-01  Luca Saiu  <positron@gnu.org>

	add comments closing M4 loops

	From now on I will add dnl comments at the end of M4 loops.  It is very
	difficult to match parens and brackets visually, even more within a shell
	'case'.

	* scripts/jitter-config.in.m4sh (append_to_output): Add dnl comments closing
	m4 loops.

2017-11-01  Luca Saiu  <positron@gnu.org>

	jitter-config: start actually using M4

	* scripts/jitter-config.in.m4sh (append_to_output): Use jitter_for_dispatch
	and jitter_for_flag instead of repeating code.

2017-11-01  Luca Saiu  <positron@gnu.org>

	share M4 definitions between the installed Autoconf file and jitter-script.m4sh

	The idea is including general-purpose M4 macro definitions from jitter.m4 ,
	which is installed and contains *Autoconf* macros, into jitter-script.m4sh ,
	which is included by scripts.
	Before jitter-script.m4sh includes jitter.m4 it simply redefines AC_DEFUN so
	that it expands to nothing: this lets it see every M4sugar definition, at the
	same time ignoring Autoconf macros.

	This is easier than the more intuitive alternative of having the Autoconf macros
	include a library of definitions: having dependencies between an installed
	Autoconf macro file and a generic M4sugar file, also installed, is messy.

	* m4-utility/jitter-script.m4sh: Here.

2017-11-01  Luca Saiu  <positron@gnu.org>

	remove Uninspired VM rewrites

	* example-vms/uninspired/uninspired.jitter: Remove tentative-syntax rewrites,
	soon to be replaced by something which actually works.

2017-11-01  Luca Saiu  <positron@gnu.org>

	add parameter equality check function

	* jitter/jitter-instruction.h, jitter/jitter-instruction.c
	(jitter_instruction_parameters_equal): New function.

2017-10-31  Luca Saiu  <positron@gnu.org>

	configure: compile with -fno-reorder-blocks-and-partition

	The GCC option -fno-reorder-blocks-and-partition helps with GCC 4, at least on
	no-threading dispatch.

	* configure.ac: Add -fno-reorder-blocks-and-partition, if supported, for every
	dispatching model.

2017-10-31  Luca Saiu  <positron@gnu.org>

	configure quoting fix

	When calling the C compiler in configure it's important to invoke it as $CC
	and not as "$CC", since CC might be defined as a program with an option.

	* configure.ac (jitter_check_cc_option): Remove quotes around $CC.

2017-10-30  Luca Saiu  <positron@gnu.org>

	add function attribute

	* jitter/jitter-instruction.h (jitter_compare_instruction_parameters): Add pure
	function attribute.

2017-10-30  Luca Saiu  <positron@gnu.org>

	add parameter comparison function

	Add a convenient function to compare unspecified instruction parameters, for
	equality and also in an (arbitrary) order.  This will be useful for rewrites.

	* jitter/jitter-instruction.h, jitter/jitter-instruction.c
	(jitter_compare_instruction_parameters): New function.

2017-10-30  Luca Saiu  <positron@gnu.org>

	add parameter copying functions, to be used in rewriting

	* jitter/jitter-instruction.h, jitter/jitter-instruction.c
	(jitter_copy_instruction_parameter): New function.
	(jitter_clone_instruction_parameter): Factor, using the new function.

	* jitter/jitter-program.h, jitter/jitter-program.c
	(jitter_copy_instruction_parameter): New function.

2017-10-30  Luca Saiu  <positron@gnu.org>

	factor program parameter appending

	* jitter/jitter-program.c (jitter_check_paremater_compatibility): New static
	function.
	(jitter_advance_past_next_parameter): New static function.
	(jitter_append_uninitialized_paremater): Redefine using the new static
	functions.

	* jitter/jitter-program.h (jitter_append_instruction): Add attribute.

2017-10-30  Luca Saiu  <positron@gnu.org>

	cosmetic changes

	* jitter/jitter-program.h (jitter_append_instruction): Make a new file section
	for it and what will come next.

	* jitter/jitter-program.c: Add sections.

2017-10-30  Luca Saiu  <positron@gnu.org>

	don't rewrite across caller instructions

	A caller instruction is implicitly followed by a label describing the return
	address for the callee.  Prevent rewriting from involving both a caller
	instruction and what follows.

	The code takes into account the possibility that a caller is added but then
	replaced with a non-caller post-rewriting.  The added code is reachable at the
	end of every rewritten instruction, so the check needs to be performed in just
	one place.

	* jitter/jitter-rewrite.c (jitter_rewrite): Here.

2017-10-30  Luca Saiu  <positron@gnu.org>

	disable sequence points

	Sequence points seem not to help on any of the configurations I'm testing,
	so I'm disabling them for now.

	* example-vms/structured/structured.jitter (JITTER_SEQUENCE_POINT): Rename macro
	to JITTER_SEQUENCE_POINT_ACTUAL.
	(JITTER_SEQUENCE_POINT): New macro, containing a commented-out call to
	JITTER_SEQUENCE_POINT.

2017-10-29  Luca Saiu  <positron@gnu.org>

	add jitter_append_pointer_literal_parameter (suggested by José Marchesi)

	Add a convenient way to add pointer parameters to unspecialized VM instructions.
	This could already be done with a cast, but the new way is cleaner.  Provide
	a VM-specific renamed version.

	* jitter/jitter-program.h (jitter_append_pointer_literal_parameter): New
	prototype.
	Expand previous comment about opaque label results.

	* jitter/jitter-program.c (jitter_append_pointer_literal_parameter): New
	function.

	* templates/vm.h (vmprefix_append_pointer_literal_parameter): New wrapper
	around jitter_append_pointer_literal_parameter.

2017-10-29  Luca Saiu  <positron@gnu.org>

	actually use jitter_strtoll and jitter_strtoull wrappers

	I had forgotten that strtoll and strtoull were directly used in the VM program
	parser, without going thru the functions in jitter-parse-int.h.  Use wrappers.

	* jitter/program.y: Use jitter_strtoll instead of strtoll and jitter_strtoull
	instead of strtoull.

2017-10-29  Luca Saiu  <positron@gnu.org>

	fix typo in jitter_strtoull definition with no long long

	* jitter/jitter.h (jitter_strtoull) [! HAVE_LONG_LONG_INT]: Change definition
	from the mistyped strtuol to the correct strtoul.

2017-10-29  Luca Saiu  <positron@gnu.org>

	long long wrapper: generalize to unsigned type, rename JITTER_PRIll

	Rename JITTER_PRIll to JITTER_PRIill, which is more consistent with the libc
	conventions.

	Also support the unsigned case, defining JITTER_PRIull and jitter_strtoull.

	* jitter/jitter.h (JITTER_PRIll): Rename to JITTER_PRIill.
	(JITTER_PRIull, jitter_strtoull): New macros.

	* templates/vm-main.c (parse_opt): Rename JITTER_PRIll to JITTER_PRIill.

2017-10-29  Luca Saiu  <positron@gnu.org>

	remove union jitter_literal

	Instead of having a separate type for unspecialized instruction literals, just
	use union jitter_word.

	* jitter/jitter-instruction.h (union jitter_literal): Remove definition.
	(struct jitter_parameter): Change literal field type from union jitter_literal
	to union jitter_word.

	* jitter/jitter-program.h (jitter_append_literal_parameter): Change prototype
	like explained above.

	* jitter/jitter-program.c (jitter_append_literal_parameter)
	(jitter_append_signed_literal_parameter)
	(jitter_append_unsigned_literal_parameter)
	(jitter_print_program_possibly_with_slow_registers_only): Change function
	signature or implementation like explained above.

	* jitter/program.y: Likewise.

	* jitterc/jitterc-generate.c: Likewise, for generated code.

2017-10-29  Luca Saiu  <positron@gnu.org>

	rewriting changes

	The machine-generated function vmprefix_rewrite_once should return void rather
	than bool.  Since just appending an instruction to an unspecialized VM program
	triggers rewriting, using that mechanism within rewrite rules is enough to make
	rewriting recursive, without a loop checking whether any rule fired the last
	time.

	Fix a bug in jitter_pop_instruction, which was not updating rewritable
	instruction count.

	Make a few other changes.

	* jitter/jitter-rewrite.h (jitter_last_instruction, jitter_last_instructions):
	Make the return pointer type non-const.  This is more convenient in general,
	even if the pointed result is not supposed to be modified in most cases; the
	comment still explain when such modification is dangerous.
	(jitter_pop_instruction): Expand comment about popping not triggering rewriting,
	by itself.
	(jitter_destroy_last_instructions): New prototype.

	* jitter/jitter-rewrite.c (jitter_last_instruction, jitter_last_instructions):
	Change return type to non-const pointer.
	(jitter_last_instructions, jitter_pop_instruction): Add underflow check.
	(jitter_pop_instruction): Decrement rewritable instruction no; I had forgotten
	this before.
	(jitter_destroy_last_instructions): New function.
	(jitter_rewrite): Comment-out loop around p->vm->rewrite_once call.  The code
	still looks dirty and tentative.

	* jitter/jitter-vm.h (struct jitter_vm): Change rewrite_once's return type
	to void.

	* templates/vm.h (vmprefix_rewrite_once): Change prototype return type from
	bool to void.

	* jitterc/jitterc-generate.c (jitterc_emit_rewriter): Emit vmprefix_rewrite_once
	to return void rather than bool.

2017-10-29  Luca Saiu  <positron@gnu.org>

	remove more debugging prints

	* jitter/jitter-rewrite.c: Here.

2017-10-29  Luca Saiu  <positron@gnu.org>

	remove debugging print

	* jitterc/jitterc-generate.c: Here.

2017-10-29  Luca Saiu  <positron@gnu.org>

	major rewrite progress

	Clean up and improve rewriting support.  At this point it should already be
	possible for the user to manually implement rewriting, directly in C rather than
	in declarative form as a set of rules.  This functionality is convenient for me
	to test, and might end up generally useful as well.

	* jitter/jitter-program.h (struct jitter_program): New field
	rewritable_instruction_no.
	(jitter_append_instruction): New prototype.

	* jitter/jitter-program.c (jitter_initialize_program): Initialize
	p->rewritable_instruction_no.
	(jitter_append_label): Reset p->rewritable_instruction_no.
	(jitter_close_current_instruction): Increment p->rewritable_instruction_no and
	call jitter_rewrite instead of the old function.
	(jitter_append_uninitialized_paremater): No longer close the instruction when
	the added parameter was the last, as that would trigger a rewrite before the
	parameter was fully initialized.  Expand comment.
	(jitter_close_instruction_when_no_more_parameters): New static function.
	(jitter_append_literal_parameter, jitter_append_register_parameter)
	(jitter_append_label_parameter): Call
	jitter_close_instruction_when_no_more_parameters insted of relying on
	jitter_append_uninitialized_paremater.
	(jitter_append_instruction): New function.

	* jitter/jitter-rewrite.h: Add FIXME to the initial comment, which might
	need updates.
	(jitter_rewrite, jitter_last_instructions): New prototypes.
	(jitter_pop_instruction): Expand comment, explaining the new intended use.

	* jitter/jitter-rewrite.c: Include <jitter/jitter-vm.h>.
	(jitter_last_instruction): Reimplement as a wrapper around...
	(jitter_last_instructions): New function.
	(jitter_pop_instruction): Comment change.
	(jitter_rewrite): New function, calling the machine-generated
	rewriter thru a struct jitter_vm field, now renamed to rewritable_instruction_no.

	* jitter/jitter-vm.h (struct jitter_vm): replace field rewrite_instruction
	with field rewrite_once, having a different type.

	* templates/vm.h (vmprefix_rewrite_instruction): Replace prototype with
	prototype for vmprefix_rewrite_once; add a good comment.

	* templates/vm1.c: Include <jitter/jitter-rewrite.h>.
	(vmprefix_initialize): Initialize rewrite_once rather than rewrite_instruction
	within struct jitter_vm.

	* jitterc/jitterc-vm.h (struct jitterc_vm): New field rewriter_c_code.

	* jitterc/jitterc-vm.c (jitterc_make_vm): Initialize rewriter_c_code.

	* jitterc/jitterc-generate.c (jitterc_emit_rewriter): Generate
	vmprefix_rewrite_once instead of vmprefix_rewrite_instruction.  Keep the
	generated rule code, but comment it out for the time being.  Insert code
	provided by the user in the new rewriter-c section of the VM specification.

	* jitterc/jitterc.l, jitterc/jitterc.y, emacs/jitter-mode.el: Recognize
	new rewriter-c section in a VM specification.

2017-10-29  Luca Saiu  <positron@gnu.org>

	jitterc user C code: minor factoring

	Provide a good way of emitting user code to a stream, not just to an unopened
	file given its basename.

	* jitterc/jitterc-generate.c (jitterc_emit_user_c_code_to_stream): New function.
	(jitterc_emit_user_c_code): Redefine as a wrapper around
	jitterc_emit_user_c_code_to_stream.

2017-10-29  Luca Saiu  <positron@gnu.org>

	fix comment typo

	* jitter/jitter-program.c (jitter_append_meta_instruction): Here.

2017-10-28  Luca Saiu  <positron@gnu.org>

	AUTHORS: punctuation, filling

	* AUTHORS: Here.

2017-10-28  Luca Saiu  <positron@gnu.org>

	don't unconditionally depend on long long

	Remove a GCC dependency as a step towards being able to support, even if
	with only with switch-dispatching, generic C compilers.

	Where long long is not available use long in its place.  Provide a
	typedef and a few macros to make this convenient.

	* jitter/jitter.h (jitter_long_long): New type, conditionally defined.
	(JITTER_PRIll, jitter_strtoll): New macros, conditionally defined.

	* jitter/jitter-parse-int.h, jitter/jitter-parse-int.h: Use the new
	type and macros.  Include jitter/jitter.h to make them visible.  The
	external API does not change.

	* templates/vm-main.c, jitterc/jitterc-main.c (parse_opt): Use the new type and
	macros when parsing integers from option arguments.

2017-10-28  Luca Saiu  <positron@gnu.org>

	incompatible change: rename jitter_opaque_label to jitter_label

	Rename the type jitter_opaque_label to simply jitter_label; the fact that the
	label is opaque is well explained in the comments, and is not important enough
	for the user to carry around everywhere in long identifier names.

	* jitter/jitter-instruction.h (jitter_opaque_label): Rename type to
	jitter_label.
	(section title): Rename "Labels" file section to "VM labels as
	opaque identifiers".
	(jitter_parameter): Rename label field type to match the change above.

	* jitter/jitter-program.h (struct jitter_program): Rename field type
	for next_unused_opaque_label.  Update comment.
	(jitter_fresh_label, jitter_symbolic_label, jitter_append_label)
	(jitter_append_symbolic_label, jitter_append_symbolic_label_parameter)
	(jitter_append_label_parameter): Fix prototypes to match the change above.
	These changes should be essentially invisible to the user, once she fixes the
	type name.

	* jitter/jitter-program.c (jitter_fresh_label, jitter_symbolic_label)
	(jitter_get_label_instruction_index, jitter_set_label_instruction_index)
	(jitter_append_label, jitter_append_symbolic_label)
	(jitter_append_symbolic_label_parameter, jitter_append_label_parameter)
	(jitter_append_meta_instruction): Fix prototypes and local
	variable types to match the change above.  Again, these changes should be
	invisible to the user.

	* templates/vm.h (vmprefix_opaque_label): Rename macro to vmprefix_label,
	updating its definition as well.

	* example-vms/structured/structured-code-generator.c
	(structured_translate_statement): Rename structuredvm_opaque_label to
	structuredvm_label.

2017-10-28  Luca Saiu  <positron@gnu.org>

	VM label API: #define forgotten vmprefix_ identifiers

	Add two VM-specific vmprefix_ aliases for Jitter types and function that I had
	forgotten to define before: jitter_opaque_label -> vmprefix_opaque_label, and
	jitter_fresh_label -> vmprefix_fresh_label.

	* templates/vm.h (vmprefix_opaque_label, jitter_fresh_label): New macros.

	* example-vms/structured/structured-code-generator.c
	(structured_translate_statement): Use renamed identifiers
	structuredvm_fresh_label in the place of jitter_fresh_label, and
	structuredvm_opaque_label in the place of jitter_opaque_label.

2017-10-27  Luca Saiu  <positron@gnu.org>

	make actual argument match format string

	Printing opaque labels requires a cast, since their width is
	platform-dependent and not always int or always long.

	* jitter/jitter-program.c (jitter_resolve_labels_in_unspecialized_program):
	Add cast.

2017-10-27  Luca Saiu  <positron@gnu.org>

	comment typo

	* jitter/jitter-program.c (jitter_resolve_labels_in_unspecialized_program):
	Here.

2017-10-27  Luca Saiu  <positron@gnu.org>

	new VM label API

	Add new user functions for generating VM labels without an associated symbolic
	name, adding them as VM instruction labels or VM instruction parameters.  Some
	of these labels may have symbolic names as well, but this is now optional, and
	the internal structures use opaque identifiers.

	Clean up the internal implementation of VM labels in unspecialized programs,
	simplifying data structures -- particularly instruction parameters, whose
	performance will become more important with rewrites.

	The user API remains backward-compatible, with new functions added.  The new
	API, however, is more convenient for C programs generating VM programs.

	* jitter/jitter-instruction.h (jitter_opaque_label): New type.
	(anonymous union in struct jitter_parameter): New field jitter_opaque_label
	label; add comments.
	(struct jitter_parameter): Remove label_name, which was dynamically allocated.

	* jitter/jitter-instruction.c (jitter_make_instruction_parameter): Don't
	invalidate label_name, invalidate label.
	(jitter_clone_instruction_parameter): Remove heap-to-heap copy.
	(jitter_destroy_instruction_parameter): Remove free.

	* jitter/jitter-program.h (struct jitter_program): Remove field label_to_index,
	which had symbolic names as keys.  Add fields next_unused_opaque_label,
	label_name_to_opaque_label, opaque_label_to_instruction_index.
	(jitter_fresh_label, jitter_symbolic_label, jitter_append_label)
	(jitter_append_label_parameter): New functions.
	(jitter_append_symbolic_label): Return jitter_opaque_label instead of void.
	(jitter_backpatch_labels_in_unspecialized_program): Rename to
	jitter_resolve_labels_in_unspecialized_program.
	Add function attributes.

	* jitter/jitter-program.c (jitter_initialize_program, jitter_finalize_program):
	Don't initialize/finalize label_to_index; instead initialize/finalize
	next_unused_opaque_label, label_name_to_opaque_label,
	opaque_label_to_instruction_index.
	(jitter_fresh_label, jitter_symbolic_label, jitter_append_label): New functions.
	(jitter_get_label_instruction_index, jitter_set_label_instruction_index): New
	static function.
	(jitter_append_symbolic_label): Redefine as a wrapper around jitter_append_label.
	(jitter_append_symbolic_label_parameter): Redefine as a wrapper around
	jitter_append_label_parameter.
	(jitter_backpatch_labels_in_unspecialized_program): Rename to
	jitter_resolve_labels_in_unspecialized_program, use the new data structures,
	comment.

	* jitter/jitter-specialize.c (jitter_specialize_program): Change call to
	jitter_backpatch_labels_in_unspecialized_program, following its rename.

	* templates/vm.h (vmprefix_append_label, vmprefix_append_label_parameter):
	New vmprefix_ macro wrappers for jitter_append_label and
	jitter_append_label_parameter.

	* example-vms/structured/structured-code-generator.c
	(structured_translate_statement): Use the new API, even if the code would keep
	working using the old one as well.  Cosmetic change: use braces around every
	switch case.
	(structured_translate_expression): Cosmetic change: use braces around
	every switch case.

2017-10-27  Luca Saiu  <positron@gnu.org>

	remove obsolete and incorrect comment

	Despite what the comment used to say struct jitter_parameter did in fact point
	to a symbolic label name.

	* jitter/jitter-instruction.h (struct jitter_parameter): Here.

2017-10-27  Luca Saiu  <positron@gnu.org>

	rename enum jitter_parameter_type label case

	Rename the enum jitter_parameter_type case
	jitter_parameter_type_label_as_instruction_index to, simply,
	jitter_parameter_type_label .  The name was not used consistently, as during
	most of the stages of an unspecialized program construction the label is in fact
	stored in symbolic form, and only resolved to an index quite late.

	* jitter/jitter-instruction.h (enum jitter_parameter_type): Rename
	jitter_parameter_type_label_as_instruction_index to jitter_parameter_type_label.
	Add unrelated comment.

	* jitter/jitter-program.c: Use the new name.

	* jitterc/jitterc-generate.c: Generate the new name.

2017-10-27  Luca Saiu  <positron@gnu.org>

	comment change

	* jitter/jitter-instruction.h: Here.

2017-10-27  Luca Saiu  <positron@gnu.org>

	whitespace change

	* templates/vm1.c (JITTER_FAIL) [JITTER_REPLICATE]: Here.

2017-10-27  Luca Saiu  <positron@gnu.org>

	comment grammar

	* templates/vm1.c: Here.

2017-10-27  Luca Saiu  <positron@gnu.org>

	extend startup thread validation to verify that threads don't overlap

	Be more defensive at startup in verifying that the generated C code has been
	compiled with -fno-reorder-blocks , with the dispatching models where this is a
	requirement.

	* templates/vm1.c (vmprefix_thread_sizes_validated): Rename to
	vmprefix_threads_validated.
	(vmprefix_validate_thread_sizes_once): Rename to vmprefix_validate_threads_once.
	Perform a thread sequentiality check.  Factor.
	(vmprefix_initialize): Change references to renamed fields.

	* jitter/jitter-vm.h (sturct jitter_vm): Rename thread_sizes_validated to
	threads_validated.

	* jitter/jitter-disassemble.c (jitter_disassemble_program): Rename
	p->vm->thread_sizes_validated to p->vm->threads_validated.

2017-10-27  Luca Saiu  <positron@gnu.org>

	C code generator: generate special specialized instruction in order

	I am about to exploit this ordering property in the coming thread validation at
	startup, as an efficient way to verify that threads are non-overlapping.

	* jitterc/jitterc-generate.c: Move code-generation for !EXITVM before
	!UNREACHABLE0, !UNREACHABLE1 and !UNREACHABLE2, following the order
	of specialized instruction opcodes.

2017-10-27  Luca Saiu  <positron@gnu.org>

	Makefile.am: better parallel support, again

	* Makefile.am (examples): Make it depend from all , as already described in the
	comment.

2017-10-27  Luca Saiu  <positron@gnu.org>

	build system: improve man page building

	When using help2man, make man pages depend on executable programs rather than
	their sources.  This is different from what the help2man documentation
	recommends, but is more sensible in my case.  The problem of requiring users to
	have help2man doesn't apply to this case, since if help2man is not installed I
	deal with man pages differently, checking at configure time and using an
	Automake conditional; pre-generated man pages are distributed anyway.

	This makes parallel building much more robust, with respect to man pages.

	* Makefile.am: Here.

2017-10-27  Luca Saiu  <positron@gnu.org>

	Makefile.am: add explicit dependencies to make parallel build more robust

	Add dependencies from hand-written C files to the machine-generated C files
	they include.  This way any use of the hand-written file will *follow* the
	generation of what it uses.

	* Makefile.am: Here.

2017-10-27  Luca Saiu  <positron@gnu.org>

	Makefile.am: fix mans dependency

	Man pages, generated with help2man, do in practice depend on programs, even if
	such a dependency is not explicitly expressed in the makefile as recommended
	by the help2man documentation, for good reason.

	The convenience "mans" target I added for the user built "all" before generating
	the man pages.  This broke easily with parallel make, since man pages are
	included in all.

	* Makefile.am (mans): Build $(bin_PROGRAMS) $(bin_SCRIPTS) instead of all
	as a first step before generating the man pages.

2017-10-27  Luca Saiu  <positron@gnu.org>

	switch dispatching: optimize dispatch

	Looking at the generated assembly I noticed that, on a 64-bit architecture,
	the code
	  switch ((enum vmprefix_specialized_instruction_opcode) ip->fixnum)\n")
	generates a machine instruction to implement the cast, masking off the higher
	32 bits.  This is obviously useless and wasteful, so I'm removing the cast.

	* jitterc/jitterc-generate.c [SWITCH]: Remove cast from jitter_int to enum
	vmprefix_specialized_instruction_opcode.

2017-10-27  Luca Saiu  <positron@gnu.org>

	jitter-config: permit flag option composition

	Allow for more than one flag option to be given, printing all the requested
	flags in the requested order.

	This was always supposed to be working, but I had made a silly mistake.

	* scripts/jitter-config.in.m4sh: Here.

2017-10-27  Luca Saiu  <positron@gnu.org>

	scripts/jitter-config.in.m4sh: insert more forgotten quadrigraphs

	* scripts/jitter-config.in.m4sh: Add two more quadrigraphs.

2017-10-27  Luca Saiu  <positron@gnu.org>

	jitter-config: replace unescaped brackets with quadrigraphs in M4sh source

	When introducing M4sh I had forgotten that a sed regexp was relying on brackets,
	which of course don't work well with quoting as redefined by M4sugar/M4sh.

	Add the required escape.

	* scripts/jitter-config.in.m4sh: Replace [ and ] with @<:@ and @:>@.
	Remove commented-out debugging prints.

2017-10-26  Luca Saiu  <positron@gnu.org>

	comment grammar fix * Makefile.am: Here.

2017-10-26  Luca Saiu  <positron@gnu.org>

	structured: add euclid example

	* example-vms/structured/examples/euclid.structured: New file.

	* Makefile.am: Distribute the new file.  Fix comment.

2017-10-26  Luca Saiu  <positron@gnu.org>

	implement switch dispatching

	Implement switch dispatching.  A few uses of goto * may remain, and I have made
	no effort yet to conditionalize the generated inline asm, which however should
	be all completely unnecessary with switch dispatching.  No test case fails with
	switch dispatching on any architecture I am testing.

	* jitterc/jitterc-generate.c (jitterc_emit_state_h)
	(jitterc_emit_interpreter_main_function): Generate conditional code supporting
	switch dispatching.
	(jitterc_emit_interpreter): Generate definitions for JITTER_VM_PREFIX_LOWER_CASE
	and JITTER_VM_PREFIX_UPPER_CASE.
	Trivial cosmetic changes.

	* jitter/jitter-interpreter-private.h (JITTER_EXIT): Conditionalize.
	(JITTER_INSTRUCTION_PROLOG, JITTER_INSTRUCTION_EPILOG): Add definitions for
	switch dispatching.
	(JITTER_SPECIALIZED_INSTRUCTION_WORD_NO, JITTER_SKIP_RESIDUALS)
	(__JITTER_PROCEDURE_PROLOG_COMMON, _JITTER_BRANCH_AND_LINK, JITTER_RETURN):
	Support switch dispatching just like direct-threading.
	(JITTER_SET_IP): Factor into a single conditional definition.
	(JITTER_BRANCH_TO_IP): Split into two different cases, one for switch
	and another for direct-threding and minimal-threading.
	(JITTER_JUMP_TO_SWITCH): New macro.
	Minor comment changes.

	* jitter/jitter-specialize.c (jitter_add_specialized_instruction_opcode):
	Conditionalize on switch dispatching, emitting a specialized opcode instead
	of a thread.
	Mark a comment as obsolete, coming from a long time ago.

	* templates/vm1.c (vmprefix_thread_sizes_validated)
	(vmprefix_validate_thread_sizes_once): Conditionalize.
	(vmprefix_initialize): Conditionalize vmprefix_validate_thread_sizes_once call
	and VM field initialization.

	* templates/vm.h (vmprefix_threads, vmprefix_thread_ends)
	(vmprefix_thread_sizes): Conditionalize.

	* jitter/jitter-vm.h (struct jitter_vm): Conditionalize thread_sizes_validated,
	threads and thread_sizes, which make no sense with switch-dispatching.

	* jitter/jitter-disassemble.c: Conditionalize almost the entire file.
	(jitter_disassemble_program) [SWITCH]: Add a stub function which prints
	a message and returns.

	* configure.ac: Enable switch dispatching by default.

	* doc/jitter.texi: No longer say that switch dispatching is unimplemented.

2017-10-26  Luca Saiu  <positron@gnu.org>

	add vmprefix_thread_ends

	Keep VM instruction *end* labels in a global array.  These are not all reachable
	at run time, but having them in a global array might prevent older GCCs from
	being too clever in reordering blocks.

	This might be useful if I consider support for really old compilers.

	* templates/vm.h(vmprefix_thread_ends): New extern variable.

	* jitterc/jitterc-generate.c: Generate definition for vmprefix_thread_ends.

2017-10-26  Luca Saiu  <positron@gnu.org>

	thread-size validation: print which instruction has incorrect size

	* templates/vm1.c(vmprefix_validate_thread_sizes_once): Print more information
	to stderr before failing.

2017-10-26  Luca Saiu  <positron@gnu.org>

	add make support for switch dispatching

	Switch-dispatching is not implemented yet, but its build system should support
	it already.  Add a little piece I had forgotten.

	* Makefile.am: add lib/libjitter--switch--convenience.la, which I had forgotten
	and was never used anyway since switch-dispatching is not implemented.

2017-10-26  Luca Saiu  <positron@gnu.org>

	patch-ins: use an input operand obtained with prefix && instead of a gotolabel

	I used to pass the VM instruction beginning argument as a gotolabel argument in
	patch-in inline asm, but the label was sometimes resolved to a slightly
	different address compared to what is computed by the prefix && operator under
	GCC 6 -- which broke patch-ins.  Elsewhere in Jitter I use prefix && to delimit
	the beginning and end of VM instruction code, so it is sensible to always
	compute these address the same way.

	All patch-ins now receive the VM instruction label as an *input* argument, whose
	value is given by prefix the && operator.

	This fixes the last remaining problem I know with GCC 6, which should now be
	usable for no-threading VMs as well.  The test suite should now have 0 failures
	on every architecture I test except sh4, which has known problems unrelated to
	this.

	* jitter/jitter-patch-in.h(JITTER_ASM_PATCH_IN_PLACEHOLDER): use named *input*
	argument jitter_vm_instruction_beginning instead of gotolabel
	JITTER_SPECIALIZED_INSTRUCTION_BEGIN_LABEL_AS_STRING.  Comment well.
	Improve whitespace.
	(JITTER_INPUT_VM_INSTRUCTION_BEGINNING): New macro.
	(JITTER_PATCH_IN_PLACEHOLDER_GOTO): Adapt to the previous changes, comment.

	* machine/mips/jitter/machine/jitter-machine.h,
	machine/sh/jitter/machine/jitter-machine.h,
	machine/x86_64/jitter/machine/jitter-machine.h: Adapt to the previous
	changes.

2017-10-26  Luca Saiu  <positron@gnu.org>

	patch-ins: mostly cosmetic change

	* jitter/jitter-patch-in.h(JITTER_ASM_PATCH_IN_PLACEHOLDER): use
	JITTER_ASM_COMMENT_UNIQUE instead of JITTER_ASM_COMMENT_PREFIX and "%=".

2017-10-26  Luca Saiu  <positron@gnu.org>

	minor change

	Inline asm goto statements are always implicitly volatile.

	* jitter/jitter-patch-in.h: Change "asm volatile goto" to "asm goto".

2017-10-26  Luca Saiu  <positron@gnu.org>

	comment fix

	* tests/structured/programs.test.in: Here.

2017-10-26  Luca Saiu  <positron@gnu.org>

	new structured test case, conditional

	This is useful to stress a particularly critical VM instruction, which is
	currently miscompiled with GCC 6.

	* tests/structured/conditional.structured: New file.

	* Makefile.am: Distribute tests/structured/conditional.structured.

	* tests/structured/programs.test.in: Add test cases.

2017-10-26  Luca Saiu  <positron@gnu.org>

	test suite: normalize test case output when empty

	It's more useful to ignore the differences between a completely empty output and
	a single newline character.  We will never check the distinction between those
	two outputs in the test suite, and being able to accept empty output is useful.

	This solution is convenient, since the expected output is also generated by the
	shell in a way that adds a final newline to any text.

	* tests/utility.in(jitter_run_case_checking_output): Normalize test case output,
	turning a completely empty output into a single newline character.

2017-10-26  Luca Saiu  <positron@gnu.org>

	test suite: make the euclid test case actually compute an MCD

	* tests/structured/euclid.structured: Actually implement Euclid's algorithm,
	adapted from the example in example-vms/structured/examples/euclid.structured.

	* tests/structured/programs.test.in: Set the correct expected result.

2017-10-26  Luca Saiu  <positron@gnu.org>

	add structured test cases

	Test suite: start a new test for Structured (high-level) programs, and add three
	simple ones.

	* tests/structured/programs.test.in: New test shell driver.

	* tests/structured/begin-end.structured, tests/structured/euclid.structured,
	* tests/structured/skip.structured: New test programs.

	* Makefile.am: Distribute test programs; add test driver, distribute test
	programs.

	* tests/utility.in(jitter_run_structured_case_all_dispatches): New function.

	* configure.ac: process tests/structured/programs.test.in.

2017-10-26  Luca Saiu  <positron@gnu.org>

	whitespace change

	* tests/utility.in: Here.

2017-10-26  Luca Saiu  <positron@gnu.org>

	test suite infrastructure: generalize

	Make the test suite shell functions more general.

	* tests/utility.in(jitter_vm_timeout_options): New shell variable.
	(jitter_run_program_case): Two new arguments, options and extension.
	(jitter_run_program_case_all_dispatches): Two new arguments, options
	and extension.  Call jitter_run_program_case with the new options.
	(jitter_run_program_case_all_dispatches): Use new options.

2017-10-25  Luca Saiu  <positron@gnu.org>

	test suite infrastructures fixes, for the new test cases to come

	* tests/utility.in(jitter_run_program_case): run the $executor program from
	@abs_top_srcdir@/tests/$executor/ rather than from
	@abs_top_srcdir@/tests/uninspired/ .
	Comment changes.

2017-10-25  Luca Saiu  <positron@gnu.org>

	test suite factoring

	Make the shared test suite infrastructure more general, to accommodate for more
	"program-running" tests using different VMs and high-level languages.

	* tests/utility.in(jitter_run_uninspired_case): Rename into
	jitter_run_program_case, with a new first argument.
	(jitter_run_uninspired_case_all_dispatches): Rename into
	jitter_run_program_case_all_dispatches, with a new first argument.
	(jitter_run_uninspired_case_all_dispatches): New function, now a trivial
	wrapper around jitter_run_program_case_all_dispatches.

2017-10-25  Luca Saiu  <positron@gnu.org>

	configure.ac: remove autotest disabled code

	Remove commented-out code dating back to when I was considering Autotest.  The
	current test suite infrastructure works well, and will stay.

	* configure.ac: Here.

2017-10-25  Luca Saiu  <positron@gnu.org>

	structured-language VM: add experimental instructions

	Add some instructions to the structured-language VM which are difficult to
	generate directly, but easy to obtain by rewrite rules.  I plan to use them
	when experimenting with rewrites.

	* example-vms/structured/structured.jitter: Here.

2017-10-25  Luca Saiu  <positron@gnu.org>

	remove the CFLAGS hack, already commented out

	Remove the CFLAGS hack, which had been commented-out for some time.  The current
	solution is more elegant and works at least as well.

	* configure.ac: Remove commented-out definitions, and all the relevant
	comments.

	* Makefile.am: Remove reference in comments.

2017-10-25  Luca Saiu  <positron@gnu.org>

	remove the old DASHFPIC_MAKES_GCC_SEGFAULT hack

	Remove the definition of DASHFPIC_MAKES_GCC_SEGFAULT.  The problem I was seeing
	with -fpic was only visible when passing the option to GCC's optimize function
	attribute, which is now discouraged for production use.

	The substitution was performed, but has not been actually used in some time.

	* configure.ac(DASHFPIC_MAKES_GCC_SEGFAULT): Remove definition.

	* jitter/jitter-config.h.in(DASHFPIC_MAKES_GCC_SEGFAULT): Remove (template)
	  definition.

2017-10-25  Luca Saiu  <positron@gnu.org>

	.gitignore: ignore example-vms/structured/build-aux/

	* .gitignore: Here.

2017-10-25  Luca Saiu  <positron@gnu.org>

	make: play better with parallel building

	It is difficult to properly support make -j , particularly when not every
	dependency is actually expressed as Make rules -- for example, help2man
	depending on executables, and with the special cases of BUILT_SOURCES.

	However building in parallel should work well from a source tarball, where
	generated C files and man pages are pre-built; this is only an inconvenience for
	people playing with sources from git.

	This change set introduces a few more serializations.

	* Makefile.am(generated-c-files): New target.
	(examples): Simplify, using generated-c-files.
	(mans): New target.
	(dist-hook-built-sources): remove, using generated-c-files in its place.
	(dist-hook): cosmetic changes.

2017-10-25  Luca Saiu  <positron@gnu.org>

	trivial documentation change

	* example-vms/structured/README: Here.

2017-10-25  Luca Saiu  <positron@gnu.org>

	build system: work without help2man

	* configure.ac(JITTER_HAS_HELP2MAN): Remove Automake conditional definition,
	keeping JITTER_CAN_REBUILD_MAN_PAGES.
	(jitter_has_help2man): New shell variable.
	Add section comment.

	* Makefile.am: fix and simplify rules for man pages, using only
	JITTER_CAN_REBUILD_MAN_PAGES instead of two (incorrectly) nested conditionals.

2017-10-25  Luca Saiu  <positron@gnu.org>

	cosmetic Makefile.am changes

	* Makefile.am: Reorder, comment better.

2017-10-25  Luca Saiu  <positron@gnu.org>

	build system: improve examples

	* Makefile.am(examples): Redefine the examples target to work better when
	the target all, or some machine generated C file, has not been built.

2017-10-25  Luca Saiu  <positron@gnu.org>

	comment change

	* configure.ac: Add comment heading before macro definition, as recommended by
	the Autoconf manual.

2017-10-25  Luca Saiu  <positron@gnu.org>

	minor build system change

	* Makefile.am: Define ACLOCAL_AMFLAGS non-incrementally.  This avoids a spurious
	libtoolize warning.

2017-10-24  Luca Saiu  <positron@gnu.org>

	mention which files were not written by me

	This is almost certainly irrelevant nitpicking, but I like to play it extra
	safe.

	* AUTHORS: update remark about included files, specifying which ones were
	not written by me among the ones from the repo.

2017-10-24  Luca Saiu  <positron@gnu.org>

	remove commented-out lines

	* configure.ac: Remove commented-out lines.

2017-10-24  Luca Saiu  <positron@gnu.org>

	remove git-version-gen from the repo

	The file build-aux/git-version-gen should be automatically copied by the
	bootstrap script, and doesn't belong in the repository.  Of course it does
	belong in distributions.

	* build-aux/git-version-gen: Delete.

2017-10-24  Luca Saiu  <positron@gnu.org>

	remove old example

	This old example dated back from Jitter's prehistory, and has not even been
	built by Makefile.am for a long time.

	* src/bad-demo.c: Delete.

2017-10-24  Luca Saiu  <positron@gnu.org>

	fix bootstrap bug (thanks to José Marchesi)

	The bootstrap script was failing on some machines.

	* configure.ac: Call AC_CONFIG_MACRO_DIRS , so that libtoolize can copy .m4
	files to the right place.

2017-10-24  Luca Saiu  <positron@gnu.org>

	structured example build system: minor clean ups

	* example-vms/structured/configure.ac: Omit AC_PROG_CC_C99, which is not
	directly useful.  Whitespace.

2017-10-24  Luca Saiu  <positron@gnu.org>

	clean up Makefile.am

	* Makefile.am: Remove commented-out cruft.

2017-10-24  Luca Saiu  <positron@gnu.org>

	build system improvements

	* Makefile.am: Change dependencies among structuredvm generated files.
	The "first" file on which the other depends is now structuredvm-vm-main.c ,
	so as not to conflict with the example build system in the structured
	subdirectory, where structuredvm-vm-main.c is not generated at all.
	(dist-hook-built-sources): Add dependencies $(JITTER_GENERATED_FILES).

2017-10-24  Luca Saiu  <positron@gnu.org>

	git: ignore some more generated files

	* .gitignore: Here.

2017-10-24  Luca Saiu  <positron@gnu.org>

	update git-version-gen

	* build-aux/git-version-gen: Update from Gnulib.

2017-10-24  Luca Saiu  <positron@gnu.org>

	don't keep my dirty notes file on the public git repository

	Do not distribute, or even keep on git, my NOTES file, now renamed to
	NOTES-off-git.

	* .gitignore: Ignore NOTES-off-git.

	* Makefile.am(EXTRA_DIST): Remove NOTES.

2017-10-24  Luca Saiu  <positron@gnu.org>

	import sources

	Import the Jitter sources from the previous private git repository.

	* .gitignore: New file.
	* AUTHORS: New file.
	* COPYING: New file.
	* Makefile.am: New file.
	* NEWS: New file.
	* NO-WARRANTY: New file.
	* README: New file.
	* README-hacking: New file.
	* autoconf/jitter.m4: New file.
	* bootstrap: New file.
	* bootstrap.conf: New file.
	* build-aux/git-version-gen: New file.
	* build-aux/trivial-source.c: New file.
	* configure.ac: New file.
	* doc/COPYING.DOC: New file.
	* doc/fdl.texi: New file.
	* doc/gpl.texi: New file.
	* doc/jitter.texi: New file.
	* doc/missing-man-page.1: New file.
	* emacs/jitter-mode.el: New file.
	* example-vms/brainfuck/brainfuck.jitter: New file.
	* example-vms/structured/AUTHORS: New file.
	* example-vms/structured/COPYING: New file.
	* example-vms/structured/ChangeLog: New file.
	* example-vms/structured/Makefile.am: New file.
	* example-vms/structured/NEWS: New file.
	* example-vms/structured/README: New file.
	* example-vms/structured/configure.ac: New file.
	* example-vms/structured/examples/count-down.structured: New file.
	* example-vms/structured/structured-code-generator.c: New file.
	* example-vms/structured/structured-code-generator.h: New file.
	* example-vms/structured/structured-main.c: New file.
	* example-vms/structured/structured-syntax.h: New file.
	* example-vms/structured/structured.jitter: New file.
	* example-vms/structured/structured.l: New file.
	* example-vms/structured/structured.y: New file.
	* example-vms/uninspired/examples/bubble-sort-random.vm: New file.
	* example-vms/uninspired/examples/bubble-sort.vm: New file.
	* example-vms/uninspired/examples/counter-iterator.py: New file.
	* example-vms/uninspired/examples/counter-mips-using-delay-slot.s: New file.
	* example-vms/uninspired/examples/counter-mips.s: New file.
	* example-vms/uninspired/examples/counter-sparc.s: New file.
	* example-vms/uninspired/examples/counter-x86_64.s: New file.
	* example-vms/uninspired/examples/counter.pir: New file.
	* example-vms/uninspired/examples/counter.py: New file.
	* example-vms/uninspired/examples/counter.vm: New file.
	* example-vms/uninspired/examples/euclid-faster.vm: New file.
	* example-vms/uninspired/examples/euclid-simple-assignments.py: New file.
	* example-vms/uninspired/examples/euclid-super.vm: New file.
	* example-vms/uninspired/examples/euclid-symmetric.py: New file.
	* example-vms/uninspired/examples/euclid-x86_64.s: New file.
	* example-vms/uninspired/examples/euclid.pir: New file.
	* example-vms/uninspired/examples/euclid.py: New file.
	* example-vms/uninspired/examples/euclid.vm: New file.
	* example-vms/uninspired/examples/sqrt-2.vm: New file.
	* example-vms/uninspired/examples/threading-benchmark.vm: New file.
	* example-vms/uninspired/examples/vector-sum.vm: New file.
	* example-vms/uninspired/uninspired.jitter: New file.
	* jitter/jitter-config.h.in: New file.
	* jitter/jitter-cpp.h: New file.
	* jitter/jitter-disassemble.c: New file.
	* jitter/jitter-disassemble.h: New file.
	* jitter/jitter-dispatch.h: New file.
	* jitter/jitter-dynamic-buffer.c: New file.
	* jitter/jitter-dynamic-buffer.h: New file.
	* jitter/jitter-fast-branch.c: New file.
	* jitter/jitter-fast-branch.h: New file.
	* jitter/jitter-fatal.c: New file.
	* jitter/jitter-fatal.h: New file.
	* jitter/jitter-hash-random-table.c: New file.
	* jitter/jitter-hash.c: New file.
	* jitter/jitter-hash.h: New file.
	* jitter/jitter-instruction.c: New file.
	* jitter/jitter-instruction.h: New file.
	* jitter/jitter-interpreter-private.h: New file.
	* jitter/jitter-machine-common.S: New file.
	* jitter/jitter-machine-common.h: New file.
	* jitter/jitter-malloc.c: New file.
	* jitter/jitter-malloc.h: New file.
	* jitter/jitter-missing.c: New file.
	* jitter/jitter-missing.h: New file.
	* jitter/jitter-parse-int.c: New file.
	* jitter/jitter-parse-int.h: New file.
	* jitter/jitter-patch-in.c: New file.
	* jitter/jitter-patch-in.h: New file.
	* jitter/jitter-patch.c: New file.
	* jitter/jitter-patch.h: New file.
	* jitter/jitter-program.c: New file.
	* jitter/jitter-program.h: New file.
	* jitter/jitter-replicate.c: New file.
	* jitter/jitter-replicate.h: New file.
	* jitter/jitter-rewrite.c: New file.
	* jitter/jitter-rewrite.h: New file.
	* jitter/jitter-specialize.c: New file.
	* jitter/jitter-specialize.h: New file.
	* jitter/jitter-stack.c: New file.
	* jitter/jitter-stack.h: New file.
	* jitter/jitter-string.c: New file.
	* jitter/jitter-string.h: New file.
	* jitter/jitter-vm.c: New file.
	* jitter/jitter-vm.h: New file.
	* jitter/jitter.c: New file.
	* jitter/jitter.h: New file.
	* jitter/program.l: New file.
	* jitter/program.y: New file.
	* jitterc/jitterc-generate.c: New file.
	* jitterc/jitterc-generate.h: New file.
	* jitterc/jitterc-main.c: New file.
	* jitterc/jitterc-mangle.c: New file.
	* jitterc/jitterc-mangle.h: New file.
	* jitterc/jitterc-utility.c: New file.
	* jitterc/jitterc-utility.h: New file.
	* jitterc/jitterc-vm.c: New file.
	* jitterc/jitterc-vm.h: New file.
	* jitterc/jitterc.l: New file.
	* jitterc/jitterc.y: New file.
	* m4-utility/jitter-script.m4sh: New file.
	* machine/mips/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/mips/jitter/machine/jitter-machine-c.c: New file.
	* machine/mips/jitter/machine/jitter-machine.h: New file.
	* machine/powerpc/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/powerpc/jitter/machine/jitter-machine-c.c: New file.
	* machine/powerpc/jitter/machine/jitter-machine.h: New file.
	* machine/sh/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/sh/jitter/machine/jitter-machine-c.c: New file.
	* machine/sh/jitter/machine/jitter-machine.h: New file.
	* machine/sparc/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/sparc/jitter/machine/jitter-machine-c.c: New file.
	* machine/sparc/jitter/machine/jitter-machine.h: New file.
	* machine/x86_64/jitter/machine/jitter-machine-assembly.S: New file.
	* machine/x86_64/jitter/machine/jitter-machine-c.c: New file.
	* machine/x86_64/jitter/machine/jitter-machine.h: New file.
	* scripts/emulator.in: New file.
	* scripts/highlight-disassembly.in: New file.
	* scripts/jitter-config.in.m4sh: New file.
	* src/bad-demo.c: New file.
	* templates/vm-main.c: New file.
	* templates/vm.h: New file.
	* templates/vm1.c: New file.
	* tests/elementary/empty.vm: New file.
	* tests/elementary/init-fini.test.in: New file.
	* tests/uninspired/add.vm: New file.
	* tests/uninspired/branch-thru-register.vm: New file.
	* tests/uninspired/branch-thru-slow-register.vm: New file.
	* tests/uninspired/call-leaf.vm: New file.
	* tests/uninspired/call-non-leaf.vm: New file.
	* tests/uninspired/call-thru-register-leaf.vm: New file.
	* tests/uninspired/call-thru-register-non-leaf.vm: New file.
	* tests/uninspired/conditional-branch-not-taken.vm: New file.
	* tests/uninspired/conditional-branch.vm: New file.
	* tests/uninspired/count-down-slow-register.vm: New file.
	* tests/uninspired/count-down.vm: New file.
	* tests/uninspired/count-up-down-slow-registers.vm: New file.
	* tests/uninspired/count-up-down.vm: New file.
	* tests/uninspired/div.vm: New file.
	* tests/uninspired/fundamental.test.in: New file.
	* tests/uninspired/load-0xffff.vm: New file.
	* tests/uninspired/load-16-bit.vm: New file.
	* tests/uninspired/load-32-bit.vm: New file.
	* tests/uninspired/load-64-bit.vm: New file.
	* tests/uninspired/load-8-bit.vm: New file.
	* tests/uninspired/load-minus-one.vm: New file.
	* tests/uninspired/load-minus-two.vm: New file.
	* tests/uninspired/mod.vm: New file.
	* tests/uninspired/mul.vm: New file.
	* tests/uninspired/programs.test.in: New file.
	* tests/uninspired/sub.vm: New file.
	* tests/uninspired/unconditional-branch.vm: New file.
	* tests/utility.in: New file.


Copyright (C) 2016-2023 Luca Saiu
Written by Luca Saiu

This file is part of GNU Jitter.

GNU Jitter is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

GNU Jitter is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with GNU Jitter.  If not, see <https://www.gnu.org/licenses/>.


