mirror of
https://github.com/cc65/cc65.git
synced 2024-12-22 12:30:41 +00:00
53dd513176
which included commits to RCS files with non-trunk default branches. git-svn-id: svn://svn.cc65.org/cc65/trunk@3 b7a2c559-68d2-44c3-8de9-860c34a00d81
64 lines
958 B
ArmAsm
64 lines
958 B
ArmAsm
;
|
|
; Ullrich von Bassewitz, 13.08.1998
|
|
;
|
|
; CC65 runtime: multiplication for long (unsigned) ints
|
|
;
|
|
|
|
.export tosumuleax, tosmuleax
|
|
.import addysp1
|
|
.importzp sp, sreg, tmp1, tmp2, tmp3, tmp4, ptr1, ptr3, ptr4
|
|
|
|
tosmuleax:
|
|
tosumuleax:
|
|
mul32: sta ptr1
|
|
stx ptr1+1 ; op2 now in ptr1/sreg
|
|
ldy #0
|
|
lda (sp),y
|
|
sta ptr3
|
|
iny
|
|
lda (sp),y
|
|
sta ptr3+1
|
|
iny
|
|
lda (sp),y
|
|
sta ptr4
|
|
iny
|
|
lda (sp),y
|
|
sta ptr4+1 ; op1 in pre3/ptr4
|
|
jsr addysp1 ; Drop TOS
|
|
|
|
; Do (ptr1:sreg)*(ptr3:ptr4) --> EAX.
|
|
|
|
lda #0
|
|
sta tmp4
|
|
sta tmp3
|
|
sta tmp2
|
|
ldy #32
|
|
L0: lsr tmp4
|
|
ror tmp3
|
|
ror tmp2
|
|
ror a
|
|
ror sreg+1
|
|
ror sreg
|
|
ror ptr1+1
|
|
ror ptr1
|
|
bcc L1
|
|
clc
|
|
adc ptr3
|
|
pha
|
|
lda ptr3+1
|
|
adc tmp2
|
|
sta tmp2
|
|
lda ptr4
|
|
adc tmp3
|
|
sta tmp3
|
|
lda ptr4+1
|
|
adc tmp4
|
|
sta tmp4
|
|
pla
|
|
L1: dey
|
|
bpl L0
|
|
lda ptr1 ; Load the low result word
|
|
ldx ptr1+1
|
|
rts
|
|
|