2001-03-07 Richard Sandiford <rsandifo@redhat.com>

* (libc/include/machine/setjmp.h): Use 23 DI-mode ints for a
        jmpbuf on MIPS64 targets.
        * (libc/machine/mips/setjmp.S): Add MIPS64 version.
This commit is contained in:
Jeff Johnston 2001-03-08 21:39:32 +00:00
parent 2ea968d3e1
commit e69b6f73d7
3 changed files with 85 additions and 4 deletions

View File

@ -1,6 +1,13 @@
2001-03-08 Richard Sandiford <rsandifo@redhat.com>
* (libc/include/machine/setjmp.h): Use 23 long long ints for a
jmpbuf on MIPS64 targets.
* (libc/machine/mips/setjmp.S): Add MIPS64 version.
Wed Mar 7 16:02:07 2001 Christopher Faylor <cgf@cygnus.com>
* libc/include/sys/config.h: Use ssize_t for read/write declarations.
* libc/include/sys/config.h: Use ssize_t for Cygwin read/write
declarations.
Mon Mar 5 21:48:54 2001 J"orn Rennecke <amylaar@redhat.com>

View File

@ -59,8 +59,13 @@
#endif
#ifdef __mips__
#ifdef __mips64
#define _JBLEN 23
#define _JBTYPE long long
#else
#define _JBLEN 11
#endif
#endif
#ifdef __m88000__
#define _JBLEN 21

View File

@ -1,15 +1,20 @@
/* This is a simple version of setjmp and longjmp.
/* This is a simple version of setjmp and longjmp for MIPS 32 and 64.
This version does NOT save the floating point register, which is
The MIPS 32 version does NOT save the floating point register, which is
wrong, but I don't know how to cleanly handle machines without a
floating point coprocessor.
Ian Lance Taylor, Cygnus Support, 13 May 1993. */
Ian Lance Taylor, Cygnus Support, 13 May 1993.
The MIPS 64 version saves registers fp20 to fp31. 23 registers
are saved in all. */
#ifndef __mips64
#ifdef __mips16
/* This file contains 32 bit assembly code. */
.set nomips16
#endif
#endif
/* int setjmp (jmp_buf); */
.globl setjmp
@ -17,6 +22,36 @@
setjmp:
.frame $sp,0,$31
#ifdef __mips64
sd $16, 000($4) /* s0 */
sd $17, 010($4) /* s1 */
sd $18, 020($4) /* s2 */
sd $19, 030($4) /* s3 */
sd $20, 040($4) /* s4 */
sd $21, 050($4) /* s5 */
sd $22, 060($4) /* s6 */
sd $23, 070($4) /* s7 */
sdc1 $f20, 0100($4)
sdc1 $f21, 0110($4)
sdc1 $f22, 0120($4)
sdc1 $f23, 0130($4)
sdc1 $f24, 0140($4)
sdc1 $f25, 0150($4)
sdc1 $f26, 0160($4)
sdc1 $f27, 0170($4)
sdc1 $f28, 0200($4)
sdc1 $f29, 0210($4)
sdc1 $f30, 0220($4)
sdc1 $f31, 0230($4)
sd $29, 0240($4) /* sp */
sd $30, 0250($4) /* fp */
sd $31, 0260($4) /* ra */
#else /* not __mips64 */
sw $16,0($4) /* $s0 */
sw $17,4($4) /* $s1 */
sw $18,8($4) /* $s2 */
@ -30,6 +65,8 @@ setjmp:
sw $sp,36($4)
sw $31,40($4)
#endif /* not __mips64 */
move $2,$0
j $31
@ -42,6 +79,36 @@ setjmp:
longjmp:
.frame $sp,0,$31
#ifdef __mips64
ld $16, 000($4) /* s0 */
ld $17, 010($4) /* s1 */
ld $18, 020($4) /* s2 */
ld $19, 030($4) /* s3 */
ld $20, 040($4) /* s4 */
ld $21, 050($4) /* s5 */
ld $22, 060($4) /* s6 */
ld $23, 070($4) /* s7 */
ldc1 $f20, 0100($4)
ldc1 $f21, 0110($4)
ldc1 $f22, 0120($4)
ldc1 $f23, 0130($4)
ldc1 $f24, 0140($4)
ldc1 $f25, 0150($4)
ldc1 $f26, 0160($4)
ldc1 $f27, 0170($4)
ldc1 $f28, 0200($4)
ldc1 $f29, 0210($4)
ldc1 $f30, 0220($4)
ldc1 $f31, 0230($4)
ld $29, 0240($4) /* sp */
ld $30, 0250($4) /* fp */
ld $31, 0260($4) /* ra */
#else /* not __mips64 */
lw $16,0($4) /* $s0 */
lw $17,4($4) /* $s1 */
lw $18,8($4) /* $s2 */
@ -55,6 +122,8 @@ longjmp:
lw $sp,36($4)
lw $31,40($4)
#endif /* not __mips64 */
bne $5,$0,1f
li $5,1
1: