Messages in this thread | | | From | Andy Shevchenko <> | Date | Tue, 5 May 2020 15:51:16 +0300 | Subject | Re: [PATCH 4.19 28/37] dmaengine: dmatest: Fix iteration non-stop logic |
| |
On Tue, May 5, 2020 at 3:37 PM Pavel Machek <pavel@denx.de> wrote: > > So, to the point, the conditional of checking the thread to be stopped being > > first part of conjunction logic prevents to check iterations. Thus, we have to > > always check both conditions to be able to stop after given > > iterations. > > I ... don't understand. AFAICT the code is equivalent. Both && and || > operators permit "short" execution... but second part of expression > has no sideeffects, so...
..
> You are changing !a & !b into !(a | b). But that's equivalent > expression. I hate to admit, but I had to draw truth table to prove > that. > > !a & !b 0 0 -> 1 > else -> 0 > > !(a | b) 0 0 -> 1 > else -> 0 > > What am I missing?
Basic stuff. Compiler doesn't consider second part of conjunction when first one (see operator precedence) is already false, so, it means:
a & b 0 x -> false 1 0 -> false 1 1 -> true
x is not being considered at all. So, logically it's equivalent, run-time it's not.
-- With Best Regards, Andy Shevchenko
| |