mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-30 12:31:53 +08:00
Update.
2002-01-16 Martin Schwidefsky <schwidefsky@de.ibm.com> * sysdeps/s390/s390-32/pt-machine.h (MEMORY_BARRIER): Define. (CURRENT_STACK_FRAME): Remove duplicate definition. * sysdeps/s390/s390-64/pt-machine.h: Likewise.
This commit is contained in:
parent
ec562b3d7a
commit
956f8acd6c
@ -1,3 +1,9 @@
|
||||
2002-01-16 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
|
||||
* sysdeps/s390/s390-32/pt-machine.h (MEMORY_BARRIER): Define.
|
||||
(CURRENT_STACK_FRAME): Remove duplicate definition.
|
||||
* sysdeps/s390/s390-64/pt-machine.h: Likewise.
|
||||
|
||||
2002-01-14 Martin Schwidefsky <schwidefsky@de.ibm.com>
|
||||
|
||||
* Makefile (CFLAGS-tst-cancel.c): Add -fno-inline-functions to prevent
|
||||
|
@ -23,6 +23,11 @@
|
||||
# define PT_EI extern inline
|
||||
#endif
|
||||
|
||||
/* For multiprocessor systems, we want to ensure all memory accesses
|
||||
are completed before we reset a lock. On other systems, we still
|
||||
need to make sure that the compiler has flushed everything to memory. */
|
||||
#define MEMORY_BARRIER() __asm__ __volatile__ ("bcr 15,0" : : : "memory")
|
||||
|
||||
/* Spinlock implementation; required. */
|
||||
PT_EI long int
|
||||
testandset (int *spinlock)
|
||||
@ -94,9 +99,3 @@ __compare_and_swap(long int *p, long int oldval, long int newval)
|
||||
return retval == 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Get some notion of the current stack. Need not be exactly the top
|
||||
of the stack, just something somewhere in the current frame. */
|
||||
#define CURRENT_STACK_FRAME stack_pointer
|
||||
register char * stack_pointer __asm__ ("%r15");
|
||||
|
@ -23,6 +23,11 @@
|
||||
# define PT_EI extern inline
|
||||
#endif
|
||||
|
||||
/* For multiprocessor systems, we want to ensure all memory accesses
|
||||
are completed before we reset a lock. On other systems, we still
|
||||
need to make sure that the compiler has flushed everything to memory. */
|
||||
#define MEMORY_BARRIER() __asm__ __volatile__ ("bcr 15,0" : : : "memory")
|
||||
|
||||
/* Spinlock implementation; required. */
|
||||
PT_EI long int
|
||||
testandset (int *spinlock)
|
||||
@ -99,9 +104,3 @@ __compare_and_swap(long int *p, long int oldval, long int newval)
|
||||
return retval == 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* Get some notion of the current stack. Need not be exactly the top
|
||||
of the stack, just something somewhere in the current frame. */
|
||||
#define CURRENT_STACK_FRAME stack_pointer
|
||||
register char * stack_pointer __asm__ ("%r15");
|
||||
|
@ -1,28 +1,15 @@
|
||||
# Begin of automatic generation
|
||||
|
||||
# asin
|
||||
Test "asin (-0.5) == -pi/6":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "asin (0.5) == pi/6":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "asin (0.7) == 0.7753974966107530637":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
Test "asin (0.7) == 0.77539749661075306374035335271498708":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
# atan2
|
||||
Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267":
|
||||
Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267":
|
||||
float: 3
|
||||
ifloat: 3
|
||||
Test "atan2 (-0.7, -1.0) == -2.530866689200584621918884506789267":
|
||||
Test "atan2 (0.7, -1.0) == 2.530866689200584621918884506789267":
|
||||
float: 3
|
||||
ifloat: 3
|
||||
Test "atan2 (1.4, -0.93) == 2.1571487668237843754887415992772736":
|
||||
@ -136,9 +123,7 @@ Test "Real part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: catanh (0.7 + 1.2 i) == 0.2600749516525135959200648705635915 + 0.97024030779509898497385130162655963 i":
|
||||
double: 1
|
||||
float: 6
|
||||
idouble: 1
|
||||
ifloat: 6
|
||||
|
||||
# cbrt
|
||||
@ -180,14 +165,6 @@ idouble: 1
|
||||
Test "Imaginary part of: cexp (-2.0 - 3.0 i) == -0.13398091492954261346140525546115575 - 0.019098516261135196432576240858800925 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "Imaginary part of: cexp (0.7 + 1.2 i) == 0.7296989091503236012 + 1.8768962328348102821 i":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "Real part of: cexp (0.7 + 1.2 i) == 0.72969890915032360123451688642930727 + 1.8768962328348102821139467908203072 i":
|
||||
double: 1
|
||||
float: 1
|
||||
@ -199,9 +176,7 @@ ifloat: 1
|
||||
|
||||
# clog
|
||||
Test "Imaginary part of: clog (-2 - 3 i) == 1.2824746787307683680267437207826593 - 2.1587989303424641704769327722648368 i":
|
||||
double: 1
|
||||
float: 3
|
||||
idouble: 1
|
||||
ifloat: 3
|
||||
|
||||
# clog10
|
||||
@ -262,11 +237,6 @@ float: 1
|
||||
ifloat: 1
|
||||
|
||||
# cos
|
||||
Test "cos (0.7) == 0.7648421872844884262":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "cos (0.7) == 0.76484218728448842625585999019186495":
|
||||
double: 1
|
||||
float: 1
|
||||
@ -274,19 +244,19 @@ idouble: 1
|
||||
ifloat: 1
|
||||
Test "cos (M_PI_6l * 2.0) == 0.5":
|
||||
double: 1
|
||||
float: 0.5
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 0.5
|
||||
ifloat: 1
|
||||
Test "cos (M_PI_6l * 4.0) == -0.5":
|
||||
double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "cos (pi/2) == 0":
|
||||
double: 0.2758
|
||||
float: 0.3667
|
||||
idouble: 0.2758
|
||||
ifloat: 0.3667
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
# cpow
|
||||
Test "Real part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
|
||||
@ -298,9 +268,9 @@ Test "Imaginary part of: cpow (2 + 3 i, 4 + 0 i) == -119.0 - 120.0 i":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "Imaginary part of: cpow (e + 0 i, 0 + 2 * M_PIl i) == 1.0 + 0.0 i":
|
||||
double: 1.1031
|
||||
double: 2
|
||||
float: 2
|
||||
idouble: 1.1031
|
||||
idouble: 2
|
||||
ifloat: 2
|
||||
|
||||
# csin
|
||||
@ -392,9 +362,6 @@ double: 2
|
||||
float: 1
|
||||
idouble: 2
|
||||
ifloat: 1
|
||||
Test "exp10 (0.7) == 5.0118723362727228500":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "exp10 (0.7) == 5.0118723362727228500155418688494574":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
@ -461,6 +428,11 @@ float: 1
|
||||
ifloat: 1
|
||||
|
||||
# j0
|
||||
Test "j0 (-4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "j0 (10.0) == -0.24593576445134833520":
|
||||
double: 2
|
||||
float: 1
|
||||
@ -469,6 +441,11 @@ ifloat: 1
|
||||
Test "j0 (2.0) == 0.22389077914123566805":
|
||||
float: 2
|
||||
ifloat: 2
|
||||
Test "j0 (4.0) == -3.9714980986384737228659076845169804197562E-1":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "j0 (8.0) == 0.17165080713755390609":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
@ -589,37 +566,24 @@ double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "sincos (0.7, &sin_res, &cos_res) puts 0.76484218728448842626 in cos_res":
|
||||
Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.5 in cos_res":
|
||||
double: 1
|
||||
float: 0.5
|
||||
idouble: 1
|
||||
ifloat: 0.5
|
||||
Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in sin_res":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "sincos (M_PI_6l*2.0, &sin_res, &cos_res) puts 0.866025403784438646764 in sin_res":
|
||||
Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
Test "sincos (pi/2, &sin_res, &cos_res) puts 0 in cos_res":
|
||||
double: 0.2758
|
||||
float: 0.3667
|
||||
idouble: 0.2758
|
||||
ifloat: 0.3667
|
||||
Test "sincos (pi/6, &sin_res, &cos_res) puts 0.86602540378443864676372317075293616 in cos_res":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
Test "sincos (pi/6, &sin_res, &cos_res) puts 0.866025403784438646764 in cos_res":
|
||||
float: 1
|
||||
ifloat: 1
|
||||
|
||||
# sinh
|
||||
Test "sinh (0.7) == 0.75858370183953350346":
|
||||
@ -630,17 +594,16 @@ ifloat: 1
|
||||
|
||||
# tan
|
||||
Test "tan (pi/4) == 1":
|
||||
double: 0.5
|
||||
idouble: 0.5
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
# tanh
|
||||
Test "tanh (0.7) == 0.60436777711716349631":
|
||||
Test "tanh (-0.7) == -0.60436777711716349631":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Test "tanh (-0.7) == -0.60436777711716349631":
|
||||
Test "tanh (0.7) == 0.60436777711716349631":
|
||||
double: 1
|
||||
float: 1
|
||||
idouble: 1
|
||||
@ -805,9 +768,7 @@ idouble: 1
|
||||
# Maximal error of functions:
|
||||
Function: "asin":
|
||||
double: 1
|
||||
float: 2
|
||||
idouble: 1
|
||||
ifloat: 2
|
||||
|
||||
Function: "atan2":
|
||||
float: 4
|
||||
@ -884,9 +845,7 @@ idouble: 4
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "catanh":
|
||||
double: 1
|
||||
float: 6
|
||||
idouble: 1
|
||||
ifloat: 6
|
||||
|
||||
Function: "cbrt":
|
||||
@ -926,9 +885,7 @@ float: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: Imaginary part of "clog":
|
||||
double: 1
|
||||
float: 3
|
||||
idouble: 1
|
||||
ifloat: 3
|
||||
|
||||
Function: Real part of "clog10":
|
||||
@ -956,9 +913,9 @@ idouble: 1
|
||||
ifloat: 4
|
||||
|
||||
Function: Imaginary part of "cpow":
|
||||
double: 1.1031
|
||||
double: 2
|
||||
float: 2
|
||||
idouble: 1.1031
|
||||
idouble: 2
|
||||
ifloat: 2
|
||||
|
||||
Function: Imaginary part of "csin":
|
||||
@ -1098,8 +1055,8 @@ idouble: 1
|
||||
ifloat: 1
|
||||
|
||||
Function: "tan":
|
||||
double: 0.5
|
||||
idouble: 0.5
|
||||
double: 1
|
||||
idouble: 1
|
||||
|
||||
Function: "tanh":
|
||||
double: 1
|
||||
|
108
sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
Normal file
108
sysdeps/unix/sysv/linux/s390/s390-32/swapcontext.S
Normal file
@ -0,0 +1,108 @@
|
||||
/* Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <features.h>
|
||||
|
||||
#include "ucontext_i.h"
|
||||
|
||||
/* __swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
|
||||
|
||||
Saves the machine context in oucp such that when it is activated,
|
||||
it appears as if __swapcontextt() returned again, restores the
|
||||
machine context in ucp and thereby resumes execution in that
|
||||
context.
|
||||
|
||||
This implementation is intended to be used for *synchronous* context
|
||||
switches only. Therefore, it does not have to save anything
|
||||
other than the PRESERVED state. */
|
||||
|
||||
ENTRY(__swapcontext)
|
||||
lr %r1,%r2
|
||||
lr %r5,%r3
|
||||
|
||||
/* sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask). */
|
||||
la %r2,SIG_BLOCK
|
||||
slr %r3,%r3
|
||||
la %r4,SC_MASK(%r1)
|
||||
svc SYS_ify(rt_sigprocmask)
|
||||
|
||||
/* Store fpu context. */
|
||||
stfpc SC_FPC(%r1)
|
||||
std %f0,SC_FPRS(%r1)
|
||||
std %f1,SC_FPRS+8(%r1)
|
||||
std %f2,SC_FPRS+16(%r1)
|
||||
std %f3,SC_FPRS+24(%r1)
|
||||
std %f4,SC_FPRS+32(%r1)
|
||||
std %f5,SC_FPRS+40(%r1)
|
||||
std %f6,SC_FPRS+48(%r1)
|
||||
std %f7,SC_FPRS+56(%r1)
|
||||
std %f8,SC_FPRS+64(%r1)
|
||||
std %f9,SC_FPRS+72(%r1)
|
||||
std %f10,SC_FPRS+80(%r1)
|
||||
std %f11,SC_FPRS+88(%r1)
|
||||
std %f12,SC_FPRS+96(%r1)
|
||||
std %f13,SC_FPRS+104(%r1)
|
||||
std %f14,SC_FPRS+112(%r1)
|
||||
std %f15,SC_FPRS+120(%r1)
|
||||
|
||||
/* Set __swapcontext return value to 0. */
|
||||
slr %r2,%r2
|
||||
|
||||
/* Store access registers. */
|
||||
stam %a0,%a15,SC_ACRS(%r1)
|
||||
|
||||
/* Store general purpose registers. */
|
||||
stm %r0,%r15,SC_GPRS(%r1)
|
||||
|
||||
/* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */
|
||||
la %r2,SIG_BLOCK
|
||||
la %r3,SC_MASK(%r5)
|
||||
slr %r4,%r4
|
||||
svc SYS_ify(rt_sigprocmask)
|
||||
|
||||
/* Load fpu context. */
|
||||
lfpc SC_FPC(%r5)
|
||||
ld %f0,SC_FPRS(%r5)
|
||||
ld %f1,SC_FPRS+8(%r5)
|
||||
ld %f2,SC_FPRS+16(%r5)
|
||||
ld %f3,SC_FPRS+24(%r5)
|
||||
ld %f4,SC_FPRS+32(%r5)
|
||||
ld %f5,SC_FPRS+40(%r5)
|
||||
ld %f6,SC_FPRS+48(%r5)
|
||||
ld %f7,SC_FPRS+56(%r5)
|
||||
ld %f8,SC_FPRS+64(%r5)
|
||||
ld %f9,SC_FPRS+72(%r5)
|
||||
ld %f10,SC_FPRS+80(%r5)
|
||||
ld %f11,SC_FPRS+88(%r5)
|
||||
ld %f12,SC_FPRS+96(%r5)
|
||||
ld %f13,SC_FPRS+104(%r5)
|
||||
ld %f14,SC_FPRS+112(%r5)
|
||||
ld %f15,SC_FPRS+120(%r5)
|
||||
|
||||
/* Don't touch %a0, used for thread purposes. */
|
||||
lam %a1,%a15,SC_ACRS+4(%r5)
|
||||
|
||||
/* Load general purpose registers. */
|
||||
lm %r0,%r15,SC_GPRS(%r5)
|
||||
|
||||
/* Return. */
|
||||
br %r14
|
||||
END(__swapcontext)
|
||||
weak_alias(__swapcontext, swapcontext)
|
108
sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
Normal file
108
sysdeps/unix/sysv/linux/s390/s390-64/swapcontext.S
Normal file
@ -0,0 +1,108 @@
|
||||
/* Copyright (C) 2002 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <sysdep.h>
|
||||
#include <features.h>
|
||||
|
||||
#include "ucontext_i.h"
|
||||
|
||||
/* __swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
|
||||
|
||||
Saves the machine context in oucp such that when it is activated,
|
||||
it appears as if __swapcontextt() returned again, restores the
|
||||
machine context in ucp and thereby resumes execution in that
|
||||
context.
|
||||
|
||||
This implementation is intended to be used for *synchronous* context
|
||||
switches only. Therefore, it does not have to save anything
|
||||
other than the PRESERVED state. */
|
||||
|
||||
ENTRY(__swapcontext)
|
||||
lr %r1,%r2
|
||||
lr %r5,%r3
|
||||
|
||||
/* sigprocmask (SIG_BLOCK, NULL, &sc->sc_mask). */
|
||||
la %r2,SIG_BLOCK
|
||||
slr %r3,%r3
|
||||
la %r4,SC_MASK(%r1)
|
||||
svc SYS_ify(rt_sigprocmask)
|
||||
|
||||
/* Store fpu context. */
|
||||
stfpc SC_FPC(%r1)
|
||||
std %f0,SC_FPRS(%r1)
|
||||
std %f1,SC_FPRS+8(%r1)
|
||||
std %f2,SC_FPRS+16(%r1)
|
||||
std %f3,SC_FPRS+24(%r1)
|
||||
std %f4,SC_FPRS+32(%r1)
|
||||
std %f5,SC_FPRS+40(%r1)
|
||||
std %f6,SC_FPRS+48(%r1)
|
||||
std %f7,SC_FPRS+56(%r1)
|
||||
std %f8,SC_FPRS+64(%r1)
|
||||
std %f9,SC_FPRS+72(%r1)
|
||||
std %f10,SC_FPRS+80(%r1)
|
||||
std %f11,SC_FPRS+88(%r1)
|
||||
std %f12,SC_FPRS+96(%r1)
|
||||
std %f13,SC_FPRS+104(%r1)
|
||||
std %f14,SC_FPRS+112(%r1)
|
||||
std %f15,SC_FPRS+120(%r1)
|
||||
|
||||
/* Set __swapcontext return value to 0. */
|
||||
slr %r2,%r2
|
||||
|
||||
/* Store access registers. */
|
||||
stam %a0,%a15,SC_ACRS(%r1)
|
||||
|
||||
/* Store general purpose registers. */
|
||||
stmg %r0,%r15,SC_GPRS(%r1)
|
||||
|
||||
/* sigprocmask (SIG_SETMASK, &sc->sc_mask, NULL). */
|
||||
la %r2,SIG_BLOCK
|
||||
la %r3,SC_MASK(%r5)
|
||||
slgr %r4,%r4
|
||||
svc SYS_ify(rt_sigprocmask)
|
||||
|
||||
/* Load fpu context. */
|
||||
lfpc SC_FPC(%r5)
|
||||
ld %f0,SC_FPRS(%r5)
|
||||
ld %f1,SC_FPRS+8(%r5)
|
||||
ld %f2,SC_FPRS+16(%r5)
|
||||
ld %f3,SC_FPRS+24(%r5)
|
||||
ld %f4,SC_FPRS+32(%r5)
|
||||
ld %f5,SC_FPRS+40(%r5)
|
||||
ld %f6,SC_FPRS+48(%r5)
|
||||
ld %f7,SC_FPRS+56(%r5)
|
||||
ld %f8,SC_FPRS+64(%r5)
|
||||
ld %f9,SC_FPRS+72(%r5)
|
||||
ld %f10,SC_FPRS+80(%r5)
|
||||
ld %f11,SC_FPRS+88(%r5)
|
||||
ld %f12,SC_FPRS+96(%r5)
|
||||
ld %f13,SC_FPRS+104(%r5)
|
||||
ld %f14,SC_FPRS+112(%r5)
|
||||
ld %f15,SC_FPRS+120(%r5)
|
||||
|
||||
/* Don't touch %a0 and %a1, used for thread purposes. */
|
||||
lam %a2,%a15,SC_ACRS+8(%r5)
|
||||
|
||||
/* Load general purpose registers. */
|
||||
lmg %r0,%r15,SC_GPRS(%r5)
|
||||
|
||||
/* Return. */
|
||||
br %r14
|
||||
END(__swapcontext)
|
||||
weak_alias(__swapcontext, swapcontext)
|
@ -1,39 +0,0 @@
|
||||
/* Copyright (C) 2001 Free Software Foundation, Inc.
|
||||
This file is part of the GNU C Library.
|
||||
Contributed by Martin Schwidefsky (schwidefsky@de.ibm.com).
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Lesser General Public
|
||||
License as published by the Free Software Foundation; either
|
||||
version 2.1 of the License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Lesser General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Lesser General Public
|
||||
License along with the GNU C Library; if not, write to the Free
|
||||
Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
|
||||
02111-1307 USA. */
|
||||
|
||||
#include <ucontext.h>
|
||||
|
||||
extern int __getcontext (ucontext_t *__ucp) __THROW;
|
||||
extern int __setcontext (__const ucontext_t *__ucp) __THROW;
|
||||
|
||||
int
|
||||
__swapcontext (ucontext_t *oucp, const ucontext_t *ucp)
|
||||
{
|
||||
/* Save the current machine context to oucp. */
|
||||
__getcontext (oucp);
|
||||
/* Modify oucp to skip the __setcontext call on reactivation. */
|
||||
oucp->uc_mcontext.gregs[14] = &&fake_return;
|
||||
/* Restore the machine context in ucp. */
|
||||
__setcontext (ucp);
|
||||
|
||||
fake_return:
|
||||
return 0;
|
||||
}
|
||||
|
||||
weak_alias (__swapcontext, swapcontext)
|
Loading…
Reference in New Issue
Block a user