mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* string.c (search_nonascii): use nlz on big endian environments.
* internal.h (nlz_intpr): defined. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54859 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
aa2395b887
commit
0f0121fe1a
3 changed files with 19 additions and 0 deletions
|
@ -1,3 +1,9 @@
|
|||
Sun May 1 07:30:44 2016 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* string.c (search_nonascii): use nlz on big endian environments.
|
||||
|
||||
* internal.h (nlz_intpr): defined.
|
||||
|
||||
Sun May 1 00:03:30 2016 NARUSE, Yui <naruse@ruby-lang.org>
|
||||
|
||||
* configure.in (__builtin_ctz): check.
|
||||
|
|
|
@ -260,6 +260,15 @@ nlz_int128(uint128_t x)
|
|||
}
|
||||
#endif
|
||||
|
||||
static inline int
|
||||
nlz_intptr(uintptr_t x) {
|
||||
#if SIZEOF_VOIDP == 8
|
||||
return nlz_long_long(x);
|
||||
#elif SIZEOF_VOIDP == 4
|
||||
return nlz_int(x);
|
||||
#endif
|
||||
}
|
||||
|
||||
static inline int
|
||||
rb_popcount32(uint32_t x) {
|
||||
x = (x & 0x55555555) + (x >> 1 & 0x55555555);
|
||||
|
|
4
string.c
4
string.c
|
@ -449,7 +449,11 @@ search_nonascii(const char *p, const char *e)
|
|||
const uintptr_t *t = (const uintptr_t *)(e - (SIZEOF_VOIDP-1));
|
||||
for (;s < t; s++) {
|
||||
if (*s & NONASCII_MASK) {
|
||||
#if BYTE_ORDER == LITTLE_ENDIAN
|
||||
return (const char *)s + (ntz_intptr(*s&NONASCII_MASK)>>3);
|
||||
#else
|
||||
return (const char *)s + (nlz_intptr(*s&NONASCII_MASK)>>3);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
p = (const char *)s;
|
||||
|
|
Loading…
Reference in a new issue