On Mon, Mar 26, 2007 at 09:31:41PM -0700, John Meacham wrote: > On Mon, Mar 26, 2007 at 09:23:13PM -0700, Stefan O'Rear wrote: > > On Mon, Mar 26, 2007 at 09:15:35PM -0700, John Meacham wrote: > > > actually, this is not true for the specific case of testing against zero > > > on x86 at least. there is a 'zero flag' that is set whenever the result > > > of an operation is zero. whereas for compares, you actually need to load > > > zero into a register and cmp against it. > > > > Uh, you mean normal operations don't set the sign flag? (I'm just an > > assembly programmer and am perfectly willing to defer to a compiler > > writer on such issues, but it seems like a strange assertion...) > > They certainly do, but in this particular case, the 'decrement' (n - 1) > happens to set the zero flag if n is one so we get that comparison for > free. We don't have a flag which immediately tells us whether n <= 0 > however so we have to perform that comparison separately.
Not <=, no, but we do have <0 (SF) and =0 (ZF) ; if DEC has the dignity to clear OF we could use the single JLE instruction, otherwise we would need to JS then JZ to the same address. Either way we would not need to explicitly CMP anything. I think. (Actually if DEC sets OF properly then that will work just as well as clearing it.) Stefan _______________________________________________ Glasgow-haskell-bugs mailing list [email protected] http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs
