26namespace seqan3::detail
31template <simd::simd_concept simd_t>
32constexpr simd_t load_avx512(
void const * mem_addr);
37template <simd::simd_concept simd_t>
38constexpr void store_avx512(
void * mem_addr, simd_t
const & simd_vec);
43template <simd::simd_concept simd_t>
44inline void transpose_matrix_avx512(
std::array<simd_t, simd_traits<simd_t>::length> & matrix);
49template <simd::simd_concept target_simd_t, simd::simd_concept source_simd_t>
50constexpr target_simd_t upcast_signed_avx512(source_simd_t
const & src);
55template <simd::simd_concept target_simd_t, simd::simd_concept source_simd_t>
56constexpr target_simd_t upcast_unsigned_avx512(source_simd_t
const & src);
61template <u
int8_t index, simd::simd_concept simd_t>
62constexpr simd_t extract_half_avx512(simd_t
const & src);
67template <u
int8_t index, simd::simd_concept simd_t>
68constexpr simd_t extract_quarter_avx512(simd_t
const & src);
73template <u
int8_t index, simd::simd_concept simd_t>
74constexpr simd_t extract_eighth_avx512(simd_t
const & src);
84namespace seqan3::detail
87template <simd::simd_concept simd_t>
88constexpr simd_t load_avx512(
void const * mem_addr)
90 return reinterpret_cast<simd_t
>(_mm512_loadu_si512(mem_addr));
93template <simd::simd_concept simd_t>
94constexpr void store_avx512(
void * mem_addr, simd_t
const & simd_vec)
96 _mm512_storeu_si512(mem_addr,
reinterpret_cast<__m512i
const &
>(simd_vec));
100template <simd::simd_concept simd_t>
101inline void transpose_matrix_avx512(
std::array<simd_t, simd_traits<simd_t>::length> & matrix);
103template <simd::simd_concept target_simd_t, simd::simd_concept source_simd_t>
104constexpr target_simd_t upcast_signed_avx512(source_simd_t
const & src)
106 __m512i
const & tmp =
reinterpret_cast<__m512i
const &
>(src);
107 if constexpr (simd_traits<source_simd_t>::length == 64)
109 if constexpr (simd_traits<target_simd_t>::length == 32)
110 return reinterpret_cast<target_simd_t
>(_mm512_cvtepi8_epi16(_mm512_castsi512_si256(tmp)));
111 if constexpr (simd_traits<target_simd_t>::length == 16)
112 return reinterpret_cast<target_simd_t
>(_mm512_cvtepi8_epi32(_mm512_castsi512_si128(tmp)));
113 if constexpr (simd_traits<target_simd_t>::length == 8)
114 return reinterpret_cast<target_simd_t
>(_mm512_cvtepi8_epi64(_mm512_castsi512_si128(tmp)));
116 else if constexpr (simd_traits<source_simd_t>::length == 32)
118 if constexpr (simd_traits<target_simd_t>::length == 16)
119 return reinterpret_cast<target_simd_t
>(_mm512_cvtepi16_epi32(_mm512_castsi512_si256(tmp)));
120 if constexpr (simd_traits<target_simd_t>::length == 8)
121 return reinterpret_cast<target_simd_t
>(_mm512_cvtepi16_epi64(_mm512_castsi512_si128(tmp)));
125 static_assert(simd_traits<source_simd_t>::length == 16,
"Expected 32 bit scalar type.");
126 return reinterpret_cast<target_simd_t
>(_mm512_cvtepi32_epi64(_mm512_castsi512_si256(tmp)));
130template <simd::simd_concept target_simd_t, simd::simd_concept source_simd_t>
131constexpr target_simd_t upcast_unsigned_avx512(source_simd_t
const & src)
133 __m512i
const & tmp =
reinterpret_cast<__m512i
const &
>(src);
134 if constexpr (simd_traits<source_simd_t>::length == 64)
136 if constexpr (simd_traits<target_simd_t>::length == 32)
137 return reinterpret_cast<target_simd_t
>(_mm512_cvtepu8_epi16(_mm512_castsi512_si256(tmp)));
138 if constexpr (simd_traits<target_simd_t>::length == 16)
139 return reinterpret_cast<target_simd_t
>(_mm512_cvtepu8_epi32(_mm512_castsi512_si128(tmp)));
140 if constexpr (simd_traits<target_simd_t>::length == 8)
141 return reinterpret_cast<target_simd_t
>(_mm512_cvtepu8_epi64(_mm512_castsi512_si128(tmp)));
143 else if constexpr (simd_traits<source_simd_t>::length == 32)
145 if constexpr (simd_traits<target_simd_t>::length == 16)
146 return reinterpret_cast<target_simd_t
>(_mm512_cvtepu16_epi32(_mm512_castsi512_si256(tmp)));
147 if constexpr (simd_traits<target_simd_t>::length == 8)
148 return reinterpret_cast<target_simd_t
>(_mm512_cvtepu16_epi64(_mm512_castsi512_si128(tmp)));
152 static_assert(simd_traits<source_simd_t>::length == 16,
"Expected 32 bit scalar type.");
153 return reinterpret_cast<target_simd_t
>(_mm512_cvtepu32_epi64(_mm512_castsi512_si256(tmp)));
158template <u
int8_t index, simd::simd_concept simd_t>
159constexpr simd_t extract_half_avx512(simd_t
const & src);
162template <u
int8_t index, simd::simd_concept simd_t>
163constexpr simd_t extract_quarter_avx512(simd_t
const & src);
166template <u
int8_t index, simd::simd_concept simd_t>
167constexpr simd_t extract_eighth_avx512(simd_t
const & src);
Provides seqan3::detail::builtin_simd, seqan3::detail::is_builtin_simd and seqan3::simd::simd_traits<...
Provides intrinsics include for builtin simd.
Provides seqan3::simd::simd_traits.
Provides seqan3::simd::simd_concept.