Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
0bb171c
Compile hot integer loops to AArch64 machine code
treeform Sep 22, 2026
07be0e6
Keep the interpreter as the only path where no backend exists
treeform Sep 22, 2026
2de066c
Add an x86-64 backend and cover every platform in CI
treeform Sep 22, 2026
9b820b2
Port the vmath raytracer to BASIC as a realistic workload
treeform Sep 22, 2026
57b8f39
Pin loop results so CI proves cross-architecture agreement
treeform Sep 22, 2026
deeb512
Fix the raytracer's field of view and cut a fifth of its work
treeform Sep 22, 2026
f221cec
Settle a loop's budget once instead of at every block
treeform Sep 22, 2026
0c6b94f
Use the current Intel macOS runner label
treeform Sep 22, 2026
ef6cbce
Compile loops on Windows too, and drop the runner that cannot start
treeform Sep 22, 2026
96e5dff
Treat macOS as arm only in CI
treeform Sep 23, 2026
f167eff
Close a budget escape and check what compiled code is trusted with
treeform Sep 23, 2026
8751e30
Count every way into a loop, not just the ones the generator models
treeform Sep 23, 2026
7adb0dc
Say which Nim versions the layout check is written around
treeform Sep 23, 2026
6b667bd
Keep pages from being writable and executable, and from leaking
treeform Sep 23, 2026
7aaebe6
Compile ordinary expressions, not only the fused forms
treeform Sep 23, 2026
34e87b4
Compile array reads and writes
treeform Sep 23, 2026
e0e9a77
Compile remainder, integer division, and fixed-point arithmetic
treeform Sep 23, 2026
2090be3
Compile fixed-point constants, host data, and the last fused forms
treeform Sep 23, 2026
bc2ba3d
Let a region be a set of offsets rather than a run of them
treeform Sep 23, 2026
8849b18
Carry the call state through to compiled code
treeform Sep 23, 2026
96fe978
Compile calls by leaving every part of one in memory
treeform Sep 23, 2026
6eb5150
Compile host calls and fixed-point division
treeform Sep 23, 2026
4e25b62
reach globals in memory when a loop has too many to hoist
treeform Sep 23, 2026
8f662b7
share one instruction body between interpreter and native code
treeform Sep 23, 2026
c6f0f55
compile whole programs to arm64 machine code
treeform Sep 23, 2026
021738f
compile whole programs to x86-64 machine code
treeform Sep 23, 2026
2a03a57
replace loop regions with whole-program compilation
treeform Sep 23, 2026
5433445
fuzz resumed runs and host code writing globals
treeform Sep 23, 2026
1814328
inline mixed-kind arithmetic, fixed-point compares, and exit sub
treeform Sep 23, 2026
c878885
keep a loop's globals in registers while it runs
treeform Sep 23, 2026
c7e4511
look at the budget once a pass inside a specialised loop, test low bi…
treeform Sep 23, 2026
42c303a
read host callbacks in place instead of copying the closures
treeform Sep 23, 2026
5131250
give compiled host calls their own direct path
treeform Sep 23, 2026
42cd214
hold a block's slots and globals in registers from one instruction to…
treeform Sep 23, 2026
244e610
track constants and known kinds in fast blocks
treeform Sep 23, 2026
9994413
read strings in place for len, asc, and string equality
treeform Sep 23, 2026
78a8ea8
carry held values from one block into the next
treeform Sep 23, 2026
80e821e
add a string benchmark alongside the raytracer
treeform Sep 23, 2026
35b1fea
merge master: DATA arrays and context host callbacks
treeform Sep 24, 2026
353547e
fuzz DATA arrays and runtime-aware host callbacks against the interpr…
treeform Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
34 changes: 33 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest, windows-latest]
os:
- ubuntu-latest # x86-64 Linux, native backend
- ubuntu-24.04-arm # arm64 Linux, native backend
- macos-latest # arm64 macOS, native backend
- windows-latest # x86-64 Windows, native backend
# macOS is arm only here. Intel runners are not covered.
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v5
Expand Down Expand Up @@ -46,6 +51,33 @@ jobs:
run: nim r -d:fixedChecks tests/tests.nim
- name: Test C++ determinism
run: nim cpp -r -d:release tests/tests.nim
- name: Test the machine code encoders against the system assembler
run: |
nim r -d:release tests/test_arm64.nim
nim r -d:release tests/test_amd64.nim
- name: Test compiled programs against the interpreter
run: |
nim r -d:release tests/test_jit.nim
nim r -d:release tests/test_native.nim
nim r -d:danger tests/test_native.nim
nim r -d:fixedChecks tests/test_native.nim
- name: Run the whole suite as machine code
run: |
nim r -d:release -d:bassyNative tests/tests.nim
nim r -d:danger -d:bassyNative tests/tests.nim
nim r -d:fixedChecks -d:bassyNative tests/tests.nim
- name: Test that compiled programs cannot outrun the sandbox
run: |
nim r -d:release tests/test_jit_safety.nim
nim r -d:danger tests/test_jit_safety.nim
- name: Test the same scripts with the interpreter forced
run: nim r -d:release -d:bassyNoJit tests/test_jit.nim
- name: Render the BASIC raytracer and check cross-platform determinism
run: nim r -d:release tests/bench_raytracer.nim
- name: Run the BASIC text workload and check cross-platform determinism
run: nim r -d:release tests/bench_strings.nim
- name: Report native compilation speedups
run: nim r -d:release tests/bench_jit.nim
- name: Run examples
run: |
nim r examples/hello.nim
Expand Down
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,4 @@ nimcache
nimble.paths
nimble.develop
nimbledeps/
tests/raytracer.ppm
Loading
Loading