web-dev-qa-db-de.com

inlining beim Aufruf von always_inline '__m128i _mm_cvtepu8_epi32 (__ m128i)' fehlgeschlagen: Zielspezifische Option stimmt nicht überein _mm_cvtepu8_epi32 (__m128i __X)

Ich versuche, dieses Projekt von Github zu kompilieren, das in C++ mit SIMD Intrinsic (SSE4.1) implementiert ist. Das Projekt in github ist eine Visual Studio-Lösung, aber ich versuche, es mit Qake in Qtcreator zu portieren. Während ich versuche, es zu kompilieren, erhalte ich folgende Fehlermeldung:

/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include/smmintrin.h:520:1: error: inlining failed in call to always_inline '__m128i _mm_cvtepu8_epi32(__m128i)': target specific option mismatch
 _mm_cvtepu8_epi32 (__m128i __X)

ich bin sicher, dass es mit dem SSE - Optimierungsteil zu tun hat, aber da ich mit diesem Thema nicht so vertraut bin, weiß ich nicht wirklich, was es bedeutet und wie ich es lösen kann konnte nicht wirklich etwas Nützliches bekommen. Der Code, der zu dem folgenden Problem führt, ist der folgende:

static void cvt8u32f(const Mat& src, Mat& dest, const float amp)
{
    const int imsize = src.size().area()/8;
    const int nn = src.size().area()- imsize*8 ;
    uchar* s = (uchar*)src.ptr(0);
    float* d = dest.ptr<float>(0);
    const __m128 mamp = _mm_set_ps1(amp);
    const __m128i zero = _mm_setzero_si128();
    for(int i=imsize;i--;)
    {
        __m128i s1 = _mm_loadl_epi64((__m128i*)s);

        _mm_store_ps(d,_mm_mul_ps(mamp,_mm_cvtepi32_ps(_mm_cvtepu8_epi32(s1))));
        _mm_store_ps(d+4,_mm_mul_ps(mamp,_mm_cvtepi32_ps(_mm_cvtepu8_epi32(_mm_srli_si128(s1,4)))));
        s+=8;
        d+=8;
    }
    for(int i=0;i<nn;i++)
    {
        *d = (float)*s * amp;
        s++,d++;
    }

}

kann mir jemand erklären, was das Problem ist und was mir fehlt. Danke im Voraus.

12
ThT

add in file.pro:QMAKE_CXXFLAGS + = - msse3

1
Olga