Commit 95a6d081 authored by Michael R. Crusoe's avatar Michael R. Crusoe Committed by Michael R. Crusoe

avx512 new families started: gather/reduce + other additional funcs

parent ef893128
This diff is collapsed.
......@@ -196,8 +196,8 @@ simde_mm512_cmpeq_epu16_mask (simde__m512i a, simde__m512i b) {
#endif
}
#if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES)
#undef _mm512_cmpeq_epu31_mask
#define _mm512_cmpeq_epu32_mask(a, b) simde_mm512_cmpeq_epu32_mask(a, b)
#undef _mm512_cmpeq_epu16_mask
#define _mm512_cmpeq_epu16_mask(a, b) simde_mm512_cmpeq_epu16_mask((a), (b))
#endif
......
......@@ -508,7 +508,7 @@ simde_mm512_mask_compressstoreu_ps (void* base_addr, simde__mmask16 k, simde__m5
#endif
}
#if defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES) && defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_compressstoreu_pd
#undef _mm512_mask_compressstoreu_ps
#define _mm512_mask_compressstoreu_ps(base_addr, k, a) simde_mm512_mask_compressstoreu_ps(base_addr, k, a)
#endif
......
......@@ -107,9 +107,36 @@ simde_mm_maskz_cvtepi64_pd(simde__mmask8 k, simde__m128i a) {
}
#if defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES) || defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
#undef _mm_maskz_cvtepi64_pd
#define _mm_maskz_cvtepi64_pd(k, a) simde_mm_maskz_cvtepi64_pd(k, a)
#define _mm_maskz_cvtepi64_pd(k, a) simde_mm_maskz_cvtepi64_pd((k), (a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512i
simde_mm512_cvtepi16_epi32 (simde__m256i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_cvtepi16_epi32(a);
#else
simde__m512i_private r_;
simde__m256i_private a_ = simde__m256i_to_private(a);
#if defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_(r_.i32, a_.i16);
#else
SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) {
r_.i32[i] = a_.i16[i];
}
#endif
return simde__m512i_from_private(r_);
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_cvtepi16_epi32
#define _mm512_cvtepi16_epi32(a) simde_mm512_cvtepi16_epi32(a)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m256i
simde_mm512_cvtepi16_epi8 (simde__m512i a) {
......@@ -245,7 +272,33 @@ simde_mm512_cvtepi64_epi32 (simde__m512i a) {
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_cvtepi64_epi32
#define _mm512_cvtepi64_epi32(a) simde_mm512_cvtepi64_epi32(a)
#define _mm512_cvtepi64_epi32(a) simde_mm512_cvtepi64_epi32((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512i
simde_mm512_cvtepu16_epi32 (simde__m256i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_cvtepu16_epi32(a);
#else
simde__m512i_private r_;
simde__m256i_private a_ = simde__m256i_to_private(a);
#if defined(SIMDE_CONVERT_VECTOR_)
SIMDE_CONVERT_VECTOR_(r_.i32, a_.u16);
#else
SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.i32) / sizeof(r_.i32[0])) ; i++) {
r_.i32[i] = HEDLEY_STATIC_CAST(int32_t, a_.u16[i]);
}
#endif
return simde__m512i_from_private(r_);
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_cvtepu16_epi32
#define _mm512_cvtepu16_epi32(a) simde_mm512_cvtepu16_epi32(a)
#endif
SIMDE_FUNCTION_ATTRIBUTES
......
......@@ -35,6 +35,23 @@ HEDLEY_DIAGNOSTIC_PUSH
SIMDE_DISABLE_UNWANTED_DIAGNOSTICS
SIMDE_BEGIN_DECLS_
SIMDE_FUNCTION_ATTRIBUTES
simde__m128
simde_mm256_extractf32x4_ps (simde__m256 a, int imm8)
SIMDE_REQUIRE_CONSTANT_RANGE(imm8, 0, 1) {
simde__m256_private a_ = simde__m256_to_private(a);
return a_.m128[imm8 & 1];
}
#if defined(SIMDE_X86_AVX512F_NATIVE) && defined(SIMDE_X86_AVX512VL_NATIVE)
#define simde_mm256_extractf32x4_ps(a, imm8) _mm256_extractf32x4_ps(a, imm8)
#endif
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES) && defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
#undef _mm256_extractf32x4_ps
#define _mm256_extractf32x4_ps(a, imm8) simde_mm256_extractf32x4_ps((a), (imm8))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m128
simde_mm512_extractf32x4_ps (simde__m512 a, int imm8)
......@@ -61,27 +78,27 @@ simde_mm512_extractf32x4_ps (simde__m512 a, int imm8)
#endif
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_extractf32x4_ps
#define _mm512_extractf32x4_ps(a, imm8) simde_mm512_extractf32x4_ps(a, imm8)
#define _mm512_extractf32x4_ps(a, imm8) simde_mm512_extractf32x4_ps((a), (imm8))
#endif
#if defined(SIMDE_X86_AVX512F_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(7,0,0))
#define simde_mm512_mask_extractf32x4_ps(src, k, a, imm8) _mm512_mask_extractf32x4_ps(src, k, a, imm8)
#else
#define simde_mm512_mask_extractf32x4_ps(src, k, a, imm8) simde_mm_mask_mov_ps(src, k, simde_mm512_extractf32x4_ps(a, imm8))
#define simde_mm512_mask_extractf32x4_ps(src, k, a, imm8) simde_mm_mask_mov_ps((src), (k), simde_mm512_extractf32x4_ps((a), (imm8)))
#endif
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_extractf32x4_ps
#define _mm512_mask_extractf32x4_ps(src, k, a, imm8) simde_mm512_mask_extractf32x4_ps(src, k, a, imm8)
#define _mm512_mask_extractf32x4_ps(src, k, a, imm8) simde_mm512_mask_extractf32x4_ps((src), (k), (a), (imm8))
#endif
#if defined(SIMDE_X86_AVX512F_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(7,0,0))
#define simde_mm512_maskz_extractf32x4_ps(k, a, imm8) _mm512_maskz_extractf32x4_ps(k, a, imm8)
#else
#define simde_mm512_maskz_extractf32x4_ps(k, a, imm8) simde_mm_maskz_mov_ps(k, simde_mm512_extractf32x4_ps(a, imm8))
#define simde_mm512_maskz_extractf32x4_ps(k, a, imm8) simde_mm_maskz_mov_ps((k), simde_mm512_extractf32x4_ps((a), (imm8)))
#endif
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_maskz_extractf32x4_ps
#define _mm512_maskz_extractf32x4_ps(k, a, imm8) simde_mm512_maskz_extractf32x4_ps(k, a, imm8)
#define _mm512_maskz_extractf32x4_ps(k, a, imm8) simde_mm512_maskz_extractf32x4_ps((k), (a), (imm8))
#endif
SIMDE_FUNCTION_ATTRIBUTES
......@@ -172,6 +189,42 @@ simde_mm512_extracti32x4_epi32 (simde__m512i a, int imm8)
#define _mm512_maskz_extracti32x4_epi32(k, a, imm8) simde_mm512_maskz_extracti32x4_epi32(k, a, imm8)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m256i
simde_mm512_extracti32x8_epi32 (simde__m512i a, int imm8)
SIMDE_REQUIRE_CONSTANT_RANGE(imm8, 0, 1) {
simde__m512i_private a_ = simde__m512i_to_private(a);
return a_.m256i[imm8 & 1];
}
#if defined(SIMDE_X86_AVX512DQ_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(7,0,0)) && !defined(SIMDE_BUG_CLANG_REV_299346)
#define simde_mm512_extracti32x8_epi32(a, imm8) _mm512_extracti32x8_epi32(a, imm8)
#endif
#if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
#undef _mm512_extracti32x8_epi32
#define _mm512_extracti32x8_epi32(a, imm8) simde_mm512_extracti32x8_epi32((a), (imm8))
#endif
#if defined(SIMDE_X86_AVX51FDQ_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(7,0,0)) && !defined(SIMDE_BUG_CLANG_REV_299346)
#define simde_mm512_mask_extracti32x8_epi32(src, k, a, imm8) _mm512_mask_extracti32x8_epi32(src, k, a, imm8)
#else
#define simde_mm512_mask_extracti32x8_epi32(src, k, a, imm8) simde_mm256_mask_mov_epi32((src), (k), simde_mm512_extracti32x8_epi32((a), (imm8)))
#endif
#if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_extracti32x8_epi32
#define _mm512_mask_extracti32x8_epi32(src, k, a, imm8) simde_mm512_mask_extracti32x8_epi32((src), (k), (a), (imm8))
#endif
#if defined(SIMDE_X86_AVX512DQ_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(7,0,0)) && !defined(SIMDE_BUG_CLANG_REV_299346)
#define simde_mm512_maskz_extracti32x8_epi32(k, a, imm8) _mm512_maskz_extracti32x8_epi32(k, a, imm8)
#else
#define simde_mm512_maskz_extracti32x8_epi32(k, a, imm8) simde_mm256_maskz_mov_epi32((k), simde_mm512_extracti32x8_epi32((a), (imm8)))
#endif
#if defined(SIMDE_X86_AVX512DQ_ENABLE_NATIVE_ALIASES)
#undef _mm512_maskz_extracti32x8_epi32
#define _mm512_maskz_extracti32x8_epi32(k, a, imm8) simde_mm512_maskz_extracti32x8_epi32((k), (a), (imm8))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m256i
simde_mm512_extracti64x4_epi64 (simde__m512i a, int imm8)
......@@ -185,27 +238,27 @@ simde_mm512_extracti64x4_epi64 (simde__m512i a, int imm8)
#endif
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_extracti64x4_epi64
#define _mm512_extracti64x4_epi64(a, imm8) simde_mm512_extracti64x4_epi64(a, imm8)
#define _mm512_extracti64x4_epi64(a, imm8) simde_mm512_extracti64x4_epi64((a), (imm8))
#endif
#if defined(SIMDE_X86_AVX512F_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(7,0,0)) && !defined(SIMDE_BUG_CLANG_REV_299346)
#define simde_mm512_mask_extracti64x4_epi64(src, k, a, imm8) _mm512_mask_extracti64x4_epi64(src, k, a, imm8)
#else
#define simde_mm512_mask_extracti64x4_epi64(src, k, a, imm8) simde_mm256_mask_mov_epi64(src, k, simde_mm512_extracti64x4_epi64(a, imm8))
#define simde_mm512_mask_extracti64x4_epi64(src, k, a, imm8) simde_mm256_mask_mov_epi64((src), (k), simde_mm512_extracti64x4_epi64((a), (imm8)))
#endif
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_extracti64x4_epi64
#define _mm512_mask_extracti64x4_epi64(src, k, a, imm8) simde_mm512_mask_extracti64x4_epi64(src, k, a, imm8)
#define _mm512_mask_extracti64x4_epi64(src, k, a, imm8) simde_mm512_mask_extracti64x4_epi64((src), (k), (a), (imm8))
#endif
#if defined(SIMDE_X86_AVX512F_NATIVE) && (!defined(HEDLEY_GCC_VERSION) || HEDLEY_GCC_VERSION_CHECK(7,0,0)) && !defined(SIMDE_BUG_CLANG_REV_299346)
#define simde_mm512_maskz_extracti64x4_epi64(k, a, imm8) _mm512_maskz_extracti64x4_epi64(k, a, imm8)
#else
#define simde_mm512_maskz_extracti64x4_epi64(k, a, imm8) simde_mm256_maskz_mov_epi64(k, simde_mm512_extracti64x4_epi64(a, imm8))
#define simde_mm512_maskz_extracti64x4_epi64(k, a, imm8) simde_mm256_maskz_mov_epi64((k), simde_mm512_extracti64x4_epi64((a), (imm8)))
#endif
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_maskz_extracti64x4_epi64
#define _mm512_maskz_extracti64x4_epi64(k, a, imm8) simde_mm512_maskz_extracti64x4_epi64(k, a, imm8)
#define _mm512_maskz_extracti64x4_epi64(k, a, imm8) simde_mm512_maskz_extracti64x4_epi64((k), (a), (imm8))
#endif
SIMDE_END_DECLS_
......
......@@ -151,6 +151,20 @@ simde_mm256_maskz_loadu_epi16 (simde__mmask16 k, void const * mem_addr) {
#define _mm256_maskz_loadu_epi16(k, mem_addr) simde_mm256_maskz_loadu_epi16(k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m256
simde_mm256_maskz_loadu_ps (simde__mmask8 k, void const * mem_addr) {
#if defined(SIMDE_X86_AVX512F_NATIVE) && defined(SIMDE_X86_AVX512VL_NATIVE)
return _mm256_maskz_loadu_ps(k, HEDLEY_REINTERPRET_CAST(void const*, mem_addr));
#else
return simde_mm256_maskz_mov_ps(k, simde_mm256_loadu_ps(HEDLEY_REINTERPRET_CAST(const float*, mem_addr)));
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES) && defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
#undef _mm256_maskz_loadu_ps
#define _mm256_maskz_loadu_ps(k, mem_addr) simde_mm256_maskz_loadu_ps(k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512i
simde_mm512_mask_loadu_epi16 (simde__m512i src, simde__mmask32 k, void const * mem_addr) {
......@@ -165,6 +179,90 @@ simde_mm512_mask_loadu_epi16 (simde__m512i src, simde__mmask32 k, void const * m
#define _mm512_mask_loadu_epi16(src, k, mem_addr) simde_mm512_mask_loadu_epi16(src, k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512i
simde_mm512_maskz_loadu_epi16 (simde__mmask32 k, void const * mem_addr) {
#if defined(SIMDE_X86_AVX512BW_NATIVE)
return _mm512_maskz_loadu_epi16(k, HEDLEY_REINTERPRET_CAST(void const*, mem_addr));
#else
return simde_mm512_maskz_mov_epi16(k, simde_mm512_loadu_epi16(mem_addr));
#endif
}
#if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES)
#undef _mm512_maskz_loadu_epi16
#define _mm512_maskz_loadu_epi16(k, mem_addr) simde_mm512_maskz_loadu_epi16(k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512i
simde_mm512_mask_loadu_epi32 (simde__m512i src, simde__mmask16 k, void const * mem_addr) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_mask_loadu_epi32(src, k, HEDLEY_REINTERPRET_CAST(void const*, mem_addr));
#else
return simde_mm512_mask_mov_epi32(src, k, simde_mm512_loadu_epi32(mem_addr));
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_loadu_epi32
#define _mm512_mask_loadu_epi32(src, k, mem_addr) simde_mm512_mask_loadu_epi32(src, k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512i
simde_mm512_mask_loadu_epi64 (simde__m512i src, simde__mmask8 k, void const * mem_addr) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_mask_loadu_epi64(src, k, HEDLEY_REINTERPRET_CAST(void const*, mem_addr));
#else
return simde_mm512_mask_mov_epi64(src, k, simde_mm512_loadu_epi64(mem_addr));
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_loadu_epi64
#define _mm512_mask_loadu_epi64(src, k, mem_addr) simde_mm512_mask_loadu_epi64(src, k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512i
simde_mm512_maskz_loadu_epi64 (simde__mmask8 k, void const * mem_addr) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_maskz_loadu_epi64(k, HEDLEY_REINTERPRET_CAST(void const*, mem_addr));
#else
return simde_mm512_maskz_mov_epi64(k, simde_mm512_loadu_epi64(mem_addr));
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_maskz_loadu_epi64
#define _mm512_maskz_loadu_epi64(k, mem_addr) simde_mm512_maskz_loadu_epi64((k), (mem_addr))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512d
simde_mm512_mask_loadu_pd (simde__m512d src, simde__mmask8 k, void const * mem_addr) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_mask_loadu_pd(src, k, HEDLEY_REINTERPRET_CAST(void const*, mem_addr));
#else
return simde_mm512_mask_mov_pd(src, k, simde_mm512_loadu_pd(mem_addr));
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_loadu_pd
#define _mm512_mask_loadu_pd(src, k, mem_addr) simde_mm512_mask_loadu_pd(src, k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512
simde_mm512_mask_loadu_ps (simde__m512 src, simde__mmask16 k, void const * mem_addr) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_mask_loadu_ps(src, k, HEDLEY_REINTERPRET_CAST(void const*, mem_addr));
#else
return simde_mm512_mask_mov_ps(src, k, simde_mm512_loadu_ps(mem_addr));
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_loadu_ps
#define _mm512_mask_loadu_ps(src, k, mem_addr) simde_mm512_mask_loadu_ps(src, k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde__m512
simde_mm512_maskz_loadu_ps (simde__mmask16 k, void const * mem_addr) {
......@@ -174,9 +272,9 @@ simde_mm512_maskz_loadu_ps (simde__mmask16 k, void const * mem_addr) {
return simde_mm512_maskz_mov_ps(k, simde_mm512_loadu_ps(mem_addr));
#endif
}
#if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES) && defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
#undef _mm256_maskz_loadu_ps
#define _mm256_maskz_loadu_ps(k, mem_addr) simde_mm256_maskz_loadu_ps(k, mem_addr)
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_maskz_loadu_ps
#define _mm512_maskz_loadu_ps(k, mem_addr) simde_mm512_maskz_loadu_ps(k, mem_addr)
#endif
SIMDE_FUNCTION_ATTRIBUTES
......@@ -188,9 +286,9 @@ simde_mm512_maskz_loadu_pd (simde__mmask8 k, void const * mem_addr) {
return simde_mm512_maskz_mov_pd(k, simde_mm512_loadu_pd(mem_addr));
#endif
}
#if defined(SIMDE_X86_AVX512BW_ENABLE_NATIVE_ALIASES) && defined(SIMDE_X86_AVX512VL_ENABLE_NATIVE_ALIASES)
#undef _mm256_maskz_loadu_pd
#define _mm256_maskz_loadu_pd(k, mem_addr) simde_mm256_maskz_loadu_pd(k, mem_addr)
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_maskz_loadu_pd
#define _mm512_maskz_loadu_pd(k, mem_addr) simde_mm512_maskz_loadu_pd(k, mem_addr)
#endif
SIMDE_END_DECLS_
......
......@@ -81,6 +81,270 @@ simde_mm512_reduce_min_ph(simde__m512h a) {
# define _mm512_reduce_min_ph(a) simde_mm512_reduce_min_ph((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
int32_t
simde_mm512_reduce_max_epi32(simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_max_epi32(a);
#else
simde__m512i_private a_;
int32_t r;
a_ = simde__m512i_to_private(a);
r = -INT32_MAX;
SIMDE_VECTORIZE_REDUCTION(max:r)
for (size_t i = 0 ; i < (sizeof(a_.i32) / sizeof(a_.i32[0])) ; i++) {
r = a_.i32[i] > r ? a_.i32[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_max_epi32(a) simde_mm512_reduce_max_epi32((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
int64_t
simde_mm512_reduce_max_epi64(simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_max_epi64(a);
#else
simde__m512i_private a_;
int64_t r;
a_ = simde__m512i_to_private(a);
r = -INT64_MAX;
SIMDE_VECTORIZE_REDUCTION(max:r)
for (size_t i = 0 ; i < (sizeof(a_.i64) / sizeof(a_.i64[0])) ; i++) {
r = a_.i64[i] > r ? a_.i64[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_max_epi64(a) simde_mm512_reduce_max_epi64((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
uint32_t
simde_mm512_reduce_max_epu32(simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_max_epu32(a);
#else
simde__m512i_private a_;
uint32_t r;
a_ = simde__m512i_to_private(a);
r = 0;
SIMDE_VECTORIZE_REDUCTION(max:r)
for (size_t i = 0 ; i < (sizeof(a_.u32) / sizeof(a_.u32[0])) ; i++) {
r = a_.u32[i] > r ? a_.u32[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_max_epu32(a) simde_mm512_reduce_max_epu32((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
uint64_t
simde_mm512_reduce_max_epu64(simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_max_epu64(a);
#else
simde__m512i_private a_;
uint64_t r;
a_ = simde__m512i_to_private(a);
r = 0;
SIMDE_VECTORIZE_REDUCTION(max:r)
for (size_t i = 0 ; i < (sizeof(a_.u64) / sizeof(a_.u64[0])) ; i++) {
r = a_.u64[i] > r ? a_.u64[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_max_epu64(a) simde_mm512_reduce_max_epu64((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde_float64
simde_mm512_reduce_max_pd(simde__m512d a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_max_pd(a);
#else
simde__m512d_private a_;
simde_float64 r;
a_ = simde__m512d_to_private(a);
r = -SIMDE_MATH_INFINITY;
SIMDE_VECTORIZE_REDUCTION(max:r)
for (size_t i = 0 ; i < (sizeof(a_.f64) / sizeof(a_.f64[0])) ; i++) {
r = a_.f64[i] > r ? a_.f64[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_max_pd(a) simde_mm512_reduce_max_pd((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde_float32
simde_mm512_reduce_max_ps(simde__m512 a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_max_ps(a);
#else
simde__m512_private a_;
simde_float32 r;
a_ = simde__m512_to_private(a);
r = -SIMDE_MATH_INFINITYF;
SIMDE_VECTORIZE_REDUCTION(max:r)
for (size_t i = 0 ; i < (sizeof(a_.f32) / sizeof(a_.f32[0])) ; i++) {
r = a_.f32[i] > r ? a_.f32[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_max_ps(a) simde_mm512_reduce_max_ps((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
int32_t
simde_mm512_reduce_min_epi32(simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_min_epi32(a);
#else
simde__m512i_private a_;
int32_t r;
a_ = simde__m512i_to_private(a);
r = INT32_MAX;
SIMDE_VECTORIZE_REDUCTION(min:r)
for (size_t i = 0 ; i < (sizeof(a_.i32) / sizeof(a_.i32[0])) ; i++) {
r = a_.i32[i] < r ? a_.i32[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_min_epi32(a) simde_mm512_reduce_min_epi32((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
int64_t
simde_mm512_reduce_min_epi64(simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_min_epi64(a);
#else
simde__m512i_private a_;
int64_t r;
a_ = simde__m512i_to_private(a);
r = INT64_MAX;
SIMDE_VECTORIZE_REDUCTION(min:r)
for (size_t i = 0 ; i < (sizeof(a_.i64) / sizeof(a_.i64[0])) ; i++) {
r = a_.i64[i] < r ? a_.i64[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_min_epi64(a) simde_mm512_reduce_min_epi64((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
uint32_t
simde_mm512_reduce_min_epu32(simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_min_epu32(a);
#else
simde__m512i_private a_;
uint32_t r;
a_ = simde__m512i_to_private(a);
r = UINT32_MAX;
SIMDE_VECTORIZE_REDUCTION(min:r)
for (size_t i = 0 ; i < (sizeof(a_.u32) / sizeof(a_.u32[0])) ; i++) {
r = a_.u32[i] < r ? a_.u32[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_min_epu32(a) simde_mm512_reduce_min_epu32((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
uint64_t
simde_mm512_reduce_min_epu64(simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_min_epu64(a);
#else
simde__m512i_private a_;
uint64_t r;
a_ = simde__m512i_to_private(a);
r = UINT64_MAX;
SIMDE_VECTORIZE_REDUCTION(min:r)
for (size_t i = 0 ; i < (sizeof(a_.u64) / sizeof(a_.u64[0])) ; i++) {
r = a_.u64[i] < r ? a_.u64[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_min_epu64(a) simde_mm512_reduce_min_epu64((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde_float64
simde_mm512_reduce_min_pd(simde__m512d a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_min_pd(a);
#else
simde__m512d_private a_;
simde_float64 r;
a_ = simde__m512d_to_private(a);
r = SIMDE_MATH_INFINITY;
SIMDE_VECTORIZE_REDUCTION(min:r)
for (size_t i = 0 ; i < (sizeof(a_.f64) / sizeof(a_.f64[0])) ; i++) {
r = a_.f64[i] < r ? a_.f64[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_min_pd(a) simde_mm512_reduce_min_pd((a))
#endif
SIMDE_FUNCTION_ATTRIBUTES
simde_float32
simde_mm512_reduce_min_ps(simde__m512 a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
return _mm512_reduce_min_ps(a);
#else
simde__m512_private a_;
simde_float32 r;
a_ = simde__m512_to_private(a);
r = SIMDE_MATH_INFINITYF;
SIMDE_VECTORIZE_REDUCTION(min:r)
for (size_t i = 0 ; i < (sizeof(a_.f32) / sizeof(a_.f32[0])) ; i++) {
r = a_.f32[i] < r ? a_.f32[i] : r;
}
return r;
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
# define _mm512_reduce_min_ps(a) simde_mm512_reduce_min_ps((a))
#endif
SIMDE_END_DECLS_
HEDLEY_DIAGNOSTIC_POP
......
......@@ -53,8 +53,8 @@ simde_mm512_shuffle_epi8 (simde__m512i a, simde__m512i b) {
}
#else
SIMDE_VECTORIZE
for (size_t i = 0 ; i < (sizeof(r_.u8) / sizeof(r_.u8[0])) ; i++) {
r_.u8[i] = (b_.u8[i] & 0x80) ? 0 : a_.u8[(b_.u8[i] & 0x0f) + (i & 0x30)];
for (size_t i = 0 ; i < (sizeof(r_.i8) / sizeof(r_.i8[0])) ; i++) {
r_.i8[i] = (b_.i8[i] & 0x80) ? 0 : a_.i8[(b_.i8[i] & 0x0f) + (i & 0x30)];
}
#endif
......
......@@ -152,6 +152,36 @@ simde_mm512_mask_storeu_epi16 (void * mem_addr, simde__mmask32 k, simde__m512i a
#define _mm512_mask_storeu_epi16(mem_addr, k, a) simde_mm512_mask_storeu_epi16(mem_addr, k, a)
#endif
SIMDE_FUNCTION_ATTRIBUTES
void
simde_mm512_mask_storeu_epi32 (void * mem_addr, simde__mmask16 k, simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
_mm512_mask_storeu_epi32(HEDLEY_REINTERPRET_CAST(void*, mem_addr), k, a);
#else
const simde__m512i zero = simde_mm512_setzero_si512();
simde_mm512_storeu_epi32(mem_addr, simde_mm512_mask_mov_epi32(zero, k, a));
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_storeu_epi32
#define _mm512_mask_storeu_epi32(mem_addr, k, a) simde_mm512_mask_storeu_epi32(mem_addr, k, a)
#endif
SIMDE_FUNCTION_ATTRIBUTES
void
simde_mm512_mask_storeu_epi64 (void * mem_addr, simde__mmask8 k, simde__m512i a) {
#if defined(SIMDE_X86_AVX512F_NATIVE)
_mm512_mask_storeu_epi64(HEDLEY_REINTERPRET_CAST(void*, mem_addr), k, a);
#else
const simde__m512i zero = simde_mm512_setzero_si512();
simde_mm512_storeu_epi64(mem_addr, simde_mm512_mask_mov_epi64(zero, k, a));
#endif
}
#if defined(SIMDE_X86_AVX512F_ENABLE_NATIVE_ALIASES)
#undef _mm512_mask_storeu_epi64
#define _mm512_mask_storeu_epi64(mem_addr, k, a) simde_mm512_mask_storeu_epi64(mem_addr, k, a)
#endif
SIMDE_FUNCTION_ATTRIBUTES
void
simde_mm512_mask_storeu_ps (void * mem_addr, simde__mmask16 k, simde__m512 a) {
......
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