about summary refs log tree commit diff
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-03-17 18:02:20 -0400
committerRich Felker <dalias@aerifal.cx>2012-03-17 18:02:20 -0400
commit9cb6878e747909c7a45dd1c4dd550ac62e1f7690 (patch)
treec98ee43beccfaa6f900df529de01eeee00d48aad
parentd5e576c7527c42b376d20ef38669ffc2a78b0a76 (diff)
downloadmusl-9cb6878e747909c7a45dd1c4dd550ac62e1f7690.tar.gz
musl-9cb6878e747909c7a45dd1c4dd550ac62e1f7690.tar.xz
musl-9cb6878e747909c7a45dd1c4dd550ac62e1f7690.zip
fix x86_64 fe[gs]etround, analogous to nsz's x86 changes
-rw-r--r--src/fenv/x86_64/fenv.s17
1 files changed, 9 insertions, 8 deletions
diff --git a/src/fenv/x86_64/fenv.s b/src/fenv/x86_64/fenv.s
index 8226b52b..11aa3da2 100644
--- a/src/fenv/x86_64/fenv.s
+++ b/src/fenv/x86_64/fenv.s
@@ -32,18 +32,19 @@ feraiseexcept:
 .global fesetround
 .type fesetround,@function
 fesetround:
+	push %rax
 	xor %eax,%eax
-	sub $32,%rsp
-	fnstenv (%rsp)
+	mov %edi,%ecx
+	fnstcw (%rsp)
 	andb $0xf3,1(%rsp)
-	or %edi,(%rsp)
-	fldenv (%rsp)
+	or %ch,1(%rsp)
+	fldcw (%rsp)
 	stmxcsr (%rsp)
-	shl $3,%edi
+	shl $3,%ch
 	andb $0x9f,1(%rsp)
-	or %edi,(%rsp)
+	or %ch,1(%rsp)
 	ldmxcsr (%rsp)
-	add $32,%rsp
+	pop %rcx
 	ret
 
 .global fegetround
@@ -53,7 +54,7 @@ fegetround:
 	stmxcsr (%rsp)
 	pop %rax
 	shr $3,%eax
-	and $0xc,%ah
+	and $0xc00,%eax
 	ret
 
 .global fegetenv