Files
tinygo/builder
Nia Waldvogel 11c2b76e29 runtime (gc.blocks): move objHeader to the end
This moves the objHeader from before an object body to after it.
On 32-bit systems with 16-byte alignment requirements (x86, ARM, RISC-V), we previously padded the header to a whole block.
This wastes up to 12 bytes, as on -gc=conservative the header is a single pointer.
With this change, no padding is required (beyond that from rounding the size up).

The "head" block in the metadata was moved to the end of the range to match the header location.
This changed the block loop directions throughout the GC logic.
The bit hacks used by sweep no longer work because there is no equivalent of addition that carries downwards.
However it is now possible to merge the sweep and free range list rebuild passes because their loop directions match.

There are two other places where we rebuilt the free ranges list: when initializing or growing the heap.
The former can be easily replaced with a single hardcoded range containing the entire heap.
In the latter case, I opted to only add the new space to the existing list.
These replacements allowed me to fully remove the buildFreeRanges function.
2026-06-16 13:37:35 -04:00
..
2025-10-03 15:46:25 +02:00
2025-11-24 12:11:47 +01:00
2025-06-13 14:42:23 +02:00
2025-09-17 05:28:06 -04:00
2026-04-17 10:33:07 +02:00
2023-02-26 19:22:10 +01:00
2025-09-17 05:28:06 -04:00
2026-05-28 19:32:08 +02:00
2025-11-24 12:11:47 +01:00
2024-09-24 17:42:30 +01:00
2025-06-13 14:42:23 +02:00
2025-06-13 14:42:23 +02:00
2025-06-13 14:42:23 +02:00
2024-12-19 15:08:37 +01:00
2025-06-13 14:42:23 +02:00
2025-06-13 14:42:23 +02:00