aboutsummaryrefslogtreecommitdiff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh4/getcontext.S6
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh4/setcontext.S2
-rw-r--r--sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S2
3 files changed, 10 insertions, 0 deletions
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S
index 4470e5730b..329a790cd6 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh4/getcontext.S
@@ -67,6 +67,8 @@ ENTRY(__getcontext)
add #(oFPUL+4-124),r0
sts.l fpul, @-r0
sts.l fpscr, @-r0
+ mov #0, r6
+ lds r6, fpscr
frchg
fmov.s fr15, @-r0
fmov.s fr14, @-r0
@@ -101,6 +103,10 @@ ENTRY(__getcontext)
fmov.s fr2, @-r0
fmov.s fr1, @-r0
fmov.s fr0, @-r0
+ mov r4, r0
+ add #124, r0
+ add #(oFPSCR-124), r0
+ lds.l @r0+, fpscr
#endif /* __SH_FPU_ANY__ */
/* sigprocmask (SIG_BLOCK, NULL, &uc->uc_sigmask). */
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
index a6d1de960c..60aff78256 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh4/setcontext.S
@@ -50,6 +50,8 @@ ENTRY(__setcontext)
.Lsetcontext_restore:
#ifdef __SH_FPU_ANY__
+ mov #0, r9
+ lds r9, fpscr
mov r8, r0
add #(oFR0),r0
fmov.s @r0+, fr0
diff --git a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
index a299e05b41..6cf88f2b68 100644
--- a/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
+++ b/sysdeps/unix/sysv/linux/sh/sh4/swapcontext.S
@@ -67,6 +67,8 @@ ENTRY(__swapcontext)
add #(oFPUL+4-124),r0
sts.l fpul, @-r0
sts.l fpscr, @-r0
+ mov #0, r9
+ lds r9, fpscr
frchg
fmov.s fr15, @-r0
fmov.s fr14, @-r0