bad float implementation
This commit is contained in:
parent
0779a0fab5
commit
cbe3580001
3 changed files with 41 additions and 6 deletions
|
@ -88,6 +88,7 @@ function main
|
||||||
local tokens
|
local tokens
|
||||||
|
|
||||||
fill_in_powers_of_10()
|
fill_in_powers_of_10()
|
||||||
|
print_powers_of_10()
|
||||||
|
|
||||||
dat_banned_objmacros = 255
|
dat_banned_objmacros = 255
|
||||||
dat_banned_fmacros = 255
|
dat_banned_fmacros = 255
|
||||||
|
|
|
@ -288,18 +288,29 @@ function tokenize
|
||||||
significand = lower > 58
|
significand = lower > 58
|
||||||
significand |= upper < 6
|
significand |= upper < 6
|
||||||
p += 8
|
p += 8
|
||||||
significand >= 0 - *8p
|
exponent = *8p
|
||||||
|
|
||||||
|
putn(significand)
|
||||||
|
putc(32)
|
||||||
|
putn_signed(exponent)
|
||||||
|
putc(10)
|
||||||
if integer == 0 goto float_no_integer
|
if integer == 0 goto float_no_integer
|
||||||
; we now have significand / 2^58 = fraction*10^pow10
|
|
||||||
; now deal with the integer part
|
; now deal with the integer part
|
||||||
exponent = leftmost_1bit(integer)
|
n = leftmost_1bit(integer)
|
||||||
significand >= exponent
|
n += 1
|
||||||
|
significand = right_shift(significand, n)
|
||||||
|
exponent += n
|
||||||
n = 58 - exponent
|
n = 58 - exponent
|
||||||
significand += integer < n
|
significand += left_shift(integer, n)
|
||||||
|
putn(significand)
|
||||||
|
putc(32)
|
||||||
|
putn_signed(exponent)
|
||||||
|
putc(10)
|
||||||
if *1in != 'e goto float_no_exponent
|
if *1in != 'e goto float_no_exponent
|
||||||
|
|
||||||
:float_no_exponent
|
:float_no_exponent
|
||||||
if significand == 0 goto float_zero
|
if significand == 0 goto float_zero
|
||||||
|
normalize_float(&significand, &exponent)
|
||||||
; reduce to 52-bit significant
|
; reduce to 52-bit significant
|
||||||
significand >= 6
|
significand >= 6
|
||||||
exponent += 6
|
exponent += 6
|
||||||
|
@ -309,6 +320,10 @@ function tokenize
|
||||||
significand &= ~b
|
significand &= ~b
|
||||||
data = significand
|
data = significand
|
||||||
exponent += 1023 ; float format
|
exponent += 1023 ; float format
|
||||||
|
putc('*)
|
||||||
|
putn(exponent)
|
||||||
|
putc(10)
|
||||||
|
|
||||||
data |= exponent < 52
|
data |= exponent < 52
|
||||||
|
|
||||||
*1out = TOKEN_CONSTANT_FLOAT
|
*1out = TOKEN_CONSTANT_FLOAT
|
||||||
|
|
21
05/util.b
21
05/util.b
|
@ -24,7 +24,26 @@ function full_multiply_signed
|
||||||
*8p_lower = lower
|
*8p_lower = lower
|
||||||
*8p_upper = upper
|
*8p_upper = upper
|
||||||
return
|
return
|
||||||
|
|
||||||
|
; allows for negative shifts
|
||||||
|
function right_shift
|
||||||
|
argument x
|
||||||
|
argument n
|
||||||
|
if n < 0 goto right_shift_negative
|
||||||
|
return x > n
|
||||||
|
:right_shift_negative
|
||||||
|
n = 0 - n
|
||||||
|
return x < n
|
||||||
|
|
||||||
|
; allows for negative shifts
|
||||||
|
function left_shift
|
||||||
|
argument x
|
||||||
|
argument n
|
||||||
|
if n < 0 goto right_shift_negative
|
||||||
|
return x < n
|
||||||
|
:left_shift_negative
|
||||||
|
n = 0 - n
|
||||||
|
return x > n
|
||||||
|
|
||||||
function file_error
|
function file_error
|
||||||
argument name
|
argument name
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue