diff options
-rw-r--r-- | ChangeLog | 3 | ||||
-rw-r--r-- | wcsmbs/wcsrchr.c | 22 |
2 files changed, 19 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog index 33ea5d5304..c633bc581f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2019-04-04 Adhemerval Zanella <adhemerval.zanella@linaro.org> + * wcsmbs/wcsrchr.c (WCSRCHR): Use loop_unroll.h to parametrize + the loop unroll. + * sysdeps/powerpc/Makefile [$(subdir) == wcsmbs] (CFLAGS-wcschr.c): New rule. * sysdeps/powerpc/power6/wcschr.c: Remove file. diff --git a/wcsmbs/wcsrchr.c b/wcsmbs/wcsrchr.c index 0d4bad0704..7679534180 100644 --- a/wcsmbs/wcsrchr.c +++ b/wcsmbs/wcsrchr.c @@ -17,6 +17,7 @@ <http://www.gnu.org/licenses/>. */ #include <wchar.h> +#include <loop_unroll.h> #ifndef WCSRCHR # define WCSRCHR wcsrchr @@ -26,12 +27,21 @@ wchar_t * WCSRCHR (const wchar_t *wcs, const wchar_t wc) { - const wchar_t *retval = NULL; + wchar_t *retval = NULL; - do - if (*wcs == wc) - retval = wcs; - while (*wcs++ != L'\0'); +#define ITERATION(index) \ + ({ \ + if (*wcs == wc) \ + retval = (wchar_t*) wcs; \ + *wcs++ != L'\0'; \ + }) - return (wchar_t *) retval; +#ifndef UNROLL_NTIMES +# define UNROLL_NTIMES 1 +#endif + + while (1) + UNROLL_REPEAT (UNROLL_NTIMES, ITERATION); + + return retval; } |