Сборка OpenCV 3.2.0 с MinGW-w64 6.1.0: возможность оценки аргументов во время компиляции

Компилятор терпит неудачу с этим выводом:

In file included from C:/mingw-w64/x86_64-6.1.0-win32-seh-rt_v5-rev0/mingw64/lib/gcc/x86_64-w64-mingw32/6.1.0/include/emmintrin.h:31:0,
                 from C:/lib/opencv/sources/modules/core/include/opencv2/core/cvdef.h:168,
                 from C:/lib/opencv/sources/modules/core/include/opencv2/core.hpp:52,
                 from C:/lib/opencv/sources/modules/core/include/opencv2/core/utility.hpp:56,
                 from C:/lib/opencv/sources/cmake-build-debug/modules/core/precomp.hpp:49:

C:/lib/opencv/sources/modules/core/include/opencv2/core/sse_utils.hpp: 
    In function 'void _mm_interleave_ps(__m128&, __m128&, __m128&, __m128&)':
C:/lib/opencv/sources/modules/core/include/opencv2/core/sse_utils.hpp:572:28: 
    error: the last argument must be an 8-bit immediate
    __m128 layer2_chunk0 = _mm_shuffle_ps(v_r0, v_r1, mask_lo);
                           ^

На этой функции:

inline void _mm_interleave_ps(__m128 & v_r0, __m128 & v_r1, __m128 & v_g0, __m128 & v_g1)
{
    const int mask_lo = _MM_SHUFFLE(2, 0, 2, 0), mask_hi = _MM_SHUFFLE(3, 1, 3, 1);
    __m128 layer2_chunk0 = _mm_shuffle_ps(v_r0, v_r1, mask_lo);
...

принимая во внимание _MM_SHUFFLE это макрос, маски должны быть рассчитаны во время компиляции:

#define _MM_SHUFFLE(fp3,fp2,fp1,fp0) \
    (((fp3) << 6) | ((fp2) << 4) | ((fp1) << 2) | (fp0))

Поэтому я попытался заменить const int ... с constexpr int ..., но это не дало эффекта.

Единственный обходной путь, который я нашел, находится здесь, но он не отвечает, почему маски не являются непосредственными, и почему потоки могут влиять на это.

Любой способ исправить это более или менее прилично, кроме жесткого кодирования 0x88 а также 0xDD лайк _mm_shuffle_ps(v_r0, v_r1, 0x88)?
Это работает, но, очевидно, не является хорошим решением. Более того, этот файл не единственный, имеющий эту проблему.

Кроме того, почему даже не constexpr int mask_lo = 0x88 считается немедленным?

0 ответов

Другие вопросы по тегам