From 9cb6878e747909c7a45dd1c4dd550ac62e1f7690 Mon Sep 17 00:00:00 2001 From: Rich Felker Date: Sat, 17 Mar 2012 18:02:20 -0400 Subject: fix x86_64 fe[gs]etround, analogous to nsz's x86 changes --- src/fenv/x86_64/fenv.s | 17 +++++++++-------- 1 file 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 -- cgit v1.2.1