Assembly constraints - offset?

Avi Kivity avi@qumranet.com
Wed Sep 27 17:02:00 GMT 2006


Ian Lance Taylor wrote:
> 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.
>   

Where exactly?

In the instruction section ("mov $1, %[member]c(%[base])") the 'c' is 
emitted unchanged.

In the constraint section ([member1]"c"(...)) 'c' means the ecx or rcx 
register.

Thanks,

Avi

-- 
Do not meddle in the internals of kernels, for they are subtle and quick to panic.



More information about the Gcc-help mailing list