<div dir="ltr">Actually, there's more of a bug here than I realized:<br><div><br></div><div><a href="https://godbolt.org/z/fktmVn">https://godbolt.org/z/fktmVn</a> seems to show that LLVM's current handling of offset goes wrong with global variables... with a global `int Bar;`, inline assembly</div><div><font face="monospace">    mov eax, offset Bar</font></div><div>ends up as</div><div><font face="monospace">    mov eax, dword ptr [Bar]</font></div><div>which I'm pretty sure is not what's intended here.</div><div><br></div><div>I've written LLVM IR that does produce an equivalent result (see the Compiler Explorer link above), but I'm not sure how to get X86Operand to produce a direct memory operand... I can't figure out where the memory constraint gets turned into an indirect memory constraint ("*m"). Anyone have any leads I can follow?</div><div><br></div><div>Thanks,</div><div>- Eric</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Dec 9, 2019 at 3:27 PM Eric Astor <<a href="mailto:epastor@google.com">epastor@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">Hi all,<div><br></div><div>I'm trying to land (a rebased version of) <a href="http://llvm.org/D37461" target="_blank">http://llvm.org/D37461</a> - which should make it possible to handle x86 Intel assembly like</div><div>    <font face="monospace">mov eax, offset Foo::ptr + 1</font></div><div><font face="arial, sans-serif">(Currently, omitting the +1 works... but offset doesn't work in compound expressions.)</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">I'm having trouble figuring out what inline assembly I can emit into the LLVM IR that will work properly. So far, the closest I've gotten is</font></div><div><font face="arial, sans-serif">    </font><font face="monospace">call void asm sideeffect inteldialect "mov eax, offset $0 + $$1, "*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32** @"?ptr@Foo@@2PAHA")</font></div><div>But that expands to</div><div>    <font face="monospace">mov eax, offset [?ptr@Foo@@2PAHA] + 1</font></div><div>which ends up incorrectly dereferencing the address first.</div><div><br></div><div><font face="arial, sans-serif">I haven't found a working combination of code & constraints that will expand to</font></div><div><font face="arial, sans-serif">    </font><font face="monospace">mov eax, offset ?ptr@Foo@@2PAHA + 1</font></div><div><font face="arial, sans-serif">Is this possible?</font></div><div><font face="arial, sans-serif"><br></font></div><div><font face="arial, sans-serif">Thanks,</font></div><div><font face="arial, sans-serif">- Eric</font></div></div>
</blockquote></div>