diff --git a/README.chromium b/README.chromium index 175ba780d..f73e4faae 100644 --- a/README.chromium +++ b/README.chromium @@ -1,6 +1,6 @@ Name: libyuv URL: http://code.google.com/p/libyuv/ -Version: 734 +Version: 735 License: BSD License File: LICENSE diff --git a/include/libyuv/version.h b/include/libyuv/version.h index 471d448dd..3b6cb575c 100644 --- a/include/libyuv/version.h +++ b/include/libyuv/version.h @@ -11,6 +11,6 @@ #ifndef INCLUDE_LIBYUV_VERSION_H_ // NOLINT #define INCLUDE_LIBYUV_VERSION_H_ -#define LIBYUV_VERSION 734 +#define LIBYUV_VERSION 735 #endif // INCLUDE_LIBYUV_VERSION_H_ NOLINT diff --git a/source/row_common.cc b/source/row_common.cc index 8878023c8..00757d6ec 100644 --- a/source/row_common.cc +++ b/source/row_common.cc @@ -757,7 +757,8 @@ extern const uint32 kRecipTable[4097] = { // Divide num by div and return as 16.16 fixed point result. int FixedDiv_C(int num, int div) { if (static_cast(div) <= 4097u) { - return static_cast((static_cast(num) * kRecipTable[div]) >> 16); + return static_cast((static_cast(num) * kRecipTable[div] + + 0x8000) >> 16); } return static_cast((static_cast(num) << 16) / div); } diff --git a/source/row_posix.cc b/source/row_posix.cc index a72b2eb5e..04e14a1ca 100644 --- a/source/row_posix.cc +++ b/source/row_posix.cc @@ -5423,6 +5423,7 @@ int FixedDiv(int num, int div) { "mull (%2,%%ecx,4) \n" #endif "shrd $0x10,%%edx,%%eax \n" + "adc $0,%%eax \n" "9: \n" "mov %0, %%eax \n" diff --git a/source/row_win.cc b/source/row_win.cc index a210b9a3a..025fa85be 100644 --- a/source/row_win.cc +++ b/source/row_win.cc @@ -6616,6 +6616,7 @@ int FixedDiv(int num, int div) { ja largediv mul dword ptr kRecipTable[ecx * 4] shrd eax, edx, 16 + adc eax, 0 ret largediv: diff --git a/unit_test/math_test.cc b/unit_test/math_test.cc index 6a9bab830..6ea021cfd 100644 --- a/unit_test/math_test.cc +++ b/unit_test/math_test.cc @@ -42,10 +42,10 @@ TEST_F(libyuvTest, TestFixedDiv) { EXPECT_EQ(0x20000, libyuv::FixedDiv(-40000, -20000)); EXPECT_EQ(-0x20000, libyuv::FixedDiv(40000, -20000)); EXPECT_EQ(-0x20000, libyuv::FixedDiv(-40000, 20000)); - EXPECT_NEAR(0x10000, libyuv::FixedDiv(4095, 4095), 1); + EXPECT_EQ(0x10000, libyuv::FixedDiv(4095, 4095)); EXPECT_EQ(0x10000, libyuv::FixedDiv(4096, 4096)); EXPECT_EQ(0x10000, libyuv::FixedDiv(4097, 4097)); - EXPECT_NEAR(123 * 65536, libyuv::FixedDiv(123, 1), 1); + EXPECT_EQ(123 * 65536, libyuv::FixedDiv(123, 1)); srandom(time(NULL)); MemRandomize(reinterpret_cast(&num[0]), sizeof(num));