kfrlib / kfr

Fast, modern C++ DSP framework, FFT, Sample Rate Conversion, FIR/IIR/Biquad Filters (SSE, AVX, AVX-512, ARM NEON)
https://www.kfrlib.com
GNU General Public License v2.0
1.65k stars 253 forks source link

Can't compile in Debug mode with GCC 9 #77

Closed BenjaminNavarro closed 4 years ago

BenjaminNavarro commented 4 years ago

I can't get this library to work in debug mode using GCC 9.

Even compiling the library in release mode and using it in a project compiled in debug mode produces the same errors:

...
/tmp/kfr-4.0.0/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1524:71: error: macro "_mm_shuffle_ps" passed 7 arguments, but takes just 3
 1524 |     return _mm_shuffle_ps(x, x, shuffle_mask<8, I0, I1, I2, I3>::value);
...
/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.1/include/xmmintrin.h:749: note: macro "_mm_shuffle_ps" defined here
  749 | #define _mm_shuffle_ps(A, B, MASK)     \
...
/tmp/kfr-4.0.0/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1531:63: error: macro "_mm_shuffle_pd" passed 5 arguments, but takes just 3
 1531 |     return _mm_shuffle_pd(x, x, shuffle_mask<2, I0, I1>::value);
...
/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.1/include/emmintrin.h:926: note: macro "_mm_shuffle_pd" defined here
  926 | #define _mm_shuffle_pd(A, B, N)      \
...
/tmp/kfr-4.0.0/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1524:12: error: ‘_mm_shuffle_ps’ was not declared in this scope
 1524 |     return _mm_shuffle_ps(x, x, shuffle_mask<8, I0, I1, I2, I3>::value);
...
/tmp/kfr-4.0.0/include/kfr/io/impl/../../base/../simd/impl/../../base/../simd/impl/backend_generic.hpp:1531:12: error: ‘_mm_shuffle_pd’ was not declared in this scope
 1531 |     return _mm_shuffle_pd(x, x, shuffle_mask<2, I0, I1>::value);
...

It seems that _mm_shuffle_ps and _mm_shuffle_pd being macros the template parameters of shuffle_mask are interpreted as macros parameters. Storing the mask in an intermediate variable would probably solve the issue