mirror of
https://sourceware.org/git/glibc.git
synced 2025-07-30 22:43:12 +03:00
vfprintf: Remove label name switching for the jump table
Different labels are no longer needed because the tables are now in separate functions.
This commit is contained in:
@ -1,3 +1,8 @@
|
|||||||
|
2015-05-21 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
|
* stdio-common/vfprintf.c (LABEL, JUMP_TABLE_BASE_LABEL, REF):
|
||||||
|
Adjust jump table label generation macros.
|
||||||
|
|
||||||
2015-05-21 Florian Weimer <fweimer@redhat.com>
|
2015-05-21 Florian Weimer <fweimer@redhat.com>
|
||||||
|
|
||||||
* stdio-common/vfprintf.c (vfprintf): Move local variables
|
* stdio-common/vfprintf.c (vfprintf): Move local variables
|
||||||
|
@ -233,9 +233,12 @@ static const uint8_t jump_table[] =
|
|||||||
|
|
||||||
#define NOT_IN_JUMP_RANGE(Ch) ((Ch) < L_(' ') || (Ch) > L_('z'))
|
#define NOT_IN_JUMP_RANGE(Ch) ((Ch) < L_(' ') || (Ch) > L_('z'))
|
||||||
#define CHAR_CLASS(Ch) (jump_table[(INT_T) (Ch) - L_(' ')])
|
#define CHAR_CLASS(Ch) (jump_table[(INT_T) (Ch) - L_(' ')])
|
||||||
|
#define LABEL(Name) do_##Name
|
||||||
#ifdef SHARED
|
#ifdef SHARED
|
||||||
/* 'int' is enough and it saves some space on 64 bit systems. */
|
/* 'int' is enough and it saves some space on 64 bit systems. */
|
||||||
# define JUMP_TABLE_TYPE const int
|
# 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) \
|
# define JUMP(ChExpr, table) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
@ -250,6 +253,7 @@ static const uint8_t jump_table[] =
|
|||||||
while (0)
|
while (0)
|
||||||
#else
|
#else
|
||||||
# define JUMP_TABLE_TYPE const void *const
|
# define JUMP_TABLE_TYPE const void *const
|
||||||
|
# define REF(Name) &&do_##Name
|
||||||
# define JUMP(ChExpr, table) \
|
# define JUMP(ChExpr, table) \
|
||||||
do \
|
do \
|
||||||
{ \
|
{ \
|
||||||
@ -1328,13 +1332,6 @@ vfprintf (FILE *s, const CHAR_T *format, va_list ap)
|
|||||||
/* Process whole format string. */
|
/* Process whole format string. */
|
||||||
do
|
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;
|
STEP0_3_TABLE;
|
||||||
STEP4_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. */
|
/* Now walk through all format specifiers and process them. */
|
||||||
for (; (size_t) nspecs_done < nspecs; ++nspecs_done)
|
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;
|
STEP4_TABLE;
|
||||||
|
|
||||||
int is_negative;
|
int is_negative;
|
||||||
|
Reference in New Issue
Block a user