On Tue, Mar 24, 2009 at 11:02 AM, Rodrigo Dominguez <[email protected]> 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.