Thread (4 messages) flat view 4 messages, 4 authors, 2016-06-15

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
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help