about summary refs log tree commit diff
path: root/src/math/x86_64/remainderl.s
diff options
context:
space:
mode:
authorSzabolcs Nagy <nsz@port70.net>2014-11-05 21:40:29 +0100
committerSzabolcs Nagy <nsz@port70.net>2014-11-05 21:40:29 +0100
commita732e80d33b4fd6f510f7cec4f5573ef5d89bc4e (patch)
tree66494d38f5374808c3816c83395d5f5850abb607 /src/math/x86_64/remainderl.s
parentde2b9c21d94e0b76b629fec0060d043f535eef01 (diff)
downloadmusl-a732e80d33b4fd6f510f7cec4f5573ef5d89bc4e.tar.gz
musl-a732e80d33b4fd6f510f7cec4f5573ef5d89bc4e.tar.xz
musl-a732e80d33b4fd6f510f7cec4f5573ef5d89bc4e.zip
math: fix x86_64 and x32 asm not to use sahf instruction
Some early x86_64 cpus (released before 2006) did not support sahf/lahf
instructions so they should be avoided (intel manual says they are only
supported if CPUID.80000001H:ECX.LAHF-SAHF[bit 0] = 1).

The workaround simplifies exp2l and expm1l because fucomip can be
used instead of the fucomp;fnstsw;sahf sequence copied from i386.

In fmodl and remainderl sahf is replaced by a simple bit test.
Diffstat (limited to 'src/math/x86_64/remainderl.s')
-rw-r--r--src/math/x86_64/remainderl.s4
1 files changed, 2 insertions, 2 deletions
diff --git a/src/math/x86_64/remainderl.s b/src/math/x86_64/remainderl.s
index 75c12374..2c337cf5 100644
--- a/src/math/x86_64/remainderl.s
+++ b/src/math/x86_64/remainderl.s
@@ -5,7 +5,7 @@ remainderl:
 	fldt 8(%rsp)
 1:	fprem1
 	fstsw %ax
-	sahf
-	jp 1b
+	testb $4,%ah
+	jnz 1b
 	fstp %st(1)
 	ret