57#ifndef INCLUDED_volk_32fc_deinterleave_imag_32f_a_H
58#define INCLUDED_volk_32fc_deinterleave_imag_32f_a_H
68 unsigned int num_points)
70 unsigned int number = 0;
71 const unsigned int eighthPoints = num_points / 8;
72 const float* complexVectorPtr = (
const float*)complexVector;
73 float* qBufferPtr = qBuffer;
75 __m256 cplxValue1, cplxValue2, complex1, complex2, qValue;
76 for (; number < eighthPoints; number++) {
78 cplxValue1 = _mm256_load_ps(complexVectorPtr);
79 complexVectorPtr += 8;
81 cplxValue2 = _mm256_load_ps(complexVectorPtr);
82 complexVectorPtr += 8;
84 complex1 = _mm256_permute2f128_ps(cplxValue1, cplxValue2, 0x20);
85 complex2 = _mm256_permute2f128_ps(cplxValue1, cplxValue2, 0x31);
88 qValue = _mm256_shuffle_ps(complex1, complex2, 0xdd);
90 _mm256_store_ps(qBufferPtr, qValue);
95 number = eighthPoints * 8;
96 for (; number < num_points; number++) {
98 *qBufferPtr++ = *complexVectorPtr++;
104#include <xmmintrin.h>
108 unsigned int num_points)
110 unsigned int number = 0;
111 const unsigned int quarterPoints = num_points / 4;
113 const float* complexVectorPtr = (
const float*)complexVector;
114 float* qBufferPtr = qBuffer;
116 __m128 cplxValue1, cplxValue2, iValue;
117 for (; number < quarterPoints; number++) {
119 cplxValue1 = _mm_load_ps(complexVectorPtr);
120 complexVectorPtr += 4;
122 cplxValue2 = _mm_load_ps(complexVectorPtr);
123 complexVectorPtr += 4;
126 iValue = _mm_shuffle_ps(cplxValue1, cplxValue2, _MM_SHUFFLE(3, 1, 3, 1));
128 _mm_store_ps(qBufferPtr, iValue);
133 number = quarterPoints * 4;
134 for (; number < num_points; number++) {
136 *qBufferPtr++ = *complexVectorPtr++;
146 unsigned int num_points)
148 unsigned int number = 0;
149 unsigned int quarter_points = num_points / 4;
150 const float* complexVectorPtr = (
float*)complexVector;
151 float* qBufferPtr = qBuffer;
152 float32x4x2_t complexInput;
154 for (number = 0; number < quarter_points; number++) {
155 complexInput = vld2q_f32(complexVectorPtr);
156 vst1q_f32(qBufferPtr, complexInput.val[1]);
157 complexVectorPtr += 8;
161 for (number = quarter_points * 4; number < num_points; number++) {
163 *qBufferPtr++ = *complexVectorPtr++;
168#ifdef LV_HAVE_GENERIC
172 unsigned int num_points)
174 unsigned int number = 0;
175 const float* complexVectorPtr = (
float*)complexVector;
176 float* qBufferPtr = qBuffer;
177 for (number = 0; number < num_points; number++) {
179 *qBufferPtr++ = *complexVectorPtr++;
187#ifndef INCLUDED_volk_32fc_deinterleave_imag_32f_u_H
188#define INCLUDED_volk_32fc_deinterleave_imag_32f_u_H
194#include <immintrin.h>
198 unsigned int num_points)
200 unsigned int number = 0;
201 const unsigned int eighthPoints = num_points / 8;
202 const float* complexVectorPtr = (
const float*)complexVector;
203 float* qBufferPtr = qBuffer;
205 __m256 cplxValue1, cplxValue2, complex1, complex2, qValue;
206 for (; number < eighthPoints; number++) {
208 cplxValue1 = _mm256_loadu_ps(complexVectorPtr);
209 complexVectorPtr += 8;
211 cplxValue2 = _mm256_loadu_ps(complexVectorPtr);
212 complexVectorPtr += 8;
214 complex1 = _mm256_permute2f128_ps(cplxValue1, cplxValue2, 0x20);
215 complex2 = _mm256_permute2f128_ps(cplxValue1, cplxValue2, 0x31);
218 qValue = _mm256_shuffle_ps(complex1, complex2, 0xdd);
220 _mm256_storeu_ps(qBufferPtr, qValue);
225 number = eighthPoints * 8;
226 for (; number < num_points; number++) {
228 *qBufferPtr++ = *complexVectorPtr++;
234#include <riscv_vector.h>
236static inline void volk_32fc_deinterleave_imag_32f_rvv(
float* qBuffer,
238 unsigned int num_points)
240 const uint64_t* in = (
const uint64_t*)complexVector;
241 size_t n = num_points;
242 for (
size_t vl; n > 0; n -= vl, in += vl, qBuffer += vl) {
243 vl = __riscv_vsetvl_e64m8(n);
244 vuint64m8_t vc = __riscv_vle64_v_u64m8(in, vl);
245 __riscv_vse32((uint32_t*)qBuffer, __riscv_vnsrl(vc, 32, vl), vl);
static void volk_32fc_deinterleave_imag_32f_a_sse(float *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition volk_32fc_deinterleave_imag_32f.h:106
static void volk_32fc_deinterleave_imag_32f_neon(float *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition volk_32fc_deinterleave_imag_32f.h:144
static void volk_32fc_deinterleave_imag_32f_u_avx(float *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition volk_32fc_deinterleave_imag_32f.h:196
static void volk_32fc_deinterleave_imag_32f_a_avx(float *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition volk_32fc_deinterleave_imag_32f.h:66
static void volk_32fc_deinterleave_imag_32f_generic(float *qBuffer, const lv_32fc_t *complexVector, unsigned int num_points)
Definition volk_32fc_deinterleave_imag_32f.h:170
float complex lv_32fc_t
Definition volk_complex.h:74