mirror of
https://github.com/gnss-sdr/gnss-sdr
synced 2025-02-20 21:10:09 +00:00
Code cleaning
This commit is contained in:
parent
f7f495175e
commit
51427f046a
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 32 bits vectors
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -30,7 +30,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -56,8 +56,8 @@
|
||||
#include <smmintrin.h>
|
||||
#include "CommonMacros/CommonMacros_16ic_cw_epl_corr_32fc.h"
|
||||
#include "CommonMacros/CommonMacros.h"
|
||||
/*!
|
||||
\brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation
|
||||
|
||||
/*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation
|
||||
\param input The input signal input
|
||||
\param carrier The carrier signal input
|
||||
\param E_code Early PRN code replica input
|
||||
@ -111,8 +111,8 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_sse4_1(lv_32fc_t*
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x1 = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
input_ptr += 4;
|
||||
@ -202,7 +202,6 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_sse4_1(lv_32fc_t*
|
||||
*P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++));
|
||||
*L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++));
|
||||
}
|
||||
|
||||
}
|
||||
#endif /* LV_HAVE_SSE4_1 */
|
||||
|
||||
@ -249,6 +248,7 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_generic(lv_32fc_t* E
|
||||
}
|
||||
}
|
||||
#endif /* LV_HAVE_GENERIC */
|
||||
|
||||
#endif /* INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_u_H */
|
||||
|
||||
|
||||
@ -320,8 +320,8 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_sse4_1(lv_32fc_t*
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x1 = _mm_load_si128((__m128i*)input_ptr);
|
||||
input_ptr += 4;
|
||||
@ -411,7 +411,6 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_sse4_1(lv_32fc_t*
|
||||
*P_out_ptr += (lv_32fc_t) (bb_signal_sample * (*P_code_ptr++));
|
||||
*L_out_ptr += (lv_32fc_t) (bb_signal_sample * (*L_code_ptr++));
|
||||
}
|
||||
|
||||
}
|
||||
#endif /* LV_HAVE_SSE4_1 */
|
||||
|
||||
@ -458,4 +457,5 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_generic(lv_32fc_t*
|
||||
}
|
||||
}
|
||||
#endif /* LV_HAVE_GENERIC */
|
||||
|
||||
#endif /* INCLUDED_gnsssdr_volk_gnsssdr_16ic_x5_cw_epl_corr_32fc_x3_a_H */
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 32 bits vectors using different methods: inside u_sse4_1_first there is one method, inside u_sse4_1_second there is another... This protokernel has been created to test the performance of different methods.
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -30,7 +30,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -280,8 +280,8 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_second
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x1 = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
input_ptr += 4;
|
||||
@ -519,7 +519,8 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_third(
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(index = 0;index < 8*sse_iters; index+=8){
|
||||
for(index = 0;index < 8*sse_iters; index+=8)
|
||||
{
|
||||
indexPlus4 = index + 4;
|
||||
//Perform the carrier wipe-off
|
||||
x1 = _mm_lddqu_si128((__m128i*)&input_ptr[index]);
|
||||
@ -739,8 +740,8 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_fourth
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x1 = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
input_ptr += 4;
|
||||
@ -974,8 +975,8 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_fifth(
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x1 = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
input_ptr += 4;
|
||||
@ -1139,8 +1140,8 @@ static inline void volk_gnsssdr_16ic_x5_cw_epl_corr_TEST_32fc_x3_u_sse4_1_sixth(
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x1 = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
input_ptr += 4;
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_16ic_x7_cw_vepl_corr_32fc_x5.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 32 bits vectors and returns float32 values.
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -34,7 +34,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_32fc_convert_16ic.h
|
||||
* \brief Volk protokernel: converts float32 complex values to 16 integer complex values taking care of overflow
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
@ -17,7 +17,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -77,7 +77,8 @@ static inline void volk_gnsssdr_32fc_convert_16ic_u_sse2(lv_16sc_t* outputVector
|
||||
outputVectorPtr += 8;
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < (num_points%4)*2; i++){
|
||||
for(unsigned int i = 0; i < (num_points%4)*2; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
@ -127,7 +128,8 @@ static inline void volk_gnsssdr_32fc_convert_16ic_u_sse(lv_16sc_t* outputVector,
|
||||
outputVectorPtr += 8;
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < (num_points%4)*2; i++){
|
||||
for(unsigned int i = 0; i < (num_points%4)*2; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
@ -150,7 +152,8 @@ static inline void volk_gnsssdr_32fc_convert_16ic_generic(lv_16sc_t* outputVecto
|
||||
float min_val = -32768;
|
||||
float max_val = 32767;
|
||||
|
||||
for(unsigned int i = 0; i < num_points*2; i++){
|
||||
for(unsigned int i = 0; i < num_points*2; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
@ -193,7 +196,8 @@ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse2(lv_16sc_t* outputVector
|
||||
__m128 vmin_val = _mm_set_ps1(min_val);
|
||||
__m128 vmax_val = _mm_set_ps1(max_val);
|
||||
|
||||
for(unsigned int i = 0;i < sse_iters; i++){
|
||||
for(unsigned int i = 0;i < sse_iters; i++)
|
||||
{
|
||||
inputVal1 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal2 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
|
||||
@ -210,7 +214,8 @@ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse2(lv_16sc_t* outputVector
|
||||
outputVectorPtr += 8;
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < (num_points%4)*2; i++){
|
||||
for(unsigned int i = 0; i < (num_points%4)*2; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
@ -228,7 +233,8 @@ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse2(lv_16sc_t* outputVector
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_convert_16ic_a_sse(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_convert_16ic_a_sse(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points/4;
|
||||
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
@ -243,7 +249,8 @@ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse(lv_16sc_t* outputVector,
|
||||
__m128 vmin_val = _mm_set_ps1(min_val);
|
||||
__m128 vmax_val = _mm_set_ps1(max_val);
|
||||
|
||||
for(unsigned int i = 0;i < sse_iters; i++){
|
||||
for(unsigned int i = 0;i < sse_iters; i++)
|
||||
{
|
||||
inputVal1 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal2 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
|
||||
@ -260,7 +267,8 @@ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse(lv_16sc_t* outputVector,
|
||||
outputVectorPtr += 8;
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < (num_points%4)*2; i++){
|
||||
for(unsigned int i = 0; i < (num_points%4)*2; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
@ -277,13 +285,15 @@ static inline void volk_gnsssdr_32fc_convert_16ic_a_sse(lv_16sc_t* outputVector,
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_convert_16ic_a_generic(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_convert_16ic_a_generic(lv_16sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points)
|
||||
{
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
int16_t* outputVectorPtr = (int16_t*)outputVector;
|
||||
float min_val = -32768;
|
||||
float max_val = 32767;
|
||||
|
||||
for(unsigned int i = 0; i < num_points*2; i++){
|
||||
for(unsigned int i = 0; i < num_points*2; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_32fc_convert_8ic.h
|
||||
* \brief Volk protokernel: converts float32 complex values to 8 integer complex values taking care of overflow
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
@ -17,7 +17,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -45,7 +45,8 @@
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_convert_8ic_u_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_convert_8ic_u_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points/8;
|
||||
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
@ -61,7 +62,8 @@ static inline void volk_gnsssdr_32fc_convert_8ic_u_sse2(lv_8sc_t* outputVector,
|
||||
__m128 vmin_val = _mm_set_ps1(min_val);
|
||||
__m128 vmax_val = _mm_set_ps1(max_val);
|
||||
|
||||
for(unsigned int i = 0;i < sse_iters; i++){
|
||||
for(unsigned int i = 0;i < sse_iters; i++)
|
||||
{
|
||||
inputVal1 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal2 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal3 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
@ -86,7 +88,8 @@ static inline void volk_gnsssdr_32fc_convert_8ic_u_sse2(lv_8sc_t* outputVector,
|
||||
outputVectorPtr += 16;
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < (num_points%4)*4; i++){
|
||||
for(unsigned int i = 0; i < (num_points%4)*4; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
@ -103,13 +106,15 @@ static inline void volk_gnsssdr_32fc_convert_8ic_u_sse2(lv_8sc_t* outputVector,
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_convert_8ic_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_convert_8ic_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points)
|
||||
{
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
int8_t* outputVectorPtr = (int8_t*)outputVector;
|
||||
float min_val = -128;
|
||||
float max_val = 127;
|
||||
|
||||
for(unsigned int i = 0; i < num_points*2; i++){
|
||||
for(unsigned int i = 0; i < num_points*2; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
@ -137,7 +142,8 @@ static inline void volk_gnsssdr_32fc_convert_8ic_generic(lv_8sc_t* outputVector,
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_convert_8ic_a_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_convert_8ic_a_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points/8;
|
||||
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
@ -153,7 +159,8 @@ static inline void volk_gnsssdr_32fc_convert_8ic_a_sse2(lv_8sc_t* outputVector,
|
||||
__m128 vmin_val = _mm_set_ps1(min_val);
|
||||
__m128 vmax_val = _mm_set_ps1(max_val);
|
||||
|
||||
for(unsigned int i = 0;i < sse_iters; i++){
|
||||
for(unsigned int i = 0;i < sse_iters; i++)
|
||||
{
|
||||
inputVal1 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal2 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal3 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
@ -178,7 +185,8 @@ static inline void volk_gnsssdr_32fc_convert_8ic_a_sse2(lv_8sc_t* outputVector,
|
||||
outputVectorPtr += 16;
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i < (num_points%4)*4; i++){
|
||||
for(unsigned int i = 0; i < (num_points%4)*4; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
@ -195,13 +203,15 @@ static inline void volk_gnsssdr_32fc_convert_8ic_a_sse2(lv_8sc_t* outputVector,
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_convert_8ic_a_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_convert_8ic_a_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, unsigned int num_points)
|
||||
{
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
int8_t* outputVectorPtr = (int8_t*)outputVector;
|
||||
float min_val = -128;
|
||||
float max_val = 127;
|
||||
|
||||
for(unsigned int i = 0; i < num_points*2; i++){
|
||||
for(unsigned int i = 0; i < num_points*2; i++)
|
||||
{
|
||||
if(inputVectorPtr[i] > max_val)
|
||||
inputVectorPtr[i] = max_val;
|
||||
else if(inputVectorPtr[i] < min_val)
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_32fc_s32f_convert_8ic.h
|
||||
* \brief Volk protokernel: converts float32 complex values to 8 integer complex values taking care of overflow
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
@ -17,7 +17,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -45,7 +45,8 @@
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_s32f_convert_8ic_u_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_s32f_convert_8ic_u_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points/8;
|
||||
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
@ -62,7 +63,8 @@ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_u_sse2(lv_8sc_t* outputVec
|
||||
__m128 vmin_val = _mm_set_ps1(min_val);
|
||||
__m128 vmax_val = _mm_set_ps1(max_val);
|
||||
|
||||
for(unsigned int i = 0;i < sse_iters; i++){
|
||||
for(unsigned int i = 0;i < sse_iters; i++)
|
||||
{
|
||||
inputVal1 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal2 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal3 = _mm_loadu_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
@ -92,7 +94,8 @@ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_u_sse2(lv_8sc_t* outputVec
|
||||
}
|
||||
|
||||
float scaled = 0;
|
||||
for(unsigned int i = 0; i < (num_points%4)*4; i++){
|
||||
for(unsigned int i = 0; i < (num_points%4)*4; i++)
|
||||
{
|
||||
scaled = inputVectorPtr[i]/scalar;
|
||||
if(scaled > max_val)
|
||||
scaled = max_val;
|
||||
@ -110,14 +113,16 @@ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_u_sse2(lv_8sc_t* outputVec
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_s32f_convert_8ic_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_s32f_convert_8ic_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points)
|
||||
{
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
int8_t* outputVectorPtr = (int8_t*)outputVector;
|
||||
float scaled = 0;
|
||||
float min_val = -128;
|
||||
float max_val = 127;
|
||||
|
||||
for(unsigned int i = 0; i < num_points*2; i++){
|
||||
for(unsigned int i = 0; i < num_points*2; i++)
|
||||
{
|
||||
scaled = (inputVectorPtr[i])/scalar;
|
||||
if(scaled > max_val)
|
||||
scaled = max_val;
|
||||
@ -146,7 +151,8 @@ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_generic(lv_8sc_t* outputVe
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_sse2(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points/8;
|
||||
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
@ -163,7 +169,8 @@ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_sse2(lv_8sc_t* outputVec
|
||||
__m128 vmin_val = _mm_set_ps1(min_val);
|
||||
__m128 vmax_val = _mm_set_ps1(max_val);
|
||||
|
||||
for(unsigned int i = 0;i < sse_iters; i++){
|
||||
for(unsigned int i = 0;i < sse_iters; i++)
|
||||
{
|
||||
inputVal1 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal2 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
inputVal3 = _mm_load_ps((float*)inputVectorPtr); inputVectorPtr += 4;
|
||||
@ -193,7 +200,8 @@ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_sse2(lv_8sc_t* outputVec
|
||||
}
|
||||
|
||||
float scaled = 0;
|
||||
for(unsigned int i = 0; i < (num_points%4)*4; i++){
|
||||
for(unsigned int i = 0; i < (num_points%4)*4; i++)
|
||||
{
|
||||
scaled = inputVectorPtr[i]/scalar;
|
||||
if(scaled > max_val)
|
||||
scaled = max_val;
|
||||
@ -211,14 +219,16 @@ static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_sse2(lv_8sc_t* outputVec
|
||||
\param outputVector The 16 bit output data buffer
|
||||
\param num_points The number of data values to be converted
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_32fc_s32f_convert_8ic_a_generic(lv_8sc_t* outputVector, const lv_32fc_t* inputVector, const float scalar, unsigned int num_points)
|
||||
{
|
||||
float* inputVectorPtr = (float*)inputVector;
|
||||
int8_t* outputVectorPtr = (int8_t*)outputVector;
|
||||
float scaled = 0;
|
||||
float min_val = -128;
|
||||
float max_val = 127;
|
||||
|
||||
for(unsigned int i = 0; i < num_points*2; i++){
|
||||
for(unsigned int i = 0; i < num_points*2; i++)
|
||||
{
|
||||
scaled = inputVectorPtr[i]/scalar;
|
||||
if(scaled > max_val)
|
||||
scaled = max_val;
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc
|
||||
* \brief Volk protokernel: replaces the tracking function for update_local_code
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that replaces the tracking function for update_local_code
|
||||
@ -19,7 +19,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -49,17 +49,8 @@
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of complex values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_u_sse4_1(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points){
|
||||
|
||||
// float* pointer1 = (float*)&d_very_early_late_spc_chips;
|
||||
// *pointer1 = 1;
|
||||
// float* pointer2 = (float*)&code_length_half_chips;
|
||||
// *pointer2 = 6;
|
||||
// float* pointer3 = (float*)&code_phase_step_half_chips;
|
||||
// *pointer3 = 7;
|
||||
// float* pointer4 = (float*)&tcode_half_chips_input;
|
||||
// *pointer4 = 8;
|
||||
|
||||
static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_u_sse4_1(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 4;
|
||||
|
||||
__m128 tquot, fmod_num, fmod_result, associated_chip_index_array;
|
||||
@ -123,17 +114,8 @@ static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_u_sse4_1(lv_
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of complex values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_generic(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points){
|
||||
|
||||
// float* pointer1 = (float*)&d_very_early_late_spc_chips;
|
||||
// *pointer1 = 1;
|
||||
// float* pointer2 = (float*)&code_length_half_chips;
|
||||
// *pointer2 = 6;
|
||||
// float* pointer3 = (float*)&code_phase_step_half_chips;
|
||||
// *pointer3 = 7;
|
||||
// float* pointer4 = (float*)&tcode_half_chips_input;
|
||||
// *pointer4 = 8;
|
||||
|
||||
static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_generic(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points)
|
||||
{
|
||||
int associated_chip_index;
|
||||
float tcode_half_chips = tcode_half_chips_input;
|
||||
float d_very_early_late_spc_chips_multiplied_by_2 = 2*d_very_early_late_spc_chips;
|
||||
@ -165,17 +147,8 @@ static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_generic(lv_3
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of complex values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_sse4_1(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points){
|
||||
|
||||
// float* pointer1 = (float*)&d_very_early_late_spc_chips;
|
||||
// *pointer1 = 1;
|
||||
// float* pointer2 = (float*)&code_length_half_chips;
|
||||
// *pointer2 = 6;
|
||||
// float* pointer3 = (float*)&code_phase_step_half_chips;
|
||||
// *pointer3 = 7;
|
||||
// float* pointer4 = (float*)&tcode_half_chips_input;
|
||||
// *pointer4 = 8;
|
||||
|
||||
static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_sse4_1(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 4;
|
||||
|
||||
__m128 tquot, fmod_num, fmod_result, associated_chip_index_array;
|
||||
@ -240,17 +213,8 @@ static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_sse4_1(lv_
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of complex values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_generic(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points){
|
||||
|
||||
// float* pointer1 = (float*)&d_very_early_late_spc_chips;
|
||||
// *pointer1 = 1;
|
||||
// float* pointer2 = (float*)&code_length_half_chips;
|
||||
// *pointer2 = 6;
|
||||
// float* pointer3 = (float*)&code_phase_step_half_chips;
|
||||
// *pointer3 = 7;
|
||||
// float* pointer4 = (float*)&tcode_half_chips_input;
|
||||
// *pointer4 = 8;
|
||||
|
||||
static inline void volk_gnsssdr_32fc_s32f_x4_update_local_code_32fc_a_generic(lv_32fc_t* d_very_early_code, const float d_very_early_late_spc_chips, const float code_length_half_chips, const float code_phase_step_half_chips, const float tcode_half_chips_input, const lv_32fc_t* d_ca_code, unsigned int num_points)
|
||||
{
|
||||
int associated_chip_index;
|
||||
float tcode_half_chips = tcode_half_chips_input;
|
||||
float d_very_early_late_spc_chips_multiplied_by_2 = 2*d_very_early_late_spc_chips;
|
||||
|
@ -3,7 +3,7 @@
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt and Late correlation with 64 bits vectors
|
||||
* \authors <ul>
|
||||
* <li> Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -31,7 +31,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -3,7 +3,7 @@
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the VE, Early, Prompt, Late and VL correlation with 64 bits vectors
|
||||
* \authors <ul>
|
||||
* <li> Javier Arribas, 2011. jarribas(at)cttc.es
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -35,7 +35,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_64f_accumulator_64f.h
|
||||
* \brief Volk protokernel: 64 bits (double) scalar accumulator
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that implements an accumulator of char values
|
||||
@ -19,7 +19,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8i_accumulator_s8i.h
|
||||
* \brief Volk protokernel: 8 bits (char) scalar accumulator
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that implements an accumulator of char values
|
||||
@ -19,7 +19,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -47,7 +47,8 @@
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_u_sse3(char* result, const char* inputBuffer, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_u_sse3(char* result, const char* inputBuffer, unsigned int num_points)
|
||||
{
|
||||
char returnValue = 0;
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
@ -57,18 +58,21 @@ static inline void volk_gnsssdr_8i_accumulator_s8i_u_sse3(char* result, const ch
|
||||
__m128i accumulator = _mm_setzero_si128();
|
||||
__m128i aVal = _mm_setzero_si128();
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++){
|
||||
for(unsigned int number = 0; number < sse_iters; number++)
|
||||
{
|
||||
aVal = _mm_lddqu_si128((__m128i*)aPtr);
|
||||
accumulator = _mm_add_epi8(accumulator, aVal);
|
||||
aPtr += 16;
|
||||
}
|
||||
_mm_storeu_si128((__m128i*)tempBuffer,accumulator);
|
||||
|
||||
for(unsigned int i = 0; i<16; ++i){
|
||||
for(unsigned int i = 0; i<16; ++i)
|
||||
{
|
||||
returnValue += tempBuffer[i];
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i<(num_points % 16); ++i){
|
||||
for(unsigned int i = 0; i<(num_points % 16); ++i)
|
||||
{
|
||||
returnValue += (*aPtr++);
|
||||
}
|
||||
|
||||
@ -83,11 +87,13 @@ static inline void volk_gnsssdr_8i_accumulator_s8i_u_sse3(char* result, const ch
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_generic(char* result, const char* inputBuffer, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_generic(char* result, const char* inputBuffer, unsigned int num_points)
|
||||
{
|
||||
const char* aPtr = inputBuffer;
|
||||
char returnValue = 0;
|
||||
|
||||
for(unsigned int number = 0;number < num_points; number++){
|
||||
for(unsigned int number = 0;number < num_points; number++)
|
||||
{
|
||||
returnValue += (*aPtr++);
|
||||
}
|
||||
*result = returnValue;
|
||||
@ -112,7 +118,8 @@ static inline void volk_gnsssdr_8i_accumulator_s8i_generic(char* result, const c
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_a_sse3(char* result, const char* inputBuffer, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_a_sse3(char* result, const char* inputBuffer, unsigned int num_points)
|
||||
{
|
||||
char returnValue = 0;
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
@ -122,7 +129,8 @@ static inline void volk_gnsssdr_8i_accumulator_s8i_a_sse3(char* result, const ch
|
||||
__m128i accumulator = _mm_setzero_si128();
|
||||
__m128i aVal = _mm_setzero_si128();
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++){
|
||||
for(unsigned int number = 0; number < sse_iters; number++)
|
||||
{
|
||||
aVal = _mm_load_si128((__m128i*)aPtr);
|
||||
accumulator = _mm_add_epi8(accumulator, aVal);
|
||||
aPtr += 16;
|
||||
@ -133,7 +141,8 @@ static inline void volk_gnsssdr_8i_accumulator_s8i_a_sse3(char* result, const ch
|
||||
returnValue += tempBuffer[i];
|
||||
}
|
||||
|
||||
for(unsigned int i = 0; i<(num_points % 16); ++i){
|
||||
for(unsigned int i = 0; i<(num_points % 16); ++i)
|
||||
{
|
||||
returnValue += (*aPtr++);
|
||||
}
|
||||
|
||||
@ -148,11 +157,13 @@ static inline void volk_gnsssdr_8i_accumulator_s8i_a_sse3(char* result, const ch
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_a_generic(char* result, const char* inputBuffer, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_a_generic(char* result, const char* inputBuffer, unsigned int num_points)
|
||||
{
|
||||
const char* aPtr = inputBuffer;
|
||||
char returnValue = 0;
|
||||
|
||||
for(unsigned int number = 0;number < num_points; number++){
|
||||
for(unsigned int number = 0;number < num_points; number++)
|
||||
{
|
||||
returnValue += (*aPtr++);
|
||||
}
|
||||
*result = returnValue;
|
||||
@ -167,8 +178,9 @@ static inline void volk_gnsssdr_8i_accumulator_s8i_a_generic(char* result, const
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
extern void volk_gnsssdr_8i_accumulator_s8i_a_orc_impl(short* result, const char* inputBuffer, unsigned int num_points);
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_u_orc(char* result, const char* inputBuffer, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8i_accumulator_s8i_u_orc(char* result, const char* inputBuffer, unsigned int num_points)
|
||||
{
|
||||
short res = 0;
|
||||
char* resc = (char*)&res;
|
||||
resc++;
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8i_index_max_16u.h
|
||||
* \brief Volk protokernel: calculates the index of the maximum value in a group of 8 bits (char) scalars
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that returns the index of the maximum value of a group of 8 bits (char) scalars
|
||||
@ -19,7 +19,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8i_max_s8i.h
|
||||
* \brief Volk protokernel: calculates the maximum value in a group of 8 bits (char) scalars
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that returns the maximum value of a group of 8 bits (char) scalars
|
||||
@ -19,7 +19,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -47,8 +47,10 @@
|
||||
\param src0 The buffer of data to be analysed
|
||||
\param num_points The number of values in src0 to be analysed
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_max_s8i_u_sse4_1(char target, const char* src0, unsigned int num_points) {
|
||||
if(num_points > 0){
|
||||
static inline void volk_gnsssdr_8i_max_s8i_u_sse4_1(char target, const char* src0, unsigned int num_points)
|
||||
{
|
||||
if(num_points > 0)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
char* inputPtr = (char*)src0;
|
||||
@ -97,8 +99,10 @@ static inline void volk_gnsssdr_8i_max_s8i_u_sse4_1(char target, const char* src
|
||||
\param src0 The buffer of data to be analysed
|
||||
\param num_points The number of values in src0 to be analysed
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_max_s8i_u_sse2(char target, const char* src0, unsigned int num_points) {
|
||||
if(num_points > 0){
|
||||
static inline void volk_gnsssdr_8i_max_s8i_u_sse2(char target, const char* src0, unsigned int num_points)
|
||||
{
|
||||
if(num_points > 0)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
char* inputPtr = (char*)src0;
|
||||
@ -157,7 +161,8 @@ static inline void volk_gnsssdr_8i_max_s8i_u_sse2(char target, const char* src0,
|
||||
\param src0 The buffer of data to be analysed
|
||||
\param num_points The number of values in src0 to be analysed
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_max_s8i_generic(char target, const char* src0, unsigned int num_points) {
|
||||
static inline void volk_gnsssdr_8i_max_s8i_generic(char target, const char* src0, unsigned int num_points)
|
||||
{
|
||||
if(num_points > 0)
|
||||
{
|
||||
char max = src0[0];
|
||||
@ -193,8 +198,10 @@ static inline void volk_gnsssdr_8i_max_s8i_generic(char target, const char* src0
|
||||
\param src0 The buffer of data to be analysed
|
||||
\param num_points The number of values in src0 to be analysed
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_max_s8i_a_sse4_1(char target, const char* src0, unsigned int num_points) {
|
||||
if(num_points > 0){
|
||||
static inline void volk_gnsssdr_8i_max_s8i_a_sse4_1(char target, const char* src0, unsigned int num_points)
|
||||
{
|
||||
if(num_points > 0)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
char* inputPtr = (char*)src0;
|
||||
@ -243,8 +250,10 @@ static inline void volk_gnsssdr_8i_max_s8i_a_sse4_1(char target, const char* src
|
||||
\param src0 The buffer of data to be analysed
|
||||
\param num_points The number of values in src0 to be analysed
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_max_s8i_a_sse2(char target, const char* src0, unsigned int num_points) {
|
||||
if(num_points > 0){
|
||||
static inline void volk_gnsssdr_8i_max_s8i_a_sse2(char target, const char* src0, unsigned int num_points)
|
||||
{
|
||||
if(num_points > 0)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
char* inputPtr = (char*)src0;
|
||||
@ -303,13 +312,13 @@ static inline void volk_gnsssdr_8i_max_s8i_a_sse2(char target, const char* src0,
|
||||
\param src0 The buffer of data to be analysed
|
||||
\param num_points The number of values in src0 to be analysed
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_max_s8i_a_generic(char target, const char* src0, unsigned int num_points) {
|
||||
static inline void volk_gnsssdr_8i_max_s8i_a_generic(char target, const char* src0, unsigned int num_points)
|
||||
{
|
||||
if(num_points > 0)
|
||||
{
|
||||
if(num_points > 0)
|
||||
{
|
||||
char max = src0[0];
|
||||
|
||||
for(unsigned int i = 1; i < num_points; ++i)
|
||||
{
|
||||
if(src0[i] > max)
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8i_x2_add_8i.h
|
||||
* \brief Volk protokernel: adds pairs of 8 bits (char) scalars
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that adds pairs of 8 bits (char) scalars
|
||||
@ -19,7 +19,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -47,8 +47,8 @@
|
||||
\param bVector One of the vectors to be added
|
||||
\param num_points The number of values in aVector and bVector to be added together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_u_sse2(char* cVector, const char* aVector, const char* bVector, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_u_sse2(char* cVector, const char* aVector, const char* bVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
char* cPtr = cVector;
|
||||
@ -57,8 +57,8 @@ static inline void volk_gnsssdr_8i_x2_add_8i_u_sse2(char* cVector, const char* a
|
||||
|
||||
__m128i aVal, bVal, cVal;
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++)
|
||||
{
|
||||
aVal = _mm_loadu_si128((__m128i*)aPtr);
|
||||
bVal = _mm_loadu_si128((__m128i*)bPtr);
|
||||
|
||||
@ -86,13 +86,15 @@ static inline void volk_gnsssdr_8i_x2_add_8i_u_sse2(char* cVector, const char* a
|
||||
\param bVector One of the vectors to be added
|
||||
\param num_points The number of values in aVector and bVector to be added together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_generic(char* cVector, const char* aVector, const char* bVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_generic(char* cVector, const char* aVector, const char* bVector, unsigned int num_points)
|
||||
{
|
||||
char* cPtr = cVector;
|
||||
const char* aPtr = aVector;
|
||||
const char* bPtr= bVector;
|
||||
unsigned int number = 0;
|
||||
|
||||
for(number = 0; number < num_points; number++){
|
||||
for(number = 0; number < num_points; number++)
|
||||
{
|
||||
*cPtr++ = (*aPtr++) + (*bPtr++);
|
||||
}
|
||||
}
|
||||
@ -116,8 +118,8 @@ static inline void volk_gnsssdr_8i_x2_add_8i_generic(char* cVector, const char*
|
||||
\param bVector One of the vectors to be added
|
||||
\param num_points The number of values in aVector and bVector to be added together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_a_sse2(char* cVector, const char* aVector, const char* bVector, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_a_sse2(char* cVector, const char* aVector, const char* bVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
char* cPtr = cVector;
|
||||
@ -126,8 +128,8 @@ static inline void volk_gnsssdr_8i_x2_add_8i_a_sse2(char* cVector, const char* a
|
||||
|
||||
__m128i aVal, bVal, cVal;
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++)
|
||||
{
|
||||
aVal = _mm_load_si128((__m128i*)aPtr);
|
||||
bVal = _mm_load_si128((__m128i*)bPtr);
|
||||
|
||||
@ -155,13 +157,15 @@ static inline void volk_gnsssdr_8i_x2_add_8i_a_sse2(char* cVector, const char* a
|
||||
\param bVector One of the vectors to be added
|
||||
\param num_points The number of values in aVector and bVector to be added together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_a_generic(char* cVector, const char* aVector, const char* bVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_a_generic(char* cVector, const char* aVector, const char* bVector, unsigned int num_points)
|
||||
{
|
||||
char* cPtr = cVector;
|
||||
const char* aPtr = aVector;
|
||||
const char* bPtr= bVector;
|
||||
unsigned int number = 0;
|
||||
|
||||
for(number = 0; number < num_points; number++){
|
||||
for(number = 0; number < num_points; number++)
|
||||
{
|
||||
*cPtr++ = (*aPtr++) + (*bPtr++);
|
||||
}
|
||||
}
|
||||
@ -176,7 +180,8 @@ static inline void volk_gnsssdr_8i_x2_add_8i_a_generic(char* cVector, const char
|
||||
\param num_points The number of values in aVector and bVector to be added together and stored into cVector
|
||||
*/
|
||||
extern void volk_gnsssdr_8i_x2_add_8i_a_orc_impl(char* cVector, const char* aVector, const char* bVector, unsigned int num_points);
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_u_orc(char* cVector, const char* aVector, const char* bVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8i_x2_add_8i_u_orc(char* cVector, const char* aVector, const char* bVector, unsigned int num_points)
|
||||
{
|
||||
volk_gnsssdr_8i_x2_add_8i_a_orc_impl(cVector, aVector, bVector, num_points);
|
||||
}
|
||||
#endif /* LV_HAVE_ORC */
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_conjugate_8ic.h
|
||||
* \brief Volk protokernel: calculates the conjugate of a 16 bits vector
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that calculates the conjugate of a
|
||||
@ -20,7 +20,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -48,7 +48,8 @@
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_u_avx(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_u_avx(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
lv_8sc_t* c = cVector;
|
||||
@ -90,7 +91,8 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_u_avx(lv_8sc_t* cVector, const
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_u_ssse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_u_ssse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
lv_8sc_t* c = cVector;
|
||||
@ -124,7 +126,8 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_u_ssse3(lv_8sc_t* cVector, con
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_u_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_u_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
lv_8sc_t* c = cVector;
|
||||
@ -159,12 +162,14 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_u_sse3(lv_8sc_t* cVector, cons
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
lv_8sc_t* cPtr = cVector;
|
||||
const lv_8sc_t* aPtr = aVector;
|
||||
unsigned int number = 0;
|
||||
|
||||
for(number = 0; number < num_points; number++){
|
||||
for(number = 0; number < num_points; number++)
|
||||
{
|
||||
*cPtr++ = lv_conj(*aPtr++);
|
||||
}
|
||||
}
|
||||
@ -188,7 +193,8 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_generic(lv_8sc_t* cVector, con
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_a_avx(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_a_avx(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
lv_8sc_t* c = cVector;
|
||||
@ -230,7 +236,8 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_avx(lv_8sc_t* cVector, const
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_a_ssse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_a_ssse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
lv_8sc_t* c = cVector;
|
||||
@ -264,7 +271,8 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_ssse3(lv_8sc_t* cVector, con
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_a_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_a_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
lv_8sc_t* c = cVector;
|
||||
@ -299,12 +307,14 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_sse3(lv_8sc_t* cVector, cons
|
||||
\param aVector Vector to be conjugated
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
lv_8sc_t* cPtr = cVector;
|
||||
const lv_8sc_t* aPtr = aVector;
|
||||
unsigned int number = 0;
|
||||
|
||||
for(number = 0; number < num_points; number++){
|
||||
for(number = 0; number < num_points; number++)
|
||||
{
|
||||
*cPtr++ = lv_conj(*aPtr++);
|
||||
}
|
||||
}
|
||||
@ -318,7 +328,8 @@ static inline void volk_gnsssdr_8ic_conjugate_8ic_a_generic(lv_8sc_t* cVector, c
|
||||
\param num_points The number of unsigned char values in aVector to be conjugated and stored into cVector
|
||||
*/
|
||||
extern void volk_gnsssdr_8ic_conjugate_8ic_a_orc_impl(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points);
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_conjugate_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, unsigned int num_points)
|
||||
{
|
||||
volk_gnsssdr_8ic_conjugate_8ic_a_orc_impl(cVector, aVector, num_points);
|
||||
}
|
||||
#endif /* LV_HAVE_ORC */
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_magnitude_squared_8i.h
|
||||
* \brief Volk protokernel: calculates the magnitude squared of a 16 bits vector
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that calculates the magnitude squared of a
|
||||
@ -21,7 +21,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -49,8 +49,8 @@
|
||||
\param magnitudeVector The vector containing the real output values
|
||||
\param num_points The number of complex values in complexVector to be calculated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_sse3(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_sse3(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
const char* complexVectorPtr = (char*)complexVector;
|
||||
@ -89,8 +89,6 @@ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_sse3(char* magnitudeV
|
||||
_mm_storeu_si128((__m128i*)magnitudeVectorPtr, result8);
|
||||
|
||||
magnitudeVectorPtr += 16;
|
||||
|
||||
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i<(num_points % 16); ++i)
|
||||
@ -155,11 +153,13 @@ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_sse3(char* magnitudeV
|
||||
\param magnitudeVector The vector containing the real output values
|
||||
\param num_points The number of complex values in complexVector to be calculated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_generic(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_generic(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points)
|
||||
{
|
||||
const char* complexVectorPtr = (char*)complexVector;
|
||||
char* magnitudeVectorPtr = magnitudeVector;
|
||||
|
||||
for(unsigned int number = 0; number < num_points; number++){
|
||||
for(unsigned int number = 0; number < num_points; number++)
|
||||
{
|
||||
const char real = *complexVectorPtr++;
|
||||
const char imag = *complexVectorPtr++;
|
||||
*magnitudeVectorPtr++ = (real*real) + (imag*imag);
|
||||
@ -185,8 +185,8 @@ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_generic(char* magnitude
|
||||
\param magnitudeVector The vector containing the real output values
|
||||
\param num_points The number of complex values in complexVector to be calculated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_sse3(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_sse3(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
const char* complexVectorPtr = (char*)complexVector;
|
||||
@ -225,8 +225,6 @@ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_sse3(char* magnitudeV
|
||||
_mm_store_si128((__m128i*)magnitudeVectorPtr, result8);
|
||||
|
||||
magnitudeVectorPtr += 16;
|
||||
|
||||
|
||||
}
|
||||
|
||||
for (unsigned int i = 0; i<(num_points % 16); ++i)
|
||||
@ -291,11 +289,13 @@ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_sse3(char* magnitudeV
|
||||
\param magnitudeVector The vector containing the real output values
|
||||
\param num_points The number of complex values in complexVector to be calculated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_generic(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_generic(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points)
|
||||
{
|
||||
const char* complexVectorPtr = (char*)complexVector;
|
||||
char* magnitudeVectorPtr = magnitudeVector;
|
||||
|
||||
for(unsigned int number = 0; number < num_points; number++){
|
||||
for(unsigned int number = 0; number < num_points; number++)
|
||||
{
|
||||
const char real = *complexVectorPtr++;
|
||||
const char imag = *complexVectorPtr++;
|
||||
*magnitudeVectorPtr++ = (real*real) + (imag*imag);
|
||||
@ -311,7 +311,8 @@ static inline void volk_gnsssdr_8ic_magnitude_squared_8i_a_generic(char* magnitu
|
||||
\param num_points The number of complex values in complexVector to be calculated and stored into cVector
|
||||
*/
|
||||
extern void volk_gnsssdr_8ic_magnitude_squared_8i_a_orc_impl(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points);
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_orc(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_magnitude_squared_8i_u_orc(char* magnitudeVector, const lv_8sc_t* complexVector, unsigned int num_points)
|
||||
{
|
||||
volk_gnsssdr_8ic_magnitude_squared_8i_a_orc_impl(magnitudeVector, complexVector, num_points);
|
||||
}
|
||||
#endif /* LV_HAVE_ORC */
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_s8ic_multiply_8ic.h
|
||||
* \brief Volk protokernel: multiplies a group of 16 bits vectors by one constant vector
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that multiplies a group of 16 bits vectors
|
||||
@ -20,7 +20,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -50,8 +50,8 @@
|
||||
\param scalar The complex scalar to multiply aVector
|
||||
\param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
__m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc;
|
||||
@ -66,8 +66,8 @@ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_sse3(lv_8sc_t* cVector,
|
||||
imagy = _mm_and_si128 (imagy, mult1);
|
||||
realy = _mm_and_si128 (y, mult1);
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_lddqu_si128((__m128i*)a);
|
||||
|
||||
imagx = _mm_srli_si128 (x, 1);
|
||||
@ -109,8 +109,8 @@ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_sse3(lv_8sc_t* cVector,
|
||||
\param scalar The complex scalar to multiply aVector
|
||||
\param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points)
|
||||
{
|
||||
/*lv_8sc_t* cPtr = cVector;
|
||||
const lv_8sc_t* aPtr = aVector;
|
||||
|
||||
@ -124,7 +124,8 @@ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_generic(lv_8sc_t* cVector,
|
||||
unsigned int number = num_points;
|
||||
|
||||
// unwrap loop
|
||||
while (number >= 8){
|
||||
while (number >= 8)
|
||||
{
|
||||
*cPtr++ = (*aPtr++) * scalar;
|
||||
*cPtr++ = (*aPtr++) * scalar;
|
||||
*cPtr++ = (*aPtr++) * scalar;
|
||||
@ -162,8 +163,8 @@ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_generic(lv_8sc_t* cVector,
|
||||
\param scalar The complex scalar to multiply aVector
|
||||
\param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_sse3(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
__m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc;
|
||||
@ -178,8 +179,8 @@ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_sse3(lv_8sc_t* cVector,
|
||||
imagy = _mm_and_si128 (imagy, mult1);
|
||||
realy = _mm_and_si128 (y, mult1);
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_load_si128((__m128i*)a);
|
||||
|
||||
imagx = _mm_srli_si128 (x, 1);
|
||||
@ -221,8 +222,8 @@ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_sse3(lv_8sc_t* cVector,
|
||||
\param scalar The complex scalar to multiply aVector
|
||||
\param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points)
|
||||
{
|
||||
/*lv_8sc_t* cPtr = cVector;
|
||||
const lv_8sc_t* aPtr = aVector;
|
||||
|
||||
@ -263,7 +264,8 @@ static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_generic(lv_8sc_t* cVecto
|
||||
\param num_points The number of complex values in aVector to be multiplied by sacalar and stored into cVector
|
||||
*/
|
||||
extern void volk_gnsssdr_8ic_s8ic_multiply_8ic_a_orc_impl(lv_8sc_t* cVector, const lv_8sc_t* aVector, const char scalarreal, const char scalarimag, unsigned int num_points);
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_s8ic_multiply_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t scalar, unsigned int num_points)
|
||||
{
|
||||
volk_gnsssdr_8ic_s8ic_multiply_8ic_a_orc_impl(cVector, aVector, lv_creal(scalar), lv_cimag(scalar), num_points);
|
||||
}
|
||||
#endif /* LV_HAVE_ORC */
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_x2_dot_prod_8ic.h
|
||||
* \brief Volk protokernel: multiplies two 16 bits vectors and accumulates them
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that multiplies two 16 bits vectors (8 bits the real part
|
||||
@ -20,7 +20,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -49,8 +49,8 @@
|
||||
\param bVector One of the vectors to be multiplied and accumulated
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_generic(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) {
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_generic(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points)
|
||||
{
|
||||
/*lv_8sc_t* cPtr = result;
|
||||
const lv_8sc_t* aPtr = input;
|
||||
const lv_8sc_t* bPtr = taps;
|
||||
@ -69,7 +69,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_generic(lv_8sc_t* result, co
|
||||
char sum1[2] = {0,0};
|
||||
unsigned int i = 0;
|
||||
|
||||
for(i = 0; i < n_2_ccomplex_blocks; ++i) {
|
||||
for(i = 0; i < n_2_ccomplex_blocks; ++i)
|
||||
{
|
||||
sum0[0] += in[0] * tp[0] - in[1] * tp[1];
|
||||
sum0[1] += in[0] * tp[1] + in[1] * tp[0];
|
||||
sum1[0] += in[2] * tp[2] - in[3] * tp[3];
|
||||
@ -83,7 +84,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_generic(lv_8sc_t* result, co
|
||||
res[1] = sum0[1] + sum1[1];
|
||||
|
||||
// Cleanup if we had an odd number of points
|
||||
for(i = 0; i < isodd; ++i) {
|
||||
for(i = 0; i < isodd; ++i)
|
||||
{
|
||||
*result += input[num_points - 1] * taps[num_points - 1];
|
||||
}
|
||||
}
|
||||
@ -99,8 +101,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_generic(lv_8sc_t* result, co
|
||||
\param bVector One of the vectors to be multiplied and accumulated
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse2(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) {
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse2(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points)
|
||||
{
|
||||
lv_8sc_t dotProduct;
|
||||
memset(&dotProduct, 0x0, 2*sizeof(char));
|
||||
|
||||
@ -117,8 +119,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse2(lv_8sc_t* result, con
|
||||
realcacc = _mm_setzero_si128();
|
||||
imagcacc = _mm_setzero_si128();
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_loadu_si128((__m128i*)a);
|
||||
y = _mm_loadu_si128((__m128i*)b);
|
||||
|
||||
@ -180,8 +182,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse2(lv_8sc_t* result, con
|
||||
\param bVector One of the vectors to be multiplied and accumulated
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse4_1(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) {
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse4_1(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points)
|
||||
{
|
||||
lv_8sc_t dotProduct;
|
||||
memset(&dotProduct, 0x0, 2*sizeof(char));
|
||||
|
||||
@ -198,8 +200,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse4_1(lv_8sc_t* result, c
|
||||
realcacc = _mm_setzero_si128();
|
||||
imagcacc = _mm_setzero_si128();
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_lddqu_si128((__m128i*)a);
|
||||
y = _mm_lddqu_si128((__m128i*)b);
|
||||
|
||||
@ -270,8 +272,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_sse4_1(lv_8sc_t* result, c
|
||||
\param bVector One of the vectors to be multiplied and accumulated
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_generic(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) {
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_generic(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points)
|
||||
{
|
||||
/*lv_8sc_t* cPtr = result;
|
||||
const lv_8sc_t* aPtr = input;
|
||||
const lv_8sc_t* bPtr = taps;
|
||||
@ -290,7 +292,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_generic(lv_8sc_t* result,
|
||||
char sum1[2] = {0,0};
|
||||
unsigned int i = 0;
|
||||
|
||||
for(i = 0; i < n_2_ccomplex_blocks; ++i) {
|
||||
for(i = 0; i < n_2_ccomplex_blocks; ++i)
|
||||
{
|
||||
sum0[0] += in[0] * tp[0] - in[1] * tp[1];
|
||||
sum0[1] += in[0] * tp[1] + in[1] * tp[0];
|
||||
sum1[0] += in[2] * tp[2] - in[3] * tp[3];
|
||||
@ -304,7 +307,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_generic(lv_8sc_t* result,
|
||||
res[1] = sum0[1] + sum1[1];
|
||||
|
||||
// Cleanup if we had an odd number of points
|
||||
for(i = 0; i < isodd; ++i) {
|
||||
for(i = 0; i < isodd; ++i)
|
||||
{
|
||||
*result += input[num_points - 1] * taps[num_points - 1];
|
||||
}
|
||||
}
|
||||
@ -320,8 +324,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_generic(lv_8sc_t* result,
|
||||
\param bVector One of the vectors to be multiplied and accumulated
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse2(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) {
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse2(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points)
|
||||
{
|
||||
lv_8sc_t dotProduct;
|
||||
memset(&dotProduct, 0x0, 2*sizeof(char));
|
||||
|
||||
@ -338,8 +342,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse2(lv_8sc_t* result, con
|
||||
realcacc = _mm_setzero_si128();
|
||||
imagcacc = _mm_setzero_si128();
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_load_si128((__m128i*)a);
|
||||
y = _mm_load_si128((__m128i*)b);
|
||||
|
||||
@ -401,8 +405,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse2(lv_8sc_t* result, con
|
||||
\param bVector One of the vectors to be multiplied and accumulated
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse4_1(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points) {
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse4_1(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points)
|
||||
{
|
||||
lv_8sc_t dotProduct;
|
||||
memset(&dotProduct, 0x0, 2*sizeof(char));
|
||||
|
||||
@ -419,8 +423,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse4_1(lv_8sc_t* result, c
|
||||
realcacc = _mm_setzero_si128();
|
||||
imagcacc = _mm_setzero_si128();
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0; number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_load_si128((__m128i*)a);
|
||||
y = _mm_load_si128((__m128i*)b);
|
||||
|
||||
@ -480,8 +484,8 @@ static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_sse4_1(lv_8sc_t* result, c
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together, accumulated and stored into cVector
|
||||
*/
|
||||
extern void volk_gnsssdr_8ic_x2_dot_prod_8ic_a_orc_impl(short* resRealShort, short* resImagShort, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points);
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_orc(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_dot_prod_8ic_u_orc(lv_8sc_t* result, const lv_8sc_t* input, const lv_8sc_t* taps, unsigned int num_points)
|
||||
{
|
||||
short resReal = 0;
|
||||
char* resRealChar = (char*)&resReal;
|
||||
resRealChar++;
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_x2_multiply_8ic.h
|
||||
* \brief Volk protokernel: multiplies two 16 bits vectors
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that multiplies two 16 bits vectors (8 bits the real part
|
||||
@ -20,7 +20,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -49,8 +49,8 @@
|
||||
\param bVector One of the vectors to be multiplied
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse2(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse2(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
__m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc;
|
||||
@ -60,8 +60,8 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse2(lv_8sc_t* cVector, co
|
||||
|
||||
mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255);
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_loadu_si128((__m128i*)a);
|
||||
y = _mm_loadu_si128((__m128i*)b);
|
||||
|
||||
@ -109,8 +109,8 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse2(lv_8sc_t* cVector, co
|
||||
\param bVector One of the vectors to be multiplied
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse4_1(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse4_1(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
__m128i x, y, zero;
|
||||
@ -122,8 +122,8 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse4_1(lv_8sc_t* cVector,
|
||||
zero = _mm_setzero_si128();
|
||||
mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255);
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_lddqu_si128((__m128i*)a);
|
||||
y = _mm_lddqu_si128((__m128i*)b);
|
||||
|
||||
@ -168,12 +168,14 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_sse4_1(lv_8sc_t* cVector,
|
||||
\param bVector One of the vectors to be multiplied
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points)
|
||||
{
|
||||
lv_8sc_t* cPtr = cVector;
|
||||
const lv_8sc_t* aPtr = aVector;
|
||||
const lv_8sc_t* bPtr = bVector;
|
||||
|
||||
for(unsigned int number = 0; number < num_points; number++){
|
||||
for(unsigned int number = 0; number < num_points; number++)
|
||||
{
|
||||
*cPtr++ = (*aPtr++) * (*bPtr++);
|
||||
}
|
||||
}
|
||||
@ -198,8 +200,8 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_generic(lv_8sc_t* cVector, c
|
||||
\param bVector One of the vectors to be multiplied
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse2(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse2(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
__m128i x, y, mult1, realx, imagx, realy, imagy, realx_mult_realy, imagx_mult_imagy, realx_mult_imagy, imagx_mult_realy, realc, imagc, totalc;
|
||||
@ -209,8 +211,8 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse2(lv_8sc_t* cVector, co
|
||||
|
||||
mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255);
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_load_si128((__m128i*)a);
|
||||
y = _mm_load_si128((__m128i*)b);
|
||||
|
||||
@ -258,8 +260,8 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse2(lv_8sc_t* cVector, co
|
||||
\param bVector One of the vectors to be multiplied
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse4_1(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse4_1(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 8;
|
||||
|
||||
__m128i x, y, zero;
|
||||
@ -271,8 +273,8 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse4_1(lv_8sc_t* cVector,
|
||||
zero = _mm_setzero_si128();
|
||||
mult1 = _mm_set_epi8(0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255, 0, 255);
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_load_si128((__m128i*)a);
|
||||
y = _mm_load_si128((__m128i*)b);
|
||||
|
||||
@ -317,12 +319,14 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_sse4_1(lv_8sc_t* cVector,
|
||||
\param bVector One of the vectors to be multiplied
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
|
||||
*/
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_generic(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points)
|
||||
{
|
||||
lv_8sc_t* cPtr = cVector;
|
||||
const lv_8sc_t* aPtr = aVector;
|
||||
const lv_8sc_t* bPtr = bVector;
|
||||
|
||||
for(unsigned int number = 0; number < num_points; number++){
|
||||
for(unsigned int number = 0; number < num_points; number++)
|
||||
{
|
||||
*cPtr++ = (*aPtr++) * (*bPtr++);
|
||||
}
|
||||
|
||||
@ -338,7 +342,8 @@ static inline void volk_gnsssdr_8ic_x2_multiply_8ic_a_generic(lv_8sc_t* cVector,
|
||||
\param num_points The number of complex values in aVector and bVector to be multiplied together and stored into cVector
|
||||
*/
|
||||
extern void volk_gnsssdr_8ic_x2_multiply_8ic_a_orc_impl(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points);
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8ic_x2_multiply_8ic_u_orc(lv_8sc_t* cVector, const lv_8sc_t* aVector, const lv_8sc_t* bVector, unsigned int num_points)
|
||||
{
|
||||
volk_gnsssdr_8ic_x2_multiply_8ic_a_orc_impl(cVector, aVector, bVector, num_points);
|
||||
}
|
||||
#endif /* LV_HAVE_ORC */
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 16 bits vectors, and accumulates the results into float32.
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -31,7 +31,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -57,6 +57,7 @@
|
||||
#include <smmintrin.h>
|
||||
#include "CommonMacros/CommonMacros_8ic_cw_epl_corr_32fc.h"
|
||||
#include "CommonMacros/CommonMacros.h"
|
||||
|
||||
/*!
|
||||
\brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation
|
||||
\param input The input signal input
|
||||
@ -102,8 +103,8 @@ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_u_sse4_1(lv_32fc_t* E
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
@ -219,8 +220,8 @@ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_u_sse2(lv_32fc_t* E_o
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_loadu_si128((__m128i*)input_ptr);
|
||||
y = _mm_loadu_si128((__m128i*)carrier_ptr);
|
||||
@ -387,8 +388,8 @@ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_sse4_1(lv_32fc_t* E
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_load_si128((__m128i*)input_ptr);
|
||||
y = _mm_load_si128((__m128i*)carrier_ptr);
|
||||
@ -504,8 +505,8 @@ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_32fc_x3_a_sse2(lv_32fc_t* E_o
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_load_si128((__m128i*)input_ptr);
|
||||
y = _mm_load_si128((__m128i*)carrier_ptr);
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation with 16 bits vectors
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -30,7 +30,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -54,8 +54,8 @@
|
||||
|
||||
#ifdef LV_HAVE_SSE4_1
|
||||
#include <smmintrin.h>
|
||||
/*!
|
||||
\brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation
|
||||
|
||||
/*! \brief Performs the carrier wipe-off mixing and the Early, Prompt, and Late correlation
|
||||
\param input The input signal input
|
||||
\param carrier The carrier signal input
|
||||
\param E_code Early PRN code replica input
|
||||
@ -98,8 +98,8 @@ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_sse4_1(lv_8sc_t* E_o
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
@ -265,8 +265,8 @@ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_u_sse2(lv_8sc_t* E_out
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_loadu_si128((__m128i*)input_ptr);
|
||||
y = _mm_loadu_si128((__m128i*)carrier_ptr);
|
||||
@ -486,8 +486,8 @@ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_sse4_1(lv_8sc_t* E_o
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_load_si128((__m128i*)input_ptr);
|
||||
y = _mm_load_si128((__m128i*)carrier_ptr);
|
||||
@ -653,8 +653,8 @@ static inline void volk_gnsssdr_8ic_x5_cw_epl_corr_8ic_x3_a_sse2(lv_8sc_t* E_out
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_load_si128((__m128i*)input_ptr);
|
||||
y = _mm_load_si128((__m128i*)carrier_ptr);
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 16 bits vectors, and accumulates the results into float32. In order to avoid overflow, If input, carrier and XX_code have the same number of bits, they must be values between —3 and 3 (2 bits).
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -50,7 +50,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -133,8 +133,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_u_sse4_1(lv_32fc_t*
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
@ -286,8 +286,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_u_sse2(lv_32fc_t* VE
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_loadu_si128((__m128i*)input_ptr);
|
||||
y = _mm_loadu_si128((__m128i*)carrier_ptr);
|
||||
@ -500,8 +500,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_sse4_1(lv_32fc_t*
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_load_si128((__m128i*)input_ptr);
|
||||
y = _mm_load_si128((__m128i*)carrier_ptr);
|
||||
@ -653,8 +653,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_32fc_x5_a_sse2(lv_32fc_t* VE
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_load_si128((__m128i*)input_ptr);
|
||||
y = _mm_load_si128((__m128i*)carrier_ptr);
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 16 bits vectors using different methods: inside u_sse4_1_first there is one method, inside u_sse4_1_second there is another... This protokernel has been created to test the performance of different methods.
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -35,7 +35,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -118,8 +118,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_sse4_1_first(
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
@ -424,8 +424,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_sse4_1_second
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
@ -720,8 +720,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_sse4_1_third(
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
@ -1010,8 +1010,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_TEST_32fc_x5_u_sse4_1_fourth
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 16 bits vectors, and accumulates the results into float32. This protokernel is called "safe" because it checks when the inputs have a -128 value, and replaces it with a -127 value. By doing this it avoids malfunctioning, but it lasts more time that the "unsafe" implementation. In order to avoid overflow, "input" and "carrier" must be values between —7 and 7 and "XX_code inputs" must be values between —127 and 127.
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -47,7 +47,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -143,8 +143,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_u_sse4_1(lv_32f
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
@ -497,8 +497,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_safe_32fc_x5_a_sse4_1(lv_32f
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_load_si128((__m128i*)input_ptr);
|
||||
y = _mm_load_si128((__m128i*)carrier_ptr);
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5.h
|
||||
* \brief Volk protokernel: performs the carrier wipe-off mixing and the Very early, Early, Prompt, Late and very late correlation with 16 bits vectors, and accumulates the results into float32. This protokernel is called "unsafe" because it does NOT check when the inputs have a -128 value. If you introduce a -128 value the protokernel will NOT operate properly (generic implementation will have different results than volk implementation). In order to avoid overflow, "input" and "carrier" must be values between —7 and 7 and "XX_code inputs" must be values between —127 and 127.
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that performs the carrier wipe-off mixing and the
|
||||
@ -47,7 +47,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -141,8 +141,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_u_sse4_1(lv_3
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_lddqu_si128((__m128i*)input_ptr);
|
||||
y = _mm_lddqu_si128((__m128i*)carrier_ptr);
|
||||
@ -386,8 +386,8 @@ static inline void volk_gnsssdr_8ic_x7_cw_vepl_corr_unsafe_32fc_x5_a_sse4_1(lv_3
|
||||
|
||||
if (sse_iters>0)
|
||||
{
|
||||
for(int number = 0;number < sse_iters; number++){
|
||||
|
||||
for(int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
//Perform the carrier wipe-off
|
||||
x = _mm_load_si128((__m128i*)input_ptr);
|
||||
y = _mm_load_si128((__m128i*)carrier_ptr);
|
||||
|
@ -2,7 +2,7 @@
|
||||
* \file volk_gnsssdr_8u_x2_multiply_8u.h
|
||||
* \brief Volk protokernel: multiplies unsigned char values
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that multiplies unsigned char values (8 bits data)
|
||||
@ -19,7 +19,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -41,14 +41,14 @@
|
||||
#ifdef LV_HAVE_SSE3
|
||||
#include <pmmintrin.h>
|
||||
/*!
|
||||
\brief Multiplies the two input unsigned char values and stores their results in the third unisgned char
|
||||
\brief Multiplies the two input unsigned char values and stores their results in the third unsigned char
|
||||
\param cChar The unsigned char where the results will be stored
|
||||
\param aChar One of the unsigned char to be multiplied
|
||||
\param bChar One of the unsigned char to be multiplied
|
||||
\param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar
|
||||
*/
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_u_sse3(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_u_sse3(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
__m128i x, y, x1, x2, y1, y2, mult1, x1_mult_y1, x2_mult_y2, tmp, tmp1, tmp2, totalc;
|
||||
@ -56,7 +56,8 @@ static inline void volk_gnsssdr_8u_x2_multiply_8u_u_sse3(unsigned char* cChar, c
|
||||
const unsigned char* a = aChar;
|
||||
const unsigned char* b = bChar;
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_lddqu_si128((__m128i*)a);
|
||||
y = _mm_lddqu_si128((__m128i*)b);
|
||||
|
||||
@ -99,12 +100,14 @@ static inline void volk_gnsssdr_8u_x2_multiply_8u_u_sse3(unsigned char* cChar, c
|
||||
\param bChar One of the unsigned char to be multiplied
|
||||
\param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar
|
||||
*/
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_generic(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_generic(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points)
|
||||
{
|
||||
unsigned char* cPtr = cChar;
|
||||
const unsigned char* aPtr = aChar;
|
||||
const unsigned char* bPtr = bChar;
|
||||
|
||||
for(unsigned int number = 0; number < num_points; number++){
|
||||
for(unsigned int number = 0; number < num_points; number++)
|
||||
{
|
||||
*cPtr++ = (*aPtr++) * (*bPtr++);
|
||||
}
|
||||
}
|
||||
@ -129,8 +132,8 @@ static inline void volk_gnsssdr_8u_x2_multiply_8u_generic(unsigned char* cChar,
|
||||
\param bChar One of the unsigned char to be multiplied
|
||||
\param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar
|
||||
*/
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_a_sse3(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_a_sse3(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points)
|
||||
{
|
||||
const unsigned int sse_iters = num_points / 16;
|
||||
|
||||
__m128i x, y, x1, x2, y1, y2, mult1, x1_mult_y1, x2_mult_y2, tmp, tmp1, tmp2, totalc;
|
||||
@ -138,7 +141,8 @@ static inline void volk_gnsssdr_8u_x2_multiply_8u_a_sse3(unsigned char* cChar, c
|
||||
const unsigned char* a = aChar;
|
||||
const unsigned char* b = bChar;
|
||||
|
||||
for(unsigned int number = 0;number < sse_iters; number++){
|
||||
for(unsigned int number = 0;number < sse_iters; number++)
|
||||
{
|
||||
x = _mm_load_si128((__m128i*)a);
|
||||
y = _mm_load_si128((__m128i*)b);
|
||||
|
||||
@ -181,12 +185,14 @@ static inline void volk_gnsssdr_8u_x2_multiply_8u_a_sse3(unsigned char* cChar, c
|
||||
\param bChar One of the unsigned char to be multiplied
|
||||
\param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar
|
||||
*/
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_a_generic(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_a_generic(unsigned char* cChar, const unsigned char* aChar, const unsigned char* bChar, unsigned int num_points)
|
||||
{
|
||||
unsigned char* cPtr = cChar;
|
||||
const unsigned char* aPtr = aChar;
|
||||
const unsigned char* bPtr = bChar;
|
||||
|
||||
for(unsigned int number = 0; number < num_points; number++){
|
||||
for(unsigned int number = 0; number < num_points; number++)
|
||||
{
|
||||
*cPtr++ = (*aPtr++) * (*bPtr++);
|
||||
}
|
||||
}
|
||||
@ -201,7 +207,8 @@ static inline void volk_gnsssdr_8u_x2_multiply_8u_a_generic(unsigned char* cChar
|
||||
\param num_points The number of unsigned char values in aChar and bChar to be multiplied together and stored into cChar
|
||||
*/
|
||||
extern void volk_gnsssdr_8u_x2_multiply_8u_a_orc_impl(unsigned char* cVector, const unsigned char* aVector, const unsigned char* bVector, unsigned int num_points);
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_u_orc(unsigned char* cVector, const unsigned char* aVector, const unsigned char* bVector, unsigned int num_points){
|
||||
static inline void volk_gnsssdr_8u_x2_multiply_8u_u_orc(unsigned char* cVector, const unsigned char* aVector, const unsigned char* bVector, unsigned int num_points)
|
||||
{
|
||||
volk_gnsssdr_8u_x2_multiply_8u_a_orc_impl(cVector, aVector, bVector, num_points);
|
||||
}
|
||||
#endif /* LV_HAVE_ORC */
|
||||
|
@ -1,11 +1,11 @@
|
||||
/*!
|
||||
* \file volk_gnsssdr_32fc_s32f_x2_update_local_carrier_32fc
|
||||
* \brief Volk protokernel: replaces the tracking function for update_local_carrier. Algorithm by Julien Pommier and Giovanni Garberoglio, modified by Andrés Cecilia.
|
||||
* \brief Volk protokernel: replaces the tracking function for update_local_carrier. Algorithm by Julien Pommier and Giovanni Garberoglio, modified by Andres Cecilia.
|
||||
* \authors <ul>
|
||||
* <li> Andrés Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* <li> Andres Cecilia, 2014. a.cecilia.luque(at)gmail.com
|
||||
* </ul>
|
||||
*
|
||||
* Volk protokernel that replaces the tracking function for update_local_carrier. Algorithm by Julien Pommier and Giovanni Garberoglio, modified by Andrés Cecilia.
|
||||
* Volk protokernel that replaces the tracking function for update_local_carrier. Algorithm by Julien Pommier and Giovanni Garberoglio, modified by Andres Cecilia.
|
||||
*
|
||||
* -------------------------------------------------------------------------
|
||||
*
|
||||
@ -49,7 +49,7 @@
|
||||
* GNSS-SDR is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* at your option) any later version.
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* GNSS-SDR is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
@ -77,8 +77,8 @@
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_avx(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_avx(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points)
|
||||
{
|
||||
// float* pointer1 = (float*)&phase_rad_init;
|
||||
// *pointer1 = 0;
|
||||
// float* pointer2 = (float*)&phase_step_rad;
|
||||
@ -117,7 +117,6 @@ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_avx(lv_32fc_
|
||||
|
||||
for(int i = 0; i < sse_iters; i++)
|
||||
{
|
||||
|
||||
x = phase_rad_array;
|
||||
|
||||
/* extract the sign bit (upper one) */
|
||||
@ -287,8 +286,8 @@ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_avx(lv_32fc_
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_sse2(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_sse2(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points)
|
||||
{
|
||||
// float* pointer1 = (float*)&phase_rad_init;
|
||||
// *pointer1 = 0;
|
||||
// float* pointer2 = (float*)&phase_step_rad;
|
||||
@ -445,8 +444,8 @@ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_u_sse2(lv_32fc
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_generic(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_generic(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points)
|
||||
{
|
||||
// float* pointer1 = (float*)&phase_rad_init;
|
||||
// *pointer1 = 0;
|
||||
// float* pointer2 = (float*)&phase_step_rad;
|
||||
@ -479,8 +478,8 @@ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_generic(lv_32f
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_avx(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_avx(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points)
|
||||
{
|
||||
// float* pointer1 = (float*)&phase_rad_init;
|
||||
// *pointer1 = 0;
|
||||
// float* pointer2 = (float*)&phase_step_rad;
|
||||
@ -688,8 +687,8 @@ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_avx(lv_32fc_
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_sse2(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_sse2(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points)
|
||||
{
|
||||
// float* pointer1 = (float*)&phase_rad_init;
|
||||
// *pointer1 = 0;
|
||||
// float* pointer2 = (float*)&phase_step_rad;
|
||||
@ -846,8 +845,8 @@ static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_sse2(lv_32fc
|
||||
\param inputBuffer The buffer of data to be accumulated
|
||||
\param num_points The number of values in inputBuffer to be accumulated
|
||||
*/
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_generic(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points){
|
||||
|
||||
static inline void volk_gnsssdr_s32f_x2_update_local_carrier_32fc_a_generic(lv_32fc_t* d_carr_sign, const float phase_rad_init, const float phase_step_rad, unsigned int num_points)
|
||||
{
|
||||
// float* pointer1 = (float*)&phase_rad_init;
|
||||
// *pointer1 = 0;
|
||||
// float* pointer2 = (float*)&phase_step_rad;
|
||||
|
Loading…
x
Reference in New Issue
Block a user