This is the mail archive of the gcc-help@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Assembly constraints - offset?


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.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]