Commit Graph

46 Commits

Author SHA1 Message Date
Matthew Flatt
baf3bba9de constrain smaller trap-check code to avoid allocation
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
2020-02-07 15:27:07 -07:00
Matthew Flatt
d4981dd8c3 less code for trap checks
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
2020-02-07 10:56:15 -07:00
Matthew Flatt
40c407e1c2 add $record-type-field-count
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
2020-01-31 11:17:04 -07:00
Matthew Flatt
d13e5898c8 add enable-unsafe-variable-reference
original commit: 77a0ef249b6d419dcac7c8e1c28e710b30a7aa33
2020-01-30 17:46:30 -07:00
Matthew Flatt
26ff90e8e6 more compact return points for function calls
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
2020-01-24 19:19:32 -07:00
Matthew Flatt
754bae07e3 add enable-unsafe-application
original commit: 4c0750d292999dbc476b2b0a80cad3b8beaab660
2020-01-23 15:25:22 -07:00
Matthew Flatt
6020b944ef improve cross-library inlining
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
2020-01-19 08:35:02 -07:00
Matthew Flatt
45381612b2 fix popcount support to work on Windows
Avoid RDI, since it's preserved in the Windows ABI.

original commit: 68b2f597ec67ed8752998807bd0c9fc66667c752
2020-01-11 16:41:46 -07:00
Matthew Flatt
540c58bbe8 use POPCNT instruction when available on x86_64
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
2020-01-11 11:04:48 -07:00
Matthew Flatt
81ea967aea add stencil vectors and fxpopcount
original commit: ec766fca869b5e0407c4f54230b72619af73b40b
2020-01-06 05:34:28 -07:00
Matthew Flatt
ecaec06f64 add string-append-immutable
original commit: 353ee30534757fb37bfe231e9be21482d9f858ce
2019-12-17 19:29:10 -07:00
Matthew Flatt
c8ea435c85 make strings within symbols always immutable
original commit: 7859d16dac7bae6ab836e2200003583dc572deba
2019-12-16 17:11:49 -07:00
Matthew Flatt
50e529364d fasl: move uptr continue bit from low to high
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
2019-12-06 16:43:26 -07:00
Matthew Flatt
4998cda524 fix version in Mf-install
original commit: 999a4fe636fde497a7b203132dee9d496bf64013
2019-12-05 20:11:22 -07:00
Matthew Flatt
232b230e65 add enable-error-source-expression
original commit: 02f383510653bb16c65fc812eb0c619bcb0347b5
2019-11-26 06:31:48 -07:00
Matthew Flatt
f52283de7e semi-inline call/cc in tail position
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
2019-10-23 08:33:01 -06:00
Matthew Flatt
18d18b7ff6 add pseudo-random generator API
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
2019-10-07 10:58:39 -06:00
Matthew Flatt
4e3b829227 add $app
Using `#3%$app` disables a `procedure?` check in an application.

original commit: d7960da9e3c3a864a4df42cb8bb71d9b205aeb95
2019-09-19 07:30:42 -06:00
Matthew Flatt
77ea4ccb78 add scheme-fork-version-number
Include an extra part in the Chez Scheme version number, which both
helps indicates the Racket fork and versions it.

original commit: 00678e29bb9f05de2ccaec8585126e967cdcc6f4
2019-09-13 07:09:13 -06:00
Matthew Flatt
c38194c0ca adjust build for BSDs, MinGW cross-compile, and more configuration
Includes joint work with @abmclin, @pmatos, and @jessealama.

original commit: 70559d074f70dcadec5cea3619f75f91fcda77eb
2019-07-03 18:54:04 -06:00
Alexander B. McLin
dcffbe1d8b Change make to $(MAKE) so it works more reliably on FreeBSD
and other platforms using non-GNU make systems.

