* Rev 906a406a quieted all compiler notes coming from make-host-1,
rendering moot the muffle-conditions code-deletion-note in shared.lisp,
not to mention (satisfies unable-to-optimize-note-p) there as well.
* Prevent introduction of new occurrences of the optional+key warning
by confining the suppression to precisely where there is old code.
We need to fix whatever is wrong with cross-typep so that make-host-2
correctly utilizes the &OPTIONAL-AND-&KEY-IN-LAMBDA-LIST condition.
It doesn't work to omit avx512 from the darwin config which may have been
inadvertent. It's suspicious that a new non-working Makefile was checked in.
And I'm not sure why there are 5 features keywords to do one thing
if all of them are in fact mandatory as of now.
The call sequence needs only 1 add and 1 load where it used to need 3
loads for fdefn, fun, raw-fun. So while it is potentially faster, the
motivation was actually to remove support for untagged-fdefns which
strew #+/- all over the place.
The regression suite on ppc64 seems to be no more unstable than is typical.
I haven't observed a clean run in probably a year, and it may also be
getting some memory-ordering-related bugs due to the hash-table patches.
This rectifies many awkward aspects of the immobile space fdefns
which it replaces.
All other architectures should be unaffected by the patch.
Tested with with +/- {immobile-space, sb-thread, mark-region}
on linux, and the default config on windows and macOS.
Only 3 bits available for randomness without robbing from the name hash bits,
reducing SXHASH range and messing up xperfecthash30. Better than nothing.
So now NIL's name-hash is 0 given that static space is below 4GB
and the SYMBOL-NAME-HASH accessor is simply a 32-bit MOV.
Also put 1 random byte in the hash slot so that SYMBOL-HASH is a
slightly better hash function for EQL,EQUAL,EQUALP tables.
For the benefit of github CI, which defines a sparc crossbuild.
Additionally, make build-all-cores.sh exit with the exit code of the
underlying make job, if it gets that far.
which happens to be #+win32 and exposed a bug that a no-longer-needed allowance
for warnings caused it to exit with success despite a missing BASE-CHAR-P, and
also that there was also a pre-existing warning in stream.lisp if #-sb-unicode.
and don't redirect *stdout* and *stderr* if -j1.
You can specify more than one target, and they will follow one another
with no chance of overlap since it's sequential. This should give more-or-less
the same behavior as the deleted crossbuild-runner/build-all.sh script.
We can add a few more indicators of where each build starts,
but this is probably adequate for now.
I'm starting to think that make-host-2 might need to suppress the MEMBER
transform if a constant list has a NIL, because the address of NIL is
sensitive to static-space-start, necessitating xperfecthash entries
for each choice. Nonetheles, gathering an exhaustive list of known good
configurations to test isn't in itself an unreasonable thing.
* Merge xperfecthash file diffs back into the main file
* Rather than hardwiring the choice of OS in pass-1.lisp, put the choice
in the configuration params. Unfortunately stuff-groveled-from-headers
may need to exist in different incarnations due to package issues.
Neither make-all-targets.sh nor crossbuild-runner/build-all.sh could
do everything deisired. build-all.sh could incorporate changes to xperfecthash
and xfloat-math into the revison-controlled files, but could not use >1 host
CPU (via "make -j") whereas in contrast, make-all-targets could utilize >1 CPU
but could not merge diffs into xperfecthash or or xfloat-math.
This new script can, in theory (i.e. not yet), merge target-specific journal
updates into the git-controlled files, while also using N CPUs.
It also corrects the defect of pass-2.lisp that it never wrote .core artifacts,
causing Make to re-run when it need not. Additionally, since Makefile is now
autogenerated we can insert approximate dependencies - in so far as it would
select the same subset of build-order.lisp-expr as would an ordinary build.
Also we gain the ability to specify more than one set of *FEATURES* to be
built for a given architecture. It simply needs a distinct "config name".
This was performance-neutral in my limited testing- the regression
suite consumes the same amount of time before and after. Given that the
compiler probably takes a little longer due to deciding to emit barriers,
the runtime of the code under test seems as good if not better.
Thanks to Stas for some help with Darwin changes.
Whether funcallable-instances contain executable instructions has nothing
to do with either #+immobile-space or #+compact-instance-header any more.
Which is to say, it has not actually been tied to those, but misuse of
conditionals implied a dependence. In fact funcallable-instances were removed
from immobile-space some time ago (as were closure-calling trampolines) due to
inability to write to text segments in ELF cores.
So this changes adds an :EXECUTABLE-FUNINSTANCES feature, thereby undoing
misuse of the others, and generally makes x86-64 more consistent regardless
of +/- immobile-space. Despite introducing a new feature, it reduces
the amount of differentiation between possible x86-64 configurations.