diff options
author | Qiu Chaofan <qiucofan@cn.ibm.com> | 2020-11-10 10:52:13 +0800 |
---|---|---|
committer | Qiu Chaofan <qiucofan@cn.ibm.com> | 2020-11-10 10:52:13 +0800 |
commit | 979a4d268a48c27d9c0dce642912bcf648614ef8 (patch) | |
tree | abf4a662fece38f398715833d01ab2795c6c5ad8 /clang/lib | |
parent | 1cbf8e89b54de939420d53d7a528bec6fbaf0a55 (diff) | |
download | llvm-979a4d268a48c27d9c0dce642912bcf648614ef8.zip llvm-979a4d268a48c27d9c0dce642912bcf648614ef8.tar.gz llvm-979a4d268a48c27d9c0dce642912bcf648614ef8.tar.bz2 |
[PowerPC] [Clang] Port SSE4.1-compatible insert intrinsics
This patch adds three intrinsics compatible to x86's SSE 4.1 on PowerPC
target, with tests:
- _mm_insert_epi8
- _mm_insert_epi32
- _mm_insert_epi64
The intrinsics implementation is contributed by Paul Clarke.
Reviewed By: jsji
Differential Revision: https://reviews.llvm.org/D89242
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Headers/ppc_wrappers/smmintrin.h | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/clang/lib/Headers/ppc_wrappers/smmintrin.h b/clang/lib/Headers/ppc_wrappers/smmintrin.h index 56ef6ba..64f0c76 100644 --- a/clang/lib/Headers/ppc_wrappers/smmintrin.h +++ b/clang/lib/Headers/ppc_wrappers/smmintrin.h @@ -78,6 +78,30 @@ extern __inline __m128i return (__m128i)vec_sel((__v16qu)__A, (__v16qu)__B, __lmask); } +extern __inline __m128i + __attribute__((__gnu_inline__, __always_inline__, __artificial__)) + _mm_insert_epi8(__m128i const __A, int const __D, int const __N) { + __v16qi result = (__v16qi)__A; + result[__N & 0xf] = __D; + return (__m128i)result; +} + +extern __inline __m128i + __attribute__((__gnu_inline__, __always_inline__, __artificial__)) + _mm_insert_epi32(__m128i const __A, int const __D, int const __N) { + __v4si result = (__v4si)__A; + result[__N & 3] = __D; + return (__m128i)result; +} + +extern __inline __m128i + __attribute__((__gnu_inline__, __always_inline__, __artificial__)) + _mm_insert_epi64(__m128i const __A, long long const __D, int const __N) { + __v2di result = (__v2di)__A; + result[__N & 1] = __D; + return (__m128i)result; +} + #else #include_next <smmintrin.h> #endif /* defined(__linux__) && defined(__ppc64__) */ |