Having the trap check allocate is questionable, since it can be
triggered during a loop that otherwise performs no allocation. Also,
on platforms where at most 1 argument is passed in a register, then
sending two arguments to the event handler could potentially need
stack space that isn't there. So, constrain the smaller trap-check
code to cases where no stack space is needed and where no allocation
happens unless the wrong number of arguments are provided.
original commit: 260a7ef5bc0bf851d9848587b0a78bdb4aab59f8
When a proceudre starts with a trap check, move the check to the very
beginning, even before checking the argument count. That way, event
detection can turn into a compact jump to an event handler, instead of
inserting a general call to `$event` in the procedure body.
original commit: 06b12d505698a2378734689370bb9e0f8eda06b9
This is a `$` function because it is defined only for record types
that have pointer-sized fields (i.e., the normal case).
original commit: 47213a7c8450aa52bd18e8f605c02b6c1081eadf
In the general form of a function call, the return point embeds 4
words of information: offset to the start of the enclosing function,
frame size, live-veriable mask, and multiple-value return address. In
the common case, however, the multiple-value return address is either
the same as the return address or it is a `values-error` library
function, and the frame size and live-variable mask fit into a word
with bits to spare. This patch implements a more compact return point
for that common case, which shrinks the 4 words to 2 and also avoids a
relocation (= 1 more word).
Multiple-value returns are more complex with this change (i.e.,
require more code), since they must check whether the return point is
compact or not. But multiple-value returns are far less common than
function calls, so saving function-call space is a clear win.
Overall, this change tends to reduce code size by about 10% on x86_64.
original commit: 1f53b5eabef966db01086cb32e544bbf8deacfca
Allow a library-defined function to be inlined when the inlined
expressions refer to other library-defined functions. Since the
library function's body may already have inlined calls, don't allow
further inlining of calls within the inlined code.
This commit also adds `$app/no-inline`, which can be used to prevent
inlining of a function. For consumers other than Racket on Chez
Scheme, probably it would make sense to provide a nicer-looking
syntactic form that expands to use the internal `$app/no-inline`
function.
original commit: 628d57e1bd2e658aad4da97a3e85bda72c38f6ab
On x86_64, a POPCNT instruction is usually available, and it can speed
up `fxpopcount` operations by a factor of 2-3.
Since POPCNT isn't always available, code using `fxpopcount` is
compiled to a call to a generic implementation. The linker substitutes
a POPCNT instruction when it determines at runtime that POPCNT is
available.
Some measurements on a 2018 MacBook Pro (2.7 GHz Core i7) using the
program below:
popcnt = this implementation, POPCNT discovered
nocnt = this implementation, POPCNT considered unavailable
optcnt = compile to use POPCNT directly (no linker work)
cpcnt = compile to inlined generic (no linker work, no POPCNT)
Since the generic implementation is always a 64-bit popcount, it's not
as good as an inlined version for `fxpopcount32`, but otherwise the
link-edit approach to POPCNT works well:
fxpopcount fxpopcount32
popcnt: 0.098s
nocnt: 0.284s
optcnt 0.109s [slower means noise?]
cpcnt: 0.279s 0.188s
(optimize-level 3)
(time
(let loop ([v #f] [i 100000000])
(if (fx= i 0)
v
(loop (fxpopcount i) (fx- i 1)))))
original commit: 5f090e509f8fe5edc777ed9f0463b20c2e571336
Use the high bit of a byte to continue instead of the low bit.
That way, ASCII strings look like themselves in uncompressed fasl
form.
original commit: 89a8d24cc051123a7b2b6818c5c4aef144d48797
Effectively, change a `call/cc` call to `let/cc` when it appears in
the tail position of a function. This change takes advantage of
continuation-reification support that was built for continuation
attachments.
original commit: 4c015a5b55f7d04839a0efd8e5554fc237e4663b
The MRG32k3a generator is fast when using unboxed floating-point
arithemtic. Since the Scheme compiler doesn't yet support that,
build MRG32k3a into the kernel and provide access via
`pseudo-random-generator` functions.
original commit: 3dd74679a6c2705440488d8c07c47852eb50a94b
Include an extra part in the Chez Scheme version number, which both
helps indicates the Racket fork and versions it.
original commit: 00678e29bb9f05de2ccaec8585126e967cdcc6f4
(and possibly all and only even-numbered releases going forward)
and use 9.5.3 (and possibly all and only odd-numbered releases going
forward) for development.
original commit: 47110f36cea47a44078b3144c82d212de79774ce
- updated version to 9.5.2
bintar/Makefile rpm/Makefile pkg/Makefile BUILDING NOTICE
makefiles/Mf-install.in makefiles/Makefile-csug.in scheme.1.in
c/Makefile.a6nt c/Makefile.i3nt c/Makefile.ta6nt c/Makefile.ti3nt
mats/Mf-a6nt mats/Mf-i3nt mats/Mf-ta6nt mats/Mf-ti3nt workarea
c/scheme.rc s/7.ss s/cmacros.ss release_notes/release_notes.stex
csug/copyright.stex csug/csug.stex rpm/Makefile pkg/Makefile
wininstall/Makefile wininstall/a6nt.wxs wininstall/i3nt.wxs
wininstall/ta6nt.wxs wininstall/ti3nt.wxs
- fixed handling of bintar, rpm, pkg make files
newrelease
- fixed a bug in the fasl representation and reading of mutually
recursive ftypes where one of the members of the cycle is the
parent of another, which manifested in the fasl reader raising
bogus "incompatible record type" exceptions. (The bug could also
affect other record-type descriptors with cycles involving parent
rtds and "extra" fields.) object files created before this fix
are incompatible with builds with this fix, and objects files
created after this fix are incompatible builds without this fix.
fasl.ss, strip.ss,
fasl.c,
ftype.ms,
release_notes.stex
original commit: 766d591c18c2779866d1a059700e6ff1c02cb3c5
- fixed failure to install examples for tarball installs
Mf-install.in
- improved packaging support:
replaced bintar script with bintar directory and make file;
tarballs are created via "make create-tarball" and are placed in
the workarea's bintar directory. added rpm directory and make
file for creating RPMs via "make create-rpm". added pkg directory
and make file for creating OSX packages via "make create-pkg".
bintar (removed), bintar/Makefile (new), rpm/Makefile (new),
pkg/Makefile (new), pkg/rmpkg (new), workarea, checkin, newrelease,
Makefile.in, Makefile-workarea.in.
original commit: fdff97d15cd827eb8fbef200c0f495a4bfaefff3
InstallPrefix, since it didn't and can't play well with the
generated config.h. Instead removed InstallPrefix entirely so
it isn't an attractive hazzard.
configure, makefiles/Mf-install.in
original commit: 21c8b40bbe4431795824e48042112820872a1fe5
month and year at the time of generation.
csug.stex, copyright.stex
- Updated configuration to set machine types in the CSUG and release notes
make files, and updated distclean target to remove these files.
configure, makefiles/Makefile-csug.in (renamed from csug/Makefile),
makefiles/Makefile-release_notes.in
(renamed from release_notes/Makefile),
makefiles/Makefile
original commit: d4fdb3e0c88c40cceeeeeb52032068408edc7a6e
scheme.1.in, newrelease
- removed version update of no-longer-existing bldnt.bat. "fixed"
sed patterns to replace \? with * for the benefit of the deficient
mac sed.
newrelease
- updated version to 9.5
bintar BUILDING NOTICE makefiles/Mf-install.in scheme.1.in
c/Makefile.i3nt c/Makefile.a6nt c/Makefile.ti3nt c/Makefile.ta6nt
workarea c/scheme.rc s/7.ss s/cmacros.ss
release_notes/release_notes.stex csug/csug.stex
- updated release notes and fixed user's guide overfull hbox.
release-notes.stex, syntax.stex
- updated install target to do something more sensible
release_notes/Makefile
original commit: adb3b7bb22ddaa1ba91b98b6f4a647427c3a4d9b
and configure creates a config.h that sets the default scheme heap
path and scheme-script name based on the actual configuration.
configure, newrelease, workarea, checkin,
c/Mf-base, scheme.c, main.c,
Mf-install.in
- renamed the installed example directory from lib to examples.
Mf-install.in,
scheme.1.in
- added force option to gzip during man page install to prevent gzip from
asking for permission to overwrite existing man page files.
Mf-install.in
- removed ~/lib/csv%v/%m from the default scheme heap path on unix-like
systems. documented inclusion of %x\..\..\boot\%m in the Windows
default scheme heap path.
main.c,
use.stex
- added new configuration options: --installbin, --installlib,
--installschemename, --installpetitename, and --installscriptname.
configure
- updated the example library link to the nanopass framework.
CONTRIBUTING.md
- now cleaning up petite.1 and scheme.1 left behind by make install
Makefile-workarea.in, checkin
- now removing workarea after cleaning csug and release_notes so
Mf-stex (included from csug/Makefile and release_notes/Makefile)
doesn't complain trying to determine the machine type.
Makefile.in
- added installsh support for --ifdiff so the csug make file can use it
for the install target.
installsh,
csug/Makefile
- added instructions for building (cross-compiling) a boot file for
a supported machine type for which a boot file is not built by default.
BUILDING
original commit: df4194c83a9e67d1ec20165fc3e2def4ed8e8986
line from the wpo file (if it has one) to the object file.
compile.ss,
7.ms
- stex is now a submodule. csug/Makefile and release_notes/Makefile
set and use the required Scheme and STEXLIB variables accordingly.
they default the machine type to a6le, but this can be overridden
and is by the generated top-level Makefile. the generated top-level
Makefile now has a new docs target that runs make in both csug and
release_notes, and an updated distclean target that cleans the same.
the annoying csug Makefile .fig.pdf rule redefinition is now gone.
copyright.stex and csug.stex now list May 2016 as the revision month
and date; this will have to be updated for future releases.
configure, makefiles/Makefile.in,
csug/Makefile, copyright.stex, csug.stex,
release_notes/Makefile
- rebuilt the boot files
original commit: 4bd78a692dd4ca2f88af5d404fd0993a2d141e7b
during configure and make don't affect the original. correspondingly,
the distclean target in the generated root Makefile no longer runs
distclean in zlib.
original commit: e7436f657a54a2871519e887e485f53fbed2eded
"check summary" message, whether invoked from the top-level directory
or from the workarea.
Makefile.in, Makefile-workarea.in
- configure now just uses cat to copy Makefile-workarea.in to $w/workarea,
since the file is presently the same regardless of the configuration.
configure
original commit: 1d438978dfedef9a47839b3ee302196aa5d8eda1
left shift to avoid counting on the behavior of << on negative numbers,
which is undefined in C.
mkheader.ss
- Fixed a couple of casts, one harmless and the other causing
Sinteger64_value to return 0 for the most-negative I64 on 32-bit
builds.
number.c
- The configure-generated Makefile distclean target no longer removes
zlib and nanopass, since they are logically part of the git clone.
It does run make distclean in zlib.
makefiles/Makefile.in
original commit: 42e6fed96d69fa17cfcd9cdcec101aaa36ba4512