H.J,

Thanks for replying but this doesn't answer my question. Shouldn't __asm__
generate the right code without using the %b1 trick? The reason I am asking
is I have a 350 line macro which I can't change.

Is there any documentation about __asm__ default behavior regarding this
issue? Something like an Intel/AMD/AT&T manual explaining this?

Thank you,

Rodrigo

> -----Original Message-----
> From: H.J. Lu [mailto:hjl.to...@gmail.com]
> Sent: Tuesday, March 24, 2009 2:09 PM
> To: Rodrigo Dominguez
> Cc: gcc@gcc.gnu.org
> Subject: Re: Inline Assembly Error: suffix or operands invalid for
> 'shr'
> 
> 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.

Reply via email to