about summary refs log tree commit diff
path: root/src/fenv/x86_64
diff options
context:
space:
mode:
Diffstat (limited to 'src/fenv/x86_64')
-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