From 5d35d71cfde988c66a1fd6c2a26c17155f86949f Mon Sep 17 00:00:00 2001 From: Anthony Minessale Date: Tue, 11 Dec 2012 19:18:25 -0600 Subject: [PATCH] FS-4928 doing 100 calls I found 7 million calls to toupper, this patch replaces it with an inline optimized one I found online. Not sure it helps but maybe you can profile it again with latest. --- src/include/switch_utils.h | 13 ++++++++++++- src/switch_utils.c | 2 +- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/include/switch_utils.h b/src/include/switch_utils.h index c9e2c189c8..92618a81d5 100644 --- a/src/include/switch_utils.h +++ b/src/include/switch_utils.h @@ -40,7 +40,18 @@ #include -SWITCH_BEGIN_EXTERN_C SWITCH_DECLARE(int) switch_toupper(int c); +SWITCH_BEGIN_EXTERN_C + +/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii */ +static inline uint32_t switch_toupper(uint32_t eax) +{ + uint32_t ebx = (0x7f7f7f7ful & eax) + 0x05050505ul; + ebx = (0x7f7f7f7ful & ebx) + 0x1a1a1a1aul; + ebx = ((ebx & ~eax) >> 2 ) & 0x20202020ul; + return eax - ebx; +} + +SWITCH_DECLARE(int) old_switch_toupper(int c); SWITCH_DECLARE(int) switch_tolower(int c); SWITCH_DECLARE(int) switch_isalnum(int c); SWITCH_DECLARE(int) switch_isalpha(int c); diff --git a/src/switch_utils.c b/src/switch_utils.c index 4335b4dcd3..83b77744a3 100644 --- a/src/switch_utils.c +++ b/src/switch_utils.c @@ -2609,7 +2609,7 @@ const short _switch_C_toupper_[1 + SWITCH_CTYPE_NUM_CHARS] = { const short *_switch_toupper_tab_ = _switch_C_toupper_; -SWITCH_DECLARE(int) switch_toupper(int c) +SWITCH_DECLARE(int) old_switch_toupper(int c) { if ((unsigned int) c > 255) return (c);