Small Update
Fixed FPU for debugger and disassembler.
- Added the identification of Subnormal numbers (Imprecise FPU) to be displayed on the debugger. Now whenever the debugger identifies a Floating Point number that is imprecise (subnormal) it adds a "(Bad)" label at the end of the number meaning that this is below the limit for a FPU (3.6e-4932).
- Updated the disassembler to it properly identify the Subnormal numbers in FPU. Whenever it find a Subnormal number, it will convert it to decimal Ascii, but will add an extra comment containing the bytes of the FPU data. Ex:
[<16 Data05642E0: T$ 1.18973149535723177e+4932, T$ -1.18973149535723177e+4932
T$ -1.18973149535723177e+4932, T$ 5.12014241972878135e-4937; Found Bad number (subnormal/imprecise number). Bytes correspondent are: B$ 0FE, 07F, 0, 0, 0C0, 07F, 0, 0, 0, 0
T$ 3.79714090567763482e-4932; Found Bad number (subnormal/imprecise number). Bytes correspondent are: B$ 0, 0, 0, 080, 01, 0, 090, 090, 0, 0
B$ 0, 0, 0, 0, 0, 0]
New test Version 2.054h
Portal (http://rosasm.freeforums.org/portal.php)
Forum (http://rosasm.freeforums.org/index.php)
V 2.055b
Fixed a Bug on the detection of denormal values in FPU for the debugger and disassembler. Now, it can properly identify denormal(Subnormal) values.
New test Version 2.055b
Portal (http://rosasm.freeforums.org/portal.php)
Forum (http://rosasm.freeforums.org/index.php)
New Update
V 2.055a
Fixed FPU routine used on the debugger to identify NAN, Infinite, QNAN, Indefinite. The fixes are in the function: RealTenFPUNumberCategory and FloatToUString. Added 4 new FPU error categories to avoid Unknown FPU error. Those new errors Flags identifies when a TenByte does not contains the Integer Bit set (63th bit of the tenbyte that is the same as 31th bit of it´s 2nd dword). On such cases of lack of a integer bit, the FPU operators will simply refuses to process the TenByte number since it contains an error. So, to prevent such things, i created a new category of errors to help identify all of this.
SpecialFPU_SpecialIndefQNan 10 Special INDEFINITE QNAN (Same as QNAN, but happened on an TenByte without the integer bit set)
SpecialFPU_SpecialIndefSNan 11 Special INDEFINITE SNAN (Same as SNAN, but happened on an TenByte without the integer bit set)
SpecialFPU_SpecialIndefNegInfinite 12 Special INDEFINITE Negative Infinite (Same as Negative Infinite, but happened on an TenByte without the integer bit set)
SpecialFPU_SpecialIndefPosInfinite 13 Special INDEFINITE Positive Infinite (Same as Positive Infinite, but happened on an TenByte without the integer bit set)
Also created a category to identify zeros. When a negative zero is found, it simply set to the same category as zero. After all, there´s no such a thing as a -0.
SpecialFPU_Zero 4 The FPU contains a valid zero number
So, the full set of new flags are as follows:
Equate Value Description
SpecialFPU_PosValid 0 The FPU contains a valid positive number.
SpecialFPU_NegValid 1 The FPU contains a valid negative number.
SpecialFPU_PosSubNormal 2 The FPU produced a positive Subnormal (denormalized) number.
Although it´s range is outside the range 3.6...e-4932, the number lost it´ precision, but it is still valid
Ex: 0000 00000000 00000000
0000 00000000 FFFFFFFF
0000 00000000 00008000
0000 00000001 00000000
0000 FFFFFFFF FFFFFFFF
SpecialFPU_NegSubNormal 3 The FPU produced a negative Subnormal (denormalized) number.
Although it´s range is outside the range -3.6...e-4932, the number lost it´ precision, but it is still valid
Ex: 8000 00000000 00000000 (0) (Negative zero must be considered only as zero)
8000 00000000 FFFFFFFF (-0.0000000156560127730E-4933)
8000 01000000 00000000 (-0.2626643080556322880E-4933)
8000 FFFFFFFF 00000001 (-6.7242062846585856000E-4932)
SpecialFPU_Zero 4 The FPU contains a valid zero number
SpecialFPU_QNAN 5 QNAN - Quiet NAN (Not a number)
SpecialFPU_SNAN 6 SNAN - Signaling NAN (Not a number)
SpecialFPU_NegInf 7 Negative Infinite
SpecialFPU_PosInf 8 Positive Infinite
SpecialFPU_Indefinite 9 Indefinite
These 4 equates below are not the official ones from IEEE. They were created to represente the cases when the Integer bit of the TenByte was not
present by some error on compilers. A tenbyte always should have this bit settled (value = 1). When it is not settled the FPU simply will
refuses to process. To handle this lack of category of error we created the 4 ones below.
The integer bit is the 63th bit of the tenbyte (or 31 of the 2nd dword) was not set
SpecialFPU_SpecialIndefQNan 10 Special INDEFINITE QNAN (Same as QNAN, but happened on an TenByte without the integer bit set)
SpecialFPU_SpecialIndefSNan 11 Special INDEFINITE SNAN (Same as SNAN, but happened on an TenByte without the integer bit set)
SpecialFPU_SpecialIndefNegInfinite 12 Special INDEFINITE Negative Infinite (Same as Negative Infinite, but happened on an TenByte without the integer bit set)
SpecialFPU_SpecialIndefPosInfinite 13 Special INDEFINITE Positive Infinite (Same as Positive Infinite, but happened on an TenByte without the integer bit set)
New test Version 2.055a
Portal (http://rosasm.freeforums.org/portal.php)
Forum (http://rosasm.freeforums.org/index.php)
Many tks to Raymond, JJ and AW
V 2.055b
Fixed a Bug on the detection of denormal values in FPU for the debugger and disassembler. Now, it can properly identify denormal(Subnormal) values.
New test Version 2.055b
Portal (http://rosasm.freeforums.org/portal.php)
Forum (http://rosasm.freeforums.org/index.php)
Many tks to JJ to help detecting this bug :) :t