Module Name:    src
Committed By:   njoly
Date:           Wed Oct 19 15:24:58 UTC 2011

Modified Files:
        src/lib/libc/arch/x86_64/gen: fpsetmask.S

Log Message:
Fix fpsetmask(3) to be able to clear bits previously set.


To generate a diff of this commit:
cvs rdiff -u -r1.3 -r1.4 src/lib/libc/arch/x86_64/gen/fpsetmask.S

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/lib/libc/arch/x86_64/gen/fpsetmask.S
diff -u src/lib/libc/arch/x86_64/gen/fpsetmask.S:1.3 src/lib/libc/arch/x86_64/gen/fpsetmask.S:1.4
--- src/lib/libc/arch/x86_64/gen/fpsetmask.S:1.3	Wed Jun 12 19:17:22 2002
+++ src/lib/libc/arch/x86_64/gen/fpsetmask.S	Wed Oct 19 15:24:58 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: fpsetmask.S,v 1.3 2002/06/12 19:17:22 fvdl Exp $	*/
+/*	$NetBSD: fpsetmask.S,v 1.4 2011/10/19 15:24:58 njoly Exp $	*/
 
 /*
  * Written by Frank van der Linden at Wasabi Systems for NetBSD.
@@ -20,22 +20,25 @@ ENTRY(_fpsetmask)
 #else
 ENTRY(fpsetmask)
 #endif
-	fnstcw	-4(%rsp)
-	stmxcsr	-8(%rsp)
-	andl	$63,%edi
 	notl	%edi
+	andl	$0x0000003f,%edi
 
-	movl	-4(%rsp),%edx
-	movl	%edx,%eax
-	andl	%edi,%edx
+	fnstcw	-4(%rsp)
+	movl	-4(%rsp), %edx
+	movl	%edx, %eax
+	andl	$0xffffffc0, %edx
+	orl	%edi, %edx
 	movl	%edx,-4(%rsp)
+	fldcw	-4(%rsp)
 
-	movl	-8(%rsp),%edx
-	roll	$7,%edi
-	andl	%edi,%edx
-	movl	%edx,-8(%rsp)
+	stmxcsr	-4(%rsp)
+	movl	-4(%rsp), %edx
+	andl	$0xfffff07f, %edx
+	sall	$7, %edi
+	orl	%edi, %edx
+	movl	%edx,-4(%rsp)
+	ldmxcsr	-4(%rsp)
 
-	fldcw	-4(%rsp)
-	ldmxcsr	-8(%rsp)
-	andl	$63,%eax
+	notl	%eax
+	andl	$0x0000003f, %eax
 	ret

Reply via email to