1 #ifndef INCLUDED_volk_32f_convert_64f_a_H
2 #define INCLUDED_volk_32f_convert_64f_a_H
15 static inline void volk_32f_convert_64f_a_sse2(
double* outputVector,
const float* inputVector,
unsigned int num_points){
16 unsigned int number = 0;
18 const unsigned int quarterPoints = num_points / 4;
20 const float* inputVectorPtr = (
const float*)inputVector;
21 double* outputVectorPtr = outputVector;
25 for(;number < quarterPoints; number++){
26 inputVal = _mm_load_ps(inputVectorPtr); inputVectorPtr += 4;
28 ret = _mm_cvtps_pd(inputVal);
30 _mm_store_pd(outputVectorPtr, ret);
33 inputVal = _mm_movehl_ps(inputVal, inputVal);
35 ret = _mm_cvtps_pd(inputVal);
37 _mm_store_pd(outputVectorPtr, ret);
41 number = quarterPoints * 4;
42 for(; number < num_points; number++){
43 outputVector[number] = (double)(inputVector[number]);
49 #ifdef LV_HAVE_GENERIC
56 static inline void volk_32f_convert_64f_a_generic(
double* outputVector,
const float* inputVector,
unsigned int num_points){
57 double* outputVectorPtr = outputVector;
58 const float* inputVectorPtr = inputVector;
59 unsigned int number = 0;
61 for(number = 0; number < num_points; number++){
62 *outputVectorPtr++ = ((double)(*inputVectorPtr++));