ILP32-A64

AArch64 ILP32 for embedded Linux: up to 30% less memory at nearly the same speed.

AArch64 ILP32 runs 64-bit Arm code with 32-bit int, long and pointers. It keeps the full AArch64 instruction set and runs on cores that no longer support 32-bit Arm, while pointers and data structures take less memory.

Measured

On a Cortex-A35 board, CPython built for ILP32 uses up to 30% less memory than the same build for LP64, and runs a few percent slower. On OpenWrt One hardware, with a 150,000-domain adblock list, LuCI and Python, the ILP32 user space uses 25% less memory, leaving 8.6 MB more free.

Projects

linux-ilp32Linux 6.12 stable with the ILP32 ABI
glibc-ilp32glibc 2.41 port, 64-bit time_t
musl-ilp32musl 1.2.5 port
llvm-ilp32clang 22 patches, interoperable with GCC
openwrt-ilp32OpenWrt 25.12 with an ILP32 user land
debian-ilp32ILP32 packages for Debian 13 (unofficial)
test-ilp32Toolchains, tests and a QEMU harness

Get involved

Questions, ideas and test results from your own boards are welcome in Discussions. Source and issues: github.com/ilp32-a64.