1 /* 2 * Written by J.T. Conklin <jtc (at) NetBSD.org>. 3 * Public domain. 4 */ 5 6 #include <machine/asm.h> 7 8 #include "abi.h" 9 10 11 RCSID("$NetBSD: e_expf.S,v 1.5 2003/07/26 19:24:58 salo Exp $") 12 13 /* e^x = 2^(x * log2(e)) */ 14 ENTRY(__ieee754_expf) 15 XMM_ONE_ARG_FLOAT_PROLOGUE 16 flds ARG_FLOAT_ONE 17 fldl2e 18 fmulp /* x * log2(e) */ 19 fld %st(0) 20 frndint /* int(x * log2(e)) */ 21 fsubr %st(0),%st(1) /* fract(x * log2(e)) */ 22 fxch 23 f2xm1 /* 2^(fract(x * log2(e))) - 1 */ 24 fld1 25 faddp /* 2^(fract(x * log2(e))) */ 26 fscale /* e^x */ 27 fstp %st(1) 28 XMM_FLOAT_EPILOGUE 29 ret 30