MS inline asm: Use memory constraints for functions instead of registers
authorReid Kleckner <reid@kleckner.net>
Fri, 1 Aug 2014 20:21:24 +0000 (20:21 +0000)
committerReid Kleckner <reid@kleckner.net>
Fri, 1 Aug 2014 20:21:24 +0000 (20:21 +0000)
commit5b37c181291210bedfbb7a6af5d51229f3652ef0
tree6815b7ab9469f59dbe577dad26d82e0f4fe7c785
parent455768e2af7ef774b40510a82d034a78a4504639
MS inline asm: Use memory constraints for functions instead of registers

This is consistent with how we parse them in a standalone .s file, and
inline assembly shouldn't differ.

This fixes errors about requiring more registers than available in
cases like this:
  void f();
  void __declspec(naked) g() {
    __asm pusha
    __asm call f
    __asm popa
    __asm ret
  }

There are no registers available to pass the address of 'f' into the asm
blob.  The asm should now directly call 'f'.

Tests will land in Clang shortly.

llvm-svn: 214550
llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
llvm/test/CodeGen/X86/ms-inline-asm.ll