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