CVSROOT: /cvs
Module name: src
Changes by: [email protected] 2019/06/21 11:00:58
Modified files:
lib/libc/arch/sparc64/fpu: fpu_explode.c fpu_qp.c
Log message:
Fix conversions to long double on sparc64
Bug exposed by erratic sqlite3 behavior used in ports/devel/proj,
as pointed out by landry@. Richard Hipps (SQLite) pointed at the
culprit (_Qp_div), many thanks.
Adapted from FreeBSD revision 146673 by Stephen Paskaluk and
stefanf@FreeBSD. FreeBSD commit message:
"""
Fix long (and long long) to long double, unsigned to long double and
unsigned long (and unsigned long long) to long double conversions.
- Add a parameter that specifies the position of the sign bit to the _QP_TTOQ
macro, previously it always looked at bit 31. Pass a negative number to
disable sign inspection for unsigned types. This fixes _Qp_xtoq(),
_Qp_uitoq() and _Qp_uxtoq().
- In the functions __fpu_itof() and __fpu_xtof(), look at the sign
bit to decide whether we're doing a conversion from an unsigned type. If so,
don't
negate the mantissa if the integer exceeds the biggest signed number.
"""
ok deraadt@