diff options
-rw-r--r-- | ChangeLog | 5 | ||||
-rw-r--r-- | FAQ | 10 | ||||
-rw-r--r-- | sysdeps/i386/fpu/bits/mathinline.h | 49 |
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) |