On Thu, 8 May 2014 15:16:26 -0700, Charles Mills wrote:

>Am I missing something here? Consider the following C statement:
>
>unsigned long long maxBit = 0x1 << (arraySize-3);
>
>When arraySize is 66, maxBit is ending up as zero (instead of what I would
>expect, X'8000000000000000'. Am I missing something?
>
>Here is the LIST output. (No optimization.)
>
>*      unsigned long long maxBit = 0x1 << (arraySize-3);
>          EX       r0,HOOK..STMT
>          L        r1,arraySize(,r13,240)
>          AHI      r1,H'-3'
>          LA       r2,1
>          LR       r0,r2
>          SLL      r0,0(r1)
>          LR       r1,r0
>          SRA      r1,31
>          ST       r1,maxBit(,r13,248)
>          ST       r0,maxBit(,r13,252)
>
>Won't SLL R0,0(R1) yield a zero for any shift values greater than 31?
>
Does it work better with a cast:

    unsigned long long maxBit = (long long) 0x1 << (arraySize-3);?

I might then expect:

          SLDL      r0,0(r1)

-- gil

----------------------------------------------------------------------
For IBM-MAIN subscribe / signoff / archive access instructions,
send email to lists...@listserv.ua.edu with the message: INFO IBM-MAIN

Reply via email to