Index: third_party/libwebp/dsp/enc_mips32.c |
diff --git a/third_party/libwebp/dsp/enc_mips32.c b/third_party/libwebp/dsp/enc_mips32.c |
index 6acde8a53068c94feb2a19a2ff39d311c9a9998c..def9a1697d2796e863f6adab73ccd72da27885f9 100644 |
--- a/third_party/libwebp/dsp/enc_mips32.c |
+++ b/third_party/libwebp/dsp/enc_mips32.c |
@@ -20,6 +20,10 @@ |
#include "../enc/vp8enci.h" |
#include "../enc/cost.h" |
+#if defined(__GNUC__) && defined(__ANDROID__) && LOCAL_GCC_VERSION == 0x409 |
+#define WORK_AROUND_GCC |
+#endif |
+ |
static const int kC1 = 20091 + (1 << 16); |
static const int kC2 = 35468; |
@@ -641,6 +645,7 @@ int VP8GetResidualCostMIPS32(int ctx0, const VP8Residual* const res) { |
GET_SSE_INNER(C, C + 1, C + 2, C + 3) \ |
GET_SSE_INNER(D, D + 1, D + 2, D + 3) |
+#if !defined(WORK_AROUND_GCC) |
static int SSE16x16(const uint8_t* a, const uint8_t* b) { |
int count; |
int temp0, temp1, temp2, temp3, temp4, temp5, temp6, temp7; |
@@ -742,6 +747,8 @@ static int SSE4x4(const uint8_t* a, const uint8_t* b) { |
return count; |
} |
+#endif // WORK_AROUND_GCC |
+ |
#undef GET_SSE_MIPS32 |
#undef GET_SSE_MIPS32_INNER |
@@ -759,9 +766,11 @@ void VP8EncDspInitMIPS32(void) { |
VP8TDisto4x4 = Disto4x4; |
VP8TDisto16x16 = Disto16x16; |
VP8FTransform = FTransform; |
+#if !defined(WORK_AROUND_GCC) |
VP8SSE16x16 = SSE16x16; |
VP8SSE8x8 = SSE8x8; |
VP8SSE16x8 = SSE16x8; |
VP8SSE4x4 = SSE4x4; |
+#endif |
#endif // WEBP_USE_MIPS32 |
} |