diff options
author | Uros Bizjak <ubizjak@gmail.com> | 2020-04-19 14:23:47 +0200 |
---|---|---|
committer | Uros Bizjak <ubizjak@gmail.com> | 2020-04-19 14:27:12 +0200 |
commit | df73e5842f25aea3bab81c328ed77f16ed261b33 (patch) | |
tree | 33968170cbb9e272b180adf1681270cd4e9b15d7 /libatomic | |
parent | 9382018b8b00f3482da0d1bff6012f583ff72f87 (diff) | |
download | gcc-df73e5842f25aea3bab81c328ed77f16ed261b33.zip gcc-df73e5842f25aea3bab81c328ed77f16ed261b33.tar.gz gcc-df73e5842f25aea3bab81c328ed77f16ed261b33.tar.bz2 |
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.
Diffstat (limited to 'libatomic')
-rw-r--r-- | libatomic/ChangeLog | 5 | ||||
-rw-r--r-- | libatomic/config/x86/fenv.c | 6 |
2 files changed, 5 insertions, 6 deletions
diff --git a/libatomic/ChangeLog b/libatomic/ChangeLog index 624162d..33527a7 100644 --- a/libatomic/ChangeLog +++ b/libatomic/ChangeLog @@ -1,3 +1,8 @@ +2020-04-19 Uroš Bizjak <ubizjak@gmail.com> + + * config/x86/fenv.c (__atomic_feraiseexcept) [__SSE_MATH__]: + Remove unneeded assignments to volatile memory. + 2020-04-06 Maciej W. Rozycki <macro@wdc.com> * 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 7828162..d7b1bbe 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. */ |