mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-03-30 02:10:39 +00:00
fix 64 bit upper/lower
This commit is contained in:
parent
11a7f42459
commit
8e892abdef
@ -47,10 +47,10 @@ SWITCH_BEGIN_EXTERN_C
|
|||||||
*/
|
*/
|
||||||
static inline uint32_t switch_toupper(uint32_t eax)
|
static inline uint32_t switch_toupper(uint32_t eax)
|
||||||
{
|
{
|
||||||
uint32_t ebx = (0x7f7f7f7ful & eax) + 0x05050505ul;
|
uint32_t ebx = (0x7f7f7f7ful & eax) + 0x05050505ul;
|
||||||
ebx = (0x7f7f7f7ful & ebx) + 0x1a1a1a1aul;
|
ebx = (0x7f7f7f7ful & ebx) + 0x1a1a1a1aul;
|
||||||
ebx = ((ebx & ~eax) >> 2 ) & 0x20202020ul;
|
ebx = ((ebx & ~eax) >> 2 ) & 0x20202020ul;
|
||||||
return eax - ebx;
|
return eax - ebx;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii
|
/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii
|
||||||
@ -64,8 +64,31 @@ static inline uint32_t switch_tolower(uint32_t eax)
|
|||||||
return eax + ebx;
|
return eax + ebx;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef FS_64BIT
|
#ifdef FS_64BIT
|
||||||
|
|
||||||
|
/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii
|
||||||
|
http://www.azillionmonkeys.com/qed/asmexample.html
|
||||||
|
*/
|
||||||
|
static inline uint64_t switch_toupper64(uint64_t eax)
|
||||||
|
{
|
||||||
|
uint64_t ebx = (0x7f7f7f7f7f7f7f7full & eax) + 0x0505050505050505ull;
|
||||||
|
ebx = (0x7f7f7f7f7f7f7f7full & ebx) + 0x1a1a1a1a1a1a1a1aull;
|
||||||
|
ebx = ((ebx & ~eax) >> 2 ) & 0x2020202020202020ull;
|
||||||
|
return eax - ebx;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* https://code.google.com/p/stringencoders/wiki/PerformanceAscii
|
||||||
|
http://www.azillionmonkeys.com/qed/asmexample.html
|
||||||
|
*/
|
||||||
|
static inline uint64_t switch_tolower64(uint64_t eax)
|
||||||
|
{
|
||||||
|
uint64_t ebx = (0x7f7f7f7f7f7f7f7full & eax) + 0x2525252525252525ull;
|
||||||
|
ebx = (0x7f7f7f7f7f7f7f7full & ebx) + 0x1a1a1a1a1a1a1a1aull;
|
||||||
|
ebx = ((ebx & ~eax) >> 2) & 0x2020202020202020ull;
|
||||||
|
return eax + ebx;
|
||||||
|
}
|
||||||
|
|
||||||
static inline void switch_toupper_max(char *s)
|
static inline void switch_toupper_max(char *s)
|
||||||
{
|
{
|
||||||
uint64_t *b,*p;
|
uint64_t *b,*p;
|
||||||
@ -78,7 +101,7 @@ static inline void switch_toupper_max(char *s)
|
|||||||
|
|
||||||
while (l > 8) {
|
while (l > 8) {
|
||||||
b = p;
|
b = p;
|
||||||
*b = (uint32_t) switch_toupper(*b);
|
*b = (uint64_t) switch_toupper64(*b);
|
||||||
b++;
|
b++;
|
||||||
p++;
|
p++;
|
||||||
l -= 8;
|
l -= 8;
|
||||||
@ -106,7 +129,7 @@ static inline void switch_tolower_max(char *s)
|
|||||||
|
|
||||||
while (l > 8) {
|
while (l > 8) {
|
||||||
b = p;
|
b = p;
|
||||||
*b = (uint32_t) switch_tolower(*b);
|
*b = (uint64_t) switch_tolower64(*b);
|
||||||
b++;
|
b++;
|
||||||
p++;
|
p++;
|
||||||
l -= 8;
|
l -= 8;
|
||||||
@ -182,6 +205,8 @@ static inline void switch_tolower_max(char *s)
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SWITCH_DECLARE(int) old_switch_toupper(int c);
|
SWITCH_DECLARE(int) old_switch_toupper(int c);
|
||||||
SWITCH_DECLARE(int) old_switch_tolower(int c);
|
SWITCH_DECLARE(int) old_switch_tolower(int c);
|
||||||
SWITCH_DECLARE(int) switch_isalnum(int c);
|
SWITCH_DECLARE(int) switch_isalnum(int c);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user