Here is a simple bit of C that sets either x or y to value v depending on the value of c..
if (c)
x = v;
else
y = v;
..but why not "improve" this by using the C ternary operator ? : as follows:
*(c ? &x : &y) = v;
Now, how does this shape up when compiled on an x86 with gcc -O2 ? Well, the first example compiles down to a test and a branch where as the second example uses a conditional move instruction (cmove) and avoids the test and branch and is faster code. Result!
OK, so this isn't rocket science, but does show that a little bit of abuse of the ternary operator can save me a few cycles if the compiler is clued up to use cmove.
Latest Official Posts