summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDominik Röttsches <drott@chromium.org>2022-07-01 12:04:28 +0300
committerWerner Lemberg <wl@gnu.org>2022-07-01 14:01:08 +0200
commitbec4ef415ef07ad1fa9542978136d9863dd7a6d0 (patch)
treeeaef7cee88bb8951ad074db929559ecb68e9e6f2
parentde27955c2af5a0e622a6705e232bfc7f32060e80 (diff)
downloadfreetype2-bec4ef415ef07ad1fa9542978136d9863dd7a6d0.tar.gz
[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.
-rw-r--r--src/base/ftcalc.c15
1 files changed, 11 insertions, 4 deletions
diff --git a/src/base/ftcalc.c b/src/base/ftcalc.c
index 34170a582..55d2f7cc8 100644
--- a/src/base/ftcalc.c
+++ b/src/base/ftcalc.c
@@ -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 ) );