From 73893ffbada36599fb6ec2eb489b6a7decf0c248 Mon Sep 17 00:00:00 2001 From: Norihiro Tanaka Date: Thu, 3 Apr 2014 22:57:09 +0900 Subject: grep: speed-up by using memchr() in Boyer-Moore searching memchr() of glibc is faster than seeking by delta1 on some platforms. When there is no chance to match for a while, use it on them. * src/kwset.c (bmexec): Use memchr() in Boyer-Moore searching. --- src/kwset.c | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'src') diff --git a/src/kwset.c b/src/kwset.c index 69b0a55e..78fb0b21 100644 --- a/src/kwset.c +++ b/src/kwset.c @@ -582,8 +582,27 @@ bmexec (kwset_t kwset, char const *text, size_t size) d = d1[U(tp[-1])], tp += d; if (d == 0) goto found; - d = d1[U(tp[-1])], tp += d; - d = d1[U(tp[-1])], tp += d; + /* memchar() of glibc is faster than seeking by delta1 on + some platforms. When there is no chance to match for a + while, use it on them. */ +#if defined(__GLIBC__) && (defined(__i386__) || defined(__x86_64__)) + if (!trans) + { + tp = memchr (tp - 1, gc1, size + text - tp + 1); + if (tp) + { + ++tp; + goto found; + } + else + return -1; + } + else +#endif + { + d = d1[U(tp[-1])], tp += d; + d = d1[U(tp[-1])], tp += d; + } } break; found: -- cgit v1.2.1