powerpc: Use faster means to access FPSCR when possible in some cases
authorPaul A. Clarke <pc@us.ibm.com>
Thu, 20 Jun 2019 16:57:18 +0000 (11:57 -0500)
committerTulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
Sun, 30 Jun 2019 11:40:44 +0000 (08:40 -0300)
commit3db85a9814784a74536a1f0e7b7ddbfef7dc84bb
tree38c7cbbeae1d517b1fd54e723bf55e0d8887abe1
parentd064591266634a8ff55b645181167b8626c793c9
powerpc: Use faster means to access FPSCR when possible in some cases

Using 'mffs' instruction to read the Floating Point Status Control Register
(FPSCR) can force a processor flush in some cases, with undesirable
performance impact.  If the values of the bits in the FPSCR which force the
flush are not needed, an instruction that is new to POWER9 (ISA version 3.0),
'mffsl' can be used instead.

Cases included:  get_rounding_mode, fegetround, fegetmode, fegetexcept.

* sysdeps/powerpc/bits/fenvinline.h (__fegetround): Use
__fegetround_ISA300() or __fegetround_ISA2() as appropriate.
(__fegetround_ISA300) New.
(__fegetround_ISA2) New.
* sysdeps/powerpc/fpu_control.h (IS_ISA300): New.
(_FPU_MFFS): Move implementation...
(_FPU_GETCW): Here.
(_FPU_MFFSL): Move implementation....
(_FPU_GET_RC_ISA300): Here. New.
(_FPU_GET_RC): Use _FPU_GET_RC_ISA300() or _FPU_GETCW() as appropriate.
* sysdeps/powerpc/fpu/fenv_libc.h (fegetenv_status_ISA300): New.
(fegetenv_status): New.
* sysdeps/powerpc/fpu/fegetmode.c (fegetmode): Use fegetenv_status()
instead of fegetenv_register().
* sysdeps/powerpc/fpu/fegetexcept.c (__fegetexcept): Likewise.

Reviewed-by: Tulio Magno Quites Machado Filho <tuliom@linux.ibm.com>
ChangeLog
sysdeps/powerpc/bits/fenvinline.h
sysdeps/powerpc/fpu/fegetexcept.c
sysdeps/powerpc/fpu/fegetmode.c
sysdeps/powerpc/fpu/fenv_libc.h
sysdeps/powerpc/fpu_control.h