mirror of
https://chromium.googlesource.com/libyuv/libyuv
synced 2026-02-12 21:29:51 +08:00
android_full_debug x86 fix - use +rm for width count
Work around for android full debug build runnign out of registers. 5 functions were running out of registers causing the compiler error error: 'asm' operand has impossible constraints These functions mostly have 4 pointers, a counter (width) and a tempory eax register. With fpic and debug using stackframes, 2 registers are unavailable. So a total of 8 registers are used. Although fpic and stack frame dont apply to assembly, the compiler reserves 2 registers. The optimized version builds, so its likely freeing up the registers once it knows they are not used. These functions used to build, so compile options and/or compiler may have updated.. likely fpic was turned on. An attribute can be done to disable each, and will avoid using the 2 GPR registers, but they are still reserved and unavailable in debug builds on current compilers (gcc 4.9 and clang 3.8). R=dhrosa@google.com BUG=libyuv:602 Review URL: https://codereview.chromium.org/2066933002 .
This commit is contained in:
parent
e2611a7349
commit
fd3e676e91
@ -1,6 +1,6 @@
|
|||||||
Name: libyuv
|
Name: libyuv
|
||||||
URL: http://code.google.com/p/libyuv/
|
URL: http://code.google.com/p/libyuv/
|
||||||
Version: 1596
|
Version: 1597
|
||||||
License: BSD
|
License: BSD
|
||||||
License File: LICENSE
|
License File: LICENSE
|
||||||
|
|
||||||
|
|||||||
@ -11,6 +11,6 @@
|
|||||||
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
|
#ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT
|
||||||
#define INCLUDE_LIBYUV_VERSION_H_
|
#define INCLUDE_LIBYUV_VERSION_H_
|
||||||
|
|
||||||
#define LIBYUV_VERSION 1596
|
#define LIBYUV_VERSION 1597
|
||||||
|
|
||||||
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
|
#endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT
|
||||||
|
|||||||
@ -3596,7 +3596,7 @@ void BlendPlaneRow_SSSE3(const uint8* src0, const uint8* src1,
|
|||||||
"+r"(src1), // %1
|
"+r"(src1), // %1
|
||||||
"+r"(alpha), // %2
|
"+r"(alpha), // %2
|
||||||
"+r"(dst), // %3
|
"+r"(dst), // %3
|
||||||
"+r"(width) // %4
|
"+rm"(width) // %4
|
||||||
:: "memory", "cc", "eax", "xmm0", "xmm1", "xmm2", "xmm5", "xmm6", "xmm7"
|
:: "memory", "cc", "eax", "xmm0", "xmm1", "xmm2", "xmm5", "xmm6", "xmm7"
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -3653,7 +3653,7 @@ void BlendPlaneRow_AVX2(const uint8* src0, const uint8* src1,
|
|||||||
"+r"(src1), // %1
|
"+r"(src1), // %1
|
||||||
"+r"(alpha), // %2
|
"+r"(alpha), // %2
|
||||||
"+r"(dst), // %3
|
"+r"(dst), // %3
|
||||||
"+r"(width) // %4
|
"+rm"(width) // %4
|
||||||
:: "memory", "cc", "eax",
|
:: "memory", "cc", "eax",
|
||||||
"xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
|
"xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
|
||||||
);
|
);
|
||||||
@ -4936,9 +4936,9 @@ void InterpolateRow_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
|
|||||||
"jg 100b \n"
|
"jg 100b \n"
|
||||||
|
|
||||||
"99: \n"
|
"99: \n"
|
||||||
: "+r"(dst_ptr), // %0
|
: "+r"(dst_ptr), // %0
|
||||||
"+r"(src_ptr), // %1
|
"+r"(src_ptr), // %1
|
||||||
"+r"(dst_width), // %2
|
"+rm"(dst_width), // %2
|
||||||
"+r"(source_y_fraction) // %3
|
"+r"(source_y_fraction) // %3
|
||||||
: "r"((intptr_t)(src_stride)) // %4
|
: "r"((intptr_t)(src_stride)) // %4
|
||||||
: "memory", "cc", "eax", NACL_R14
|
: "memory", "cc", "eax", NACL_R14
|
||||||
@ -5014,7 +5014,7 @@ void InterpolateRow_AVX2(uint8* dst_ptr, const uint8* src_ptr,
|
|||||||
"999: \n"
|
"999: \n"
|
||||||
: "+D"(dst_ptr), // %0
|
: "+D"(dst_ptr), // %0
|
||||||
"+S"(src_ptr), // %1
|
"+S"(src_ptr), // %1
|
||||||
"+c"(dst_width), // %2
|
"+cm"(dst_width), // %2
|
||||||
"+r"(source_y_fraction) // %3
|
"+r"(source_y_fraction) // %3
|
||||||
: "r"((intptr_t)(src_stride)) // %4
|
: "r"((intptr_t)(src_stride)) // %4
|
||||||
: "memory", "cc", "eax", NACL_R14
|
: "memory", "cc", "eax", NACL_R14
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user