-
Notifications
You must be signed in to change notification settings - Fork 4.8k
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
Arm64: Add xtn and xtn2 intrinsics codegen, api and tests. #33108
Arm64: Add xtn and xtn2 intrinsics codegen, api and tests. #33108
Conversation
Note regarding the This serves as a reminder for when your PR is modifying a ref *.cs file and adding/modifying public APIs, to 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. |
af54747
to
3fb7571
Compare
Those test failures don't seem to have anything to do with the intrinsics.. before I rebase did you have any comments @tannergooding or @echesakovMSFT ? |
...braries/System.Runtime.Intrinsics.Experimental/ref/System.Runtime.Intrinsics.Experimental.cs
Outdated
Show resolved
Hide resolved
src/coreclr/tests/src/JIT/HardwareIntrinsics/Arm/Shared/GenerateTests.csx
Outdated
Show resolved
Hide resolved
src/libraries/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.cs
Outdated
Show resolved
Hide resolved
@tannergooding @echesakovMSFT So when I try to do it with just
i.e. no special treatment it just crashes
Since the intrinsics lookup seems to fail... from what I remember
fails which is why I added the The problem is that the intrinsics doesn't exist for a type of |
Are there any issues with encoding the instruction based on the return type, rather than the input type? Is the input type size needed for importation or codegen elsewhere? |
I think that should be ok. I'll give that a try. It would make the narrowing and widening intrinsics a bit odd in the intrinsics list though, but I guess a comment could fix that :) |
I think the way JIT emitter implements In my opinion, the size and opts arguments that we pass in runtime/src/coreclr/src/jit/codegenarm64.cpp Lines 4332 to 4355 in db23750
in order to overcome this behavior. I propose we fix the emitter such that Then we do the following:
|
I don't think which matters as long as we are consistent overall. For instructions which have the same sized inputs/outputs, it doesn't matter. The default behavior on x86 was that the type came from the destination and you explicitly opted in using the first/second arg only when necessary (basically just when returning a non-SIMD type or |
Can we not just detect this and handle it more generally via some flag (like if it is marked RMW)? We have a number of intrinsics like this and they will all need the same handling. We have similar logic shared across x86 where we will do the |
Yes, this was a plan. As I mentioned in #33889 (comment) I am changing NoRMW to HasRMW flag on Arm64 and I planned to add automatic handling of RMW intrinsics in codegen at the same time. However, I was not sure whether that PR will be up before Tamar finishes this one so I asked to manually handle this case. |
3fb7571
to
f733248
Compare
Looks like the two failures are infrastructure related |
...ies/System.Private.CoreLib/src/System/Runtime/Intrinsics/Arm/AdvSimd.PlatformNotSupported.cs
Outdated
Show resolved
Hide resolved
f733248
to
323a277
Compare
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.
LGTM. Thank you Tamar!
Hi All,
This adds the Extract and Narrow intrinsics.
The special codegen is because I couldn't get it
to correctly determine the right
size
for the intrinsic.If there's a simpler way to do this do let me know.
/CC @tannergooding @CarolEidt @echesakovMSFT
Implements parts of #31324
Thanks,
Tamar