Skip to contentSkip to conversation

only use 48-bit lba when necessary

PATCH Chuck Ebbert 1 participant 1 message Apr 18, 2003

lore
Share & tools
lore
#0 lore raw
Quoted 6 lines
Quoted 5 lines

The operands of & can be evaluated in any order, while && requires
left-to-right and does not evaluate the right operand if the left one is false. Only the simplest cases could possibly generate the same code.

Quoted 7 lines

The code must execute AS IF the right operand is only evaluated if the left operand is true.

If an optimizer can prove that evaluating an operand has no side effects (which a halfway-decent optimizer can usually do for simple expressions), then it is free to evaluate it in any way that will produce the same result.

No, that's not quite right. Take this code for example:

struct foo *bar;

   if (bar && bar->baz == 6) /* something */;

If bar were zero, then evaluating the right side of the && would cause a fault. (This is not a side effect.)

So the AS IF part if your statement is right but you have to consider
more than just side effects.

--
Chuck