From 02db27d9deaee71b244c91e720ec819c74dab150 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Mon, 19 Mar 2012 09:00:30 -0400 Subject: optimize exponential asm for i386 up to 30% faster exp2 by avoiding slow frndint and fscale functions. expm1 also takes a much more direct path for small arguments (the expected usage case). --- src/math/i386/expm1.s | 48 +----------------------------------------------- 1 file changed, 1 insertion(+), 47 deletions(-) (limited to 'src/math/i386/expm1.s') diff --git a/src/math/i386/expm1.s b/src/math/i386/expm1.s index bbb5d12e..f335a3e5 100644 --- a/src/math/i386/expm1.s +++ b/src/math/i386/expm1.s @@ -1,47 +1 @@ -.global expm1f -.type expm1f,@function -expm1f: - flds 4(%esp) - jmp 1f - -.global expm1l -.type expm1l,@function -expm1l: - fldt 4(%esp) - jmp 1f - -.global expm1 -.type expm1,@function -expm1: - fldl 4(%esp) -1: fxam - fnstsw %ax - sahf - jnp 1f - jnc 1f - fstps 4(%esp) - mov $0xfe,%al - and %al,7(%esp) - flds 4(%esp) -1: fldl2e - fmulp - fld %st(0) - frndint - fldz - fcomp - fnstsw %ax - sahf - jnz 1f - fstp %st(0) - f2xm1 - ret -1: fxch %st(1) - fsub %st(1) - f2xm1 - fld1 - faddp - fscale - fld1 - fsubrp - fstp %st(1) - ret +# see exp.s -- cgit v1.2.1