2016-06-22 5 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ビットより少ないレジスタしかないので、あなたは使い果たされています。コンパイラは多くのレジスタを提供することができないので、あなたの '制約条件'は満たすことが不可能なので、エラーです。

関連する問題