This is the mail archive of the newlib@sourceware.org mailing list for the newlib 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] | |
On Jun 22 11:49, Jon Beniston wrote:
> Hi,
>
> Most functions in libm call __ieee754_sqrt when needing to perform a square
> root. For most targets, this results in the s/w implementation in
> math/e_sqrt.c being using, even if the target has a h/w sqrt instruction.
> There are some targets that have machine specific implementations in
> machine/*/, but even if a single instruction, that code typically doesn't
> get inlined.
>
> The following patch is one possible way to allow a sqrt instruction to be
> used and for the calls to be inlined. I've just done this for x86/arm for
> now. I've put this in include/machine/ieeefp.h, rather than fdlibm.h, as
> that's where most of the other target specific code seems to be.
>
> Not sure if using the __IEEE754_INLINE_SQRT* macros is the best way to
> prevent redefinition errors. Perhaps someone has a better idea?
>
> Cheers,
> Jon
>
> diff --git a/newlib/libc/include/machine/ieeefp.h
> [...]
> #ifdef __i386__
> #define __IEEE_LITTLE_ENDIAN
> +
> +#define __IEEE754_INLINE_SQRT
> +static inline double
> +__ieee754_sqrt (double x)
> +{
> + double result;
> + __asm__ ("fsqrt" : "=t" (result) : "0" (x));
> + return result;
> +}
> +
> +#define __IEEE754_INLINE_SQRTF
> +static inline float
> +__ieee754_sqrtf (float x)
> +{
> + float result;
> + __asm__ ("fsqrt" : "=t" (result) : "0" (x));
> + return result;
> +}
> +
> #endif
Can we really imply that an i386 always comes with a FPU?
Corinna
--
Corinna Vinschen
Cygwin Maintainer
Red Hat
Attachment:
signature.asc
Description: PGP signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |