[smooth] Fortify 64-bit algorithm.
* src/smooth/ftgrays.c (FT_UDIVPREP, FT_UDIV): s/long/FT_Int64/ and s/unsigned long/FT_UInt64/. (gray_render_line): Adjust a critical variable type.
This commit is contained in:
parent
f0f00f7c16
commit
de3b5c201c
@ -375,12 +375,12 @@ typedef ptrdiff_t FT_PtrDist;
|
||||
|
||||
/* These macros speed up repetitive divisions by replacing them */
|
||||
/* with multiplications and right shifts. */
|
||||
#define FT_UDIVPREP( c, b ) \
|
||||
long b ## _r = c ? (long)( FT_ULONG_MAX >> PIXEL_BITS ) / ( b ) \
|
||||
#define FT_UDIVPREP( c, b ) \
|
||||
FT_Int64 b ## _r = c ? (FT_Int64)( ~(FT_UInt64)0 >> PIXEL_BITS ) / ( b ) \
|
||||
: 0
|
||||
#define FT_UDIV( a, b ) \
|
||||
(TCoord)( ( (unsigned long)( a ) * (unsigned long)( b ## _r ) ) >> \
|
||||
( sizeof( long ) * FT_CHAR_BIT - PIXEL_BITS ) )
|
||||
#define FT_UDIV( a, b ) \
|
||||
(TCoord)( ( (FT_UInt64)( a ) * (FT_UInt64)( b ## _r ) ) >> \
|
||||
( sizeof( FT_UInt64 ) * FT_CHAR_BIT - PIXEL_BITS ) )
|
||||
|
||||
|
||||
/* Scale area and apply fill rule to calculate the coverage byte. */
|
||||
@ -921,7 +921,7 @@ typedef ptrdiff_t FT_PtrDist;
|
||||
}
|
||||
else /* any other line */
|
||||
{
|
||||
TPos prod = dx * (TPos)fy1 - dy * (TPos)fx1;
|
||||
FT_Int64 prod = dx * (FT_Int64)fy1 - dy * (FT_Int64)fx1;
|
||||
FT_UDIVPREP( ex1 != ex2, dx );
|
||||
FT_UDIVPREP( ey1 != ey2, dy );
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user