Add handling for variadic functions on arm64 #50
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.
osx-arm64 handles variadic functions differently than x86. cffi doesn't appear to handle this, so a bit of a hack is used to trick cffi into providing varargs in the expected manner for arm64.
https://developer.apple.com/documentation/xcode/writing-arm64-code-for-apple-platforms
https://devblogs.microsoft.com/oldnewthing/20220823-00/?p=107041
The trick is to cast varargs as
char *
after interpreting float/double as ints in a bitwise manner.This was a result of trial and error after reading the above links. I don't fully understand the spec
and if this covers all use cases, but it passes the tests in this repo and allows python-graphblas
to pass all of its tests on an M1 mac.