C++ 使用C++;美国石油学会

C++ 使用C++;美国石油学会,c++,llvm,llvm-c++-api,C++,Llvm,Llvm C++ Api,我试图找到一种方法来设置LLVM输出的程序集语法(特别是对于x86)。按照万花筒教程的部分,我将使用 TargetMachine->addPassesToEmitFile(pass, dest, nullptr, llvm::CGFT_AssemblyFile)) 但是没有设置输出语法的选项 llc具有命令行选项--x86 asm syntax,您可以使用该选项设置输出程序集语法(对于x86),因此我相信一定有办法做到这一点 P> >有没有办法通过LLVM的C++ API?< /P>

我试图找到一种方法来设置LLVM输出的程序集语法(特别是对于x86)。按照万花筒教程的部分,我将使用

TargetMachine->addPassesToEmitFile(pass, dest, nullptr, llvm::CGFT_AssemblyFile))
但是没有设置输出语法的选项

llc
具有命令行选项
--x86 asm syntax
,您可以使用该选项设置输出程序集语法(对于x86),因此我相信一定有办法做到这一点


<> P> >有没有办法通过LLVM的C++ API?< /P> < P> >这里我通过阅读LLVM源找到了一些事情:

  • 输出程序集语法由
    llvm::mcasinfo
    中的成员控制。对于x86,
    llvm::mcasinfo
    的派生类可以在和中找到
  • 成员
    assemblydialent
    初始化为
    AsmWriterFlavor
    的值,该值由命令行选项
    x86 asm syntax
    设置
据我所知,
assemblyquantial
没有在代码库中的任何其他地方引用,因此设置它的唯一方法是使用
x86 asm语法
标志。为此,您可以使用
llvm::cl::ParseCommandLineOptions
。将程序集语法设置为“英特尔”的最简单示例:

#include <cassert>
#include <llvm/Support/CommandLine.h>

void set_asm_syntax_to_intel()
{
    char const *args[] = { "some-exe-name", "--x86-asm-syntax=intel" };
    auto const res = llvm::cl::ParseCommandLineOptions(std::size(args), args);
    assert(res);
}
#包括
#包括
无效将语法设置为英特尔()
{
char const*args[]={“某些exe名称”,“x86 asm语法=英特尔”};
auto const res=llvm::cl::ParseCommandLineOptions(std::size(args),args);
断言(res);
}

我没有测试这个的设置,但是看看创建
TargetMachine
的代码,Opt是由
TargetOptions
组成的,其中包括像AssemblyLanguage这样的东西。不管怎样,这就是我的出发点。@DavidWohlferd这似乎是一个可能的解决方案,但llvm10似乎没有。在llvm include目录中搜索
汇编语言
(或类似内容)也不会返回任何结果。它应该位于“llvm/MC/MCTargetOptions.h”中,但我不知道它可能是何时添加的。@DavidWohlferd在github上查看时,它被添加到了llvm 11中,预计很快就会发布。介意将此作为一个答案吗?在深入研究doxygen引用时,
AssemblyLanguage
仅在它仅检查它是否等于
“masm”
的情况下被引用,因此这可能不是我想要的。