1
0
mirror of https://github.com/KarolS/millfork.git synced 2026-04-21 09:16:34 +00:00

6502: Fix word division and byte multiplication

This commit is contained in:
Karol Stasiak
2019-08-03 23:58:47 +02:00
parent 851bd717ef
commit 34254314a6
5 changed files with 86 additions and 14 deletions
+27 -2
View File
@@ -68,12 +68,17 @@ __mul_u16u8u16_start:
}
// divide (__reg[1]:__reg[0])/__reg[2]
// remainder in A, quotient in (__reg[1]:__reg[0])
noinline asm byte __mod_u16u8u16u8() {
? LDA #0
? LDX #15
? CLC
__divmod_u16u8u16u8_start:
// TODO: decide when
#if OPTIMIZE_FOR_SPEED
? LDA __reg+2
? BMI __divmod_u16u8u16u8_variant2
? LDA #0
__divmod_u16u8u16u8_start: // for divisors <= 127
? ROL __reg
? ROL __reg+1
? ROL
@@ -86,6 +91,25 @@ __divmod_u16u8u16u8_skip:
? ROL __reg
? ROL __reg+1
? RTS
#endif
__divmod_u16u8u16u8_variant2:
? LDA #0
__divmod_u16u8u16u8_start2: // for divisors >= 128
? ROL __reg
? ROL __reg+1
? ROL
? BCS __divmod_u16u8u16u8_sub2
? CMP __reg+2
? BCC __divmod_u16u8u16u8_skip2
__divmod_u16u8u16u8_sub2:
? SBC __reg+2
? SEC
__divmod_u16u8u16u8_skip2:
? DEX
? BPL __divmod_u16u8u16u8_start2
? ROL __reg
? ROL __reg+1
? RTS
}
asm word __div_u16u8u16u8() {
@@ -93,6 +117,7 @@ asm word __div_u16u8u16u8() {
? LDA __reg
? LDX __reg+1
? RTS
}
#endif