BR 3392399: float: get rid of bogus exponent calculation

It turns out that the calculation of "twopwr" in ieee_flconvert_bin()
was more complex than necessary, and wrong in the case of a pure
fraction.

Reported-by: Roel <roelsuidgeest@zonnet.nl>
Signed-off-by: H. Peter Anvin <hpa@zytor.com>
This commit is contained in:
H. Peter Anvin 2017-04-05 21:47:20 -07:00
parent 90cc4154ae
commit 3646e7dde0
2 changed files with 27 additions and 2 deletions

View File

@ -1,6 +1,6 @@
/* ----------------------------------------------------------------------- *
*
* Copyright 1996-2009 The NASM Authors - All Rights Reserved
* Copyright 1996-2017 The NASM Authors - All Rights Reserved
* See the file AUTHORS included with the NASM distribution for
* the specific copyright holders.
*
@ -545,7 +545,7 @@ static bool ieee_flconvert_bin(const char *string, int bits,
mp = mult;
ms = (LIMB_BITS-1)-l;
twopwr = seendot ? twopwr-bits+l : l+1-bits;
twopwr += l+1-bits;
}
if (seendigit) {

25
test/hexfp.asm Normal file
View File

@ -0,0 +1,25 @@
;; BR 3392399
; All of these should be the same value...
%macro fp 1
%1 0.5
%1 5e-1
%1 0x1.0p-1
%1 0x0.8p0
%1 0x0.8
%1 0x8p-4
%1 0x.8
%1 0x1p-1
%1 0x0.1p3
%1 0x0.01p7
%1 0x0.01p7
%1 0x0.001p11
%endmacro
fp do
fp dt
fp dq
fp dd
fp dw
fp dd