This repository is an attempt at adding SIMD to Go through compiler intrinsics.
git submodule update --init --recursive
pushd go && ../build.sh && popd
go/bin/go run [-tags neon|sse2|sse4.1|ssse3] ./examples/{NAME}.go
- patches -> patching existing files
- overlays -> new dirs+files
legend:
- 🚫 not available
- ✅ implemented
- ❌ not implemented (maybe unavailable)
Intrinsic | NEON | SSE2 | SSE4.1 | SSSE3 |
---|---|---|---|---|
Add8x16 |
✅ | ✅ | ✅ | 🚫 |
AddU8x16 |
✅ | ✅ | ✅ | 🚫 |
Sub8x16 |
✅ | ✅ | ✅ | 🚫 |
SubU8x16 |
✅ | ✅ | ✅ | 🚫 |
SaturatingAdd8x16 |
✅ | ✅ | ✅ | 🚫 |
SaturatingAddU8x16 |
✅ | ✅ | ✅ | 🚫 |
SaturatingSub8x16 |
✅ | ✅ | ✅ | 🚫 |
SaturatingSubU8x16 |
✅ | ✅ | ✅ | 🚫 |
And8x16 |
✅ | ✅ | ✅ | 🚫 |
AndU8x16 |
✅ | ✅ | ✅ | 🚫 |
And16x8 |
❌ | ✅ | ✅ | 🚫 |
AndU16x8 |
❌ | ✅ | ✅ | 🚫 |
Or8x16 |
✅ | ✅ | ✅ | 🚫 |
OrU8x16 |
✅ | ✅ | ✅ | 🚫 |
Xor8x16 |
✅ | ✅ | ✅ | 🚫 |
Xor8x16 |
✅ | ✅ | ✅ | 🚫 |
ShiftLeftU8x16 |
✅ | 🚫 | 🚫 | 🚫 |
ShiftLeft8x16 |
✅ | 🚫 | 🚫 | 🚫 |
ShiftRightU8x16 |
✅ | 🚫 | 🚫 | 🚫 |
ShiftRight8x16 |
✅ | 🚫 | 🚫 | 🚫 |
ShiftRightU16x8 |
❌ | ✅ | ✅ | 🚫 |
ShiftRight16x8 |
❌ | ✅ | ✅ | 🚫 |
Max8x16 |
✅ | 🚫 | ✅ | 🚫 |
MaxU8x16 |
✅ | ✅ | ✅ | 🚫 |
Min8x16 |
✅ | 🚫 | ✅ | 🚫 |
MinU8x16 |
✅ | ✅ | ✅ | 🚫 |
ReduceMax8x16 |
✅ | 🚫 | 🚫 | 🚫 |
ReduceMaxU8x16 |
✅ | 🚫 | 🚫 | 🚫 |
ReduceMin8x16 |
✅ | 🚫 | 🚫 | 🚫 |
ReduceMinU8x16 |
✅ | ❌ | ❌ | 🚫 |
ExtractU8x16 |
✅ | ❌ | ❌ | ✅ |
Extract8x16 |
✅ | ❌ | ❌ | ✅ |
LookupU8x16 |
✅ | ❌ | ❌ | ✅ |
Lookup8x16 |
✅ | ❌ | ❌ | ✅ |
AllZerosU8x16 |
❌ | ❌ | ✅ | 🚫 |
AllZeros8x16 |
❌ | ❌ | ✅ | 🚫 |
MovMaskByteU8x16 |
🚫 | ✅ | ✅ | 🚫 |
MovMaskByte8x16 |
🚫 | ✅ | ✅ | 🚫 |
SplatU8x16 |
✅ | ❌ | ❌ | 🚫 |
Splat8x16 |
✅ | ❌ | ❌ | 🚫 |