Skip to content

Conversation

@pguyot
Copy link
Collaborator

@pguyot pguyot commented Oct 13, 2025

Continuation of #1900

Use a cache to remember tail calls that were already implemented and
replace further implementations of the same tail call with a jump to the
previous implementation.

Coverage shows that all cases are covered in libs/estdlib/src and libs/jit/src:

  • OP_RETURN: 50 misses, 1735 hits (97%)
  • OP_JUMP/OP_CALL_LAST/OP_CALL_ONLY: 656 misses, 389 hits (37%)
  • OP_CALL_LAST: 220 misses, 206 hits (48%)
  • OP_FUNC_INFO: 58 misses, 1619 hits (97%)

These changes are made under both the "Apache 2.0" and the "GNU Lesser General
Public License 2.1 or later" license terms (dual license).

SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later

@pguyot pguyot force-pushed the w42/factorize-tail-call-to-reduce-binary-size branch 2 times, most recently from 62813f7 to 1dc8c21 Compare October 14, 2025 06:53
@pguyot pguyot force-pushed the w42/factorize-tail-call-to-reduce-binary-size branch from 1dc8c21 to 89bf2d2 Compare October 14, 2025 19:51
@pguyot pguyot force-pushed the w42/factorize-tail-call-to-reduce-binary-size branch 2 times, most recently from 02fda84 to f99f1dc Compare October 19, 2025 15:14
Use a cache to remember tail calls that were already implemented and
replace further implementations of the same tail call with a jump to the
previous implementation.

Coverage shows that all cases are covered in libs/estdlib/src and libs/jit/src:

OP_RETURN: 50 misses, 1735 hits (97%)
OP_JUMP/OP_CALL_LAST/OP_CALL_ONLY: 656 misses, 389 hits (37%)
OP_CALL_LAST: 220 misses, 206 hits (48%)
OP_FUNC_INFO: 58 misses, 1619 hits (97%)

Signed-off-by: Paul Guyot <pguyot@kallisys.net>
@pguyot pguyot force-pushed the w42/factorize-tail-call-to-reduce-binary-size branch from f99f1dc to d7c14cc Compare October 25, 2025 16:07
@pguyot pguyot marked this pull request as ready for review October 25, 2025 16:07
@bettio bettio merged commit da726c2 into atomvm:main Oct 27, 2025
201 of 206 checks passed
@pguyot pguyot deleted the w42/factorize-tail-call-to-reduce-binary-size branch October 28, 2025 05:32
bettio added a commit that referenced this pull request Oct 31, 2025
…educe-binary-size

JIT (armv6m): use literal pool to reduce binary size

Continuation of:
- #1901

These changes are made under both the "Apache 2.0" and the "GNU Lesser General
Public License 2.1 or later" license terms (dual license).

SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
bettio added a commit that referenced this pull request Nov 6, 2025
Embedded JIT mode for Pico

Continuation of:
- #1829
- #1838
- #1881
- #1891
- #1893
- #1900
- #1901
- #1903
- #1907

Add the ability to perform just in time compilation directly on Raspberry Pi
Pico. Erlang bytecode is compiled to armv6m on the first run and directly
executed on subsequent runs. In this PR, the native code compilation does not
take advantage of being done on the device, it still generates position
independent code.

If Erlang modules include `Type` chunk, the same optimizations that happen on
the desktop with precompilation could be done on the Pico, however current
release (0.7.5) of [`packbeam`](https://github.com/atomvm/atomvm_packbeam)
prunes the `Type` chunk.

Just in time compilation on the Pico is achieved by:
- Adding a flush call after JIT is performed, which is noop on all platforms
except on armv6m where we flush the literal pool (normally a noop, though, as
the pool should have been flushed earlier).
- Updating avm API to fetch the last section named end.
- Adding a `jit_stream_flash` for RP2 platform and adding a cache native code
mechanism that rely on the avm end section on RP2 to find out where to flash
jit code (after the last end) and detect if avm were updated.

These changes are made under both the "Apache 2.0" and the "GNU Lesser General
Public License 2.1 or later" license terms (dual license).

SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
bettio added a commit that referenced this pull request Nov 7, 2025
JIT: Optimize memory usage by rewriting jump table immediately

Continuation of:
- #1900
- #1901
- #1903
- #1909

These changes are made under both the "Apache 2.0" and the "GNU Lesser General
Public License 2.1 or later" license terms (dual license).

SPDX-License-Identifier: Apache-2.0 OR LGPL-2.1-or-later
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants