2016-06-22 2 views
0

:컴파일 전보 내가 Cygwin에서와 NDK와 전보 소스 코드를 컴파일 할 때이 오류 얻을 소스 코드 오류

D:/TMessagesProj/jni/./libyuv/source/row_gcc.cc: In function 'void libyuv::I422AlphaToARGBRow_SSSE3(const uint8*, const uint8*, const uint8*, const uint8*, uint8*, const libyuv::YuvConstants*, int)': 
D:/TMessagesProj/jni/./libyuv/source/row_gcc.cc:1803:4: error: 'asm' operand has impossible constraints 
    ); 
    ^
make: *** [D:/TMessagesProj/obj/local/x86/objs/tmessages.22/./libyuv/source/row_gcc.o] Error 1 

Error screenshot

그리고

row_gcc.cc File


편집 : Google 드라이브 파일에서 가져온 코드 :

void OMITFP I422AlphaToARGBRow_SSSE3(const uint8* y_buf, 
            const uint8* u_buf, 
            const uint8* v_buf, 
            const uint8* a_buf, 
            uint8* dst_argb, 
            const struct YuvConstants* yuvconstants, 
            int width) { 
    asm volatile (
    YUVTORGB_SETUP(yuvconstants) 
    "sub  %[u_buf],%[v_buf]    \n" 
    LABELALIGN 
    "1:           \n" 
    READYUVA422 
    YUVTORGB(yuvconstants) 
    STOREARGB 
    "subl  $0x8,%[width]     \n" 
    "jg  1b        \n" 
    : [y_buf]"+r"(y_buf), // %[y_buf] 
    [u_buf]"+r"(u_buf), // %[u_buf] 
    [v_buf]"+r"(v_buf), // %[v_buf] 
    [a_buf]"+r"(a_buf), // %[a_buf] 
    [dst_argb]"+r"(dst_argb), // %[dst_argb] 
#if defined(__i386__) && defined(__pic__) 
    [width]"+m"(width)  // %[width] 
#else 
    [width]"+rm"(width) // %[width] 
#endif 
    : [yuvconstants]"r"(yuvconstants) // %[yuvconstants] 
    : "memory", "cc", NACL_R14 YUVTORGB_REGS 
    "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5" 
); 
} 
+1

추측 해 보면,이 코드는 64 비트 용으로 컴파일하려는 것이며 32 비트를 컴파일 중입니다. 32 비트는 64 비트보다 적은 레지스터를 가지고 있으며, 당신은 다 떨어지고 있습니다. –

답변

0

나는 돌아 가기까지 거품이 문제가 발생했습니다 모르겠어요,하지만이 있기 때문에, 나는 대답으로 내 의견을 제안하는거야 : 추측에

,이 코드는 64 비트 용으로 컴파일되고 32 비트로 컴파일됩니다. 32 비트는 64 비트보다 적은 레지스터를 가지고 있기 때문에, 당신은 다 써 버리고 있습니다. 컴파일러는 그 많은 레지스터를 제공 할 수 없으므로 '제약 조건'을 충족시킬 수 없으므로 오류가 발생합니다.

관련 문제