-
Notifications
You must be signed in to change notification settings - Fork 5.2k
UnzipEven() and Count16BitElements() intrinsics for Arm64 SVE #94765
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
Conversation
Many of the files touched here are autogenerated via InstructionSetDesc.txt
|
Note regarding the This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, please make sure the API implementation in the src *.cs file is documented with triple slash comments, so the PR reviewers can sign off that change. |
|
Tagging subscribers to this area: @JulieLeeMSFT, @jakobbotsch Issue DetailsMany of the files touched here are autogenerated via InstructionSetDesc.txt.
|
|
Currently includes all of @kunalspathak's #94529. I don't think it's possible to directly base a pull request on top of another pull request. All of my code starts from ceccafa Not sure if the Arm64_Sve parts are required or if it should only be Sve. I think we want the readytorun/crossgen changes too (but it should be disabled for them?) When running the included test, it fails with the following error: This is because This PR already touches quite a few files, so I was thinking any further codegen changes would go in a separate PR. |
|
I had to do some changes to allow for API functions that don't use any vector registers. Happy to pull this part out of the PR into a new one. |
IMO, lets have a separate PR for these changes and that way, this PR will just be adding the |
Done - #94791 |
BruceForstall
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Hopefully we can start getting some of the "base" PRs merged soon so we'll only be looking at incremental diffs...
| break; | ||
|
|
||
| case INS_sve_uzp1: | ||
| // TODO: This could also be SVE_BR_3B or SVE_CI_3A |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
We should standardize on TODO-SVE: for marking all SVE-related "to-do" work items.
I agree. I think we should definitely get in #94791 (for InstructionSet related changes). I am under the impression that in order to merge other example PRs like this one or #94529, we need to have register support, so we can validate the encoding. On the contrary, we could start merging the instructions in (probably commented code or some different way) and once register allocation changes are done and we have a tool to validate encoding, we can enable those instructions. Thoughts? |
I wonder how many regalloc changes we really need to be able to make progress, assuming we don't need to generate predicate registers. Presumably we'd still use Vn registers, and they're encoded just like Zn registers. (Maybe the predicate register encoding could always assume predicate register zero, say, or use a Vn register temporarily instead of a new Pg register.) |
Yes, for now, the easier change to do is add |
| return "VectorT128"; | ||
| case InstructionSet_Rcpc2 : | ||
| return "Rcpc2"; | ||
| case InstructionSet_Sve : |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Curious, why are there two instruction sets here? For the other ones it was because of AArch32, but there's no AArch32 SVE.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
AIUI, we need both to matching the existing structure. All the functions will be in Sve and Sve.Arm64 will be empty.
|
|
||
| public sealed unsafe class SveTest__SveTest | ||
| { | ||
| public bool IsSupported => AdvSimd.IsSupported; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
| public bool IsSupported => AdvSimd.IsSupported; | |
| public bool IsSupported => Sve.IsSupported; |
?
Many of the files touched here are autogenerated via InstructionSetDesc.txt.