Re: How to make asm constraints for member variables?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Christian Schüler <gcchelp.5.adept@xxxxxxx> writes:

> I'd like to make an asm statement emit offset-register addressing like this:
> 
>     movl 0x80(eax), ebx
> 
> where eax contains the pointer to a class (this) and 0x80 is the offset to a
> member variable. 
> I get an error when assigning the member variable to a memory reference.
> 
> asm( "mov %[source], %[dest]" 
>    : [dest] "=r" (...)
>    : [souce] "m" (this->member) ); // ERROR "memory input is not directly
> addressable"

Try using
    "p" (&this->member)
That might work.

> Also, decomposing by hand always put a "$" in front of the offset rendering it
> unusable, eg.
> 
> asm( "mov %[offset](%[base]), %[dest]" 
>    : [dest] "=r" (...)
>    : [base] "r" (this), [offset] "p" (offsetof(member)) );
> 
> generates
> 
>     movl $0x80(eax), ebx    // ERROR "Junk..."
> 
> where assembler complains about the dollar sign.

For this sort of approach you want "c", not "p".

Ian


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux