Skip to content

[mono] Implement Sse2.AddSaturate using LLVM#18793

Merged
akoeplinger merged 1 commit intomono:masterfrom
monojenkins:sync-pr-32116-from-runtime
Feb 11, 2020
Merged

[mono] Implement Sse2.AddSaturate using LLVM#18793
akoeplinger merged 1 commit intomono:masterfrom
monojenkins:sync-pr-32116-from-runtime

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`
@monojenkins monojenkins force-pushed the sync-pr-32116-from-runtime branch from 4179ed4 to eb9d9cc Compare February 11, 2020 17:34
@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.

4 participants