Author: Tom Kerrigan
Date: 23:11:34 07/18/03
Go up one level in this thread
On July 19, 2003 at 01:11:31, Robert Hyatt wrote: >On July 18, 2003 at 15:16:27, Tom Kerrigan wrote: > >>On July 18, 2003 at 04:05:52, Walter Faxon wrote: >> >>>>; 326 : if (bbHalf) bb0 = bb1; // will code as cmov (ideally) >>>> >>>> test ecx, ecx >>>> je SHORT $L806 >>>> mov eax, DWORD PTR _bb$[esp] >>>>$L806: >>>> >>> >>> >>>Stupid compiler, not only no cmov >> >>IIRC, on the P6 (Pentium Pro, Pentium II, Pentium III), the cmov instruction >>gets translated into a string of uOps that's equivalent to testing, branching, >>and copying. >> >>In other words, there is no performance benefit (I believe there may actually be >>a performance penalty) to using cmov on a P6, and it breaks compatibility with >>pre-P6 processors, so it's little wonder the P6-era MS compiler doesn't generate >>cmovs. >> >>-Tom > > >I think the point is that the cmov eliminates any possibility of a branch >mis-prediction. On the long PIV pipeline, that's a significant savings for >mis-predicted branches. > >Since Eugene's example shows that the new MSVC compiler is going to finally >emit cmov instructions, I'd assume there is a performance gain for doing >so. Yes, of course, I thought I had made it perfectly clear that I was talking about the _P6_ core. I wrote all of them out. Pentium Pro, Pentium II, Pentium III. _Not_ Pentium 4. -Tom
This page took 0.01 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.