[SOL] Optimize call convention in SBFv2 #94
Merged
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.
Problem
SBFv2 introduces dynamic frame sizes without stack gaps, so that we know during compile time the frame size for a function. As a consequence, the call convention inherited from SBFv1 in #84 becomes inefficient.
If there are more than five arguments in a function call in the old convention, we do:
mov r5, r10
We are clobbering R5 unnecessarily in this scheme.
Solution
This PR introduces a new call convention for SBFv2, leveraging the dynamic stack frames.
In the new convention, we do the following:
In this case, we free up one general purpose register and reduce one load and one store from function calls.