This is the mail archive of the libc-ports@sources.redhat.com mailing list for the libc-ports project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi,
glibc-ports/sysdeps/arm/eabi/ contains functions for manipulating
rounding modes and other parameters specified in IEEE 754.
Unfortunately, they do not work correctly when a program is compiled
with software floating point, yet the runtime hardware contains a VFP.
Example:
int
fesetround (int round)
{
if (GLRO (dl_hwcap) & HWCAP_ARM_VFP)
{
fpu_control_t temp;
switch (round)
{
case FE_TONEAREST:
case FE_UPWARD:
case FE_DOWNWARD:
case FE_TOWARDZERO:
_FPU_GETCW (temp);
temp = (temp & ~FE_TOWARDZERO) | round;
_FPU_SETCW (temp);
return 0;
default:
return 1;
}
}
else if (round == FE_TONEAREST)
/* This is the only supported rounding mode for soft-fp. */
return 0;
/* Unsupported, so fail. */
return 1;
}
When I compile a program with software floating point, I expect
fesetround to fail when I set a non-default rounding mode. Instead, the
failure is dependent on the presence of a VFP at runtime. In this case,
fesetround sets the control word of the VFP, and returns success. But
because I am not using the VFP, it should fail.
With the addition of ARM attribute tags, it should be possible to
condition on the user's intent. Specifically, Tag_VFP_arch tells us if
the user wants to use software or hardware FP. This tag is set by the
compiler.
Can we change the dl_hwcap conditional there to read the VFP attribute
tag instead? Is this information still around at the point fesetround is
called? I am trying to figure out how to load this information, it looks
like something in dl-sysdep, but I'm not sure. Any hints are welcome.
Thanks,
Adam
Attachment:
signature.asc
Description: OpenPGP digital signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |