]> git.sur5r.net Git - cc65/commitdiff
Added labels for umul16x16r16 and umul16x16r16m.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 10 Jul 2011 14:50:18 +0000 (14:50 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sun, 10 Jul 2011 14:50:18 +0000 (14:50 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5077 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/runtime/umul16x16r32.s

index 1f3efb65c996174343d765aa17821a7d847192df..d481fd166970eb28f70e6e4c507a1fbd6c76543c 100644 (file)
@@ -5,27 +5,34 @@
 ;
 
         .export         umul16x16r32, umul16x16r32m
+        .export         umul16x16r16, umul16x16r16m
 
         .include        "zeropage.inc"
 
 
 ;---------------------------------------------------------------------------
-; 16x16 => 32 unsigned multiplication routine.
+; 16x16 => 32 unsigned multiplication routine. Because the overhead for a
+; 16x16 => 16 unsigned multiplication routine is small, we will tag it with 
+; the matching labels as well.
 ;
 ;  routine         lhs         rhs        result          result also in
 ; -----------------------------------------------------------------------
 ;  umul16x16r32    ptr1        ax         ax:sreg          ptr1:sreg
 ;  umul16x16r32m   ptr1        ptr3       ax:sreg          ptr1:sreg
+;  umul16x16r16    ptr1        ax         ax               ptr1
+;  umul16x16r16m   ptr1        ptr3       ax               ptr1
 ;
 ; ptr3 is left intact by the routine.
 ;
 
 umul16x16r32:
+umul16x16r16:
         sta     ptr3
         stx     ptr3+1
 
 umul16x16r32m:
-               lda     #0
+umul16x16r16m:
+               lda     #0
                sta     sreg+1
                ldy     #16             ; Number of bits
 
@@ -34,22 +41,23 @@ umul16x16r32m:
 @L0:    bcc     @L1
 
        clc
-       adc     ptr3
+       adc     ptr3
        pha
                lda     ptr3+1
-       adc     sreg+1
-       sta     sreg+1
+       adc     sreg+1
+       sta     sreg+1
        pla
 
 @L1:    ror     sreg+1
-       ror     a
-       ror     ptr1+1
-       ror     ptr1
+       ror     a
+       ror     ptr1+1
+       ror     ptr1
         dey
         bne     @L0
 
         sta     sreg            ; Save byte 3
-       lda     ptr1            ; Load the result
-       ldx     ptr1+1
-       rts                     ; Done
+       lda     ptr1            ; Load the result
+       ldx     ptr1+1
+       rts                     ; Done
+