]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
[powerpc] libc_feholdsetround_noex_ppc_ctx: optimize FPSCR write
authorPaul A. Clarke <pc@us.ibm.com>
Thu, 19 Sep 2019 16:31:31 +0000 (11:31 -0500)
committerPaul A. Clarke <pc@us.ibm.com>
Wed, 13 Nov 2019 21:37:09 +0000 (15:37 -0600)
libc_feholdsetround_noex_ppc_ctx currently performs:
1. Read FPSCR, save to context.
2. Create new FPSCR value: clear enables and set new rounding mode.
3. Write new value to FPSCR.

Since other bits just pass through, there is no need to write them.

Instead, write just the changed values (enables and rounding mode),
which can be a bit more efficient.

ChangeLog
sysdeps/powerpc/fpu/fenv_private.h

index d8e1dd5d17edfeef2e7f590399343382a8225075..c9a4b3cb9628432339aff581042746cad9647dbf 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,9 @@
+2019-09-27  Paul A. Clarke  <pc@us.ibm.com>
+
+       * sysdeps/powerpc/fpu/fenv_private.h
+       (libc_feholdsetround_noex_ppc_ctx): Call fesetenv_mode instead
+       of fesetenv_register.
+
 2019-09-27  Paul A. Clarke  <pc@us.ibm.com>
 
        * sysdeps/powerpc/fpu/fenv_libc.h (fegetenv_status): Rename to
index d0805534fd56566974998b80e7dfbda4e5760df6..084289ec50d6cd1f6cfe873f0710973340a36551 100644 (file)
@@ -142,7 +142,7 @@ libc_feholdsetround_noex_ppc_ctx (struct rm_ctx *ctx, int r)
   if (__glibc_unlikely (new.l != old.l))
     {
       __TEST_AND_ENTER_NON_STOP (old.l, 0ULL);
-      fesetenv_register (new.fenv);
+      fesetenv_mode (new.fenv);
       ctx->updated_status = true;
     }
   else