1 #ifndef INCLUDED_VOLK_8sc_DEINTERLEAVE_REAL_8s_ALIGNED8_H
2 #define INCLUDED_VOLK_8sc_DEINTERLEAVE_REAL_8s_ALIGNED8_H
15 static inline void volk_8ic_deinterleave_real_8i_a_ssse3(
int8_t* iBuffer,
const lv_8sc_t* complexVector,
unsigned int num_points){
16 unsigned int number = 0;
18 int8_t* iBufferPtr = iBuffer;
19 __m128i moveMask1 = _mm_set_epi8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 14, 12, 10, 8, 6, 4, 2, 0);
20 __m128i moveMask2 = _mm_set_epi8(14, 12, 10, 8, 6, 4, 2, 0, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80);
21 __m128i complexVal1, complexVal2, outputVal;
23 unsigned int sixteenthPoints = num_points / 16;
25 for(number = 0; number < sixteenthPoints; number++){
26 complexVal1 = _mm_load_si128((__m128i*)complexVectorPtr); complexVectorPtr += 16;
27 complexVal2 = _mm_load_si128((__m128i*)complexVectorPtr); complexVectorPtr += 16;
29 complexVal1 = _mm_shuffle_epi8(complexVal1, moveMask1);
30 complexVal2 = _mm_shuffle_epi8(complexVal2, moveMask2);
32 outputVal = _mm_or_si128(complexVal1, complexVal2);
34 _mm_store_si128((__m128i*)iBufferPtr, outputVal);
38 number = sixteenthPoints * 16;
39 for(; number < num_points; number++){
40 *iBufferPtr++ = *complexVectorPtr++;
46 #ifdef LV_HAVE_GENERIC
53 static inline void volk_8ic_deinterleave_real_8i_generic(
int8_t* iBuffer,
const lv_8sc_t* complexVector,
unsigned int num_points){
54 unsigned int number = 0;
56 int8_t* iBufferPtr = iBuffer;
57 for(number = 0; number < num_points; number++){
58 *iBufferPtr++ = *complexVectorPtr++;
signed char int8_t
Definition: stdint.h:75
char complex lv_8sc_t
Provide typedefs and operators for all complex types in C and C++.
Definition: volk_complex.h:52