Ian Lance Taylor wrote:
Avi Kivity <avi@xxxxxxxxxxxx> 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.