diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2007-08-23 18:45:22 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2007-08-23 18:45:22 +0000 |
commit | e6e56f7c72648ab51f54dc7a2cfc83b9c5b9c6e5 (patch) | |
tree | cd78bb15deffea016411d3743adb7cbf5c108787 /newlib/libc/machine/spu/printf.S | |
parent | fc32145a4c2dc74dc6b5309ba58dba2df1768e16 (diff) | |
download | cygnal-e6e56f7c72648ab51f54dc7a2cfc83b9c5b9c6e5.tar.gz cygnal-e6e56f7c72648ab51f54dc7a2cfc83b9c5b9c6e5.tar.bz2 cygnal-e6e56f7c72648ab51f54dc7a2cfc83b9c5b9c6e5.zip |
2007-08-23 Hidetaka Takano <hidetaka.takano@glb.toshiba.co.jp>
Reduce the memory consumption of variable argument functions
for SPU (cell):
* libc/machine/spu/Makefile.am: Replace printf/scanf family C sources
to assembler sources.
* libc/machine/spu/Makefile.in: Regenerated.
* libc/machine/spu/stdio.c: Add __check_init function wrapping
CHECK_INIT macro to use from assembler routines.
* libc/machine/spu/c99ppe.h: Add definitions for assembler code.
* libc/machine/spu/fiprintf.S: New file.
* libc/machine/spu/fiscanf.S: Ditto.
* libc/machine/spu/fprintf.S: Ditto.
* libc/machine/spu/fscanf.S: Ditto.
* libc/machine/spu/iprintf.S: Ditto.
* libc/machine/spu/iscanf.S: Ditto.
* libc/machine/spu/printf.S: Ditto.
* libc/machine/spu/scanf.S: Ditto.
* libc/machine/spu/siprintf.S: Ditto.
* libc/machine/spu/siscanf.S: Ditto.
* libc/machine/spu/sniprintf.S: Ditto.
* libc/machine/spu/snprintf.S: Ditto.
* libc/machine/spu/sprintf.S: Ditto.
* libc/machine/spu/sscanf.S: Ditto.
* libc/machine/spu/stack_reg_va.S: Ditto.
* libc/machine/spu/syscall.def: Ditto. (for maintenance)
* libc/machine/spu/mk_syscalls: Ditto. (for maintenance)
* libc/machine/spu/fiprintf.c: Removed. (Replaced by .S)
* libc/machine/spu/fiscanf.c: Ditto.
* libc/machine/spu/fprintf.c: Ditto.
* libc/machine/spu/fscanf.c: Ditto.
* libc/machine/spu/iprintf.c: Ditto.
* libc/machine/spu/iscanf.c: Ditto.
* libc/machine/spu/printf.c: Ditto.
* libc/machine/spu/scanf.c: Ditto.
* libc/machine/spu/siprintf.c: Ditto.
* libc/machine/spu/siscanf.c: Ditto.
* libc/machine/spu/sniprintf.c: Ditto.
* libc/machine/spu/snprintf.c: Ditto.
* libc/machine/spu/sprintf.c: Ditto.
* libc/machine/spu/sscanf.c: Ditto.
Diffstat (limited to 'newlib/libc/machine/spu/printf.S')
-rw-r--r-- | newlib/libc/machine/spu/printf.S | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/newlib/libc/machine/spu/printf.S b/newlib/libc/machine/spu/printf.S new file mode 100644 index 000000000..36feaf7aa --- /dev/null +++ b/newlib/libc/machine/spu/printf.S @@ -0,0 +1,49 @@ +/* + Copyright (c) 2007, Toshiba Corporation + + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + * Neither the names of Toshiba nor the names of its + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + */ + +#include "c99ppe.h" + + .text + .align 4 + GLOBL printf +printf: + stqd $0, 16($sp) /* save caller address */ + il $2, 1 /* number of fixed arguments */ + brsl $0, __stack_reg_va /* save register to the stack frame */ + + il $3, SPE_C99_SIGNALCODE + il $4, SPE_C99_VPRINTF + ai $5, $sp, 16*2 /* data ($3 save address) */ + brsl $0, __send_to_ppe + + il $2, 16*(SPE_STACK_REGS+2+2) + a $sp, $sp, $2 + lqd $0, 16($sp) /* load caller address */ + bi $0 /* return to caller */ |