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
Your only option is to use Intel syntax. GCC, of course, can generate insn like mov off(base, index, scale)
, but does this on the level of whole MEM
RTL expressions, i.e. not having offset, base, etc like individual operands.
So, Intel syntax, compile the following with gcc -c -masm=intel x.c
:
#include
struct s
{
int a, b;
};
int foo (struct s *s, int i)
{
int r;
asm (
"mov %[r], dword ptr [%[s]+%[index]*8 + %[displ]] "
: [r] "=r" (r)
: [s] "r" (s) , [index] "r" (i),
[displ] "e" (offsetof(struct s, b))
:
);
return r;
}