diff options
| author | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-05-21 21:14:35 +0000 |
|---|---|---|
| committer | Simon Pilgrim <llvm-dev@redking.me.uk> | 2016-05-21 21:14:35 +0000 |
| commit | 28666ce778454e17c852d38a7af4d4c07224bd2d (patch) | |
| tree | fd49d172ef64a39fc2d39377157c13cdf253f8ab /clang/lib | |
| parent | 56def258e33a1e22d3284bd9898507cebd36bad8 (diff) | |
| download | bcm5719-llvm-28666ce778454e17c852d38a7af4d4c07224bd2d.tar.gz bcm5719-llvm-28666ce778454e17c852d38a7af4d4c07224bd2d.zip | |
[X86][AVX] Ensure zero-extension of _mm256_extract_epi8 and _mm256_extract_epi16
Ensure _mm256_extract_epi8 and _mm256_extract_epi16 zero extend their i8/i16 result to i32. This matches _mm_extract_epi8 and _mm_extract_epi16.
Fix for PR27594
Differential Revision: http://reviews.llvm.org/D20468
llvm-svn: 270330
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Headers/avxintrin.h | 10 |
1 files changed, 5 insertions, 5 deletions
diff --git a/clang/lib/Headers/avxintrin.h b/clang/lib/Headers/avxintrin.h index 20e9ef4e576..a71bd7a9934 100644 --- a/clang/lib/Headers/avxintrin.h +++ b/clang/lib/Headers/avxintrin.h @@ -1875,13 +1875,13 @@ _mm256_extract_epi32(__m256i __a, const int __imm) /// \param __imm /// An immediate integer operand with bits [3:0] determining which vector /// element is extracted and returned. -/// \returns A 32-bit integer containing the extracted 16 bits of extended +/// \returns A 32-bit integer containing the extracted 16 bits of zero extended /// packed data. static __inline int __DEFAULT_FN_ATTRS _mm256_extract_epi16(__m256i __a, const int __imm) { __v16hi __b = (__v16hi)__a; - return __b[__imm & 15]; + return (unsigned short)__b[__imm & 15]; } /// \brief Takes a [32 x i8] vector and returns the vector element value @@ -1897,13 +1897,13 @@ _mm256_extract_epi16(__m256i __a, const int __imm) /// \param __imm /// An immediate integer operand with bits [4:0] determining which vector /// element is extracted and returned. -/// \returns A 32-bit integer containing the extracted 8 bits of extended packed -/// data. +/// \returns A 32-bit integer containing the extracted 8 bits of zero extended +/// packed data. static __inline int __DEFAULT_FN_ATTRS _mm256_extract_epi8(__m256i __a, const int __imm) { __v32qi __b = (__v32qi)__a; - return __b[__imm & 31]; + return (unsigned char)__b[__imm & 31]; } #ifdef __x86_64__ |

