31 template <simd::simd_concept simd_t>
37 template <simd::simd_concept simd_t>
43 template <simd::simd_concept target_simd_t, simd::simd_concept source_simd_t>
49 template <simd::simd_concept target_simd_t, simd::simd_concept source_simd_t>
55 template <u
int8_t index, simd::simd_concept simd_t>
61 template <u
int8_t index, simd::simd_concept simd_t>
67 template <u
int8_t index, simd::simd_concept simd_t>
81 template <simd::simd_concept simd_t>
84 return reinterpret_cast<simd_t
>(_mm512_loadu_si512(mem_addr));
88 template <simd::simd_concept simd_t>
91 template <simd::simd_concept target_simd_t, simd::simd_concept source_simd_t>
94 __m512i
const & tmp =
reinterpret_cast<__m512i
const &
>(src);
95 if constexpr (simd_traits<source_simd_t>::length == 64)
97 if constexpr (simd_traits<target_simd_t>::length == 32)
98 return reinterpret_cast<target_simd_t>(_mm512_cvtepi8_epi16(_mm512_castsi512_si256(tmp)));
99 if constexpr (simd_traits<target_simd_t>::length == 16)
100 return reinterpret_cast<target_simd_t>(_mm512_cvtepi8_epi32(_mm512_castsi512_si128(tmp)));
101 if constexpr (simd_traits<target_simd_t>::length == 8)
102 return reinterpret_cast<target_simd_t>(_mm512_cvtepi8_epi64(_mm512_castsi512_si128(tmp)));
104 else if constexpr (simd_traits<source_simd_t>::length == 32)
106 if constexpr (simd_traits<target_simd_t>::length == 16)
107 return reinterpret_cast<target_simd_t>(_mm512_cvtepi16_epi32(_mm512_castsi512_si256(tmp)));
108 if constexpr (simd_traits<target_simd_t>::length == 8)
109 return reinterpret_cast<target_simd_t>(_mm512_cvtepi16_epi64(_mm512_castsi512_si128(tmp)));
113 static_assert(simd_traits<source_simd_t>::length == 16,
"Expected 32 bit scalar type.");
114 return reinterpret_cast<target_simd_t
>(_mm512_cvtepi32_epi64(_mm512_castsi512_si256(tmp)));
118 template <simd::simd_concept target_simd_t, simd::simd_concept source_simd_t>
121 __m512i
const & tmp =
reinterpret_cast<__m512i
const &
>(src);
122 if constexpr (simd_traits<source_simd_t>::length == 64)
124 if constexpr (simd_traits<target_simd_t>::length == 32)
125 return reinterpret_cast<target_simd_t>(_mm512_cvtepu8_epi16(_mm512_castsi512_si256(tmp)));
126 if constexpr (simd_traits<target_simd_t>::length == 16)
127 return reinterpret_cast<target_simd_t>(_mm512_cvtepu8_epi32(_mm512_castsi512_si128(tmp)));
128 if constexpr (simd_traits<target_simd_t>::length == 8)
129 return reinterpret_cast<target_simd_t>(_mm512_cvtepu8_epi64(_mm512_castsi512_si128(tmp)));
131 else if constexpr (simd_traits<source_simd_t>::length == 32)
133 if constexpr (simd_traits<target_simd_t>::length == 16)
134 return reinterpret_cast<target_simd_t>(_mm512_cvtepu16_epi32(_mm512_castsi512_si256(tmp)));
135 if constexpr (simd_traits<target_simd_t>::length == 8)
136 return reinterpret_cast<target_simd_t>(_mm512_cvtepu16_epi64(_mm512_castsi512_si128(tmp)));
140 static_assert(simd_traits<source_simd_t>::length == 16,
"Expected 32 bit scalar type.");
141 return reinterpret_cast<target_simd_t
>(_mm512_cvtepu32_epi64(_mm512_castsi512_si256(tmp)));
146 template <u
int8_t index, simd::simd_concept simd_t>
150 template <u
int8_t index, simd::simd_concept simd_t>
154 template <u
int8_t index, simd::simd_concept simd_t>
Defines the requirements of a matrix (e.g. score matrices, trace matrices).
The internal SeqAn3 namespace.
Definition: aligned_sequence_concept.hpp:29
void transpose_matrix_avx512(std::array< simd_t, simd_traits< simd_t >::length > &matrix)
Transposes the given simd vector matrix.
constexpr simd_t extract_half_avx512(simd_t const &src)
Extracts one half of the given simd vector and stores the result in the lower half of the target vect...
constexpr simd_t load_avx512(void const *mem_addr)
Load simd_t size bits of integral data from memory.
constexpr target_simd_t upcast_signed_avx512(source_simd_t const &src)
Upcasts the given vector into the target vector using signed extension of packed values.
constexpr simd_t extract_quarter_avx512(simd_t const &src)
Extracts one quarter of the given simd vector and stores it in the lower quarter of the target vector...
constexpr target_simd_t upcast_unsigned_avx512(source_simd_t const &src)
Upcasts the given vector into the target vector using unsigned extension of packed values.
constexpr simd_t extract_eighth_avx512(simd_t const &src)
Extracts one eighth of the given simd vector and stores it in the lower eighth of the target vector.
seqan3::simd::simd_traits is the trait class that provides uniform interface to the properties of sim...
Definition: simd_traits.hpp:41
Provides seqan3::simd::simd_concept.
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.