From df73e5842f25aea3bab81c328ed77f16ed261b33 Mon Sep 17 00:00:00 2001 From: Uros Bizjak Date: Sun, 19 Apr 2020 14:23:47 +0200 Subject: [PATCH] i386: Remove unneeded assignments when triggering SSE exceptions According to "Intel 64 and IA32 Arch SDM, Vol. 3: "Because SIMD floating-point exceptions are precise and occur immediately, the situation does not arise where an x87 FPU instruction, a WAIT/FWAIT instruction, or another SSE/SSE2/SSE3 instruction will catch a pending unmasked SIMD floating-point exception." Remove unneeded assignments to volatile memory. libgcc/ChangeLog: * config/i386/sfp-exceptions.c (__sfp_handle_exceptions) [__SSE_MATH__]: Remove unneeded assignments to volatile memory. libatomic/ChangeLog: * config/x86/fenv.c (__atomic_feraiseexcept) [__SSE_MATH__]: Remove unneeded assignments to volatile memory. libgfortran/ChangeLog: * config/fpu-387.h (local_feraiseexcept) [__SSE_MATH__]: Remove unneeded assignments to volatile memory. --- libatomic/ChangeLog | 5 +++++ libatomic/config/x86/fenv.c | 6 ------ libgcc/ChangeLog | 5 +++++ libgcc/config/i386/sfp-exceptions.c | 6 ------ libgfortran/ChangeLog | 5 +++++ libgfortran/config/fpu-387.h | 6 ------ 6 files changed, 15 insertions(+), 18 deletions(-) diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index 624162db911..33527a7b456 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,8 @@ +2020-04-19 Uroš Bizjak + + * config/x86/fenv.c (__atomic_feraiseexcept) [__SSE_MATH__]: + Remove unneeded assignments to volatile memory. + 2020-04-06 Maciej W. Rozycki * configure.ac: Add testsuite/libatomic-site-extra.exp to output diff --git a/libatomic/config/x86/fenv.c b/libatomic/config/x86/fenv.c index 7828162c68b..d7b1bbe5ea1 100644 --- a/libatomic/config/x86/fenv.c +++ b/libatomic/config/x86/fenv.c @@ -57,9 +57,7 @@ __atomic_feraiseexcept (int excepts) { float f = 0.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f)); - r = f; /* Needed to trigger exception. */ #else asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f)); /* No need for fwait, exception is triggered by emitted fstp. */ @@ -77,9 +75,7 @@ __atomic_feraiseexcept (int excepts) { float f = 1.0f, g = 0.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g)); - r = f; /* Needed to trigger exception. */ #else asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g)); /* No need for fwait, exception is triggered by emitted fstp. */ @@ -105,9 +101,7 @@ __atomic_feraiseexcept (int excepts) { float f = 1.0f, g = 3.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g)); - r = f; /* Needed to trigger exception. */ #else asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g)); /* No need for fwait, exception is triggered by emitted fstp. */ diff --git a/libgcc/ChangeLog b/libgcc/ChangeLog index 3426ff8470b..d66f76fdd01 100644 --- a/libgcc/ChangeLog +++ b/libgcc/ChangeLog @@ -1,3 +1,8 @@ +2020-04-19 Uroš Bizjak + + * config/i386/sfp-exceptions.c (__sfp_handle_exceptions) [__SSE_MATH__]: + Remove unneeded assignments to volatile memory. + 2020-04-15 Jakub Jelinek PR target/93053 diff --git a/libgcc/config/i386/sfp-exceptions.c b/libgcc/config/i386/sfp-exceptions.c index c994491c650..31a24ced704 100644 --- a/libgcc/config/i386/sfp-exceptions.c +++ b/libgcc/config/i386/sfp-exceptions.c @@ -48,9 +48,7 @@ __sfp_handle_exceptions (int _fex) { float f = 0.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); asm volatile ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f)); - r = f; /* Needed to trigger exception. */ #else asm volatile ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f)); /* No need for fwait, exception is triggered by emitted fstp. */ @@ -68,9 +66,7 @@ __sfp_handle_exceptions (int _fex) { float f = 1.0f, g = 0.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g)); - r = f; /* Needed to trigger exception. */ #else asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g)); /* No need for fwait, exception is triggered by emitted fstp. */ @@ -96,9 +92,7 @@ __sfp_handle_exceptions (int _fex) { float f = 1.0f, g = 3.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); asm volatile ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g)); - r = f; /* Needed to trigger exception. */ #else asm volatile ("fdivs\t%1" : "+t" (f) : "m" (g)); /* No need for fwait, exception is triggered by emitted fstp. */ diff --git a/libgfortran/ChangeLog b/libgfortran/ChangeLog index e33d3495028..2ca75f190bc 100644 --- a/libgfortran/ChangeLog +++ b/libgfortran/ChangeLog @@ -1,3 +1,8 @@ +2020-04-19 Uroš Bizjak + + * config/fpu-387.h (local_feraiseexcept) [__SSE_MATH__]: + Remove unneeded assignments to volatile memory. + 2020-04-01 Fritz Reese Steven G. Kargl diff --git a/libgfortran/config/fpu-387.h b/libgfortran/config/fpu-387.h index 623e878b482..13be2045b72 100644 --- a/libgfortran/config/fpu-387.h +++ b/libgfortran/config/fpu-387.h @@ -103,9 +103,7 @@ local_feraiseexcept (int excepts) { float f = 0.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); __asm__ __volatile__ ("%vdivss\t{%0, %d0|%d0, %0}" : "+x" (f)); - r = f; /* Needed to trigger exception. */ #else __asm__ __volatile__ ("fdiv\t{%y0, %0|%0, %y0}" : "+t" (f)); /* No need for fwait, exception is triggered by emitted fstp. */ @@ -123,9 +121,7 @@ local_feraiseexcept (int excepts) { float f = 1.0f, g = 0.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); __asm__ __volatile__ ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g)); - r = f; /* Needed to trigger exception. */ #else __asm__ __volatile__ ("fdivs\t%1" : "+t" (f) : "m" (g)); /* No need for fwait, exception is triggered by emitted fstp. */ @@ -151,9 +147,7 @@ local_feraiseexcept (int excepts) { float f = 1.0f, g = 3.0f; #ifdef __SSE_MATH__ - volatile float r __attribute__ ((unused)); __asm__ __volatile__ ("%vdivss\t{%1, %d0|%d0, %1}" : "+x" (f) : "xm" (g)); - r = f; /* Needed to trigger exception. */ #else __asm__ __volatile__ ("fdivs\t%1" : "+t" (f) : "m" (g)); /* No need for fwait, exception is triggered by emitted fstp. */ -- 2.30.2