diff options
author | Jeff Johnston <jjohnstn@redhat.com> | 2002-04-19 19:16:22 +0000 |
---|---|---|
committer | Jeff Johnston <jjohnstn@redhat.com> | 2002-04-19 19:16:22 +0000 |
commit | 0d844014bfbcab4e48718b787c268d052f773197 (patch) | |
tree | 30f19160e87bedae028d33a2839bf51a7b10bac6 /newlib/libc/machine/powerpc/setjmp.S | |
parent | d413aadcafc1fc287fa01cb28dd04f495111e418 (diff) | |
download | cygnal-0d844014bfbcab4e48718b787c268d052f773197.tar.gz cygnal-0d844014bfbcab4e48718b787c268d052f773197.tar.bz2 cygnal-0d844014bfbcab4e48718b787c268d052f773197.zip |
2002-04-19 Jeff Johnston <jjohnstn@redhat.com>
* configure.host: Add support for powerpc-eabialtivec*.
* libc/include/malloc.h: Add include of <machine/malloc.h>.
* libc/include/stdlib.h: Add include of <machine/stdlib.h>.
* libc/include/machine/malloc.h: New file.
* libc/include/machine/stdlib.h: Ditto.
* libc/include/machine/setjmp.h: Add support for powerpc altivec.
* libc/machine/powerpc/Makefile.am: Add conditional objects and
sources based on configuration.
* libc/machine/powerpc/Makefile.in: Regenerated.
* libc/machine/powerpc/configure: Ditto.
* libc/machine/powerpc/configure.in: Add check for
powerpc-eabialtivec* in which case add in additional source files.
* libc/machine/powerpc/setjmp.S: Add altivec support.
* libc/machine/powerpc/vec_calloc.c: New file.
* libc/machine/powerpc/vec_free.c: Ditto.
* libc/machine/powerpc/vec_malloc.c: Ditto.
* libc/machine/powerpc/vec_mallocr.c: Ditto.
* libc/machine/powerpc/vec_realloc.c: Ditto.
* libc/machine/powerpc/machine/malloc.h: Ditto.
* libc/machine/powerpc/machine/stdlib.h: Ditto.
* libc/machine/powerpc/vfprintf.c: New file that is vfprintf.c
with added altivec format specifiers.
* libc/machine/powerpc/vfscanf.c: New file that is vfscanf.c with
added altivec format specifiers.
Diffstat (limited to 'newlib/libc/machine/powerpc/setjmp.S')
-rw-r--r-- | newlib/libc/machine/powerpc/setjmp.S | 74 |
1 files changed, 73 insertions, 1 deletions
diff --git a/newlib/libc/machine/powerpc/setjmp.S b/newlib/libc/machine/powerpc/setjmp.S index c1376912f..ec3a443d7 100644 --- a/newlib/libc/machine/powerpc/setjmp.S +++ b/newlib/libc/machine/powerpc/setjmp.S @@ -1,11 +1,17 @@ /* This is a simple version of setjmp and longjmp for the PowerPC. - Ian Lance Taylor, Cygnus Support, 9 Feb 1994. */ + Ian Lance Taylor, Cygnus Support, 9 Feb 1994. + Modified by Jeff Johnston, Red Hat Inc. 2 Oct 2001. */ #include "ppc-asm.h" FUNC_START(setjmp) +#ifdef __ALTIVEC__ + addi 3,3,15 # align Altivec to 16 byte boundary + rlwinm 3,3,0,0,27 +#else addi 3,3,7 # align to 8 byte boundary rlwinm 3,3,0,0,28 +#endif stw 1,0(3) # offset 0 stwu 2,4(3) # offset 4 stwu 13,4(3) # offset 8 @@ -56,14 +62,50 @@ FUNC_START(setjmp) /* This requires a total of 21 * 4 + 18 * 8 + 4 + 4 + 4 bytes == 60 * 4 bytes == 240 bytes. */ +#ifdef __ALTIVEC__ + /* save Altivec vrsave and vr20-vr31 registers */ + mfspr 4,256 # vrsave register + stwu 4,16(3) # offset 248 + addi 3,3,8 + stvx 20,0,3 # offset 256 + addi 3,3,16 + stvx 21,0,3 # offset 272 + addi 3,3,16 + stvx 22,0,3 # offset 288 + addi 3,3,16 + stvx 23,0,3 # offset 304 + addi 3,3,16 + stvx 24,0,3 # offset 320 + addi 3,3,16 + stvx 25,0,3 # offset 336 + addi 3,3,16 + stvx 26,0,3 # offset 352 + addi 3,3,16 + stvx 27,0,3 # offset 368 + addi 3,3,16 + stvx 28,0,3 # offset 384 + addi 3,3,16 + stvx 29,0,3 # offset 400 + addi 3,3,16 + stvx 30,0,3 # offset 416 + addi 3,3,16 + stvx 31,0,3 # offset 432 + + /* This requires a total of 240 + 8 + 8 + 12 * 16 == 448 bytes. */ +#endif li 3,0 blr FUNC_END(setjmp) FUNC_START(longjmp) +#ifdef __ALTIVEC__ + addi 3,3,15 # align Altivec to 16 byte boundary + rlwinm 3,3,0,0,27 +#else addi 3,3,7 # align to 8 byte boundary rlwinm 3,3,0,0,28 +#endif lwz 1,0(3) # offset 0 lwzu 2,4(3) # offset 4 lwzu 13,4(3) # offset 8 @@ -111,6 +153,36 @@ FUNC_START(longjmp) lfdu 31,8(3) # offset 232 #endif +#ifdef __ALTIVEC__ + /* restore Altivec vrsave and v20-v31 registers */ + lwzu 5,16(3) # offset 248 + mtspr 256,5 # vrsave + addi 3,3,8 + lvx 20,0,3 # offset 256 + addi 3,3,16 + lvx 21,0,3 # offset 272 + addi 3,3,16 + lvx 22,0,3 # offset 288 + addi 3,3,16 + lvx 23,0,3 # offset 304 + addi 3,3,16 + lvx 24,0,3 # offset 320 + addi 3,3,16 + lvx 25,0,3 # offset 336 + addi 3,3,16 + lvx 26,0,3 # offset 352 + addi 3,3,16 + lvx 27,0,3 # offset 368 + addi 3,3,16 + lvx 28,0,3 # offset 384 + addi 3,3,16 + lvx 29,0,3 # offset 400 + addi 3,3,16 + lvx 30,0,3 # offset 416 + addi 3,3,16 + lvx 31,0,3 # offset 432 +#endif + mr. 3,4 bclr+ 4,2 li 3,1 |