diff options
author | Quentin Carbonneaux <quentin@c9x.me> | 2021-12-05 21:25:00 +0100 |
---|---|---|
committer | Quentin Carbonneaux <quentin@c9x.me> | 2021-12-05 22:06:23 +0100 |
commit | 367c8215d99054892740ad74c690b106c45ebf60 (patch) | |
tree | 3ef0d974a740524e684b73ea26c59cafb4ca9416 /rega.c | |
parent | bf153b359e9ce3ebef9bca899eb7ed5bd9045c11 (diff) | |
download | roux-367c8215d99054892740ad74c690b106c45ebf60.tar.gz |
arm64: fix slots with offset >32k
When slots are used with a large offset, the emitter generates invalid assembly code. That is caught later on by the assembler, but it prevents compilation of programs with large stack frames. When a slot offset is too large to be expressed as a constant offset to x29 (the frame pointer), emitins() inserts a late Oaddr instruction to x16 and replaces the large slot reference with x16. This change also gave me the opportunity to refactor the save/restore logic for callee-save registers. This fixes the following Hare issue: https://todo.sr.ht/~sircmpwn/hare/387
Diffstat (limited to 'rega.c')
0 files changed, 0 insertions, 0 deletions