-
Notifications
You must be signed in to change notification settings - Fork 4.7k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[Mono] Pass Vector128 in SIMD registers, when LLVM is enabled #68991
Conversation
I couldn't figure out the best area label to add to this PR. If you have write-permissions please help me learn by adding exactly one area label. |
Always or only when it is required by the ABI? For example, |
@tannergooding It will always using SIMD register. |
It might be good to ensure that the relevant interop tests all pass with this feature. There are a number of tests under https://github.com/dotnet/runtime/tree/main/src/tests/Interop/PInvoke/Generics but I believe they aren't being run for any platforms since RyuJIT currently blocks P/Invoke for these types. |
/azp run runtime-extra-platforms |
Azure Pipelines successfully started running 1 pipeline(s). |
Test failures on CI are irrelevant to this PR.
|
This PR only handles the managed-to-managed calls. To enable those PInvoke tests, more work is needed to make sure the ABI/calling conventions are handled correctly, as @lambdageek mentioned earlier. |
/azp run runtime-extra-platforms |
Azure Pipelines successfully started running 1 pipeline(s). |
Test failures were irrelevant to this PR. |
This PR enables passing Vector128 in SIMD registers between managed function calls for both Amd64 and Arm64, when LLVM is enabled.
Contributes to #60068
With this PR, the unnecessary move has been removed from both the caller and the callee. Here I am using caller function in the same example as #60068 (comment) to demonstrate the difference.
AMD64
Before
After
ARM64
Before
After