reversed botched attempt to increase FP division precission

This commit is contained in:
FeralChild64 committed 2020-03-21 15:53:40 +01:00
1 parent 2c76825286
commit e16118a331
3 files changed
+12 -22

No files matched your search

-3
View File
@@ -85,9 +85,6 @@ div_FAC2_FAC1:
lda FAC2_mantissa+0 lda FAC2_mantissa+0
sta FAC1_mantissa+0 sta FAC1_mantissa+0
lda #$00
sta FACOV
// Normalize and quit // Normalize and quit
jmp normal_FAC1 jmp normal_FAC1
+8 -7
View File
@@ -3,17 +3,21 @@
// #LAYOUT# * * #IGNORE // #LAYOUT# * * #IGNORE
// //
// Math package - denormalize FAC1 mantissa and adapt its exponent accordingly, // Math package - denormalize FAC1 mantissa and adapt its exponent accordingly
// so that division is more precise
// //
// XXX test this // XXX test this
div_FAC1_denorm: div_FAC1_denorm:
// Set FACOV to 0, no need for increased precision here
lda #$00
sta FACOV
// Start by moving whole bytes, if possible // Start by moving whole bytes, if possible
lda FACOV lda FAC1_mantissa+3
bne div_FAC1_denorm_by_bit // branch if last byte of mantissa is non-zero bne div_FAC1_denorm_by_bit // branch if last byte of mantissa is non-zero
lda FAC1_exponent lda FAC1_exponent
@@ -27,8 +31,6 @@ div_FAC1_denorm:
// Move mantissa bytes // Move mantissa bytes
lda FAC1_mantissa+3
sta FACOV
lda FAC1_mantissa+2 lda FAC1_mantissa+2
sta FAC1_mantissa+3 sta FAC1_mantissa+3
lda FAC1_mantissa+1 lda FAC1_mantissa+1
@@ -42,7 +44,7 @@ div_FAC1_denorm:
div_FAC1_denorm_by_bit: div_FAC1_denorm_by_bit:
lda FACOV lda FAC1_mantissa+3
and #$01 and #$01
bne div_FAC1_denorm_done // branch if lowest bit of mantissa is already 1 bne div_FAC1_denorm_done // branch if lowest bit of mantissa is already 1
@@ -61,7 +63,6 @@ div_FAC1_denorm_by_bit:
ror FAC1_mantissa+1 ror FAC1_mantissa+1
ror FAC1_mantissa+2 ror FAC1_mantissa+2
ror FAC1_mantissa+3 ror FAC1_mantissa+3
ror FACOV
bcc div_FAC1_denorm_by_bit // branch always bcc div_FAC1_denorm_by_bit // branch always
+4 -12
View File
@@ -2,10 +2,10 @@
// #LAYOUT# * BASIC_0 #TAKE // #LAYOUT# * BASIC_0 #TAKE
// #LAYOUT# * * #IGNORE // #LAYOUT# * * #IGNORE
// Math package - mantissa division, based on code by Verz // Math package - 32-bit mantissa division, based on code by Verz
// //
// divident: FAC2_mantissa, divisor: FAC1_mantissa, result: FAC2_mantissa, remainder: RESHO // divident: FAC2_mantissa, divisor: FAC1_mantissa (without FACOV), result: FAC2_mantissa, remainder: RESHO
// temporary storage: INDEX+0, INDEX+1, INDEX+2, INDEX+3, .Y // temporary storage: INDEX+0, INDEX+1, INDEX+2, INDEX+3
// //
// RESHO (remainder) should be set to 0 before // RESHO (remainder) should be set to 0 before
// //
@@ -15,7 +15,7 @@
div_mantissas: div_mantissas:
ldx #40 // repeat for each bit ldx #32 // repeat for each bit
// FALLTROUGH // FALLTROUGH
@@ -30,7 +30,6 @@ div_mantissas_loop:
// Multiply remainder by 2, lsb <- Carry // Multiply remainder by 2, lsb <- Carry
rol RESHO+4
rol RESHO+3 rol RESHO+3
rol RESHO+2 rol RESHO+2
rol RESHO+1 rol RESHO+1
@@ -39,10 +38,6 @@ div_mantissas_loop:
// Subtract divisor from the remainder, result to INDEX and .Y // Subtract divisor from the remainder, result to INDEX and .Y
sec sec
lda RESHO+4
sbc FACOV
tay
lda RESHO+3 lda RESHO+3
sbc FAC1_mantissa+3 sbc FAC1_mantissa+3
sta INDEX+3 sta INDEX+3
@@ -63,9 +58,6 @@ div_mantissas_loop:
// Save subtraction result as new remainder // Save subtraction result as new remainder
tya
sta RESHO+4
lda INDEX+3 lda INDEX+3
sta RESHO+3 sta RESHO+3