]> git.sur5r.net Git - cc65/blob - libsrc/runtime/lmul.s
Removed (pretty inconsistently used) tab chars from source code base.
[cc65] / libsrc / runtime / lmul.s
1 ;
2 ; Ullrich von Bassewitz, 13.08.1998
3 ;
4 ; CC65 runtime: multiplication for long (unsigned) ints
5 ;
6
7         .export         tosumul0ax, tosumuleax, tosmul0ax, tosmuleax
8         .import         addysp1
9         .importzp       sp, sreg, tmp1, tmp2, tmp3, tmp4, ptr1, ptr3, ptr4
10
11 tosmul0ax:
12 tosumul0ax:
13         ldy     #$00    
14         sty     sreg
15         sty     sreg+1
16
17 tosmuleax:
18 tosumuleax:
19 mul32:  sta     ptr1
20         stx     ptr1+1          ; op2 now in ptr1/sreg
21         ldy     #0
22         lda     (sp),y
23         sta     ptr3
24         iny
25         lda     (sp),y
26         sta     ptr3+1
27         iny
28         lda     (sp),y
29         sta     ptr4
30         iny
31         lda     (sp),y
32         sta     ptr4+1          ; op1 in pre3/ptr4
33         jsr     addysp1         ; Drop TOS
34
35 ; Do (ptr1:sreg)*(ptr3:ptr4) --> EAX.
36
37         lda     #0
38         sta     tmp4
39         sta     tmp3
40         sta     tmp2
41         ldy     #32
42 L0:     lsr     tmp4
43         ror     tmp3
44         ror     tmp2
45         ror     a
46         ror     sreg+1
47         ror     sreg
48         ror     ptr1+1
49         ror     ptr1
50         bcc     L1
51         clc
52         adc     ptr3
53         pha
54         lda     ptr3+1
55         adc     tmp2
56         sta     tmp2
57         lda     ptr4
58         adc     tmp3
59         sta     tmp3
60         lda     ptr4+1
61         adc     tmp4
62         sta     tmp4
63         pla
64 L1:     dey
65         bpl     L0
66         lda     ptr1            ; Load the low result word
67         ldx     ptr1+1
68         rts
69