diff options
-rw-r--r-- | ChangeLog | 4 | ||||
-rw-r--r-- | iconv/gconv_simple.c | 16 |
2 files changed, 11 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog index 75ec4e753c..7d43d5adb0 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,7 @@ +2007-10-11 Ulrich Drepper <drepper@redhat.com> + + * iconv/gconv_simple.c: Add some branch prediction. + 2007-10-12 Jakub Jelinek <jakub@redhat.com> * locale/programs/ld-collate.c (collate_read): If ignore_content diff --git a/iconv/gconv_simple.c b/iconv/gconv_simple.c index 343c27521f..ec8f38a962 100644 --- a/iconv/gconv_simple.c +++ b/iconv/gconv_simple.c @@ -1,5 +1,5 @@ /* Simple transformations functions. - Copyright (C) 1997-2003, 2004, 2005 Free Software Foundation, Inc. + Copyright (C) 1997-2003, 2004, 2005, 2007 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997. @@ -880,7 +880,7 @@ ucs4le_internal_loop_single (struct __gconv_step *step, { \ uint32_t wc = *((const uint32_t *) inptr); \ \ - if (wc < 0x80) \ + if (__builtin_expect (wc < 0x80, 1)) \ /* It's an one byte sequence. */ \ *outptr++ = (unsigned char) wc; \ else if (__builtin_expect (wc <= 0x7fffffff, 1)) \ @@ -940,21 +940,19 @@ ucs4le_internal_loop_single (struct __gconv_step *step, #define LOOPFCT FROM_LOOP #define BODY \ { \ - uint32_t ch; \ - uint_fast32_t cnt; \ - uint_fast32_t i; \ - \ /* Next input byte. */ \ - ch = *inptr; \ + uint32_t ch = *inptr; \ \ - if (ch < 0x80) \ + if (__builtin_expect (ch < 0x80, 1)) \ { \ /* One byte sequence. */ \ - cnt = 1; \ ++inptr; \ } \ else \ { \ + uint_fast32_t cnt; \ + uint_fast32_t i; \ + \ if (ch >= 0xc2 && ch < 0xe0) \ { \ /* We expect two bytes. The first byte cannot be 0xc0 or 0xc1, \ |