Yes, there's a gcc warning flag that suggests you put brackets around such
expressions (I can't remember which flag, though).

> One more thing:
> the code
> if(k & 0xffff!=0) statement;
> id equivalent to
> if(k & 1) statement;
> cause in comparison operation '!=' will be performed first, then '&'.
> Therefore, the compiler checks only most bottom nibble of 'k'.
> ~d
>
>
>
> On Mon, 5 Aug 2002 11:34:55 +0300
> "Oleg Skidan" <[email protected]> wrote:
>
> > Hello, All !
> > During use of mspgcc (build 2002-07-25) I noticed a very
> > strange things:
> >
> > Consider the following fragment of code:
> >
> > int b(long long k)
> > {
> >   if(k & 0xffff!=0)return 1;
> > }
> >
> > The compiler emits:
> >
> > .global b
> >         .type   b,@function
> > /***********************
> >  * Function `b'
> >  ***********************/
> > b:
> > /* prologue: frame size = 0; addenum 0; alloca:0, varargs:0 , fpr:0*/
> > .L__FrameSize_b=0x0
> > .L__FrameOffset_b=0x0
> > /* prologue end (size=0) */
> >         and     #llo(2), r12        ;<<<<<<<<????????????
> >         and     #llo(0), r13
> >         and     #llo(52), r14      ;<<<<<<<<????????????
> >         and     #llo(0), r15
> >         tst     r12
> >         jeq     .L2
> >         mov     #llo(1), r15
> >         ret
> > .L2:
> >         mov     #llo(0), r15
> > .L1:
> > /* epilogue: frame size=0 */
> >         ret
> > /* epilogue end (size=1) */
> > /* function b size 20 (19) */
> > .Lfe1:
> >         .size   b,.Lfe1-b
> > /********* End of function ******/
> >
> > Now lets make a minor changes:
> >
> > int b(long long k)
> > {
> >   if(k & 0xffff)return 1;
> > return 0;
> > }
> >
> > The compiler emits:
> >
> > .global b
> >         .type   b,@function
> > /***********************
> >  * Function `b'
> >  ***********************/
> > b:
> > /* prologue: frame size = 0; addenum 0; alloca:0, varargs:0 , fpr:0*/
> > .L__FrameSize_b=0x0
> > .L__FrameOffset_b=0x2
> >         push    r11
> > /* prologue end (size=1) */
> >         and     #llo(19744), r12        ;<<<<<????
> >         and     #llo(137), r13
> >         and     #llo(46), r14
> >         and     #llo(8192), r15
> >         mov     r12, r11
> >         bis     r13, r11
> >         bis     r14, r11
> >         bis     r15, r11
> >         tst     r11
> >         jeq     .L2
> >         mov     #llo(1), r15
> >         jmp     .L1
> > .L2:
> >         mov     #llo(0), r15
> > .L1:
> > /* epilogue: frame size=0 */
> >         pop     r11
> >         ret
> > /* epilogue end (size=2) */
> >
> > I think we have a BUG :-(.
> > The code is good and correct if argument type is long instead of long
long.
> >
> > All the best, Oleg.
> >
>
>
> /********************************************************************
>      ("`-''-/").___..--''"`-._     (\   Dimmy the Wild      UA1ACZ
>       `6_ 6  )   `-.  (     ).`-.__.`)  Enterprise Information Sys
>       (_Y_.)'  ._   )  `._ `. ``-..-'   Nevsky prospekt,   20 / 44
>     _..`--'_..-_/  /--'_.' ,'           Saint Petersburg,   Russia
>    (il),-''  (li),'  ((!.-'             +7 (812)  3468202, 5585314
>  ********************************************************************/
>
>
> -------------------------------------------------------
> This sf.net email is sponsored by:ThinkGeek
> Welcome to geek heaven.
> http://thinkgeek.com/sf
> _______________________________________________
> Mspgcc-users mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/mspgcc-users
>
>



Reply via email to