diff options
author | Florian Weimer <fweimer@redhat.com> | 2015-05-21 15:48:46 +0100 |
---|---|---|
committer | Florian Weimer <fweimer@redhat.com> | 2015-05-21 16:48:46 +0200 |
commit | 0f87de79e935b2f8bcc2b90ab750a358c26f6715 (patch) | |
tree | 1d41b029961e440b0aa128e81fb14e499118783e /stdio-common | |
parent | f8194fa6f991456bd2cf79f2cdfbec7b497eb342 (diff) | |
download | glibc-0f87de79e935b2f8bcc2b90ab750a358c26f6715.zip glibc-0f87de79e935b2f8bcc2b90ab750a358c26f6715.tar.gz glibc-0f87de79e935b2f8bcc2b90ab750a358c26f6715.tar.bz2 |
vfprintf: Remove label name switching for the jump table
Different labels are no longer needed because the tables are now in
separate functions.
Diffstat (limited to 'stdio-common')
-rw-r--r-- | stdio-common/vfprintf.c | 21 |
1 files changed, 4 insertions, 17 deletions
diff --git a/stdio-common/vfprintf.c b/stdio-common/vfprintf.c index 4753cbf..0592e70 100644 --- a/stdio-common/vfprintf.c +++ b/stdio-common/vfprintf.c @@ -233,9 +233,12 @@ static const uint8_t jump_table[] = #define NOT_IN_JUMP_RANGE(Ch) ((Ch) < L_(' ') || (Ch) > L_('z')) #define CHAR_CLASS(Ch) (jump_table[(INT_T) (Ch) - L_(' ')]) +#define LABEL(Name) do_##Name #ifdef SHARED /* 'int' is enough and it saves some space on 64 bit systems. */ # define JUMP_TABLE_TYPE const int +# define JUMP_TABLE_BASE_LABEL do_form_unknown +# define REF(Name) &&do_##Name - &&JUMP_TABLE_BASE_LABEL # define JUMP(ChExpr, table) \ do \ { \ @@ -250,6 +253,7 @@ static const uint8_t jump_table[] = while (0) #else # define JUMP_TABLE_TYPE const void *const +# define REF(Name) &&do_##Name # define JUMP(ChExpr, table) \ do \ { \ @@ -1328,13 +1332,6 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap) /* Process whole format string. */ do { -#ifdef SHARED -# define JUMP_TABLE_BASE_LABEL do_form_unknown -# define REF(Name) (&&do_##Name - &&JUMP_TABLE_BASE_LABEL) -#else -# define REF(Name) &&do_##Name -#endif -#define LABEL(Name) do_##Name STEP0_3_TABLE; STEP4_TABLE; @@ -1928,16 +1925,6 @@ printf_positional (_IO_FILE *s, const CHAR_T *format, int readonly_format, /* Now walk through all format specifiers and process them. */ for (; (size_t) nspecs_done < nspecs; ++nspecs_done) { -#undef REF -#ifdef SHARED -# undef JUMP_TABLE_BASE_LABEL -# define JUMP_TABLE_BASE_LABEL do2_form_unknown -# define REF(Name) (&&do2_##Name - &&JUMP_TABLE_BASE_LABEL) -#else -# define REF(Name) &&do2_##Name -#endif -#undef LABEL -#define LABEL(Name) do2_##Name STEP4_TABLE; int is_negative; |