I am trying to write a small piece of my code in GCC style extended asm (x86-64 target) and am having trouble encoding struct offsets.
I have a struct s
It actually is possible, using the %c...
operand modifier:
#include
#include
struct s
{
int a, b;
};
int foo (struct s *s, int i)
{
int r;
asm (
"movl %c[displ](%[s],%[index],8), %[r]\n\t"
: [r] "=r" (r)
: [s] "r" (s) , [index] "r" ((uintptr_t)i),
[displ] "e" (offsetof(struct s, b))
:
);
return r;
}
Thanks where thanks is due - found that here. There's a gcc mailing list posting referring to this as well; the keywords there are "output substitution".
The stackoverflow posting What does %c mean in GCC inline assembly code? also has an explanation about %c
in particular.