]> sourceware.org Git - newlib-cygwin.git/commitdiff
Disable powf/log2?f/exp2?f optimization for single-precision Arm FPU
authorThomas Preudhomme <thomas.preudhomme@foss.arm.com>
Tue, 23 Jan 2018 10:43:54 +0000 (10:43 +0000)
committerCorinna Vinschen <corinna@vinschen.de>
Thu, 25 Jan 2018 15:08:35 +0000 (16:08 +0100)
New optimized powf, logf, log2f, expf and exp2f yield worse performance
on Arm targets with only single precision instructions because the
double precision arithmetic is then implemented via softfloat routines.
This patch uses the old implementation when double precision
instructions are not available on Arm targets.

Testing: Built newlib with GCC's rmprofile Arm multilibs and compared
before/after -> only the above functions are changed and calls to them
(name change from logf to __ieee754_logf and similar). Testing the
changed function on a panel of values yields the same result before the
original patches to improve them and after this one. Double checking the
performance by looping the same panel of values being tested on Arm
Cortex-M4 does show the performance regression is fixed.

newlib/libc/include/machine/ieeefp.h

index b1b44665ed8abc0713baa57da75022ed2b7834f7..9fbef8449eeebf1daffbd85c0d964cd10a825e3e 100644 (file)
@@ -78,7 +78,9 @@
 # else
 #  define __IEEE_BIG_ENDIAN
 # endif
-# define __OBSOLETE_MATH_DEFAULT 0
+# if __ARM_FP & 0x8
+#  define __OBSOLETE_MATH_DEFAULT 0
+# endif
 #else
 # define __IEEE_BIG_ENDIAN
 # ifdef __ARMEL__
This page took 0.032914 seconds and 5 git commands to generate.