forked from OSchip/llvm-project
parent
7afe343be5
commit
a3c5fbf54b
|
@ -676,4 +676,13 @@ BUILTIN(__builtin_ia32_vpcmov_256, "V4LLiV4LLiV4LLiV4LLi", "")
|
|||
|
||||
BUILTIN(__builtin_ia32_vpperm, "V16cV16cV16cV16c", "")
|
||||
|
||||
BUILTIN(__builtin_ia32_vprotb, "V16cV16cV16c", "")
|
||||
BUILTIN(__builtin_ia32_vprotw, "V8sV8sV8s", "")
|
||||
BUILTIN(__builtin_ia32_vprotd, "V4iV4iV4i", "")
|
||||
BUILTIN(__builtin_ia32_vprotq, "V2LLiV2LLiV2LLi", "")
|
||||
BUILTIN(__builtin_ia32_vprotbi, "V16cV16cIc", "")
|
||||
BUILTIN(__builtin_ia32_vprotwi, "V8sV8sIc", "")
|
||||
BUILTIN(__builtin_ia32_vprotdi, "V4iV4iIc", "")
|
||||
BUILTIN(__builtin_ia32_vprotqi, "V2LLiV2LLiIc", "")
|
||||
|
||||
#undef BUILTIN
|
||||
|
|
|
@ -214,6 +214,46 @@ _mm_perm_epi8(__m128i __A, __m128i __B, __m128i __C)
|
|||
return (__m128i)__builtin_ia32_vpperm((__v16qi)__A, (__v16qi)__B, (__v16qi)__C);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_rot_epi8(__m128i __A, __m128 __B)
|
||||
{
|
||||
return (__m128i)__builtin_ia32_vprotb((__v16qi)__A, (__v16qi)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_rot_epi16(__m128i __A, __m128 __B)
|
||||
{
|
||||
return (__m128i)__builtin_ia32_vprotw((__v8hi)__A, (__v8hi)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_rot_epi32(__m128i __A, __m128 __B)
|
||||
{
|
||||
return (__m128i)__builtin_ia32_vprotd((__v4si)__A, (__v4si)__B);
|
||||
}
|
||||
|
||||
static __inline__ __m128i __attribute__((__always_inline__, __nodebug__))
|
||||
_mm_rot_epi64(__m128i __A, __m128 __B)
|
||||
{
|
||||
return (__m128i)__builtin_ia32_vprotq((__v2di)__A, (__v2di)__B);
|
||||
}
|
||||
|
||||
#define _mm_roti_epi8(A, N) __extension__ ({ \
|
||||
__m128i __A = (A); \
|
||||
(__m128i)__builtin_ia32_vprotbi((__v16qi)__A, (N)); })
|
||||
|
||||
#define _mm_roti_epi16(A, N) __extension__ ({ \
|
||||
__m128i __A = (A); \
|
||||
(__m128i)__builtin_ia32_vprotwi((__v8hi)__A, (N)); })
|
||||
|
||||
#define _mm_roti_epi32(A, N) __extension__ ({ \
|
||||
__m128i __A = (A); \
|
||||
(__m128i)__builtin_ia32_vprotdi((__v4si)__A, (N)); })
|
||||
|
||||
#define _mm_roti_epi64(A, N) __extension__ ({ \
|
||||
__m128i __A = (A); \
|
||||
(__m128i)__builtin_ia32_vprotqi((__v2di)__A, (N)); })
|
||||
|
||||
#endif /* __XOP__ */
|
||||
|
||||
#endif /* __XOPINTRIN_H */
|
||||
|
|
|
@ -154,3 +154,43 @@ __m128i test_mm_perm_epi8(__m128i a, __m128i b, __m128i c) {
|
|||
// CHECK: @llvm.x86.xop.vpperm
|
||||
return _mm_perm_epi8(a, b, c);
|
||||
}
|
||||
|
||||
__m128i test_mm_rot_epi8(__m128i a, __m128i b) {
|
||||
// CHECK: @llvm.x86.xop.vprotb
|
||||
return _mm_rot_epi8(a, b);
|
||||
}
|
||||
|
||||
__m128i test_mm_rot_epi16(__m128i a, __m128i b) {
|
||||
// CHECK: @llvm.x86.xop.vprotw
|
||||
return _mm_rot_epi16(a, b);
|
||||
}
|
||||
|
||||
__m128i test_mm_rot_epi32(__m128i a, __m128i b) {
|
||||
// CHECK: @llvm.x86.xop.vprotd
|
||||
return _mm_rot_epi32(a, b);
|
||||
}
|
||||
|
||||
__m128i test_mm_rot_epi64(__m128i a, __m128i b) {
|
||||
// CHECK: @llvm.x86.xop.vprotq
|
||||
return _mm_rot_epi64(a, b);
|
||||
}
|
||||
|
||||
__m128i test_mm_roti_epi8(__m128i a) {
|
||||
// CHECK: @llvm.x86.xop.vprotbi
|
||||
return _mm_roti_epi8(a, 1);
|
||||
}
|
||||
|
||||
__m128i test_mm_roti_epi16(__m128i a) {
|
||||
// CHECK: @llvm.x86.xop.vprotwi
|
||||
return _mm_roti_epi16(a, 50);
|
||||
}
|
||||
|
||||
__m128i test_mm_roti_epi32(__m128i a) {
|
||||
// CHECK: @llvm.x86.xop.vprotdi
|
||||
return _mm_roti_epi32(a, -30);
|
||||
}
|
||||
|
||||
__m128i test_mm_roti_epi64(__m128i a) {
|
||||
// CHECK: @llvm.x86.xop.vprotqi
|
||||
return _mm_roti_epi64(a, 100);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue