]> git.sur5r.net Git - cc65/commitdiff
Slightly improved memset function by Christian Krüger.
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 26 Jan 2011 22:07:59 +0000 (22:07 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Wed, 26 Jan 2011 22:07:59 +0000 (22:07 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@4923 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/common/memset.s

index fcdbd98bc1628befe2822eed117ed593b48288ad..6634e8fb73d47d3effc39aea1dfbc8000e18b93c 100644 (file)
@@ -5,7 +5,7 @@
 ;
 ; Ullrich von Bassewitz, 29.05.1998
 ; Performance increase (about 20%) by
-; Christian Krueger, 12.09.2009
+; Christian Krueger, 12.09.2009, slightly improved 12.01.2011
 ;
 ; NOTE: bzero will return it's first argument as memset does. It is no problem
 ;       to declare the return value as void, since it may be ignored. _bzero
@@ -81,15 +81,13 @@ L1:         .repeat 2               ; Unroll this a bit to make it faster
 ; Set the remaining bytes if any
 
 L2:            ldy     ptr3            ; Get the low byte of n
-       bne     L3              ; something to set?
-       jmp     popax           ; no -> Pop ptr and return as result
+       beq     leave           ; something to set? No -> leave
 
-L3a:   sta     (ptr1),y        ; set bytes in low
-       sta     (ptr2),y        ; and high section
-L3:            dey
-       bne     L3a
-       sta     (ptr1),y        ; Set remaining byte(s)
-       sta     (ptr2),y
+L3:    dey
+       sta     (ptr1),y                ; set bytes in low
+       sta     (ptr2),y                ; and high section
+       bne     L3              ; flags still up to date from dey!
+leave: 
        jmp     popax           ; Pop ptr and return as result