1
0
mirror of https://github.com/freetype/freetype.git synced 2026-10-23 11:08:54 +03:00

* src/base/ftcalc.c (FT_MulFix, FT_DivFix, FT_MulDiv): Better sign.

This commit is contained in:
Alexei Podtelezhnikov
2026-10-21 10:08:26 -04:00
parent 0eca44e6e8
commit 9d7790e2ee

View File

@@ -163,9 +163,8 @@
FT_Long b_,
FT_Long c_ )
{
FT_Int s = 1;
FT_Long s = 1;
FT_UInt64 a, b, c, d;
FT_Long d_;
FT_MOVE_SIGN( FT_UInt64, a_, a, s );
@@ -175,9 +174,7 @@
d = c > 0 ? ( a * b + ( c >> 1 ) ) / c
: 0x7FFFFFFFUL;
d_ = (FT_Long)d;
return s < 0 ? NEG_LONG( d_ ) : d_;
return MUL_LONG( s, d );
}
@@ -188,9 +185,8 @@
FT_Long b_,
FT_Long c_ )
{
FT_Int s = 1;
FT_Long s = 1;
FT_UInt64 a, b, c, d;
FT_Long d_;
FT_MOVE_SIGN( FT_UInt64, a_, a, s );
@@ -200,9 +196,7 @@
d = c > 0 ? a * b / c
: 0x7FFFFFFFUL;
d_ = (FT_Long)d;
return s < 0 ? NEG_LONG( d_ ) : d_;
return MUL_LONG( s, d );
}
@@ -233,9 +227,8 @@
FT_DivFix( FT_Long a_,
FT_Long b_ )
{
FT_Int s = 1;
FT_Long s = 1;
FT_UInt64 a, b, q;
FT_Long q_;
FT_MOVE_SIGN( FT_UInt64, a_, a, s );
@@ -244,9 +237,7 @@
q = b > 0 ? ( ( a << 16 ) + ( b >> 1 ) ) / b
: 0x7FFFFFFFUL;
q_ = (FT_Long)q;
return s < 0 ? NEG_LONG( q_ ) : q_;
return MUL_LONG( s, q );
}
@@ -394,7 +385,7 @@
FT_Long b_,
FT_Long c_ )
{
FT_Int s = 1;
FT_Long s = 1;
FT_UInt32 a, b, c;
@@ -427,9 +418,7 @@
: ft_div64by32( temp.hi, temp.lo, c );
}
a_ = (FT_Long)a;
return s < 0 ? NEG_LONG( a_ ) : a_;
return MUL_LONG( s, a );
}
@@ -438,7 +427,7 @@
FT_Long b_,
FT_Long c_ )
{
FT_Int s = 1;
FT_Long s = 1;
FT_UInt32 a, b, c;
@@ -466,9 +455,7 @@
: ft_div64by32( temp.hi, temp.lo, c );
}
a_ = (FT_Long)a;
return s < 0 ? NEG_LONG( a_ ) : a_;
return MUL_LONG( s, a );
}
@@ -539,7 +526,7 @@
#else /* 0 */
FT_Int s = 1;
FT_Long s = 1;
FT_UInt32 a, b;
@@ -559,9 +546,7 @@
( ( al * ( b & 0xFFFFUL ) + 0x8000UL ) >> 16 );
}
a_ = (FT_Long)a;
return s < 0 ? NEG_LONG( a_ ) : a_;
return MUL_LONG( s, a );
#endif /* 0 */
@@ -574,9 +559,8 @@
FT_DivFix( FT_Long a_,
FT_Long b_ )
{
FT_Int s = 1;
FT_Long s = 1;
FT_UInt32 a, b, q;
FT_Long q_;
/* XXX: this function does not allow 64-bit arguments */
@@ -609,9 +593,7 @@
q = ft_div64by32( temp.hi, temp.lo, b );
}
q_ = (FT_Long)q;
return s < 0 ? NEG_LONG( q_ ) : q_;
return MUL_LONG( s, q );
}