Update.
authorAndreas Jaeger <aj@suse.de>
Fri, 5 Sep 2003 10:03:19 +0000 (10:03 +0000)
committerAndreas Jaeger <aj@suse.de>
Fri, 5 Sep 2003 10:03:19 +0000 (10:03 +0000)
* sysdeps/i386/bits/string.h (__memrchr): Do addition in assembler
to make it conforming C.
* sysdeps/i386/i486/bits/string.h (__memrchr): Likewise.

ChangeLog
sysdeps/i386/bits/string.h
sysdeps/i386/i486/bits/string.h

index 57311c966a3862f82044635dc6726ec5c84ebefa..8136cbe941e82d0fc3fb3c1c72f20fbcdc72167f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,5 +1,9 @@
 2003-09-05  Andreas Jaeger  <aj@suse.de>
 
+       * sysdeps/i386/bits/string.h (__memrchr): Do addition in assembler
+       to make it conforming C.
+       * sysdeps/i386/i486/bits/string.h (__memrchr): Likewise.
+
        * sysdeps/unix/sysv/linux/i386/fcntl.c (__fcntl_nocancel): Change
        prototype to use variable argument lists and get the possible one
        argument via va_arg.
index 79bd40b97786ba3b8873a39fcae791ff66a2ef9a..aa771fadae8ad12603767bc6e913bd19212d7471 100644 (file)
@@ -1,5 +1,5 @@
 /* Optimized, inlined string functions.  i386 version.
-   Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
+   Copyright (C) 1997,1998,1999,2000,2003 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -321,11 +321,12 @@ __memrchr (__const void *__s, int __c, size_t __n)
      "repne; scasb\n\t"
      "je 1f\n\t"
      "orl $-1,%0\n"
-     "1:\tcld"
+     "1:\tcld\n\t"
+     "incl %0"
      : "=D" (__res), "=&c" (__d0)
      : "a" (__c), "0" (__s + __n - 1), "1" (__n)
      : "cc");
-  return __res + 1;
+  return __res;
 }
 # ifdef __USE_GNU
 #  define memrchr(s, c, n) __memrchr (s, c, n)
index 54ff2e06e22b576826edad27d818f178f9e5fb6b..2a6aa48b5b2ae157fdc39f6e112f44672749a2f8 100644 (file)
@@ -484,7 +484,8 @@ __memrchr (__const void *__s, int __c, size_t __n)
     ("std\n\t"
      "repne; scasb\n\t"
      "cmovne %2,%0\n\t"
-     "cld"
+     "cld\n\t"
+     "incl %0"
      : "=D" (__res), "=&c" (__d0), "=&r" (__d1)
      : "a" (__c), "0" (__s + __n - 1), "1" (__n), "2" (-1),
        "m" ( *(struct { __extension__ char __x[__n]; } *)__s)
@@ -495,13 +496,14 @@ __memrchr (__const void *__s, int __c, size_t __n)
      "repne; scasb\n\t"
      "je 1f\n\t"
      "orl $-1,%0\n"
-     "1:\tcld"
+     "1:\tcld\n\t"
+     "incl %0"
      : "=D" (__res), "=&c" (__d0)
      : "a" (__c), "0" (__s + __n - 1), "1" (__n),
        "m" ( *(struct { __extension__ char __x[__n]; } *)__s)
      : "cc");
 # endif
-  return __res + 1;
+  return __res;
 }
 # ifdef __USE_GNU
 #  define memrchr(s, c, n) __memrchr ((s), (c), (n))