Commit bec4ef41 authored by Dominik Röttsches's avatar Dominik Röttsches Committed by Werner Lemberg
Browse files

[base] Round values in `FT_MulAdd_Fix`.

This avoids regressing Blink layout tests and makes `FT_MulAdd_Fix` delta
retrieval implementation consistent with the previous implementation, which
used `FT_fixedToInt` and included rounding.

* src/base/ftcalc.c (FT_MulAdd_Fix): Implement it.
Also fix remaining `temp` initialization compilation issue.

Fixes #1169.
parent de27955c
Pipeline #627220 passed with stage
in 10 minutes and 40 seconds
......@@ -1091,18 +1091,20 @@
FT_UInt count )
{
FT_UInt i;
FT_Int64 temp = 0;
FT_Int64 temp;
#ifndef FT_INT64
FT_Int64 halfUnit;
#endif
#ifdef FT_INT64
temp = 0;
for ( i = 0; i < count; ++i )
temp += (FT_Int64)s[i] * f[i];
return temp >> 16;
return ( temp + 0x8000 ) >> 16;
#else
temp.hi = 0;
temp.lo = 0;
......@@ -1137,6 +1139,11 @@
FT_Add64( &temp, &multResult, &temp );
}
/* Round value. */
halfUnit.hi = 0;
halfUnit.lo = 0x8000;
FT_Add64( &temp, &halfUnit, &temp );
return (FT_Int32)( ( (FT_Int32)( temp.hi & 0xFFFF ) << 16 ) |
( temp.lo >> 16 ) );
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment