From: cuz Date: Thu, 15 Nov 2001 21:53:00 +0000 (+0000) Subject: Replaced calloc by an assembler version X-Git-Tag: V2.12.0~2491 X-Git-Url: https://git.sur5r.net/?a=commitdiff_plain;h=38f716079aa8215fef167fc21dcca7f1e71f30c9;p=cc65 Replaced calloc by an assembler version git-svn-id: svn://svn.cc65.org/cc65/trunk@1119 b7a2c559-68d2-44c3-8de9-860c34a00d81 --- diff --git a/libsrc/common/.cvsignore b/libsrc/common/.cvsignore index 8cae4b2d9..31181a27c 100644 --- a/libsrc/common/.cvsignore +++ b/libsrc/common/.cvsignore @@ -5,7 +5,6 @@ _hextab.s _scanf.s abort.s bsearch.s -calloc.s errormsg.s fclose.s fdopen.s diff --git a/libsrc/common/Makefile b/libsrc/common/Makefile index 6723738f5..a54897385 100644 --- a/libsrc/common/Makefile +++ b/libsrc/common/Makefile @@ -17,7 +17,6 @@ C_OBJS = _afailed.o \ _scanf.o \ abort.o \ bsearch.o \ - calloc.o \ errormsg.o \ fclose.o \ fdopen.o \ @@ -59,6 +58,7 @@ S_OBJS = _fdesc.o \ abs.o \ atexit.o \ atoi.o \ + calloc.o \ copydata.o \ cprintf.o \ errno.o \ diff --git a/libsrc/common/calloc.c b/libsrc/common/calloc.c deleted file mode 100644 index 70b984938..000000000 --- a/libsrc/common/calloc.c +++ /dev/null @@ -1,25 +0,0 @@ -/* - * calloc.c - * - * Ullrich von Bassewitz, 06.06.1998 - */ - - - -#include -#include - - - -void* calloc (size_t count, size_t size) -{ - void* mem; - size *= count; - if (mem = malloc (size)) { - memset (mem, 0, size); - } - return mem; -} - - - diff --git a/libsrc/common/calloc.s b/libsrc/common/calloc.s new file mode 100644 index 000000000..16d217553 --- /dev/null +++ b/libsrc/common/calloc.s @@ -0,0 +1,64 @@ +; +; Ullrich von Bassewitz, 15.11.2001 +; +; Allocate a block and zero it. +; +; void* __fastcall__ calloc (size_t count, size_t size); +; + + .export _calloc + .import _malloc, _memset + .import tosumulax, pushax, push0 + + +; ------------------------------------------------------------------------- + +.proc _calloc + +; We have the first argument in a/x and the second on the stack. Calling +; tosumulax will give the product of both in a/x. + + jsr tosumulax + +; Save size for later + + sta Size + stx Size+1 + +; malloc() is a fastcall function, so we do already have the argument in +; the right place + + jsr _malloc + +; Check for a NULL pointer + + cpx #0 + bne ClearBlock + cmp #0 + beq ClearBlock + +; We have a NULL pointer, bail out + + rts + +; No NULL pointer, clear the block. memset will return a pointer to the +; block which is exactly what we want. + +ClearBlock: + jsr pushax ; ptr + jsr push0 ; #0 + lda Size + ldx Size+1 ; Size + jmp _memset + +.endproc + +; ------------------------------------------------------------------------- +; Data + +.bss + +Size: .res 2 + + +