aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodney W. Grimes <rgrimes@FreeBSD.org>1994-05-27 11:00:56 +0000
committerRodney W. Grimes <rgrimes@FreeBSD.org>1994-05-27 11:00:56 +0000
commit8e101982f307d9198a4d1f063e8c307ab65ebe20 (patch)
tree92070cf1fc577572a2c4371a5914c54037082d4c
parent1cb16b68b36df83d417caa9e545389116d17f20b (diff)
downloadsrc-8e101982f307d9198a4d1f063e8c307ab65ebe20.tar.gz
src-8e101982f307d9198a4d1f063e8c307ab65ebe20.zip
Pull in GNU2 fix for this from FreeBSD, allows ldexp.c to compile with
gcc2.x
Notes
Notes: svn path=/head/; revision=1585
-rw-r--r--lib/libc/amd64/gen/ldexp.c10
-rw-r--r--lib/libc/i386/gen/ldexp.c10
2 files changed, 20 insertions, 0 deletions
diff --git a/lib/libc/amd64/gen/ldexp.c b/lib/libc/amd64/gen/ldexp.c
index 7046c4e17e6c..be533c5c7c9e 100644
--- a/lib/libc/amd64/gen/ldexp.c
+++ b/lib/libc/amd64/gen/ldexp.c
@@ -55,8 +55,18 @@ ldexp (double value, int exp)
{
double temp, texp, temp2;
texp = exp;
+#ifdef __GNUC__
+#if __GNUC__ >= 2
+ asm ("fscale "
+ : "=u" (temp2), "=t" (temp)
+ : "0" (texp), "1" (value));
+#else
asm ("fscale ; fxch %%st(1) ; fstp%L1 %1 "
: "=f" (temp), "=0" (temp2)
: "0" (texp), "f" (value));
+#endif
+#else
+error unknown asm
+#endif
return (temp);
}
diff --git a/lib/libc/i386/gen/ldexp.c b/lib/libc/i386/gen/ldexp.c
index 7046c4e17e6c..be533c5c7c9e 100644
--- a/lib/libc/i386/gen/ldexp.c
+++ b/lib/libc/i386/gen/ldexp.c
@@ -55,8 +55,18 @@ ldexp (double value, int exp)
{
double temp, texp, temp2;
texp = exp;
+#ifdef __GNUC__
+#if __GNUC__ >= 2
+ asm ("fscale "
+ : "=u" (temp2), "=t" (temp)
+ : "0" (texp), "1" (value));
+#else
asm ("fscale ; fxch %%st(1) ; fstp%L1 %1 "
: "=f" (temp), "=0" (temp2)
: "0" (texp), "f" (value));
+#endif
+#else
+error unknown asm
+#endif
return (temp);
}