[llvm-dev] IR inline assembly: the x86 Intel "offset" operator

Eric Astor via llvm-dev
Mon, 09 Dec 2019 20:27:18 -0000

Hi all,

I'm trying to land (a rebased version of) http://llvm.org/D37461 - which
should make it possible to handle x86 Intel assembly like
    mov eax, offset Foo::ptr + 1
(Currently, omitting the +1 works... but offset doesn't work in compound
expressions.)

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
    call void asm sideeffect inteldialect "mov eax, offset $0 + $$1,
"*m,~{eax},~{dirflag},~{fpsr},~{flags}"(i32** @"?ptr at
Foo@@2PAHA")
But that expands to
    mov eax, offset [?ptr at Foo@@2PAHA] + 1
which ends up incorrectly dereferencing the address first.

I haven't found a working combination of code & constraints that will
expand to
    mov eax, offset ?ptr at Foo@@2PAHA + 1
Is this possible?

Thanks,
- Eric
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://lists.llvm.org/pipermail/llvm-dev/attachments/20191209/8011012f/attachment.html>