Commit 391b06b1 authored by makise-homura's avatar makise-homura Committed by Evan Nemerson

e2k, ppc: Make shifts unsigned

parent 5c2edbfc
...@@ -914,4 +914,14 @@ HEDLEY_DIAGNOSTIC_POP ...@@ -914,4 +914,14 @@ HEDLEY_DIAGNOSTIC_POP
# define SIMDE_BUG_IGNORE_SIGN_CONVERSION(expr) (expr) # define SIMDE_BUG_IGNORE_SIGN_CONVERSION(expr) (expr)
#endif #endif
/* Usually the shift count is signed (for example, NEON or SSE).
* OTOH, unsigned is good for PPC (vec_srl uses unsigned), and the only option for E2K.
* Further info: https://github.com/simd-everywhere/simde/pull/700
*/
#if defined(SIMDE_ARCH_E2K) || defined(SIMDE_ARCH_POWER)
#define SIMDE_CAST_VECTOR_SHIFT_COUNT(width, value) HEDLEY_STATIC_CAST(uint##width##_t, (value))
#else
#define SIMDE_CAST_VECTOR_SHIFT_COUNT(width, value) HEDLEY_STATIC_CAST(int##width##_t, (value))
#endif
#endif /* !defined(SIMDE_COMMON_H) */ #endif /* !defined(SIMDE_COMMON_H) */
...@@ -4716,7 +4716,7 @@ simde_mm256_srl_epi16 (simde__m256i a, simde__m128i count) { ...@@ -4716,7 +4716,7 @@ simde_mm256_srl_epi16 (simde__m256i a, simde__m128i count) {
uint64_t shift = HEDLEY_STATIC_CAST(uint64_t , (count_.i64[0] > 16 ? 16 : count_.i64[0])); uint64_t shift = HEDLEY_STATIC_CAST(uint64_t , (count_.i64[0] > 16 ? 16 : count_.i64[0]));
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u16 = a_.u16 >> HEDLEY_STATIC_CAST(int16_t, shift); r_.u16 = a_.u16 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(16, shift);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) {
...@@ -4753,7 +4753,7 @@ simde_mm256_srl_epi32 (simde__m256i a, simde__m128i count) { ...@@ -4753,7 +4753,7 @@ simde_mm256_srl_epi32 (simde__m256i a, simde__m128i count) {
uint64_t shift = HEDLEY_STATIC_CAST(uint64_t , (count_.i64[0] > 32 ? 32 : count_.i64[0])); uint64_t shift = HEDLEY_STATIC_CAST(uint64_t , (count_.i64[0] > 32 ? 32 : count_.i64[0]));
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u32 = a_.u32 >> HEDLEY_STATIC_CAST(int32_t, shift); r_.u32 = a_.u32 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(32, shift);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) {
...@@ -4790,7 +4790,7 @@ simde_mm256_srl_epi64 (simde__m256i a, simde__m128i count) { ...@@ -4790,7 +4790,7 @@ simde_mm256_srl_epi64 (simde__m256i a, simde__m128i count) {
uint64_t shift = HEDLEY_STATIC_CAST(uint64_t , (count_.i64[0] > 64 ? 64 : count_.i64[0])); uint64_t shift = HEDLEY_STATIC_CAST(uint64_t , (count_.i64[0] > 64 ? 64 : count_.i64[0]));
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u64 = a_.u64 >> HEDLEY_STATIC_CAST(int64_t, shift); r_.u64 = a_.u64 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(64, shift);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) {
...@@ -4828,7 +4828,7 @@ simde_mm256_srli_epi16 (simde__m256i a, const int imm8) ...@@ -4828,7 +4828,7 @@ simde_mm256_srli_epi16 (simde__m256i a, const int imm8)
simde_memset(&r_, 0, sizeof(r_)); simde_memset(&r_, 0, sizeof(r_));
} else { } else {
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u16 = a_.u16 >> HEDLEY_STATIC_CAST(int16_t, imm8); r_.u16 = a_.u16 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(16, imm8);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) {
...@@ -4867,7 +4867,7 @@ simde_mm256_srli_epi32 (simde__m256i a, const int imm8) ...@@ -4867,7 +4867,7 @@ simde_mm256_srli_epi32 (simde__m256i a, const int imm8)
r_.altivec_u32[i] = vec_sr(a_.altivec_u32[i], sv); r_.altivec_u32[i] = vec_sr(a_.altivec_u32[i], sv);
} }
#elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #elif defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u32 = a_.u32 >> HEDLEY_STATIC_CAST(int16_t, imm8); r_.u32 = a_.u32 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(16, imm8);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.u32) / sizeof(r_.u32[0])) ; i++) {
...@@ -4899,7 +4899,7 @@ simde_mm256_srli_epi64 (simde__m256i a, const int imm8) ...@@ -4899,7 +4899,7 @@ simde_mm256_srli_epi64 (simde__m256i a, const int imm8)
a_ = simde__m256i_to_private(a); a_ = simde__m256i_to_private(a);
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u64 = a_.u64 >> HEDLEY_STATIC_CAST(int32_t, imm8); r_.u64 = a_.u64 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(32, imm8);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.u64) / sizeof(r_.u64[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.u64) / sizeof(r_.u64[0])) ; i++) {
......
...@@ -58,7 +58,7 @@ simde_mm512_srli_epi16 (simde__m512i a, const unsigned int imm8) ...@@ -58,7 +58,7 @@ simde_mm512_srli_epi16 (simde__m512i a, const unsigned int imm8)
return simde_mm512_setzero_si512(); return simde_mm512_setzero_si512();
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u16 = a_.u16 >> HEDLEY_STATIC_CAST(int16_t, imm8); r_.u16 = a_.u16 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(16, imm8);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.u16) / sizeof(r_.u16[0])) ; i++) {
......
...@@ -5722,7 +5722,7 @@ simde_mm_slli_epi16 (simde__m128i a, const int imm8) ...@@ -5722,7 +5722,7 @@ simde_mm_slli_epi16 (simde__m128i a, const int imm8)
a_ = simde__m128i_to_private(a); a_ = simde__m128i_to_private(a);
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.i16 = a_.i16 << (imm8 & 0xff); r_.i16 = a_.i16 << SIMDE_CAST_VECTOR_SHIFT_COUNT(8, imm8 & 0xff);
#else #else
const int s = (imm8 > HEDLEY_STATIC_CAST(int, sizeof(r_.i16[0]) * CHAR_BIT) - 1) ? 0 : imm8; const int s = (imm8 > HEDLEY_STATIC_CAST(int, sizeof(r_.i16[0]) * CHAR_BIT) - 1) ? 0 : imm8;
SIMDE_VECTORIZE SIMDE_VECTORIZE
...@@ -5879,7 +5879,7 @@ simde_mm_srli_epi16 (simde__m128i a, const int imm8) ...@@ -5879,7 +5879,7 @@ simde_mm_srli_epi16 (simde__m128i a, const int imm8)
a_ = simde__m128i_to_private(a); a_ = simde__m128i_to_private(a);
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u16 = a_.u16 >> imm8; r_.u16 = a_.u16 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(8, imm8);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.i16) / sizeof(r_.i16[0])) ; i++) {
...@@ -5928,7 +5928,7 @@ simde_mm_srli_epi32 (simde__m128i a, const int imm8) ...@@ -5928,7 +5928,7 @@ simde_mm_srli_epi32 (simde__m128i a, const int imm8)
a_ = simde__m128i_to_private(a); a_ = simde__m128i_to_private(a);
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR)
r_.u32 = a_.u32 >> (imm8 & 0xff); r_.u32 = a_.u32 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(8, imm8 & 0xff);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) {
...@@ -5992,7 +5992,7 @@ simde_mm_srli_epi64 (simde__m128i a, const int imm8) ...@@ -5992,7 +5992,7 @@ simde_mm_srli_epi64 (simde__m128i a, const int imm8)
r_.neon_u64 = vshlq_u64(a_.neon_u64, vdupq_n_s64(-imm8)); r_.neon_u64 = vshlq_u64(a_.neon_u64, vdupq_n_s64(-imm8));
#else #else
#if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) && !defined(SIMDE_BUG_GCC_94488) #if defined(SIMDE_VECTOR_SUBSCRIPT_SCALAR) && !defined(SIMDE_BUG_GCC_94488)
r_.u64 = a_.u64 >> imm8; r_.u64 = a_.u64 >> SIMDE_CAST_VECTOR_SHIFT_COUNT(8, imm8);
#else #else
SIMDE_VECTORIZE SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) { for (size_t i = 0 ; i < (sizeof(r_.i64) / sizeof(r_.i64[0])) ; i++) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment