From 3dd0c4e20eea1b3169417484c4ad10bef0990598 Mon Sep 17 00:00:00 2001 From: Willy Tarreau Date: Fri, 26 Oct 2012 00:58:22 +0200 Subject: [PATCH] OPTIM: tools: inline hex2i() This tiny function was not inlined because initially not much used. However it's been used un the chunk parser for a while and it became one of the most CPU-cycle eater there. By inlining it, the chunk parser speed was increased by 74 %. We're almost 3 times faster than original with just the last 4 commits. --- include/common/standard.h | 14 ++++++++++++-- src/standard.c | 15 --------------- 2 files changed, 12 insertions(+), 17 deletions(-) diff --git a/include/common/standard.h b/include/common/standard.h index dbb219a09..e795df717 100644 --- a/include/common/standard.h +++ b/include/common/standard.h @@ -180,9 +180,19 @@ extern int ishex(char s); /* * Return integer equivalent of character for a hex digit (0-9, a-f, A-F), - * otherwise -1. + * otherwise -1. This compact form helps gcc produce efficient code. */ -extern int hex2i(int c); +static inline int hex2i(int c) +{ + if ((unsigned char)(c -= '0') > 9) { + if ((unsigned char)(c -= 'A' - '0') > 5 && + (unsigned char)(c -= 'a' - 'A') > 5) + c = -11; + c += 10; + } + return c; +} + /* * Checks for invalid characters. Valid chars are [A-Za-z0-9_:.-]. If an diff --git a/src/standard.c b/src/standard.c index 76031e956..c26d7a035 100644 --- a/src/standard.c +++ b/src/standard.c @@ -483,21 +483,6 @@ int ishex(char s) return 0; } -/* - * Return integer equivalent of character for a hex digit (0-9, a-f, A-F), - * otherwise -1. This compact form helps gcc produce efficient code. - */ -int hex2i(int c) -{ - if ((unsigned char)(c -= '0') > 9) { - if ((unsigned char)(c -= 'A' - '0') > 5 && - (unsigned char)(c -= 'a' - 'A') > 5) - c = -11; - c += 10; - } - return c; -} - /* * Checks for invalid characters. Valid chars are [A-Za-z0-9_:.-]. If an * invalid character is found, a pointer to it is returned. If everything is