Inline assembly doesn't like constant 64bit values... Help?

Inline assembly doesn't like constant 64bit values... Help?

Gilboa Davara gilboad at gmail.com
Mon Feb 7 16:47:33 IST 2011


On Fri, 2011-02-04 at 09:43 +0200, Udi Finkelstein wrote:
> I'm not an x86-64 expert, but it implies from intel docs that 64 bit
> immediate values are supported only for the MOV instruction:
>
> Udi

You're correct.
I re-check both Intel and AMD documents and neither one support imm64 in
any operations besides mov and push (AMD only, so it seems).
I wonder how I missed that one....

Thanks for the help.

- Gilboa

> 
> On Fri, Feb 4, 2011 at 9:02 AM, Gilboa Davara <gilboad at gmail.com>
> wrote:
>         Hello all,
>         
>         I'm trying to pass the following command inside GCC inline
>         assembly
>         block (which targets x86_64 kernel and usermode).
>         
>         asm volatile
>         {
>                ...
>                "andq $0x5555555555555555, %%r11 ;"
>                ...
>         }
>         
>         And getting the following error:
>         'Error: operand type mismatch for `and''
>         
>         The 32bit version of this code (which uses $0x55555555
>         constant value)
>         works just fine.
>         Shaving ~4 digits off the constant value, seems to working as
>         well.
>         
>         So, any idea how I can force-feed 64bit hex values into 64bit
>         inline
>         assembly?
>         
>         - Gilboa
>         
>         
>         _______________________________________________
>         Linux-il mailing list
>         Linux-il at cs.huji.ac.il
>         http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il
> 
> 






More information about the Linux-il mailing list