* iconvdata/big5hkscs.c: Add __builtin_expect in many places.
	* iconvdata/big5.c: Likewise.
	* iconvdata/ansi_x3.110.c: Likewise.
	* iconvdata/8bit-generic.c: Likewise.
	* iconvdata/8bit-gap.c: Likewise.
	* iconv/loop.c: Likewise.
	* iconv/gconv_db.c: Likewise.
	* iconv/gconv_dl.c: Likewise.
	* iconv/gconv_simple.c: Likewise.
	* iconv/skeleton.c: Likewise.
This commit is contained in:
Ulrich Drepper 2000-06-06 06:49:00 +00:00
parent 365afefc6b
commit 5ea1a82def
8 changed files with 53 additions and 35 deletions

View File

@ -1,8 +1,15 @@
2000-06-05 Ulrich Drepper <drepper@redhat.com>
* iconv/gconv_dl.c: Add __builtin_expect in many places.
* iconv/skeleton.c: Add more __builtin_expect.
* iconv/gconv_simple.c: Add __builtin_expect in many places.
* iconvdata/big5hkscs.c: Add __builtin_expect in many places.
* iconvdata/big5.c: Likewise.
* iconvdata/ansi_x3.110.c: Likewise.
* iconvdata/8bit-generic.c: Likewise.
* iconvdata/8bit-gap.c: Likewise.
* iconv/loop.c: Likewise.
* iconv/gconv_db.c: Likewise.
* iconv/gconv_dl.c: Likewise.
* iconv/gconv_simple.c: Likewise.
* iconv/skeleton.c: Likewise.
* iconv/gconv.h (__GCONV_IS_LAST, __GCONV_IGNORE_ERRORS): Define.
(struct __gconv_step_data): Rename __is_last to __flags.

View File

