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