1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2024-06-26 06:53:14 +00:00
This commit is contained in:
Carles Fernandez 2017-11-16 19:51:15 +01:00
parent 6d216fa5a1
commit eecfa6c582

View File

@ -60,35 +60,35 @@
#include <volk_gnsssdr/volk_gnsssdr_complex.h>
//#ifdef LV_HAVE_AVX2
//#include <immintrin.h>
//
//static inline void volk_gnsssdr_16ic_conjugate_16ic_u_avx2(lv_16sc_t* cVector, const lv_16sc_t* aVector, unsigned int num_points)
//{
// const unsigned int avx2_iters = num_points / 16;
// unsigned int i;
// lv_16sc_t* c = cVector;
// const lv_16sc_t* a = aVector;
//
// __m256i tmp;
// __m256i conjugator = _mm256_setr_epi8(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1);
//
// for (i = 0; i < avx2_iters; ++i)
// {
// tmp = _mm256_loadu_si256((__m256i*)a);
// tmp = _mm256_sign_epi8(tmp, conjugator);
// _mm256_storeu_si256((__m256i*)c, tmp);
//
// a += 16;
// c += 16;
// }
//
// for (i = avx2_iters * 16; i < num_points; ++i)
// {
// *c++ = lv_conj(*a++);
// }
//}
//#endif /* LV_HAVE_AVX2 */
#ifdef LV_HAVE_AVX2
#include <immintrin.h>
static inline void volk_gnsssdr_16ic_conjugate_16ic_u_avx2(lv_16sc_t* cVector, const lv_16sc_t* aVector, unsigned int num_points)
{
const unsigned int avx2_iters = num_points / 8;
unsigned int i;
lv_16sc_t* c = cVector;
const lv_16sc_t* a = aVector;
__m256i tmp;
__m256i conjugator = _mm256_setr_epi16(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1);
for (i = 0; i < avx2_iters; ++i)
{
tmp = _mm256_loadu_si256((__m256i*)a);
tmp = _mm256_sign_epi16(tmp, conjugator);
_mm256_storeu_si256((__m256i*)c, tmp);
a += 8;
c += 8;
}
for (i = avx2_iters * 8; i < num_points; ++i)
{
*c++ = lv_conj(*a++);
}
}
#endif /* LV_HAVE_AVX2 */
//#ifdef LV_HAVE_AVX
@ -249,35 +249,36 @@ static inline void volk_gnsssdr_16ic_conjugate_16ic_generic(lv_16sc_t* cVector,
//#endif /* LV_HAVE_AVX */
//
//
//#ifdef LV_HAVE_AVX2
//#include <immintrin.h>
//
//static inline void volk_gnsssdr_16ic_conjugate_16ic_a_avx2(lv_16sc_t* cVector, const lv_16sc_t* aVector, unsigned int num_points)
//{
// const unsigned int avx2_iters = num_points / 16;
// unsigned int i;
// lv_16sc_t* c = cVector;
// const lv_16sc_t* a = aVector;
//
// __m256i tmp;
// __m256i conjugator = _mm256_setr_epi8(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1);
//
// for (i = 0; i < avx2_iters; ++i)
// {
// tmp = _mm256_load_si256((__m256i*)a);
// tmp = _mm256_sign_epi8(tmp, conjugator);
// _mm256_store_si256((__m256i*)c, tmp);
//
// a += 16;
// c += 16;
// }
//
// for (i = avx2_iters * 16; i < num_points; ++i)
// {
// *c++ = lv_conj(*a++);
// }
//}
//#endif /* LV_HAVE_AVX2 */
#ifdef LV_HAVE_AVX2
#include <immintrin.h>
static inline void volk_gnsssdr_16ic_conjugate_16ic_a_avx2(lv_16sc_t* cVector, const lv_16sc_t* aVector, unsigned int num_points)
{
const unsigned int avx2_iters = num_points / 8;
unsigned int i;
lv_16sc_t* c = cVector;
const lv_16sc_t* a = aVector;
__m256i tmp;
__m256i conjugator = _mm256_setr_epi16(1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1, 1, -1);
for (i = 0; i < avx2_iters; ++i)
{
tmp = _mm256_load_si256((__m256i*)a);
tmp = _mm256_sign_epi16(tmp, conjugator);
_mm256_store_si256((__m256i*)c, tmp);
a += 8;
c += 8;
}
for (i = avx2_iters * 8; i < num_points; ++i)
{
*c++ = lv_conj(*a++);
}
}
#endif /* LV_HAVE_AVX2 */
//
//
#ifdef LV_HAVE_SSSE3