diff options
| author | nsz <nsz@port70.net> | 2012-03-20 10:25:02 +0100 | 
|---|---|---|
| committer | nsz <nsz@port70.net> | 2012-03-20 10:25:02 +0100 | 
| commit | 03c52e137a28f65519bf6e7c303e5bd25df6e929 (patch) | |
| tree | f5fe7ae916d9039adfe82217716e2aafd08702fb | |
| parent | c879a9592f09a49c1807ee95d4305c406f44882e (diff) | |
| parent | baa43bca0a051e8deb0d6a9a8882ceeea5c27249 (diff) | |
| download | musl-03c52e137a28f65519bf6e7c303e5bd25df6e929.tar.gz | |
Merge branch 'master' of git://git.etalabs.net/musl
| -rw-r--r-- | src/math/i386/remquo.s | 43 | ||||
| -rw-r--r-- | src/math/i386/scalbn.s | 19 | ||||
| -rw-r--r-- | src/math/i386/scalbnf.s | 18 | ||||
| -rw-r--r-- | src/math/i386/scalbnl.s | 16 | 
4 files changed, 72 insertions, 24 deletions
| diff --git a/src/math/i386/remquo.s b/src/math/i386/remquo.s index 86ae2dc3..37a24450 100644 --- a/src/math/i386/remquo.s +++ b/src/math/i386/remquo.s @@ -2,40 +2,49 @@  .type remquof,@function  remquof:  	mov 12(%esp),%ecx -	fldl 4(%esp)  	fldl 8(%esp) +	fldl 4(%esp) +	mov 11(%esp),%dh +	xor 7(%esp),%dh  	jmp 1f  .global remquol  .type remquol,@function  remquol:  	mov 28(%esp),%ecx -	fldl 4(%esp)  	fldl 16(%esp) +	fldl 4(%esp) +	mov 25(%esp),%dh +	xor 13(%esp),%dh  	jmp 1f  .global remquo  .type remquo,@function  remquo:  	mov 20(%esp),%ecx -	fldl 4(%esp)  	fldl 12(%esp) -1:	fld %st(1) +	fldl 4(%esp) +	mov 19(%esp),%dh +	xor 11(%esp),%dh  1:      fprem1  	fnstsw %ax  	sahf  	jp 1b -	fsubr %st(0),%st(2) -	fxch %st(2) -	fdivp -	mov $0x4f000000,%eax -	mov %eax,4(%esp) -	flds 4(%esp) -	fxch %st(1) -1:	fprem -	fnstsw %ax -	sahf -	jp 1b -	fistpl (%ecx) -	fstp %st(0) +	fstp %st(1) +	mov %ah,%dl +	shr %dl +	and $1,%dl +	mov %ah,%al +	shr $5,%al +	and $2,%al +	or %al,%dl +	mov %ah,%al +	shl $2,%al +	and $4,%al +	or %al,%dl +	test %dh,%dh +	jns 1f +	neg %dl +1:	movsbl %dl,%edx +	mov %edx,(%ecx)  	ret diff --git a/src/math/i386/scalbn.s b/src/math/i386/scalbn.s index e275d14f..8bf302f2 100644 --- a/src/math/i386/scalbn.s +++ b/src/math/i386/scalbn.s @@ -11,10 +11,23 @@ scalbln:  .global scalbn  .type scalbn,@function  scalbn: -	fildl 12(%esp) +	mov 12(%esp),%eax +	add $0x3ffe,%eax +	cmp $0x7ffd,%eax +	jb 1f +	sub $0x3ffe,%eax +	sar $31,%eax +	xor $0xfff,%eax +	add $0x3ffe,%eax +1:	inc %eax  	fldl 4(%esp) -	fscale -	fstp %st(1) +	mov %eax,12(%esp) +	mov $0x80000000,%eax +	mov %eax,8(%esp) +	xor %eax,%eax +	mov %eax,4(%esp) +	fldt 4(%esp) +	fmulp  	fstpl 4(%esp)  	fldl 4(%esp)  	ret diff --git a/src/math/i386/scalbnf.s b/src/math/i386/scalbnf.s index 40232b6a..9cb9ef5f 100644 --- a/src/math/i386/scalbnf.s +++ b/src/math/i386/scalbnf.s @@ -11,10 +11,22 @@ scalblnf:  .global scalbnf  .type scalbnf,@function  scalbnf: -	fildl 8(%esp) +	mov 8(%esp),%eax +	add $0x3fe,%eax +	cmp $0x7fd,%eax +	jb 1f +	sub $0x3fe,%eax +	sar $31,%eax +	xor $0x1ff,%eax +	add $0x3fe,%eax +1:	inc %eax +	shl $20,%eax  	flds 4(%esp) -	fscale -	fstp %st(1) +	mov %eax,8(%esp) +	xor %eax,%eax +	mov %eax,4(%esp) +	fldl 4(%esp) +	fmulp  	fstps 4(%esp)  	flds 4(%esp)  	ret diff --git a/src/math/i386/scalbnl.s b/src/math/i386/scalbnl.s index 224b1bef..54414c2e 100644 --- a/src/math/i386/scalbnl.s +++ b/src/math/i386/scalbnl.s @@ -11,7 +11,21 @@ scalblnl:  .global scalbnl  .type scalbnl,@function  scalbnl: -	fildl 16(%esp) +	mov 16(%esp),%eax +	add $0x3ffe,%eax +	cmp $0x7ffd,%eax +	jae 1f +	inc %eax +	fldt 4(%esp) +	mov %eax,12(%esp) +	mov $0x80000000,%eax +	mov %eax,8(%esp) +	xor %eax,%eax +	mov %eax,4(%esp) +	fldt 4(%esp) +	fmulp +	ret +1:	fildl 16(%esp)  	fldt 4(%esp)  	fscale  	fstp %st(1) | 
