Re: [PATCH] Correct dir.c to compile on Solaris 9
From: Josef Weidendorfer <hidden>
Date: 2016-06-15 22:43:04
On Sunday 15 April 2007, Johannes Schindelin wrote:
On Sun, 15 Apr 2007, Shawn O. Pearce wrote:quoted
static int simple_length(const char *match) { - const char special[256] = { - [0] = 1, ['?'] = 1, - ['\\'] = 1, ['*'] = 1, - ['['] = 1 - }; int len = -1; for (;;) { unsigned char c = *match++; len++; - if (special[c]) + switch (c) { + case 0: case '?': + case '\\': case '*': + case '[': return len; + } } }You are replacing a table-based check with a switch based, which might be substantially slower (depends on how often cmp_name() is called).
Or faster. When the table gives a cache miss and has to be loaded from main memory, I am quite sure that 5 compares in a row are faster than the cache miss. Actually, with the switch, the compiler is free to implement it with a table (and gcc usually does this, probably even using a substantially smaller table). The table-based check in contrast looks like some kind of micro-optimization which makes the code IMHO more difficult to read, and which only would be justified with meassured improvements. Josef