On Tue, Mar 24, 2009 at 11:02 AM, Rodrigo Dominguez <rodd...@hotmail.com> wrote: > Hi, > > While debugging a problem with Open64, I ran into a similar problem with > GCC. I created the following unit test program: > > #include <stdint.h> > > int main(void) > { > uint32_t a = 7; > int8_t s = -1; > > __asm__ ("shrl %1, %0\n\t" > : "+r" (a) > : "c" (-s) > ); > > return a; > } > > When assembling this program, 'cc1' emits a 'shrl %ecx, %eax' instruction. > The 'shr' instruction can only take an 8-bit register as the first operand. > The emitted instruction should have been 'shrl %cl, %eax'. Therefore, the > compilation fails with a 'suffix or operands invalid for shr' message. >
Please use __asm__ ("shrl %b1, %0\n\t" : "+r" (a) : "c" (-s) ); -- H.J.