Assembly constraints - offset?

Ian Lance Taylor iant@google.com
Wed Sep 27 16:42:00 GMT 2006


Avi Kivity <avi@qumranet.com> writes:

> I'd like to access several members of a structure from inline assembly
> (x86):
> 
> asm ( "mov $1, %[member1](%[base]) \n\t"
>           "mov $2, %[member2](%[base]) \n\t"
>           : : [base]"r"(ptr),
>               [member1]"i"(offsetof(struct the_struct, member1)),
>               [member2]"i"(offsetof(struct the_struct, member2)));
> 
> However, the "i" constraint generates an immediate marker ('$'), so I get
> 
>     mov $1, $4(%ecx)
>     mov $2, $8(%ecx)
> 
> The second '$' is a bit unhelpful.
> 
> Is there any constraint which will emit the offset without the '$'?

Using %[member1]c should work.

Ian



More information about the Gcc-help mailing list