[gta02] a few questions

Andrew Schenck andrew at springahead.com
Sat Dec 28 02:25:20 CET 2013


> On 11/14/2013 12:17 AM, matteo sanvito wrote:
> >/
> />/  Hi ed,
> />/  I don't know about your first question, while about the second one,
> />/  try to change "&" to "&&" after "...STAT1)"
> />/
> />/  I'm glad to see that there is someone other that still uses gta02 :')
> />/
> />/  Best regards,
> />/  matte
> />/
> /
> Hi Matteo,
>
> Thanks for your reply!
>
> Could you explain a bit more why to change & for && ?
>
> Wouldn't changing:
> if(!readw(host->base + GLAMO_REG_MMC_RB_STAT1) & GLAMO_STAT1_MMC_IDLE)
>
> to:
> if(!readw(host->base + GLAMO_REG_MMC_RB_STAT1) && GLAMO_STAT1_MMC_IDLE)
>
> Change the logic of the program?
Yes, this would change the behavior.  Specifically, & is a bitwise-and 
operator, whereas && is a short-circuit and.  I haven't actually looked 
at the code, but its likely that readw() returns an int or a char 
instead of a bool, so & is comparing this to a mask constant.  If any of 
the '1' bits in the binary representation of the return from readw match 
the '1' bits in the mask it will return non-zero, which is equivalent to 
'true' in c-based languages.
>
> In the first case the "if" statement would be true if either
> readw(host->base + GLAMO_REG_MMC_RB_STAT1) is false, or
> GLAMO_STAT1_MMC_IDLE is true.
>
> in the second case the "if" statement would be true if
> eadw(host->base + GLAMO_REG_MMC_RB_STAT1) is false and
> GLAMO_STAT1_MMC_IDLE is true.
>
> I can't tell from the source code what the intention of the program was.
The reason the compiler gave you the warning is that it can't tell what 
the intent is either.  It could either be "apply bitwise-not to the 
value returned from readw, then bitwise-and that to the mask and go into 
the block if the result is non-zero" or it could be "bitwise-and the 
return from readw() and the mask, then logical-not the result of that 
and go into the block if the result is true". Based on the operator 
precedence in C, the compiler will pick the first option, we just have 
to hope that that is what the original developer intended.
> Thanks for your time!
>
> Kind regards.
>
> PS
> Yes, the GTA02 is still my one and only mobile phone ;-)

-Andrew



More information about the community mailing list