GCC extended asm, struct element offset encoding

前端 未结 2 1209
情深已故
情深已故 2021-01-12 09:57

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

2条回答
  •  小鲜肉
    小鲜肉 (楼主)
    2021-01-12 10:04

    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;
    }
    

提交回复
热议问题