From: Joseph Myers Date: Wed, 22 Jun 2016 15:40:30 +0000 (+0000) Subject: Simplify x86 nearbyint functions. X-Git-Tag: glibc-2.24~77 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=4e9bf327ad02ed83bded4011af68613e6b03ab33;p=thirdparty%2Fglibc.git Simplify x86 nearbyint functions. The i386 implementations of nearbyint functions, and x86_64 nearbyintl, contain code to mask the "inexact" exception. However, the fnstenv instruction has the effect of masking all exceptions, so this masking code has been redundant since fnstenv was added to those implementations (by commit 846d9a4a3acdb4939ca7bf6aed48f9f6f26911be; commit 71d1b0166b4ace0d804af2993b3815758b852efc added the test math/test-nearbyint-except-2.c that verifies these functions do work when called with "inexact" traps enabled); this patch removes the redundant code. Tested for x86_64 and x86. * sysdeps/i386/fpu/s_nearbyint.S (__nearbyint): Do not mask "inexact" exceptions after fnstenv. * sysdeps/i386/fpu/s_nearbyintf.S (__nearbyintf): Likewise. * sysdeps/i386/fpu/s_nearbyintl.S (__nearbyintl): Likewise. * sysdeps/x86_64/fpu/s_nearbyintl.S (__nearbyintl): Likewise. --- diff --git a/ChangeLog b/ChangeLog index 75722e1ec70..0328dda5eae 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2016-06-22 Joseph Myers + + * sysdeps/i386/fpu/s_nearbyint.S (__nearbyint): Do not mask + "inexact" exceptions after fnstenv. + * sysdeps/i386/fpu/s_nearbyintf.S (__nearbyintf): Likewise. + * sysdeps/i386/fpu/s_nearbyintl.S (__nearbyintl): Likewise. + * sysdeps/x86_64/fpu/s_nearbyintl.S (__nearbyintl): Likewise. + 2015-06-22 Zack Weinberg * sysdeps/generic/bits/hwcap.h: Moved to ... diff --git a/sysdeps/i386/fpu/s_nearbyint.S b/sysdeps/i386/fpu/s_nearbyint.S index 8da8ae97927..f7b79b6ff22 100644 --- a/sysdeps/i386/fpu/s_nearbyint.S +++ b/sysdeps/i386/fpu/s_nearbyint.S @@ -11,10 +11,6 @@ ENTRY(__nearbyint) subl $32, %esp cfi_adjust_cfa_offset (32) fnstenv 4(%esp) - movl 4(%esp), %eax - orl $0x20, %eax - movl %eax, (%esp) - fldcw (%esp) frndint fldenv 4(%esp) addl $32, %esp diff --git a/sysdeps/i386/fpu/s_nearbyintf.S b/sysdeps/i386/fpu/s_nearbyintf.S index 0c51f723643..92df2f87b34 100644 --- a/sysdeps/i386/fpu/s_nearbyintf.S +++ b/sysdeps/i386/fpu/s_nearbyintf.S @@ -11,10 +11,6 @@ ENTRY(__nearbyintf) subl $32, %esp cfi_adjust_cfa_offset (32) fnstenv 4(%esp) - movl 4(%esp), %eax - orl $0x20, %eax - movl %eax, (%esp) - fldcw (%esp) frndint fldenv 4(%esp) addl $32, %esp diff --git a/sysdeps/i386/fpu/s_nearbyintl.S b/sysdeps/i386/fpu/s_nearbyintl.S index b260ab5914c..3b7d1e24369 100644 --- a/sysdeps/i386/fpu/s_nearbyintl.S +++ b/sysdeps/i386/fpu/s_nearbyintl.S @@ -11,10 +11,6 @@ ENTRY(__nearbyintl) subl $32, %esp cfi_adjust_cfa_offset (32) fnstenv 4(%esp) - movl 4(%esp), %eax - orl $0x20, %eax - movl %eax, (%esp) - fldcw (%esp) frndint fnstsw andl $0x1, %eax diff --git a/sysdeps/x86_64/fpu/s_nearbyintl.S b/sysdeps/x86_64/fpu/s_nearbyintl.S index 76d41bdd522..31b21a5037a 100644 --- a/sysdeps/x86_64/fpu/s_nearbyintl.S +++ b/sysdeps/x86_64/fpu/s_nearbyintl.S @@ -9,10 +9,6 @@ ENTRY(__nearbyintl) fldt 8(%rsp) fnstenv -28(%rsp) - movl -28(%rsp), %eax - orl $0x20, %eax - movl %eax, -32(%rsp) - fldcw -32(%rsp) frndint fnstsw andl $0x1, %eax