#include <switch.h>
-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);
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);