]> git.sur5r.net Git - cc65/blob - libsrc/runtime/umul16x16r32.s
Comment update.
[cc65] / libsrc / runtime / umul16x16r32.s
1 ;
2 ; Ullrich von Bassewitz, 2010-11-03
3 ;
4 ; CC65 runtime: 16x16 => 32 unsigned multiplication
5 ;
6
7         .export         umul16x16r32, umul16x16r32m
8
9         .include        "zeropage.inc"
10
11
12 ;---------------------------------------------------------------------------
13 ; 16x16 => 32 unsigned multiplication routine.
14 ;
15 ;  routine         lhs         rhs        result          result also in
16 ; -----------------------------------------------------------------------
17 ;  umul16x16r32    ptr1        ax         ax:sreg          ptr1:sreg
18 ;  umul16x16r32m   ptr1        ptr3       ax:sreg          ptr1:sreg
19 ;
20 ; ptr3 is left intact by the routine.
21 ;
22
23 umul16x16r32:
24         sta     ptr3
25         stx     ptr3+1
26
27 umul16x16r32m:
28         lda     #0
29         sta     sreg+1
30         ldy     #16             ; Number of bits
31
32         lsr     ptr1+1
33         ror     ptr1            ; Get first bit into carry
34 @L0:    bcc     @L1
35
36         clc
37         adc     ptr3
38         pha
39         lda     ptr3+1
40         adc     sreg+1
41         sta     sreg+1
42         pla
43
44 @L1:    ror     sreg+1
45         ror     a
46         ror     ptr1+1
47         ror     ptr1
48         dey
49         bne     @L0
50
51         sta     sreg            ; Save byte 3
52         lda     ptr1            ; Load the result
53         ldx     ptr1+1
54         rts                     ; Done
55