Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 295199
b: refs/heads/master
c: f43804b
h: refs/heads/master
i:
  295197: 56c3326
  295195: 683787b
  295191: da774bd
  295183: db5d1c2
  295167: d89f356
v: v3
  • Loading branch information
Akinobu Mita authored and Linus Torvalds committed Mar 23, 2012
1 parent f136974 commit 7d43e21
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 5 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: a403d930c58eb8448f81fa90c125ac36dc8ef89d
refs/heads/master: f43804bf5f9ae1e60077c5f22aee5fdfe4f09837
20 changes: 16 additions & 4 deletions trunk/lib/string.c
Original file line number Diff line number Diff line change
Expand Up @@ -785,12 +785,24 @@ void *memchr_inv(const void *start, int c, size_t bytes)
if (bytes <= 16)
return check_bytes8(start, value, bytes);

value64 = value | value << 8 | value << 16 | value << 24;
value64 = (value64 & 0xffffffff) | value64 << 32;
prefix = 8 - ((unsigned long)start) % 8;
value64 = value;
#if defined(ARCH_HAS_FAST_MULTIPLIER) && BITS_PER_LONG == 64
value64 *= 0x0101010101010101;
#elif defined(ARCH_HAS_FAST_MULTIPLIER)
value64 *= 0x01010101;
value64 |= value64 << 32;
#else
value64 |= value64 << 8;
value64 |= value64 << 16;
value64 |= value64 << 32;
#endif

prefix = (unsigned long)start % 8;
if (prefix) {
u8 *r = check_bytes8(start, value, prefix);
u8 *r;

prefix = 8 - prefix;
r = check_bytes8(start, value, prefix);
if (r)
return r;
start += prefix;
Expand Down

0 comments on commit 7d43e21

Please sign in to comment.