On Tuesday 19 February 2008 13:40, Arjan van de Ven wrote: > On Tue, 19 Feb 2008 13:33:53 +1100 > > Nick Piggin <[EMAIL PROTECTED]> wrote: > > Actually one thing I don't like about gcc is that I think it still > > emits cmovs for likely/unlikely branches, which is silly (the gcc > > developers seem to be in love with that instruction). If that goes > > away, then branch hints may be even better. > > only for -Os and only if the result is smaller afaik.
What is your evidence for saying this? Because here, with the latest kernel and recent gcc-4.3 snapshot, it spits out cmov like crazy even when compiled with -O2. [EMAIL PROTECTED]:~/usr/src/linux-2.6$ grep cmov kernel/sched.s | wc -l 45 And yes it even does for hinted branches and even at -O2/3 [EMAIL PROTECTED]:~/tests$ cat cmov.c int test(int a, int b) { if (__builtin_expect(a < b, 0)) return a; else return b; } [EMAIL PROTECTED]:~/tests$ gcc-4.3 -S -O2 cmov.c [EMAIL PROTECTED]:~/tests$ head -13 cmov.s .file "cmov.c" .text .p2align 4,,15 ..globl test .type test, @function test: ..LFB2: cmpl %edi, %esi cmovle %esi, %edi movl %edi, %eax ret ..LFE2: .size test, .-test This definitely should be a branch, IMO. > (cmov tends to be a performance loss most of the time so for -O2 and such > it isn't used as far as I know.. it does make for nice small code however > ;-) It shouldn't be hard to work out the cutover point based on how expensive cmov is, how expensive branch and branch mispredicts are, and how often the branch is likely to be mispredicted. For an unpredictable branch, cmov is normally quite a good win even on modern CPUs. But gcc overuses it I think. _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-dev