1 #ifndef INCLUDED_volk_8ic_deinterleave_real_16i_a_H
2 #define INCLUDED_volk_8ic_deinterleave_real_16i_a_H
15 static inline void volk_8ic_deinterleave_real_16i_a_sse4_1(
int16_t* iBuffer,
const lv_8sc_t* complexVector,
unsigned int num_points){
16 unsigned int number = 0;
19 __m128i moveMask = _mm_set_epi8(0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 14, 12, 10, 8, 6, 4, 2, 0);
20 __m128i complexVal, outputVal;
22 unsigned int eighthPoints = num_points / 8;
24 for(number = 0; number < eighthPoints; number++){
25 complexVal = _mm_load_si128((__m128i*)complexVectorPtr); complexVectorPtr += 16;
27 complexVal = _mm_shuffle_epi8(complexVal, moveMask);
29 outputVal = _mm_cvtepi8_epi16(complexVal);
30 outputVal = _mm_slli_epi16(outputVal, 7);
32 _mm_store_si128((__m128i*)iBufferPtr, outputVal);
36 number = eighthPoints * 8;
37 for(; number < num_points; number++){
38 *iBufferPtr++ = ((
int16_t)*complexVectorPtr++) * 128;
45 #ifdef LV_HAVE_GENERIC
52 static inline void volk_8ic_deinterleave_real_16i_generic(
int16_t* iBuffer,
const lv_8sc_t* complexVector,
unsigned int num_points){
53 unsigned int number = 0;
54 const int8_t* complexVectorPtr = (
const int8_t*)complexVector;
56 for(number = 0; number < num_points; number++){
57 *iBufferPtr++ = ((
int16_t)(*complexVectorPtr++)) * 128;
signed short int16_t
Definition: stdint.h:76
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