Re: [mpm@selenic.com: Re: buggy ia64_fls() ? (was Re: /dev/random problem on 2.6.12-rc1)]

From: Grant Grundler <iod00d_at_hp.com>
Date: 2005-04-09 15:16:53
On Fri, Apr 08, 2005 at 09:05:48PM -0700, David Mosberger wrote:
...
> #if __GNUC__ >= 4 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
> # define popcount(x)         __builtin_popcountl(x)
> #else
> # define popcount(x)         ia64_popcnt(x)
> #endif

Ah - thanks!
I didn't know how gcc versions could be determined.
(And was too lazy to look it up now.  /o\ )

I was told "build-tools" was the wrong repository and I have to agree.
Now available from:
	wget http://cvs.parisc-linux.org/*checkout*/userspace/test_fls.c

Or for the CVS enabled:
	cvs -d :pserver:anonymous@cvs.parisc-linux.org:/var/cvs co userspace


Randolph Chung played around with it on hppa and noted quickly
that gcc 4.0 with -O3 and -O4 was optimizing out the entire indirect
function call.  Adding a consumer of the return value fixed that.
We've also put asm() "barriers" around the loop to prevent code from
"leaking" outside the measured area though that might be overkill:

@@ -300,11 +304,14 @@
        struct timeval start, stop;
	long i, count = 1000000;
	double t;
+       volatile int discard;
			 
	while (1) {
		gettimeofday(&start, NULL);
+		asm volatile ("":::"memory");
		for (i = 0; i < count; ++i)
-                       (*func)(i | (i << 16));
+                       discard = (*func)(i | (i << 16));
+               asm volatile ("":::"memory");
		gettimeofday(&stop, NULL);

		t = ((stop.tv_sec + 1e-6*stop.tv_usec)


Results on my 1.5hz Madison are slightly different than what was
previously posted:

grundler@iota:/usr/src/userspace$ gcc-3.3 -O2 test_fls.c 
grundler@iota:/usr/src/userspace$ ./a.out
done with correctness test
  overhead:     4.007 ns
   generic:     8.680 ns
    womack:    12.019 ns
      arch:    10.683 ns
  popcount:    10.015 ns
  ia64_fls:    10.016 ns
popcount64:    10.683 ns
grundler@iota:/usr/src/userspace$ gcc-3.4 -O2 test_fls.c 
grundler@iota:/usr/src/userspace$ ./a.out
done with correctness test
  overhead:     5.342 ns
   generic:     8.013 ns
    womack:     8.680 ns
      arch:     8.681 ns
  popcount:     7.345 ns
  ia64_fls:     7.345 ns
popcount64:     8.680 ns

thanks,
grant
-
To unsubscribe from this list: send the line "unsubscribe linux-ia64" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Received on Sat Apr 9 01:16:18 2005

This archive was generated by hypermail 2.1.8 : 2005-08-02 09:20:37 EST