summaryrefslogblamecommitdiff
path: root/src/math/i386/exp.s
blob: 76ab4d6465e298c408f64876ba8cb293a6e2d986 (plain) (tree)

































                      



































                     










                            
            





                      

                   

                        


             

                   
                   




















                            
           
.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:	fldl2e
	fmulp
	fld1
	fld %st(1)
	fabs
	fucom %st(1)
	fnstsw %ax
	fstp %st(0)
	fstp %st(0)
	sahf
	ja 1f
	f2xm1
	ret
1:	call 1f
	fld1
	fsubrp
	ret

.global exp2f
.type exp2f,@function
exp2f:
	flds 4(%esp)
	jmp 1f

.global exp2l
.type exp2l,@function
exp2l:
	fldt 4(%esp)
	jmp 1f

.global expf
.type expf,@function
expf:
	flds 4(%esp)
	jmp 2f

.global expl
.type expl,@function
expl:
	fldt 4(%esp)
	jmp 2f

.global exp
.type exp,@function
exp:
	fldl 4(%esp)
2:	fldl2e
	fmulp
	jmp 1f

.global exp2
.type exp2,@function
exp2:
	fldl 4(%esp)
1:	mov $0x47000000,%eax
	push %eax
	flds (%esp)
	shl $7,%eax
	push %eax
	add %eax,%eax
	push %eax
	fld %st(1)
	fabs
	fucom %st(1)
	fnstsw
	sahf
	ja 2f
	fstp %st(0)
	fstp %st(0)
	fld %st(0)
	fistpl 8(%esp)
	fildl 8(%esp)
	fxch %st(1)
	fsub %st(1)
	mov $0x3fff,%eax
	add %eax,8(%esp)
	f2xm1
	fld1
	faddp
	fldt (%esp)
	fmulp
	fstp %st(1)
	add $12,%esp
	ret

2:	fstp %st(0)
	fstp %st(0)
	fsts 8(%esp)
	mov 8(%esp),%eax
	lea (%eax,%eax),%ecx
	cmp $0xff000000,%ecx
	ja 2f
	fstp %st(0)
	xor %ecx,%ecx
	inc %ecx
	add %eax,%eax
	jc 1f
	mov $0x7ffe,%ecx
1:	mov %ecx,8(%esp)
	fldt (%esp)
	fld %st(0)
	fmulp
2:	add $12,%esp
	ret