original commit: 281a2b3ae12c13f15c14c2ba8968d40c28caacbf
2019-07-02 11:30:59 -06:00
Oscar Waddell
bb67d6ff01 install a file containing revision control information alongside boot files
original commit: ed4ca6123eae4c347e9ee240a34e42dbc695aea2
2019-03-27 12:42:28 -04:00
dyb
46608ff1f1 Now opening 9.5.3 release. Intent is to formally release 9.5.2
(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
2019-03-21 15:07:39 -07:00
dyb
b2cecd2c0f 9.5.2 changes:
- 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
2019-03-21 14:30:49 -07:00
dyb
84ec3f8704 minor build and new-release updates
checkin, newrelease, Makefile.in, Makefile-workarea.in

original commit: 4a4e1c40b611e56260c4751f1e16d0f9d78d2a35
2019-03-19 23:23:10 -07:00
dyb
0b89f4fe82 better packaging support
- 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
2019-03-18 22:51:26 -07:00
dyb
9a7068220d - reverted the earlier change to restore indirection through
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
2019-02-12 09:21:03 -08:00
Bob Burger
d468c35f29 added uninstall target for Unix-like systems
original commit: 4e5831fc0220ceede934f1d300b588129f770783
2018-08-31 13:22:47 -04:00
Quentin Dufour
924708b5ef Use a hard link instead of a symbolic to fix temp root bug
original commit: afb265e3fb8d8547884c1e7ca154c963894f703b
2018-06-12 09:57:21 -04:00
Bob Burger
ace59999fd Don't install equates.h
original commit: 7c86c154e9d175370ed4ae5f67201ff7e466ca02
2018-05-03 14:15:25 -04:00
dyb
b3cf76c3e8 Makefile-csug.in install target is now consistent with the project
page csug directory and pdf names, and newrelease now updates
Makefile-csug.in accordingly.

original commit: 63b1e7237d82d3af3ec594c35e3d5b9c7e58ae54
2018-03-28 09:25:20 -07:00
Oscar Waddell
68e1ae0ece install equates.h, kernel.o, and main.o on unix-like systems
original commit: fd7812d05c791e05eb65982c93bd8c36f7a0404f
2018-03-27 13:03:48 -04:00
Andy Keep
b681ad9738 - Updated CSUG to replace \INSERTREVISIONMONTHSPACEYEAR with the current
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
2017-10-13 23:50:20 -04:00
dyb
e55e744c4d - updated version to 9.5.1
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

original commit: c9c45641cc50b073329cc6d219140cf93fbd5c4c
2017-10-11 19:57:53 -04:00
dyb
5705bf3a69 - added version number to scheme.1.in trailer; updated date.
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
2017-10-11 18:26:23 -04:00
Bob Burger
831ea8ad18 changed copyright year to 2017
7.ss, scheme.1.in, comments of many files

original commit: 06f858f9a505b9d6fb6ca1ac97234927cb2dc641
2017-04-06 11:41:33 -04:00
Ted Lemon
b68baafe2f Bash test(1) does not allow bare numbers with ==, so use -eq
original commit: 6be137e5b76c6a8472e311a69743a403adc757f5
2016-05-22 17:41:40 -04:00
dybvig
aa62ffb153 * updated version to 9.4.1
bintar BUILDING NOTICE makefiles/Mf-install.in scheme.1.in
    c/Makefile.i3nt c/Makefile.a6nt c/Makefile.ti3nt c/Makefile.ta6nt
    mats/bldnt.bat workarea c/scheme.rc s/7.ss s/cmacros.ss
    release_notes/release_notes.stex csug/csug.stex

original commit: f0c9a4fbc082fa17c5bd3bd06d82365e77edc86b
2016-05-17 00:18:33 -04:00
Andy Keep
a80f0fb0b3 - added custom install options. workarea creates an empty config.h,
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
2016-05-06 18:30:06 -04:00
Andy Keep
bf23095a18 fixed LOG conflict
original commit: 40c15413e3803801146c15fa4010fde62ea7ede3
2016-05-06 16:40:42 -04:00
dybvig
9c1721c466 - compile-whole-program and compile-whole-library now copy the hash-bang
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
2016-05-04 20:35:38 -04:00
dybvig
37c6873262 workarea now copies the zlib directory to the work area so changes
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
2016-05-02 22:21:13 -04:00
combinatorylogic
ed60710793 Using install prefix in a default heap path; Forcing gzip rewrite for man pages
original commit: 8e87ffbd2e4a2f62f7157228c002aba6d6de5bc6
2016-04-28 11:55:03 +01:00
dybvig
0187d2bf4e - make test now prints the actual relative path to summary in the
"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
2016-04-27 22:26:08 -04:00
Kent Dybvig
6765641be0 - The scheme.h definition of Sfixnum(x) now uses multiply rather than
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
2016-04-26 17:16:02 -04:00
dyb
1356af91b3 initial upload of open-source release
original commit: 47a210c15c63ba9677852269447bd2f2598b51fe
2016-04-26 10:04:54 -04:00