浏览代码

fix x86_64 fe[gs]etround, analogous to nsz's x86 changes

Rich Felker 13 年之前
父节点
当前提交
9cb6878e74
共有 1 个文件被更改,包括 9 次插入8 次删除
  1. 9 8
      src/fenv/x86_64/fenv.s

+ 9 - 8
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