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