This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: Which POWER implementations need the HWCAP_DFP check?
- From: Florian Weimer <fweimer at redhat dot com>
- To: Tulio Magno Quites Machado Filho <tuliom at linux dot vnet dot ibm dot com>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Mon, 14 May 2018 17:28:30 +0200
- Subject: Re: Which POWER implementations need the HWCAP_DFP check?
- References: <c6631e1a-fdce-99b8-2602-b73330caffc7@redhat.com> <87a7t2jm7q.fsf@linux.ibm.com>
On 05/14/2018 05:22 PM, Tulio Magno Quites Machado Filho wrote:
Florian Weimer <fweimer@redhat.com> writes:
I think this run-time check is unnecessary on POWER6 and later:
double d = (env); \
if(GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP) \
asm volatile (".machine push; " \
".machine \"power6\"; " \
"mtfsf 0xff,%0,1,0; " \
".machine pop" : : "f" (d)); \
else \
asm volatile ("mtfsf 0xff,%0" : : "f" (d)); \
I think it's still necessary when building glibc for an older processor,
e.g. POWER4, and run it on processors that support DFP, e.g. POWER6.
Right.
In particularly, we do not need it on ppc64le. Correct?
Agreed, unless the kernel has the right to disable DFP support.
Ugh, I had not thought of that. Isn't DFP support part of the userspace
ABI?
It's one of the GLIBC_PRIVATE references in libm.so.6, which is why I'm
asking.
Would the following code solve this problem?
#include <tls.h>
/* Equivalent to fesetenv, but takes a fenv_t instead of a pointer. */
#define fesetenv_register(env) \
do { \
double d = (env); \
if(THREAD_GET_HWCAP() & PPC_FEATURE_HAS_DFP) \
asm volatile (".machine push; " \
".machine \"power6\"; " \
"mtfsf 0xff,%0,1,0; " \
".machine pop" : : "f" (d)); \
else \
asm volatile ("mtfsf 0xff,%0" : : "f" (d)); \
} while(0)
It avoids the GLIBC_PRIVATE reference, but it does not avoid the
dependency on library internals. So in a certain sense, it is way worse
than what we have today (in particular if you are interested in pre-2.23
glibc versions still).
I would have suggested something like
#define DL_HWCAP_HAS_DFP (GLRO(dl_hwcap) & PPC_FEATURE_HAS_DFP)
in the general powerpc sysdeps file, and
#define DL_HWCAP_HAS_DFP 1
for power6 (which I expect will propagate upwards). I expect that this
will result in somewhat nicer machine code, too.
Thanks,
Florian