a30acb52cd
Add tests for the case where we round upwards to reach the smallest possible denorm, i.e. "saved from underflow by rounding."
525 lines
12 KiB
NASM
525 lines
12 KiB
NASM
;
|
|
; floatx.asm
|
|
;
|
|
; Test hexadecimal floating-point numbers
|
|
|
|
%define Inf __Infinity__
|
|
%define NaN __QNaN__
|
|
|
|
; 16-bit
|
|
dw 1.0
|
|
dw 0x1.0
|
|
dw 2.0
|
|
dw 0x2.0
|
|
dw 0x1.0p+1
|
|
dw 0x1.0p-1
|
|
dw 0x0.0
|
|
dw 0x1.23456789
|
|
dw 0x0.123456789
|
|
dw 0x0.0000123456789
|
|
dw 0x1.23456789p10
|
|
dw 0x1.23456789p+10
|
|
dw 0x1.23456789p-10
|
|
dw 0x0.123456789p10
|
|
dw 0x0.123456789p+10
|
|
dw 0x0.123456789abcdef0123456789abcdef012345p-10
|
|
dw 0x0.0000123456789
|
|
dw 0x0.0000123456789p+10
|
|
dw 0x0.0000123456789p-10
|
|
dw 0x1.0p-25 ; Underflow
|
|
dw 0x1.01p-25 ; Rounds to denorm
|
|
dw 0x1.0p-24 ; Smallest denorm
|
|
dw 0x1.ffffffffffffffffffffffffffffp-16 ; Rounds to denorm
|
|
dw 0x1.0p-15 ; Denorm
|
|
dw 0x1.ffffffffffffffffffffffffffffp-15 ; Rounds to normal
|
|
dw 0x1.0p-14 ; Smallest non-denorm
|
|
dw 0x1.0p+15 ; Biggest possible exponent
|
|
dw 0x1.ffffffffffffffffffffffffffffp+15 ; Rounds to infinity
|
|
dw Inf ; Infinity
|
|
dw NaN
|
|
|
|
; 32-bit
|
|
dd 1.0
|
|
dd 0x1.0
|
|
dd 2.0
|
|
dd 0x2.0
|
|
dd 0x1.0p+1
|
|
dd 0x1.0p-1
|
|
dd 0x0.0
|
|
dd 0x1.23456789
|
|
dd 0x0.123456789
|
|
dd 0x0.0000123456789
|
|
dd 0x1.23456789p10
|
|
dd 0x1.23456789p+10
|
|
dd 0x1.23456789p-10
|
|
dd 0x0.123456789p10
|
|
dd 0x0.123456789p+10
|
|
dd 0x0.123456789abcdef0123456789abcdef012345p-10
|
|
dd 0x0.0000123456789
|
|
dd 0x0.0000123456789p+10
|
|
dd 0x0.0000123456789p-10
|
|
dd 0x123456789.0
|
|
dd 0x0000123456789.0
|
|
dd 0x123456789.0p+0
|
|
dd 0x123456789.0p+64
|
|
dd 0x1.0p-150 ; Underflow
|
|
dd 0x1.01p-150 ; Rounds to denorm
|
|
dd 0x1.0p-149 ; Smallest denorm
|
|
dd 0x1.ffffffffffffffffffffffffffffp-128 ; Rounds to denorm
|
|
dd 0x1.0p-127 ; Denorm
|
|
dd 0x1.ffffffffffffffffffffffffffffp-127 ; Rounds to normal
|
|
dd 0x1.0p-126 ; Smallest non-denorm
|
|
dd 0x1.0p+127 ; Biggest possible exponent
|
|
dd 0x1.ffffffffffffffffffffffffffffp+127 ; Rounds to infinity
|
|
dd Inf ; Infinity
|
|
dd NaN
|
|
|
|
; 64-bit
|
|
dq 1.0
|
|
dq 0x1.0
|
|
dq 2.0
|
|
dq 0x2.0
|
|
dq 0x1.0p+1
|
|
dq 0x1.0p-1
|
|
dq 0x0.0
|
|
dq 0x1.23456789
|
|
dq 0x0.123456789
|
|
dq 0x0.0000123456789
|
|
dq 0x1.23456789p10
|
|
dq 0x1.23456789p+10
|
|
dq 0x1.23456789p-10
|
|
dq 0x0.123456789p10
|
|
dq 0x0.123456789p+10
|
|
dq 0x0.123456789abcdef0123456789abcdef012345p-10
|
|
dq 0x0.0000123456789
|
|
dq 0x0.0000123456789p+10
|
|
dq 0x0.0000123456789p-10
|
|
dq 0x123456789.0
|
|
dq 0x0000123456789.0
|
|
dq 0x123456789.0p+0
|
|
dq 0x123456789.0p+300
|
|
dq 0x1.0p-1075 ; Underflow
|
|
dq 0x1.01p-1075 ; Rounds to denorm
|
|
dq 0x1.0p-1074 ; Smallest denorm
|
|
dq 0x1.ffffffffffffffffffffffffffffp-1024 ; Rounds to denorm
|
|
dq 0x1.0p-1023 ; Denorm
|
|
dq 0x1.ffffffffffffffffffffffffffffp-1023 ; Rounds to normal
|
|
dq 0x1.0p-1022 ; Smallest non-denorm
|
|
dq 0x1.0p+1023 ; Biggest possible exponent
|
|
dq 0x1.ffffffffffffffffffffffffffffp+1023 ; Rounds to infinity
|
|
dq Inf ; Infinity
|
|
dq NaN
|
|
|
|
; 80-bit
|
|
dt 1.0
|
|
dt 0x1.0
|
|
dt 2.0
|
|
dt 0x2.0
|
|
dt 0x1.0p+1
|
|
dt 0x1.0p-1
|
|
dt 0x0.0
|
|
dt 0x1.23456789
|
|
dt 0x0.123456789
|
|
dt 0x0.0000123456789
|
|
dt 0x1.23456789p10
|
|
dt 0x1.23456789p+10
|
|
dt 0x1.23456789p-10
|
|
dt 0x0.123456789p10
|
|
dt 0x0.123456789p+10
|
|
dt 0x0.123456789abcdef0123456789abcdef012345p-10
|
|
dt 0x0.0000123456789
|
|
dt 0x0.0000123456789p+10
|
|
dt 0x0.0000123456789p-10
|
|
dt 0x123456789.0
|
|
dt 0x0000123456789.0
|
|
dt 0x123456789.0p+0
|
|
dt 0x123456789.0p+1024
|
|
dt 0x1.0p-16446 ; Underflow
|
|
dt 0x1.01p-16446 ; Rounds to denorm
|
|
dt 0x1.0p-16445 ; Smallest denorm
|
|
dt 0x1.ffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
|
|
dt 0x1.0p-16383 ; Denorm
|
|
dt 0x1.ffffffffffffffffffffffffffffp-16383 ; Rounds to normal
|
|
dt 0x1.0p-16382 ; Smallest non-denorm
|
|
dt 0x1.0p+16383 ; Biggest possible exponent
|
|
dt 0x1.ffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
|
|
dt Inf ; Infinity
|
|
dt NaN
|
|
|
|
; 128-bit
|
|
do 1.0
|
|
do 0x1.0
|
|
do 2.0
|
|
do 0x2.0
|
|
do 0x1.0p+1
|
|
do 0x1.0p-1
|
|
do 0x0.0
|
|
do 0x1.23456789
|
|
do 0x0.123456789
|
|
do 0x0.0000123456789
|
|
do 0x1.23456789p10
|
|
do 0x1.23456789p+10
|
|
do 0x1.23456789p-10
|
|
do 0x0.123456789p10
|
|
do 0x0.123456789p+10
|
|
do 0x0.123456789abcdef0123456789abcdef012345p-10
|
|
do 0x0.0000123456789
|
|
do 0x0.0000123456789p+10
|
|
do 0x0.0000123456789p-10
|
|
do 0x123456789.0
|
|
do 0x0000123456789.0
|
|
do 0x123456789.0p+0
|
|
do 0x123456789.0p+1024
|
|
do 0x1.0p-16495 ; Underflow
|
|
do 0x1.01p-16495 ; Rounds to denorm
|
|
do 0x1.0p-16494 ; Smallest denorm
|
|
do 0x1.ffffffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
|
|
do 0x1.0p-16383 ; Denorm
|
|
do 0x1.ffffffffffffffffffffffffffffffffp-16383 ; Rounds to normal
|
|
do 0x1.0p-16382 ; Smallest non-denorm
|
|
do 0x1.0p+16383 ; Biggest possible exponent
|
|
do 0x1.ffffffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
|
|
do Inf ; Infinity
|
|
do NaN
|
|
|
|
; 16-bit
|
|
dw 1.0
|
|
dw 0h1.0
|
|
dw 2.0
|
|
dw 0h2.0
|
|
dw 0h1.0p+1
|
|
dw 0h1.0p-1
|
|
dw 0h0.0
|
|
dw 0h1.23456789
|
|
dw 0h0.123456789
|
|
dw 0h0.0000123456789
|
|
dw 0h1.23456789p10
|
|
dw 0h1.23456789p+10
|
|
dw 0h1.23456789p-10
|
|
dw 0h0.123456789p10
|
|
dw 0h0.123456789p+10
|
|
dw 0h0.123456789abcdef0123456789abcdef012345p-10
|
|
dw 0h0.0000123456789
|
|
dw 0h0.0000123456789p+10
|
|
dw 0h0.0000123456789p-10
|
|
dw 0h1.0p-25 ; Underflow
|
|
dw 0h1.0p-24 ; Smallest denorm
|
|
dw 0h1.ffffffffffffffffffffffffffffp-16 ; Rounds to denorm
|
|
dw 0h1.0p-15 ; Denorm
|
|
dw 0h1.ffffffffffffffffffffffffffffp-15 ; Rounds to normal
|
|
dw 0h1.0p-14 ; Smallest non-denorm
|
|
dw 0h1.0p+15 ; Biggest possible exponent
|
|
dw 0h1.ffffffffffffffffffffffffffffp+15 ; Rounds to infinity
|
|
dw Inf ; Infinity
|
|
dw NaN
|
|
|
|
; 32-bit
|
|
dd 1.0
|
|
dd 0h1.0
|
|
dd 2.0
|
|
dd 0h2.0
|
|
dd 0h1.0p+1
|
|
dd 0h1.0p-1
|
|
dd 0h0.0
|
|
dd 0h1.23456789
|
|
dd 0h0.123456789
|
|
dd 0h0.0000123456789
|
|
dd 0h1.23456789p10
|
|
dd 0h1.23456789p+10
|
|
dd 0h1.23456789p-10
|
|
dd 0h0.123456789p10
|
|
dd 0h0.123456789p+10
|
|
dd 0h0.123456789abcdef0123456789abcdef012345p-10
|
|
dd 0h0.0000123456789
|
|
dd 0h0.0000123456789p+10
|
|
dd 0h0.0000123456789p-10
|
|
dd 0h123456789.0
|
|
dd 0h0000123456789.0
|
|
dd 0h123456789.0p+0
|
|
dd 0h123456789.0p+64
|
|
dd 0h1.0p-150 ; Underflow
|
|
dd 0h1.0p-149 ; Smallest denorm
|
|
dd 0h1.ffffffffffffffffffffffffffffp-128 ; Rounds to denorm
|
|
dd 0h1.0p-127 ; Denorm
|
|
dd 0h1.ffffffffffffffffffffffffffffp-127 ; Rounds to normal
|
|
dd 0h1.0p-126 ; Smallest non-denorm
|
|
dd 0h1.0p+127 ; Biggest possible exponent
|
|
dd 0h1.ffffffffffffffffffffffffffffp+127 ; Rounds to infinity
|
|
dd Inf ; Infinity
|
|
dd NaN
|
|
|
|
; 64-bit
|
|
dq 1.0
|
|
dq 0h1.0
|
|
dq 2.0
|
|
dq 0h2.0
|
|
dq 0h1.0p+1
|
|
dq 0h1.0p-1
|
|
dq 0h0.0
|
|
dq 0h1.23456789
|
|
dq 0h0.123456789
|
|
dq 0h0.0000123456789
|
|
dq 0h1.23456789p10
|
|
dq 0h1.23456789p+10
|
|
dq 0h1.23456789p-10
|
|
dq 0h0.123456789p10
|
|
dq 0h0.123456789p+10
|
|
dq 0h0.123456789abcdef0123456789abcdef012345p-10
|
|
dq 0h0.0000123456789
|
|
dq 0h0.0000123456789p+10
|
|
dq 0h0.0000123456789p-10
|
|
dq 0h123456789.0
|
|
dq 0h0000123456789.0
|
|
dq 0h123456789.0p+0
|
|
dq 0h123456789.0p+300
|
|
dq 0h1.0p-1075 ; Underflow
|
|
dq 0h1.0p-1074 ; Smallest denorm
|
|
dq 0h1.ffffffffffffffffffffffffffffp-1024 ; Rounds to denorm
|
|
dq 0h1.0p-1023 ; Denorm
|
|
dq 0h1.ffffffffffffffffffffffffffffp-1023 ; Rounds to normal
|
|
dq 0h1.0p-1022 ; Smallest non-denorm
|
|
dq 0h1.0p+1023 ; Biggest possible exponent
|
|
dq 0h1.ffffffffffffffffffffffffffffp+1023 ; Rounds to infinity
|
|
dq Inf ; Infinity
|
|
dq NaN
|
|
|
|
; 80-bit
|
|
dt 1.0
|
|
dt 0h1.0
|
|
dt 2.0
|
|
dt 0h2.0
|
|
dt 0h1.0p+1
|
|
dt 0h1.0p-1
|
|
dt 0h0.0
|
|
dt 0h1.23456789
|
|
dt 0h0.123456789
|
|
dt 0h0.0000123456789
|
|
dt 0h1.23456789p10
|
|
dt 0h1.23456789p+10
|
|
dt 0h1.23456789p-10
|
|
dt 0h0.123456789p10
|
|
dt 0h0.123456789p+10
|
|
dt 0h0.123456789abcdef0123456789abcdef012345p-10
|
|
dt 0h0.0000123456789
|
|
dt 0h0.0000123456789p+10
|
|
dt 0h0.0000123456789p-10
|
|
dt 0h123456789.0
|
|
dt 0h0000123456789.0
|
|
dt 0h123456789.0p+0
|
|
dt 0h123456789.0p+1024
|
|
dt 0h1.0p-16446 ; Underflow
|
|
dt 0h1.0p-16445 ; Smallest denorm
|
|
dt 0h1.ffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
|
|
dt 0h1.0p-16383 ; Denorm
|
|
dt 0h1.ffffffffffffffffffffffffffffp-16383 ; Rounds to normal
|
|
dt 0h1.0p-16382 ; Smallest non-denorm
|
|
dt 0h1.0p+16383 ; Biggest possible exponent
|
|
dt 0h1.ffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
|
|
dt Inf ; Infinity
|
|
dt NaN
|
|
|
|
; 128-bit
|
|
do 1.0
|
|
do 0h1.0
|
|
do 2.0
|
|
do 0h2.0
|
|
do 0h1.0p+1
|
|
do 0h1.0p-1
|
|
do 0h0.0
|
|
do 0h1.23456789
|
|
do 0h0.123456789
|
|
do 0h0.0000123456789
|
|
do 0h1.23456789p10
|
|
do 0h1.23456789p+10
|
|
do 0h1.23456789p-10
|
|
do 0h0.123456789p10
|
|
do 0h0.123456789p+10
|
|
do 0h0.123456789abcdef0123456789abcdef012345p-10
|
|
do 0h0.0000123456789
|
|
do 0h0.0000123456789p+10
|
|
do 0h0.0000123456789p-10
|
|
do 0h123456789.0
|
|
do 0h0000123456789.0
|
|
do 0h123456789.0p+0
|
|
do 0h123456789.0p+1024
|
|
do 0h1.0p-16495 ; Underflow
|
|
do 0h1.0p-16494 ; Smallest denorm
|
|
do 0h1.ffffffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
|
|
do 0h1.0p-16383 ; Denorm
|
|
do 0h1.ffffffffffffffffffffffffffffffffp-16383 ; Rounds to normal
|
|
do 0h1.0p-16382 ; Smallest non-denorm
|
|
do 0h1.0p+16383 ; Biggest possible exponent
|
|
do 0h1.ffffffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
|
|
do Inf ; Infinity
|
|
do NaN
|
|
|
|
; 16-bit
|
|
dw 1.0
|
|
dw $1.0
|
|
dw 2.0
|
|
dw $2.0
|
|
dw $1.0p+1
|
|
dw $1.0p-1
|
|
dw $0.0
|
|
dw $1.23456789
|
|
dw $0.123456789
|
|
dw $0.0000123456789
|
|
dw $1.23456789p10
|
|
dw $1.23456789p+10
|
|
dw $1.23456789p-10
|
|
dw $0.123456789p10
|
|
dw $0.123456789p+10
|
|
dw $0.123456789abcdef0123456789abcdef012345p-10
|
|
dw $0.0000123456789
|
|
dw $0.0000123456789p+10
|
|
dw $0.0000123456789p-10
|
|
dw $1.0p-25 ; Underflow
|
|
dw $1.0p-24 ; Smallest denorm
|
|
dw $1.ffffffffffffffffffffffffffffp-16 ; Rounds to denorm
|
|
dw $1.0p-15 ; Denorm
|
|
dw $1.ffffffffffffffffffffffffffffp-15 ; Rounds to normal
|
|
dw $1.0p-14 ; Smallest non-denorm
|
|
dw $1.0p+15 ; Biggest possible exponent
|
|
dw $1.ffffffffffffffffffffffffffffp+15 ; Rounds to infinity
|
|
dw Inf ; Infinity
|
|
dw NaN
|
|
|
|
; 32-bit
|
|
dd 1.0
|
|
dd $1.0
|
|
dd 2.0
|
|
dd $2.0
|
|
dd $1.0p+1
|
|
dd $1.0p-1
|
|
dd $0.0
|
|
dd $1.23456789
|
|
dd $0.123456789
|
|
dd $0.0000123456789
|
|
dd $1.23456789p10
|
|
dd $1.23456789p+10
|
|
dd $1.23456789p-10
|
|
dd $0.123456789p10
|
|
dd $0.123456789p+10
|
|
dd $0.123456789abcdef0123456789abcdef012345p-10
|
|
dd $0.0000123456789
|
|
dd $0.0000123456789p+10
|
|
dd $0.0000123456789p-10
|
|
dd $123456789.0
|
|
dd $0000123456789.0
|
|
dd $123456789.0p+0
|
|
dd $123456789.0p+64
|
|
dd $1.0p-150 ; Underflow
|
|
dd $1.0p-149 ; Smallest denorm
|
|
dd $1.ffffffffffffffffffffffffffffp-128 ; Rounds to denorm
|
|
dd $1.0p-127 ; Denorm
|
|
dd $1.ffffffffffffffffffffffffffffp-127 ; Rounds to normal
|
|
dd $1.0p-126 ; Smallest non-denorm
|
|
dd $1.0p+127 ; Biggest possible exponent
|
|
dd $1.ffffffffffffffffffffffffffffp+127 ; Rounds to infinity
|
|
dd Inf ; Infinity
|
|
dd NaN
|
|
|
|
; 64-bit
|
|
dq 1.0
|
|
dq $1.0
|
|
dq 2.0
|
|
dq $2.0
|
|
dq $1.0p+1
|
|
dq $1.0p-1
|
|
dq $0.0
|
|
dq $1.23456789
|
|
dq $0.123456789
|
|
dq $0.0000123456789
|
|
dq $1.23456789p10
|
|
dq $1.23456789p+10
|
|
dq $1.23456789p-10
|
|
dq $0.123456789p10
|
|
dq $0.123456789p+10
|
|
dq $0.123456789abcdef0123456789abcdef012345p-10
|
|
dq $0.0000123456789
|
|
dq $0.0000123456789p+10
|
|
dq $0.0000123456789p-10
|
|
dq $123456789.0
|
|
dq $0000123456789.0
|
|
dq $123456789.0p+0
|
|
dq $123456789.0p+300
|
|
dq $1.0p-1075 ; Underflow
|
|
dq $1.0p-1074 ; Smallest denorm
|
|
dq $1.ffffffffffffffffffffffffffffp-1024 ; Rounds to denorm
|
|
dq $1.0p-1023 ; Denorm
|
|
dq $1.ffffffffffffffffffffffffffffp-1023 ; Rounds to normal
|
|
dq $1.0p-1022 ; Smallest non-denorm
|
|
dq $1.0p+1023 ; Biggest possible exponent
|
|
dq $1.ffffffffffffffffffffffffffffp+1023 ; Rounds to infinity
|
|
dq Inf ; Infinity
|
|
dq NaN
|
|
|
|
; 80-bit
|
|
dt 1.0
|
|
dt $1.0
|
|
dt 2.0
|
|
dt $2.0
|
|
dt $1.0p+1
|
|
dt $1.0p-1
|
|
dt $0.0
|
|
dt $1.23456789
|
|
dt $0.123456789
|
|
dt $0.0000123456789
|
|
dt $1.23456789p10
|
|
dt $1.23456789p+10
|
|
dt $1.23456789p-10
|
|
dt $0.123456789p10
|
|
dt $0.123456789p+10
|
|
dt $0.123456789abcdef0123456789abcdef012345p-10
|
|
dt $0.0000123456789
|
|
dt $0.0000123456789p+10
|
|
dt $0.0000123456789p-10
|
|
dt $123456789.0
|
|
dt $0000123456789.0
|
|
dt $123456789.0p+0
|
|
dt $123456789.0p+1024
|
|
dt $1.0p-16446 ; Underflow
|
|
dt $1.0p-16445 ; Smallest denorm
|
|
dt $1.ffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
|
|
dt $1.0p-16383 ; Denorm
|
|
dt $1.ffffffffffffffffffffffffffffp-16383 ; Rounds to normal
|
|
dt $1.0p-16382 ; Smallest non-denorm
|
|
dt $1.0p+16383 ; Biggest possible exponent
|
|
dt $1.ffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
|
|
dt Inf ; Infinity
|
|
dt NaN
|
|
|
|
; 128-bit
|
|
do 1.0
|
|
do $1.0
|
|
do 2.0
|
|
do $2.0
|
|
do $1.0p+1
|
|
do $1.0p-1
|
|
do $0.0
|
|
do $1.23456789
|
|
do $0.123456789
|
|
do $0.0000123456789
|
|
do $1.23456789p10
|
|
do $1.23456789p+10
|
|
do $1.23456789p-10
|
|
do $0.123456789p10
|
|
do $0.123456789p+10
|
|
do $0.123456789abcdef0123456789abcdef012345p-10
|
|
do $0.0000123456789
|
|
do $0.0000123456789p+10
|
|
do $0.0000123456789p-10
|
|
do $123456789.0
|
|
do $0000123456789.0
|
|
do $123456789.0p+0
|
|
do $123456789.0p+1024
|
|
do $1.0p-16495 ; Underflow
|
|
do $1.0p-16494 ; Smallest denorm
|
|
do $1.ffffffffffffffffffffffffffffffffp-16384 ; Rounds to denorm
|
|
do $1.0p-16383 ; Denorm
|
|
do $1.ffffffffffffffffffffffffffffffffp-16383 ; Rounds to normal
|
|
do $1.0p-16382 ; Smallest non-denorm
|
|
do $1.0p+16383 ; Biggest possible exponent
|
|
do $1.ffffffffffffffffffffffffffffffffp+16383 ; Rounds to infinity
|
|
do Inf ; Infinity
|
|
do NaN
|