summaryrefslogtreecommitdiffstats
path: root/clang/lib
diff options
context:
space:
mode:
authorSimon Pilgrim <llvm-dev@redking.me.uk>2016-05-21 21:14:35 +0000
committerSimon Pilgrim <llvm-dev@redking.me.uk>2016-05-21 21:14:35 +0000
commit28666ce778454e17c852d38a7af4d4c07224bd2d (patch)
treefd49d172ef64a39fc2d39377157c13cdf253f8ab /clang/lib
parent56def258e33a1e22d3284bd9898507cebd36bad8 (diff)
downloadbcm5719-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.h10
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__
OpenPOWER on IntegriCloud