aboutsummaryrefslogtreecommitdiff
path: root/clang/lib
diff options
context:
space:
mode:
authorQiu Chaofan <qiucofan@cn.ibm.com>2020-11-10 10:52:13 +0800
committerQiu Chaofan <qiucofan@cn.ibm.com>2020-11-10 10:52:13 +0800
commit979a4d268a48c27d9c0dce642912bcf648614ef8 (patch)
treeabf4a662fece38f398715833d01ab2795c6c5ad8 /clang/lib
parent1cbf8e89b54de939420d53d7a528bec6fbaf0a55 (diff)
downloadllvm-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.h24
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__) */