about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog5
-rw-r--r--FAQ10
-rw-r--r--sysdeps/i386/fpu/bits/mathinline.h49
3 files changed, 63 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 3f67b989c7..23d30de116 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+1998-11-23  Ulrich Drepper  <drepper@cygnus.com>
+
+	* sysdeps/i386/fpu/bits/mathinline.h: Add optimizations for lrint
+	and llrint.
+
 1998-11-21  Andreas Jaeger  <aj@arthur.rhein-neckar.de>
 
 	* sysdeps/unix/sysv/linux/netinet/ip_fw.h: Removed.  There are too
diff --git a/FAQ b/FAQ
index 6491b389ad..a3fdddee52 100644
--- a/FAQ
+++ b/FAQ
@@ -126,6 +126,7 @@ please let me know.
 3.14.	The pow() inline function I get when including <math.h> is broken.
 	I get segmentation faults when I run the program.
 3.15.	The sys/sem.h file lacks the definition of `union semun'.
+3.16.	Why has <netinet/ip_fw.h> disappeared?
 
 4. Miscellaneous
 
@@ -1275,6 +1276,15 @@ versions defined this but it was an error since it does not make much sense
 when thinking about it.  The standards describing the System V IPC functions
 define it this way and therefore programs must be adopted.
 
+
+3.16.	Why has <netinet/ip_fw.h> disappeared?
+
+{AJ} The corresponding Linux kernel data structures and constants are
+totally different in Linux 2.0 and Linux 2.1.  This situation has to be
+taken care in user programs using the firewall structures and therefore
+those programs (ipfw is AFAIK the only one) should deal with this problem
+themselves.
+
 
 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 
 
diff --git a/sysdeps/i386/fpu/bits/mathinline.h b/sysdeps/i386/fpu/bits/mathinline.h
index 91dce771ab..463d481ce7 100644
--- a/sysdeps/i386/fpu/bits/mathinline.h
+++ b/sysdeps/i386/fpu/bits/mathinline.h
@@ -565,6 +565,52 @@ __inline_mathcode3 (fma, __x, __y, __z, return (__x * __y) + __z)
 
 __inline_mathop(rint, "frndint")
 
+#define __lrint_code \
+  long int __lrintres;							      \
+  __asm__ __volatile__							      \
+    ("fistpl %0"							      \
+     : "=m" (__lrintres) : "t" (__x) : "st");				      \
+  return __lrintres
+__MATH_INLINE long int
+lrintf (float __x)
+{
+  __lrint_code;
+}
+__MATH_INLINE long int
+lrint (double __x)
+{
+  __lrint_code;
+}
+__MATH_INLINE long int
+lrintl (long double __x)
+{
+  __lrint_code;
+}
+#undef __lrint_code
+
+#define __llrint_code \
+  long long int __llrintres;						      \
+  __asm__ __volatile__							      \
+    ("fistpll %0"							      \
+     : "=m" (__llrintres) : "t" (__x) : "st");				      \
+  return __llrintres
+__MATH_INLINE long long int
+llrintf (float __x)
+{
+  __llrint_code;
+}
+__MATH_INLINE long long int
+llrint (double __x)
+{
+  __llrint_code;
+}
+__MATH_INLINE long long int
+llrintl (long double __x)
+{
+  __llrint_code;
+}
+#undef __llrint_code
+
 #endif
 
 
@@ -572,12 +618,13 @@ __inline_mathop(rint, "frndint")
 
 __inline_mathcode2 (drem, __x, __y, \
   register double __value;						      \
+  register int __clobbered;						      \
   __asm __volatile__							      \
     ("1:	fprem1\n\t"						      \
      "fstsw	%%ax\n\t"						      \
      "sahf\n\t"								      \
      "jp	1b"							      \
-     : "=t" (__value) : "0" (__x), "u" (__y) : "ax", "cc");		      \
+     : "=t" (__value), "=&a" (__clobbered) : "0" (__x), "u" (__y) : "cc");    \
   return __value)