]> git.sur5r.net Git - cc65/commitdiff
added bzero implementation
authorizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 21 Dec 2002 00:05:51 +0000 (00:05 +0000)
committerizydorst <izydorst@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Sat, 21 Dec 2002 00:05:51 +0000 (00:05 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1812 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/geos/common/memset.s

index e524376149e0619a22136d03c5c6fd4052f7ffdb..74005b0e90babd61ff33ccd9a717b3b5acd58a96 100644 (file)
@@ -1,21 +1,41 @@
 ;
 ; void* memset (void* ptr, int c, size_t n);
+; void* _bzero (void* ptr, size_t n);
+; void bzero (void* ptr, size_t n);
 ;
 ; Maciej 'YTM/Elysium' Witkowiak, 15.07.2001
 ;
+; 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
+;       (note the leading underscore) is declared with the proper return type,
+;       because the compiler will replace memset by _bzero if the fill value
+;       is zero, and the optimizer looks at the return type to see if the value
+;       in a/x is of any use.
 
-       .export _memset
+
+       .export _memset, _bzero, __bzero
         .import popa, popax
 
         .include "../inc/jumptab.inc"
         .include "../inc/geossym.inc"
 
+_bzero:
+__bzero:
+           sta r0L
+           stx r0H
+           lda #0
+           sta r2L            ; fill with zeros
+           beq common
+
 _memset:
            sta r0L
            stx r0H
            jsr popax
            sta r2L
-           jsr popax
+common:            jsr popax
            sta r1L
            stx r1H
-           jmp FillRam
+           jsr FillRam
+           lda r1L             ; restore ptr and pass as result
+           ldx r1H
+           rts