[PATCH 3/5] i386: Use generic exp10f

Adhemerval Zanella adhemerval.zanella@linaro.org
Wed Apr 29 17:11:25 GMT 2020


Ping.

On 09/04/2020 16:59, Adhemerval Zanella wrote:
> The generic implementation is twice as fast.  Using the exp10f
> benchmark:
> 
>  * master:
>   "exp10f": {
>    "": {
>     "duration": 4.25753e+09,
>     "iterations": 3.3376e+07,
>     "max": 1414.77,
>     "min": 103.649,
>     "mean": 127.563
>    }
>   }
> 
>  * patched:
>   "exp10f": {
>    "": {
>     "duration": 4.05755e+09,
>     "iterations": 6.9136e+07,
>     "max": 1489.64,
>     "min": 50.95,
>     "mean": 58.6894
>    }
>   }
> 
> Checked on i686-linux-gnu.
> ---
>  sysdeps/i386/fpu/e_exp10f.S | 54 -------------------------------------
>  1 file changed, 54 deletions(-)
>  delete mode 100644 sysdeps/i386/fpu/e_exp10f.S
> 
> diff --git a/sysdeps/i386/fpu/e_exp10f.S b/sysdeps/i386/fpu/e_exp10f.S
> deleted file mode 100644
> index 196ce8744a..0000000000
> --- a/sysdeps/i386/fpu/e_exp10f.S
> +++ /dev/null
> @@ -1,54 +0,0 @@
> -/*
> - * Written by Ulrich Drepper.
> - */
> -
> -#include <machine/asm.h>
> -#include <i386-math-asm.h>
> -#include <libm-alias-finite.h>
> -
> -DEFINE_FLT_MIN
> -
> -#ifdef PIC
> -# define MO(op) op##@GOTOFF(%ecx)
> -#else
> -# define MO(op) op
> -#endif
> -
> -	.text
> -/* 10^x = 2^(x * log2(10)) */
> -ENTRY(__ieee754_exp10f)
> -#ifdef  PIC
> -	LOAD_PIC_REG (cx)
> -#endif
> -	flds	4(%esp)
> -/* I added the following ugly construct because exp(+-Inf) resulted
> -   in NaN.  The ugliness results from the bright minds at Intel.
> -   For the i686 the code can be written better.
> -   -- drepper@cygnus.com.  */
> -	fxam				/* Is NaN or +-Inf?  */
> -	fstsw	%ax
> -	movb	$0x45, %dh
> -	andb	%ah, %dh
> -	cmpb	$0x05, %dh
> -	je	1f			/* Is +-Inf, jump.  */
> -	fldl2t
> -	fmulp				/* x * log2(10) */
> -	fld	%st
> -	frndint				/* int(x * log2(10)) */
> -	fsubr	%st,%st(1)		/* fract(x * log2(10)) */
> -	fxch
> -	f2xm1				/* 2^(fract(x * log2(10))) - 1 */
> -	fld1
> -	faddp				/* 2^(fract(x * log2(10))) */
> -	fscale				/* e^x */
> -	fstp	%st(1)
> -	FLT_NARROW_EVAL_UFLOW_NONNEG_NAN
> -	ret
> -
> -1:	testl	$0x200, %eax		/* Test sign.  */
> -	jz	2f			/* If positive, jump.  */
> -	fstp	%st
> -	fldz				/* Set result to 0.  */
> -2:	ret
> -END (__ieee754_exp10f)
> -libm_alias_finite (__ieee754_exp10f, __exp10f)
> 


More information about the Libc-alpha mailing list