Bladeren bron

Merge branch 'master' of git://git.etalabs.net/musl

nsz 13 jaren geleden
bovenliggende
commit
03c52e137a
4 gewijzigde bestanden met toevoegingen van 72 en 24 verwijderingen
  1. 26 17
      src/math/i386/remquo.s
  2. 16 3
      src/math/i386/scalbn.s
  3. 15 3
      src/math/i386/scalbnf.s
  4. 15 1
      src/math/i386/scalbnl.s

+ 26 - 17
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

+ 16 - 3
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

+ 15 - 3
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

+ 15 - 1
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)