summaryrefslogtreecommitdiff
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.bz2
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