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