dotnet / runtime

.NET is a cross-platform runtime for cloud, mobile, desktop, and IoT apps.
https://docs.microsoft.com/dotnet/core/
MIT License
14.91k stars 4.64k forks source link

JIT: ARM64 - Generate constructive forms of ExtractVector and Splice #103850

Open TIHan opened 2 months ago

TIHan commented 2 months ago

See PRs:

ExtractVector - https://github.com/dotnet/runtime/pull/103567 Splice - https://github.com/dotnet/runtime/pull/103567

So the summary docs here only covers the "Destructive" form and not the "Constructive form" as seen in https://docsmirror.github.io/A64/2023-06/ext_z_zi.html

Regarding using a constructive variant. Not sure how to mark explicit op2 and op3 as needing consecutive registers. The current intrinsics with consecutive registers have a tuple in a single op. Here we have two separate args in the API.

I might have to spend some time in figuring out how to make sure that when op2 gets register Zn, force op3 to get Zn+1 given that they are 2 different operands. I think for simplicity, lets add just the destructive version of SPLICE and open an issue to add constructive version post .NET 9.

dotnet-policy-service[bot] commented 2 months ago

Tagging subscribers to this area: @dotnet/area-system-runtime-intrinsics See info in area-owners.md if you want to be subscribed.