about summary refs log tree commit diff
path: root/sysdeps
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps')
-rw-r--r--sysdeps/i386/fpu/s_nearbyint.S23
-rw-r--r--sysdeps/i386/fpu/s_nearbyintf.S23
-rw-r--r--sysdeps/i386/fpu/s_nearbyintl.S26
-rw-r--r--sysdeps/x86_64/fpu/s_nearbyintl.S14
4 files changed, 38 insertions, 48 deletions
diff --git a/sysdeps/i386/fpu/s_nearbyint.S b/sysdeps/i386/fpu/s_nearbyint.S
index 52909139a9..8da8ae9792 100644
--- a/sysdeps/i386/fpu/s_nearbyint.S
+++ b/sysdeps/i386/fpu/s_nearbyint.S
@@ -8,22 +8,17 @@
 
 ENTRY(__nearbyint)
 	fldl	4(%esp)
-	pushl	%eax
-	cfi_adjust_cfa_offset (4)
-	pushl	%ecx
-	cfi_adjust_cfa_offset (4)
-	fnstcw	(%esp)
-	movl	(%esp), %eax
+	subl	$32, %esp
+	cfi_adjust_cfa_offset (32)
+	fnstenv	4(%esp)
+	movl	4(%esp), %eax
 	orl	$0x20, %eax
-	movl	%eax, 4(%esp)
-	fldcw	4(%esp)
-	frndint
-	fclex
+	movl	%eax, (%esp)
 	fldcw	(%esp)
-	popl	%ecx
-	cfi_adjust_cfa_offset (-4)
-	popl	%eax
-	cfi_adjust_cfa_offset (-4)
+	frndint
+	fldenv	4(%esp)
+	addl	$32, %esp
+	cfi_adjust_cfa_offset (-32)
 	ret
 END (__nearbyint)
 weak_alias (__nearbyint, nearbyint)
diff --git a/sysdeps/i386/fpu/s_nearbyintf.S b/sysdeps/i386/fpu/s_nearbyintf.S
index 6a6b1d6c2b..0c51f72364 100644
--- a/sysdeps/i386/fpu/s_nearbyintf.S
+++ b/sysdeps/i386/fpu/s_nearbyintf.S
@@ -8,22 +8,17 @@
 
 ENTRY(__nearbyintf)
 	flds	4(%esp)
-	pushl	%eax
-	cfi_adjust_cfa_offset (4)
-	pushl	%ecx
-	cfi_adjust_cfa_offset (4)
-	fnstcw	(%esp)
-	movl	(%esp), %eax
+	subl	$32, %esp
+	cfi_adjust_cfa_offset (32)
+	fnstenv	4(%esp)
+	movl	4(%esp), %eax
 	orl	$0x20, %eax
-	movl	%eax, 4(%esp)
-	fldcw	4(%esp)
-	frndint
-	fclex
+	movl	%eax, (%esp)
 	fldcw	(%esp)
-	popl	%ecx
-	cfi_adjust_cfa_offset (-4)
-	popl	%eax
-	cfi_adjust_cfa_offset (-4)
+	frndint
+	fldenv	4(%esp)
+	addl	$32, %esp
+	cfi_adjust_cfa_offset (-32)
 	ret
 END (__nearbyintf)
 weak_alias (__nearbyintf, nearbyintf)
diff --git a/sysdeps/i386/fpu/s_nearbyintl.S b/sysdeps/i386/fpu/s_nearbyintl.S
index 819af63a8d..b260ab5914 100644
--- a/sysdeps/i386/fpu/s_nearbyintl.S
+++ b/sysdeps/i386/fpu/s_nearbyintl.S
@@ -8,22 +8,20 @@
 
 ENTRY(__nearbyintl)
 	fldt	4(%esp)
-	pushl	%eax
-	cfi_adjust_cfa_offset (4)
-	pushl	%ecx
-	cfi_adjust_cfa_offset (4)
-	fnstcw	(%esp)
-	movl	(%esp), %eax
+	subl	$32, %esp
+	cfi_adjust_cfa_offset (32)
+	fnstenv	4(%esp)
+	movl	4(%esp), %eax
 	orl	$0x20, %eax
-	movl	%eax, 4(%esp)
-	fldcw	4(%esp)
-	frndint
-	fclex
+	movl	%eax, (%esp)
 	fldcw	(%esp)
-	popl	%ecx
-	cfi_adjust_cfa_offset (-4)
-	popl	%eax
-	cfi_adjust_cfa_offset (-4)
+	frndint
+	fnstsw
+	andl	$0x1, %eax
+	orl	%eax, 8(%esp)
+	fldenv	4(%esp)
+	addl	$32, %esp
+	cfi_adjust_cfa_offset (-32)
 	ret
 END (__nearbyintl)
 weak_alias (__nearbyintl, nearbyintl)
diff --git a/sysdeps/x86_64/fpu/s_nearbyintl.S b/sysdeps/x86_64/fpu/s_nearbyintl.S
index dab2750a23..76d41bdd52 100644
--- a/sysdeps/x86_64/fpu/s_nearbyintl.S
+++ b/sysdeps/x86_64/fpu/s_nearbyintl.S
@@ -8,14 +8,16 @@
 
 ENTRY(__nearbyintl)
 	fldt	8(%rsp)
-	fnstcw	-4(%rsp)
-	movl	-4(%rsp), %eax
+	fnstenv	-28(%rsp)
+	movl	-28(%rsp), %eax
 	orl	$0x20, %eax
-	movl	%eax, -8(%rsp)
-	fldcw	-8(%rsp)
+	movl	%eax, -32(%rsp)
+	fldcw	-32(%rsp)
 	frndint
-	fclex
-	fldcw	-4(%rsp)
+	fnstsw
+	andl	$0x1, %eax
+	orl	%eax, -24(%rsp)
+	fldenv	-28(%rsp)
 	ret
 END (__nearbyintl)
 weak_alias (__nearbyintl, nearbyintl)