1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-27 15:29:46 +00:00

Added division routine. Removed C callable entry points from mul routines,

they're now in common.


git-svn-id: svn://svn.cc65.org/cc65/trunk@4441 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
uz 2009-11-04 18:23:40 +00:00
parent 851926b301
commit c200e0ec94
4 changed files with 59 additions and 15 deletions

View File

@ -218,6 +218,7 @@ OBJS = add.o \
ugt.o \
ule.o \
ult.o \
udiv32by16r16.o \
umod.o \
umul16x16r32.o \
xor.o \

View File

@ -4,8 +4,8 @@
; CC65 runtime: 16x16 => 32 signed multiplication
;
.export imul16x16r32, _cc65_imul16x16r32
.import popax, negax, umul16x16r32m, negeax
.export imul16x16r32
.import negax, umul16x16r32m, negeax
.importzp ptr1, ptr3, tmp1
@ -19,12 +19,6 @@
; There is probably a faster way to do this.
;
_cc65_imul16x16r32:
sta ptr1
stx ptr1+1
jsr popax
imul16x16r32:
stx tmp1
cpx #0

View File

@ -0,0 +1,55 @@
;
; Ullrich von Bassewitz, 2009-11-04
;
; CC65 runtime: 32by16 => 16 unsigned division
;
.export udiv32by16r16, udiv32by16r16m
.importzp ptr1, ptr2, ptr3, sreg
;---------------------------------------------------------------------------
; 32by16 division. Divide ptr1:ptr2 by ptr3. Result is in ptr1, remainder
; in sreg.
;
; lhs rhs result result also in remainder
; -----------------------------------------------------------------------
; ptr1:ptr2 ptr3 ax ptr1 sreg
;
udiv32by16r16:
sta ptr3
stx ptr3+1
udiv32by16r16m:
lda #0
sta sreg+1
ldy #32
L0: asl ptr1
rol ptr1+1
rol ptr2
rol ptr2+1
rol a
rol sreg+1
pha
cmp ptr3
lda sreg+1
sbc ptr3+1
bcc L1
sta sreg+1
pla
sbc ptr3
pha
inc ptr1
L1: pla
dey
bne L0
sta sreg
lda ptr1
ldx ptr1+1
rts

View File

@ -4,8 +4,7 @@
; CC65 runtime: 16x16 => 32 unsigned multiplication
;
.export _cc65_umul16x16r32, umul16x16r32, umul16x16r32m
.import popax
.export umul16x16r32, umul16x16r32m
.importzp ptr1, ptr3, sreg
@ -17,11 +16,6 @@
; ptr1 ax ax:sreg ptr1:sreg
;
_cc65_umul16x16r32:
sta ptr1
stx ptr1+1
jsr popax
umul16x16r32:
sta ptr3
stx ptr3+1