summaryrefslogtreecommitdiffstats
path: root/clang/lib/Headers/smmintrin.h
diff options
context:
space:
mode:
Diffstat (limited to 'clang/lib/Headers/smmintrin.h')
-rw-r--r--clang/lib/Headers/smmintrin.h28
1 files changed, 10 insertions, 18 deletions
diff --git a/clang/lib/Headers/smmintrin.h b/clang/lib/Headers/smmintrin.h
index 7a18201eced..90ba9970cdb 100644
--- a/clang/lib/Headers/smmintrin.h
+++ b/clang/lib/Headers/smmintrin.h
@@ -286,34 +286,26 @@ _mm_cmpeq_epi64(__m128i __V1, __m128i __V2)
static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvtepi8_epi16(__m128i __V)
{
- /* We need a local definitively signed typedef similar to __v16qi even in the
- * presence of __UNSIGNED_CHAR__.
- * FIXME: __v16qi should almost certainly be definitively signed.
- */
- typedef signed char __signed_v16qi __attribute__((__vector_size__(16)));
- return (__m128i)__builtin_convertvector(__builtin_shufflevector((__signed_v16qi)__V, (__signed_v16qi)__V, 0, 1, 2, 3, 4, 5, 6, 7), __v8hi);
+ /* This function always performs a signed extension, but __v16qi is a char
+ which may be signed or unsigned, so use __v16qs. */
+ return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1, 2, 3, 4, 5, 6, 7), __v8hi);
}
static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvtepi8_epi32(__m128i __V)
{
- /* We need a local definitively signed typedef similar to __v16qi even in the
- * presence of __UNSIGNED_CHAR__.
- * FIXME: __v16qi should almost certainly be definitively signed.
- */
- typedef signed char __signed_v16qi __attribute__((__vector_size__(16)));
- return (__m128i)__builtin_convertvector(__builtin_shufflevector((__signed_v16qi)__V, (__signed_v16qi)__V, 0, 1, 2, 3), __v4si);
+ /* This function always performs a signed extension, but __v16qi is a char
+ which may be signed or unsigned, so use __v16qs. */
+ return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1, 2, 3), __v4si);
}
static __inline__ __m128i __DEFAULT_FN_ATTRS
_mm_cvtepi8_epi64(__m128i __V)
{
- /* We need a local definitively signed typedef similar to __v16qi even in the
- * presence of __UNSIGNED_CHAR__.
- * FIXME: __v16qi should almost certainly be definitively signed.
- */
- typedef signed char __signed_v16qi __attribute__((__vector_size__(16)));
- return (__m128i)__builtin_convertvector(__builtin_shufflevector((__signed_v16qi)__V, (__signed_v16qi)__V, 0, 1), __v2di);
+ /* This function always performs a signed extension, but __v16qi is a char
+ which may be signed or unsigned, so use __v16qs. */
+ typedef signed char __v16qs __attribute__((__vector_size__(16)));
+ return (__m128i)__builtin_convertvector(__builtin_shufflevector((__v16qs)__V, (__v16qs)__V, 0, 1), __v2di);
}
static __inline__ __m128i __DEFAULT_FN_ATTRS
OpenPOWER on IntegriCloud