Skip to content
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] Implement Sse2.AddSaturate using LLVM #18793

Merged
merged 1 commit into from Feb 11, 2020

Conversation

monojenkins
Copy link
Contributor

!! This PR is a copy of dotnet/runtime#32116, please do not edit or review it in this repo !!
!! Merge the PR only after the original PR is merged !!



Mono currently supports a limited subset of Sse1-Sse42 intrinsics used only by CoreLib internally. So once a new API is used to optimize things internally we also have to implement it in Mono. So it recently happened in dotnet/runtime#32036 (Sse2.AddSaturate was used for the first time).

So this PR implements it for mono using named LLVM intrinsics. It turns out it's different for LLVM6 we currently based on and LLVM9 (we plan to migrate to soon).

it emits

%result = call <8 x i16> @llvm.x86.sse2.paddus.b(<16 x i8> %left, <16 x i8> %right)

which is then emitted as vpaddusw

Mono currently supports a limited subset of **Sse1**-**Sse42** intrinsics used only by CoreLib internally. So once a new API is used to optimize things there we also have to implement it in Mono. So it recently happened in dotnet/runtime#32036 (`Sse2.AddSaturate` was used for the first time).

So this PR implements it for mono (with all Sse2 overloads) using named LLVM intrinsics. It turns out it's different between LLVM6 (we currently based on) and LLVM9 (we plan to migrate to soon).

for `Vector128<byte>` overload it emits
```llvm
%result = call <8 x i16> @llvm.x86.sse2.paddus.b(<16 x i8> %left, <16 x i8> %right)
```
which is then emitted as `vpaddusw`
@EgorBo
Copy link
Member

EgorBo commented Feb 11, 2020

@monojenkins build failed

@EgorBo
Copy link
Member

EgorBo commented Feb 11, 2020

/azp run

@azure-pipelines
Copy link

Azure Pipelines successfully started running 2 pipeline(s).

@akoeplinger akoeplinger merged commit fc75795 into mono:master Feb 11, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

4 participants