@ -1,5 +1,5 @@
/* Provide access to the collection of available transformation modules.
Copyright (C) 1997, 1998, 1999 Free Software Foundation, Inc.
Copyright (C) 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1997.
@ -239,7 +239,7 @@ gen_steps (struct derivation_step *best, const char *toset,
status = DL_CALL_FCT (result[step_cnt].__init_fct,
(&result[step_cnt]));
if (status != __GCONV_OK)
if (__builtin_expect (status, __GCONV_OK) != __GCONV_OK)
{
failed = 1;
/* Make sure we unload this modules. */
@ -251,7 +251,7 @@ gen_steps (struct derivation_step *best, const char *toset,
current = current->last;
}
if (failed != 0)
if (__builtin_expect (failed, 0) != 0)
{
/* Something went wrong while initializing the modules. */
while (++step_cnt < *nsteps)
@ -670,7 +670,7 @@ __gconv_find_transform (const char *toset, const char *fromset,
toset_expand = found != NULL ? (*found)->toname : NULL;
}
if ((flags & GCONV_AVOID_NOCONV)
if (__builtin_expect (flags & GCONV_AVOID_NOCONV, 0)
/* We are not supposed to create a pseudo transformation (means
copying) when the input and output character set are the same. */
&& (strcmp (toset, fromset) == 0

View File

@ -232,14 +232,17 @@ FCTNAME (LOOPFCT) (const unsigned char **inptrp, const unsigned char *inend,
/* `if' cases for MIN_NEEDED_OUTPUT ==/!= 1 is made to help the
compiler generating better code. It will optimized away
since MIN_NEEDED_OUTPUT is always a constant. */
if ((MIN_NEEDED_OUTPUT != 1 && outptr + MIN_NEEDED_OUTPUT > outend)
|| (MIN_NEEDED_OUTPUT == 1 && outptr >= outend))
if ((MIN_NEEDED_OUTPUT != 1
&& __builtin_expect (outptr + MIN_NEEDED_OUTPUT > outend, 0))
|| (MIN_NEEDED_OUTPUT == 1
&& __builtin_expect (outptr >= outend, 0)))
{
/* Overflow in the output buffer. */
result = __GCONV_FULL_OUTPUT;
break;
}
if (MIN_NEEDED_INPUT > 1 && inptr + MIN_NEEDED_INPUT > inend)
if (MIN_NEEDED_INPUT > 1
&& __builtin_expect (inptr + MIN_NEEDED_INPUT > inend, 0))
{
/* We don't have enough input for another complete input
character. */
@ -356,7 +359,7 @@ SINGLE(LOOPFCT) (const unsigned char **inptrp, const unsigned char *inend,
bytes from the state and at least one more, or the character is still
incomplete, or we have some other error (like illegal input character,
no space in output buffer). */
if (inptr != bytebuf)
if (__builtin_expect (inptr != bytebuf, 1))
{
/* We found a new character. */
assert (inptr - bytebuf > (state->__count & 7));

View File

@ -48,7 +48,7 @@ struct gap
{ \
uint32_t ch = to_ucs4[*inptr]; \
\
if (HAS_HOLES && ch == L'\0' && *inptr != '\0') \
if (HAS_HOLES && __builtin_expect (ch, L'\1') == L'\0' && *inptr != '\0') \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
@ -80,7 +80,7 @@ struct gap
uint32_t ch = get32 (inptr); \
unsigned char res; \
\
if (ch >= 0xffff) \
if (__builtin_expect (ch, 0) >= 0xffff) \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
@ -95,7 +95,7 @@ struct gap
} \
while (ch > rp->end) \
++rp; \
if (ch < rp->start) \
if (__builtin_expect (ch < rp->start, 0)) \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
@ -110,7 +110,7 @@ struct gap
} \
\
res = from_ucs4[ch + rp->idx]; \
if (ch != 0 && res == '\0') \
if (__builtin_expect (res, '\1') == '\0' && ch != 0) \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \

View File

@ -34,7 +34,7 @@
{ \
uint32_t ch = to_ucs4[*inptr]; \
\
if (HAS_HOLES && ch == L'\0' && *inptr != '\0') \
if (HAS_HOLES && __builtin_expect (ch, L'\1') == L'\0' && *inptr != '\0') \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
@ -61,8 +61,8 @@
{ \
uint32_t ch = get32 (inptr); \
\
if (ch >= sizeof (from_ucs4) / sizeof (from_ucs4[0]) \
|| (ch != 0 && from_ucs4[ch] == '\0')) \
if (__builtin_expect (ch >= sizeof (from_ucs4) / sizeof (from_ucs4[0]), 0)\
|| (__builtin_expect (from_ucs4[ch], '\1') == '\0' && ch != 0)) \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \

View File

@ -401,7 +401,7 @@ static const char from_ucs4[][2] =
uint32_t ch = *inptr; \
int incr; \
\
if (ch >= 0xc1 && ch <= 0xcf) \
if (__builtin_expect (ch, 0x00) >= 0xc1 && ch <= 0xcf) \
{ \
/* Composed character. First test whether the next character \
is also available. */ \
@ -416,7 +416,8 @@ static const char from_ucs4[][2] =
\
ch2 = inptr[1]; \
\
if (ch2 < 0x20 || ch2 >= 0x80) \
if (__builtin_expect (ch2, 0x20) < 0x20 \
|| __builtin_expect (ch2, 0x7f) >= 0x80) \
{ \
/* This is illegal. */ \
if (! ignore_errors_p ()) \
@ -440,7 +441,7 @@ static const char from_ucs4[][2] =
incr = 1; \
} \
\
if (ch == 0 && *inptr != '\0') \
if (__builtin_expect (ch, 1) == 0 && *inptr != '\0') \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
@ -471,7 +472,8 @@ static const char from_ucs4[][2] =
uint32_t ch = get32 (inptr); \
const char *cp; \
\
if (ch >= sizeof (from_ucs4) / sizeof (from_ucs4[0])) \
if (__builtin_expect (ch, 0) \
>= sizeof (from_ucs4) / sizeof (from_ucs4[0])) \
{ \
if (ch == 0x2c7) \
cp = "\xcf\x20"; \
@ -536,7 +538,7 @@ static const char from_ucs4[][2] =
tmp[1] = '\0'; \
cp = tmp; \
} \
else if (ch == 0x266a) \
else if (__builtin_expect (ch, 0x266a) == 0x266a) \
cp = "\xd5"; \
else \
{ \
@ -556,7 +558,7 @@ static const char from_ucs4[][2] =
{ \
cp = from_ucs4[ch]; \
\
if (cp[0] == '\0' && ch != 0) \
if (__builtin_expect (cp[0], '\1') == '\0' && ch != 0) \
{ \
/* Illegal characters. */ \
if (! ignore_errors_p ()) \
@ -575,7 +577,7 @@ static const char from_ucs4[][2] =
/* Now test for a possible second byte and write this if possible. */ \
if (cp[1] != '\0') \
{ \
if (NEED_LENGTH_TEST && outptr >= outend) \
if (NEED_LENGTH_TEST && __builtin_expect (outptr >= outend, 0)) \
{ \
/* The result does not fit into the buffer. */ \
--outptr; \

View File

@ -8450,7 +8450,8 @@ static const char from_ucs4_tab13[][2] =
/* See whether the second byte is in the correct range. */ \
if (ch2 >= 0x40 && ch2 <= 0x7e) \
idx += ch2 - 0x40; \
else if (ch2 >= 0xa1 && ch2 <= 0xfe) \
else if (__builtin_expect (ch2, 0xa1) >= 0xa1 \
&& __builtin_expect (ch2, 0xa1) <= 0xfe) \
idx += 0x3f + (ch2 - 0xa1); \
else \
{ \
@ -8470,7 +8471,7 @@ static const char from_ucs4_tab13[][2] =
ch = big5_to_ucs[idx]; \
\
/* Is this character defined? */ \
if (ch == 0 && *inptr != '\0') \
if (__builtin_expect (ch, 1) == 0 && *inptr != '\0') \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
@ -8506,7 +8507,8 @@ static const char from_ucs4_tab13[][2] =
char buf[2]; \
const char *cp; \
\
if (ch >= sizeof (from_ucs4_tab1) / sizeof (from_ucs4_tab1[0])) \
if (__builtin_expect (ch, 0) \
>= sizeof (from_ucs4_tab1) / sizeof (from_ucs4_tab1[0])) \
switch (ch) \
{ \
case 0x2c7 ... 0x2d9: \
@ -8578,7 +8580,7 @@ static const char from_ucs4_tab13[][2] =
else \
cp = from_ucs4_tab1[ch]; \
\
if (cp[0] == '\0' && ch != 0) \
if (__builtin_expect (cp[0], '\1') == '\0' && ch != 0) \
{ \
/* Illegal character. */ \
if (! ignore_errors_p ()) \
@ -8592,7 +8594,8 @@ static const char from_ucs4_tab13[][2] =
else \
{ \
/* See whether there is enough room for the second byte we write. */ \
if (NEED_LENGTH_TEST && cp[1] != '\0' && outptr + 1 >= outend) \
if (NEED_LENGTH_TEST && __builtin_expect (cp[1], '\1') != '\0' \
&& __builtin_expect (outptr + 1 >= outend, 0)) \
{ \
/* We have not enough room. */ \
result = __GCONV_FULL_OUTPUT; \

View File

@ -12604,7 +12604,8 @@ static const char from_ucs4_tab14[][2] =
/* See whether the second byte is in the correct range. */ \
if (ch2 >= 0x40 && ch2 <= 0x7e) \
idx += ch2 - 0x40; \
else if (ch2 >= 0xa1 && ch2 <= 0xfe) \
else if (__builtin_expect (ch2, 0xa1) >= 0xa1 \
&& __builtin_expect (ch2, 0xa1) <= 0xfe) \
idx += 0x3f + (ch2 - 0xa1); \
else \
{ \
@ -12624,7 +12625,7 @@ static const char from_ucs4_tab14[][2] =
ch = big5_to_ucs[idx]; \
\
/* Is this character defined? */ \
if (ch == 0 && *inptr != '\0') \
if (__builtin_expect (ch, 1) == 0 && *inptr != '\0') \
{ \
/* This is an illegal character. */ \
if (! ignore_errors_p ()) \
@ -12660,7 +12661,8 @@ static const char from_ucs4_tab14[][2] =
char buf[2]; \
const char *cp; \
\
if (ch >= sizeof (from_ucs4_tab1) / sizeof (from_ucs4_tab1[0])) \
if (__builtin_expect (ch, 0) \
>= sizeof (from_ucs4_tab1) / sizeof (from_ucs4_tab1[0])) \
switch (ch) \
{ \
case 0x2c7 ... 0x2d9: \
@ -12735,7 +12737,7 @@ static const char from_ucs4_tab14[][2] =
else \
cp = from_ucs4_tab1[ch]; \
\
if (cp[0] == '\0' && ch != 0) \
if (__builtin_expect (cp[0], '\1') == '\0' && ch != 0) \
{ \
/* Illegal character. */ \
if (! ignore_errors_p ()) \
@ -12749,7 +12751,8 @@ static const char from_ucs4_tab14[][2] =
else \
{ \
/* See whether there is enough room for the second byte we write. */ \
if (NEED_LENGTH_TEST && cp[1] != '\0' && outptr + 1 >= outend) \
if (NEED_LENGTH_TEST && __builtin_expect (cp[1], '\1') != '\0' \
&& __builtin_expect (outptr + 1 >= outend, 0)) \
{ \
/* We have not enough room. */ \
result = __GCONV_FULL_OUTPUT; \