Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Description
Switch the compiler to use relative jumps instead of absolute jumps.
relocate_control_flow
is now removed. It used to move basic blocks around in case absolute addresses crossed the easily addressable boundary. The code movement can then avoid having to load the address to a register and using indirect jumps. This is unlikely to happen with relative jumps. But if it does, the existing algorithm wouldn't work anyway. So we can add a new one when required later.$pc
to save the return address for the callee. This is a bit inefficient as it involves 3 extra computations:$$reta = ($pc - $is) / 4 + offset_to_return_point
. We could change this to the following: Since we already have a common return point for every function, compute the relative offset from that point to the callee return point statically and use that. We don't have the infrastructure to do that right now, but it shouldn't be too difficult an extension.Fixes #4443