powerpc: Refactor modf{f}

System Internals / glibc - Adhemerval Zanella [linaro.org] - 8 July 2019 20:22 EDT

The modf{f} optimization is not an optimization for ISA 2.07+. This patch move the IFUNC for powerpc64 only, move the power5+ to generic location, and include the generic implementation for ISA 2.07+.

The performance changes are based on modf benchtests:

- POWER9 - ppc64 "modf": { "": { "duration": 4.97057e+09, "iterations": 1.00688e+09, "max": 28.76, "min": 4.912, "mean": 4.9366 } }
- POWER9 - power5+ "modf": { "": { "duration": 4.98291e+09, "iterations": 9.32818e+08, "max": 15.058, "min": 5.107, "mean": 5.34178 } }

- POWER8 - ppc64 "modf": { "": { "duration": 5.05329e+09, "iterations": 8.38814e+08, "max": 518.051, "min": 5.79, "mean": 6.02433 } }
- POWER8 - power5+ "modf": { "": { "duration": 5.05573e+09, "iterations": 8.35254e+08, "max": 63.141, "min": 5.873, "mean": 6.05293 } }

- POWER7 - ppc64 "modf": { "": { "duration": 4.89818e+09, "iterations": 1.08408e+09, "max": 57.556, "min": 3.953, "mean": 4.51827 } }
- POWER7 - power5+ "modf": { "": { "duration": 4.83789e+09, "iterations": 1.33409e+09, "max": 46.608, "min": 2.224, "mean": 3.62636 } }

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/power5+/fpu/s_modf.c: Move to ...
- sysdeps/powerpc/fpu/s_modf.c: ... here. Add ISA 2.07 optimization.
- sysdeps/powerpc/power5+/fpu/s_modff.c: Move to ...
- sysdeps/powerpc/fpu/s_modff.c: ... here. Add ISA 2.07 optimization.
- sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modf-power5+.c: Adjust include.
- sysdeps/powerpc/powerpc32/power4/fpu/multiarch/s_modff-power5+.c: Likewise.
- sysdeps/powerpc/powerpc64/be/fpu/multiarch/Makefile (sysdep_calls, sysdep_routines): Add s_modf* objects. (CFLAGS-s_modf-power5+.c, CFLAGS-s_modff-power5+.c, CFLAGS-s_modf-ppc64.c, CFLAGS-s_modff-ppc64.c): New rule.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-power5+.c: Move to ...
- sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modf-power5+.c: ... here.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf-power5+.c: Movo to ...
- sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modf-power5+.c: Move ... here.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_modf.c: Move to ...
- sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modf.c: ... here.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-power5+.c: Move to ...
- sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modff-power5+.c: ... here.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff-ppc64.c: Move to ...
- sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modff-ppc64.c: ... here.
- sysdeps/powerpc/powerpc64/fpu/multiarch/s_modff.c: Move to ...
- sysdeps/powerpc/powerpc64/be/fpu/multiarch/s_modff.c: ... here.

931c616eed powerpc: Refactor modf{f}
ChangeLog | 32 ++++++++++++++++++++++
sysdeps/powerpc/{power5+ => }/fpu/s_modf.c | 17 +++++++++---
sysdeps/powerpc/{power5+ => }/fpu/s_modff.c | 13 +++++++--
.../power4/fpu/multiarch/s_modf-power5+.c | 13 +--------
.../power4/fpu/multiarch/s_modff-power5+.c | 9 +-----
.../powerpc/powerpc64/be/fpu/multiarch/Makefile | 19 ++++++++++++-
.../{ => be}/fpu/multiarch/s_modf-power5+.c | 3 +-
.../{ => be}/fpu/multiarch/s_modf-ppc64.c | 0
.../powerpc64/{ => be}/fpu/multiarch/s_modf.c | 0
.../{ => be}/fpu/multiarch/s_modff-power5+.c | 3 +-
.../{ => be}/fpu/multiarch/s_modff-ppc64.c | 0
.../powerpc64/{ => be}/fpu/multiarch/s_modff.c | 0
sysdeps/powerpc/powerpc64/fpu/multiarch/Makefile | 13 ---------
13 files changed, 80 insertions(+), 42 deletions(-)

Upstream: sourceware.org


  • Share