]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Added .machine push; .machine "power6"; .machine pop in macros.
authorRyan S. Arnold <rsa@us.ibm.com>
Fri, 24 Jul 2009 15:41:04 +0000 (10:41 -0500)
committerRyan Arnold <ryanarn@etna.rchland.ibm.com>
Fri, 24 Jul 2009 20:10:55 +0000 (15:10 -0500)
commit 1454da21955742494232aa8b34c5e238263ad37a
Author: Ulrich Drepper <drepper@redhat.com>
Date:   Tue Mar 10 04:47:30 2009 +0000

* 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.

sysdeps/powerpc/fpu/fenv_libc.h
sysdeps/powerpc/fpu/tst-setcontext-fpscr.c

index c70f85130d4b1a213a7c1d779cccdb30b96b595c..0a4a57da6813a000d8850b71048a1abfa97edb40 100644 (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)
@@ -52,8 +55,9 @@ libm_hidden_proto (__fe_nomask_env)
    functions.  */
 #define relax_fenv_state() \
        do { \
-          if(GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \
-              asm ("mtfsfi 7,0,1"); \
+          if (GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \
+            asm (".machine push; .machine \"power6\"; " \
+                 "mtfsfi 7,0,1; .machine pop"); \
           asm ("mtfsfi 7,0"); \
        } while(0)
 
index a15fe86fb96a369150f2162f4544bc95564bfcb5..e75a7f19419686c356ea05e2164327d29729f72c 100644 (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");                           \
 }