GCCスタイルの拡張asm(x86-64ターゲット)でコードの一部を書き込もうとしていますが、構造体オフセットのエンコードに問題があります。
にはstruct s
、メンバーsize_t a[]
、そのような構造体へのポインター、およびインデックスがあり、どちらもasmブロック内で生成されます。
今、私はasmでその要素に対処する必要があります
asm (
"mov %[displ](%[s], %[index], 8), %%rbx"
: [s] "+r" (s)
, [index] "+r" (i)
: "memory", "cc", "rax", "rbx"
);
displ
asmブロックにエンコードするにはどうすればよいですか?即時として渡すoffsetof(struct s, a)
と、プレフィックスとして$
無効なアセンブリが生成されます。
asm (
"mov %[displ](%[s], %[index], 8), %%rbx"
: [s] "+r" (s)
, [index] "+r" (i)
: [displ] "i" (offsetof(struct s, a))
: "memory", "cc", "rax", "rbx"
);