* sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S: Use

.machine push; .machine "power6" and .machine pop around mtfsf
	insns outside of _ARCH_PWR6 define.
	* sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S: Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S:
	Likewise.
	* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S:
	Likewise.
	* sysdeps/powerpc/fpu/tst-setcontext-fpscr.c (_SET_DI_FPSCR): Likewise.
	* sysdeps/powerpc/fpu/fenv_libc.h (fesetenv_register,
	relax_fenv_state): Likewise.
This commit is contained in:
Ulrich Drepper 2009-03-10 04:47:30 +00:00
parent bddec78c7b
commit 1454da2195
3 changed files with 27 additions and 5 deletions

View File

@ -1,3 +1,17 @@
2009-02-18 Jakub Jelinek <jakub@redhat.com>
* sysdeps/unix/sysv/linux/powerpc/powerpc64/setcontext.S: Use
.machine push; .machine "power6" and .machine pop around mtfsf
insns outside of _ARCH_PWR6 define.
* sysdeps/unix/sysv/linux/powerpc/powerpc64/swapcontext.S: Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/setcontext-common.S:
Likewise.
* sysdeps/unix/sysv/linux/powerpc/powerpc32/swapcontext-common.S:
Likewise.
* sysdeps/powerpc/fpu/tst-setcontext-fpscr.c (_SET_DI_FPSCR): Likewise.
* sysdeps/powerpc/fpu/fenv_libc.h (fesetenv_register,
relax_fenv_state): Likewise.
2009-03-08 Ulrich Drepper <drepper@redhat.com>
* stdlib/Makefile (routines): Add quick_exit, at_quick_exit, and

View File

@ -1,5 +1,5 @@
/* Internal libc stuff for floating point environment routines.
Copyright (C) 1997, 2006, 2008 Free Software Foundation, Inc.
Copyright (C) 1997, 2006, 2008, 2009 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
@ -39,7 +39,10 @@ libm_hidden_proto (__fe_nomask_env)
do { \
double d = (env); \
if(GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \
asm volatile ("mtfsf 0xff,%0,1,0" : : "f" (d)); \
asm volatile (".machine push; " \
".machine \"power6\"; " \
"mtfsf 0xff,%0,1,0; " \
".machine pop" : : "f" (d)); \
else \
asm volatile ("mtfsf 0xff,%0" : : "f" (d)); \
} while(0)
@ -53,7 +56,8 @@ libm_hidden_proto (__fe_nomask_env)
#define relax_fenv_state() \
do { \
if (GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \
asm ("mtfsfi 7,0,1"); \
asm (".machine push; .machine \"power6\"; " \
"mtfsfi 7,0,1; .machine pop"); \
asm ("mtfsfi 7,0"); \
} while(0)

View File

@ -111,7 +111,11 @@ typedef unsigned int si_fpscr_t __attribute__ ((__mode__ (__SI__)));
tmp __attribute__ ((__aligned__(8))); \
tmp.fpscr = __fpscr; \
/* Set the entire 64-bit FPSCR. */ \
__asm__ ("lfd%U0 0,%0; mtfsf 255,0,1,0" : : "m" (tmp.d) : "fr0"); \
__asm__ ("lfd%U0 0,%0; " \
".machine push; " \
".machine \"power6\"; " \
"mtfsf 255,0,1,0; " \
".machine pop" : : "m" (tmp.d) : "fr0"); \
tmp.d = 0; \
__asm__("lfd%U0 0,%0" : : "m" (tmp.d) : "fr0"); \
}