Minor Z80 multiplication improvement
[fw/sdcc] / device / lib / z80 / mul.s
index 7e7cceff85001301ab272b02ff75d16de2300ca8..cba10dfe93ce6edd1fadc4b591e91c68f99ac60e 100644 (file)
@@ -1,53 +1,9 @@
-       ;; Originally from GBDK by Pascal Felber.
-       
-       .area   _CODE
+        .area   _CODE
 
-__mulschar_rrx_s::
+__mulint_rrx_s::
         ld      hl,#2
         add     hl,sp
 
-        ld      e,(hl)
-        inc     hl
-        ld      l,(hl)                
-
-        ;; Fall through
-__mulschar_rrx_hds::
-        ;; Need to sign extend before going in.
-        ld      c,l
-        
-        ld      a,l
-        rla
-        sbc     a,a
-        ld      b,a
-
-        ld      a,e
-        rla
-        sbc     a,a
-        ld      d,a
-
-        jp      .mul16
-
-__muluchar_rrx_s::
-        ld      hl,#2
-        add     hl,sp
-
-        ld      e,(hl)
-
-        inc     hl
-        ld      c,(hl)                
-
-        ;; Clear the top
-        xor     a
-        ld      d,a
-        ld      b,a
-        
-        jp      .mulu16
-        
-__mulsint_rrx_s::
-__muluint_rrx_s::
-        ld      hl,#2
-        add     hl,sp
-        
         ld      e,(hl)
         inc     hl
         ld      d,(hl)
@@ -58,47 +14,46 @@ __muluint_rrx_s::
         ld      l,a
 
         ;; Fall through
-        
+
 __muluchar_rrx_hds::
-__mulsint_rrx_hds::
-__muluint_rrx_hds::
+__mulint_rrx_hds::
        ;; Parameters:
-       ;;      HL, DE (left, right irrelivent)
+       ;;      HL, DE (left, right irrelevant)
        ld      b,h
        ld      c,l
-       
+
        ;; 16-bit multiplication
-       ;; 
+       ;;
        ;; Entry conditions
        ;;   BC = multiplicand
        ;;   DE = multiplier
-       ;; 
+       ;;
        ;; Exit conditions
        ;;   DE = less significant word of product
        ;;
        ;; Register used: AF,BC,DE,HL
-.mul16:
-.mulu16:
-        ld      hl,#0
+__mul16::
+        ld      l,#0
         ld      a,b
-        ; ld c,c
         ld      b,#16
 
         ;; Optimise for the case when this side has 8 bits of data or
         ;; less.  This is often the case with support address calls.
         or      a
-        jp      nz,1$
-        
+        jr      NZ,2$
+
         ld      b,#8
         ld      a,c
 1$:
         ;; Taken from z88dk, which originally borrowed from the
         ;; Spectrum rom.
         add     hl,hl
+2$:
         rl      c
         rla                     ;DLE 27/11/98
-        jr      nc,2$
+        jr      NC,3$
         add     hl,de
-2$:     
+3$:
         djnz    1$
         ret
+