2016-06-22 13 views
0

Wenn ich Telegramm Quellcode mit Cygwin und NDK kompilieren, um diesen Fehler zu erhalten:Compile Telegramm Quellcode Fehler

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

Und

row_gcc.cc File


Edit: Code von Google Drive-Datei importiert:

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

Bei einer Schätzung soll dieser Code für 64-Bit kompiliert werden, und Sie kompilieren es 32-Bit. 32bit hat weniger Register als 64bit, und Sie werden knapp. –

Antwort

0

Ich bin mir nicht sicher, was diese Frage Blase verursacht hat wieder bis an die Spitze, aber da hat es, ich werde meinen Kommentar als Antwort vorschlagen:

Bei einer Vermutung , dieser Code soll für 64bit kompiliert werden, und Sie kompilieren es 32bit. Da 32Bit weniger Register als 64Bit hat, sind Sie knapp. Da der Compiler nicht so viele Register zur Verfügung stellen kann, sind Ihre "Constraints" unmöglich zu erfüllen, daher der Fehler.