Author: Robert Hyatt
Date: 05:21:17 02/11/00
Go up one level in this thread
On February 11, 2000 at 04:04:59, Dave Gomboc wrote:
>On February 10, 2000 at 23:23:30, Robert Hyatt wrote:
>
>>On February 10, 2000 at 18:38:51, Eugene Nalimov wrote:
>>
>>>And here is result of using MSVC:
>>>
>>>#include <stdlib.h>
>>>
>>>int type (int i)
>>>{
>>> return abs (i);
>>>}
>>>
>>>Assembly code is:
>>>
>>> mov eax, DWORD PTR [esp-4]
>>> cdq
>>> xor eax, edx
>>> sub eax, edx
>>> ret
>>>
>>>It also lacks the branch, but it is also shorter than GCC output, and will run
>>>on any 32-bit x86 processor.
>>>
>>>It is based in the following observation: abs (x) == (x ^ (x >> (sizeof (x) -
>>>1))) - (x >> (sizeof (x) - 1)).
>>>
>>>That is an example when good compiler can get rid of branch remaining compatible
>>>with old processors.
>>>
>>>Eugene
>>
>>
>>
>>Right. I was making the point that the "?" operator doesn't need to
>>produce a branch at all. I only picked 'abs()' as an example... It
>>used to be 'evil'. Now it is perfectly ok to use ? if the compiler
>>knows about cmov.
>
>Yes, but Eugene's point is that cmov isn't needed, and in fact is a bad choice
>in this particular case.
>
>Dave
I understand. My point was that the ? operator does not have to produce
a branch. Which means it doesn't hurt performance on any processor beyond
the basic P5, which didn't have cmov...
Lets just change the example to:
a=(a>b) ? a : b;
where the cmov works just as well.
This page took 0 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.