powerpc: refactor logb{f,l}
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 19 Mar 2019 12:22:21 +0000 (12:22 +0000)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 8 Jul 2019 20:22:22 +0000 (17:22 -0300)
commit6ea21bfe439159f9e480c580927902c6461ec68c
tree5c48b477141f978c0c1712d6c27d69928a3d1145
parent105f2ed368ed61785a0a63ddb47fc62b89b58e0d
powerpc: refactor logb{f,l}

The power7 logb implementation does not show a performance gain on
ISA 2.07+ chips with faster floating-point to GRP instructions
(currently POWER8 and POWER9).

This patch moves the POWER7 implementation to generic one and enables
it for POWER7.  It also add some cleanup to use inline floating-point
number instead of define them using static const.

The performance difference is for POWER9:

  - Without patch:
  "logb": {
   "subnormal": {
    "duration": 4.99202e+09,
    "iterations": 8.83662e+08,
    "max": 75.194,
    "min": 5.501,
    "mean": 5.64925
   },
   "normal": {
    "duration": 4.97063e+09,
    "iterations": 9.97094e+08,
    "max": 46.489,
    "min": 4.956,
    "mean": 4.98512
   }
  }

  - With patch:
  "logb": {
   "subnormal": {
    "duration": 4.97226e+09,
    "iterations": 9.92036e+08,
    "max": 77.209,
    "min": 4.892,
    "mean": 5.01218
   },
   "normal": {
    "duration": 4.96192e+09,
    "iterations": 1.07545e+09,
    "max": 12.361,
    "min": 4.593,
    "mean": 4.61382
   }
  }

The ifunc implementation is also enabled only for powerpc64.

Checked on powerpc-linux-gnu (built without --with-cpu, with
--with-cpu=power4 and with --with-cpu=power5+ and --disable-multi-arch),
powerpc64-linux-gnu (built without --with-cp and with --with-cpu=power5+
and --disable-multi-arch).

* sysdeps/powerpc/power7/fpu/s_logb.c: Move to ...
* sysdeps/powerpc/fpu/s_logb.c: ... here.  Use inline FP constants.
* sysdeps/powerpc/power7/fpu/s_logbf.c: Move to ...
* sysdeps/powerpc/fpu/s_logbf.c: ... here.  Use inline FP constants.
* sysdeps/powerpc/power7/fpu/s_logbl.c: Move to ...
* sysdeps/powerpc/fpu/s_logbl.c: ... here.  Use inline FP constants.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c:
Adjust implementation path.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c:
Adjust implementation path.
* sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c:
Adjust implementation path.
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile
(libm-sysdep_routines): Add s_log* objects.
(CFLAGS-s_logbf-power7.c, CFLAGS-s_logbl-power7.c,
CFLAGS-s_logb-power7.c): New fule.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c: Move
to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c:
... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c: Move
to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c:
... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c: Move to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c: ... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c: Move
to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c:
... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c: Move
to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c:
... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c: Move to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c: ... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c: Move
to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c:
... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c: Move
to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c:
... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c: Move to ...
* sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c: ... here.
* sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile: Remove file.
* sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c: Remove file.
* sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c: Likewise.
* sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c: Likewise.

Reviewed-by: Gabriel F. T. Gomes <gabrielftg@linux.ibm.com>
21 files changed:
ChangeLog
sysdeps/powerpc/fpu/s_logb.c [moved from sysdeps/powerpc/power7/fpu/s_logb.c with 56% similarity]
sysdeps/powerpc/fpu/s_logbf.c [moved from sysdeps/powerpc/power7/fpu/s_logbf.c with 67% similarity]
sysdeps/powerpc/fpu/s_logbl.c [moved from sysdeps/powerpc/power7/fpu/s_logbl.c with 72% similarity]
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logb-power7.c
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbf-power7.c
sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_logbl-power7.c
sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-power7.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-power7.c with 91% similarity]
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb-ppc64.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb-ppc64.c with 100% similarity]
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logb.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logb.c with 100% similarity]
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-power7.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-power7.c with 91% similarity]
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf-ppc64.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf-ppc64.c with 100% similarity]
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbf.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbf.c with 100% similarity]
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-power7.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-power7.c with 91% similarity]
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl-ppc64.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl-ppc64.c with 100% similarity]
sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_logbl.c [moved from sysdeps/powerpc/powerpc64/fpu/multiarch/s_logbl.c with 100% similarity]
sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile [deleted file]
sysdeps/powerpc/powerpc64/power7/fpu/s_logb.c [deleted file]
sysdeps/powerpc/powerpc64/power7/fpu/s_logbf.c [deleted file]
sysdeps/powerpc/powerpc64/power7/fpu/s_logbl.c [deleted file]