5 c c++ assembly llvm llvm-clang
我正在一个关于LLVM的内联asm的项目,但我遇到了一个关于asm操作数的问题.例如,我有这样的代码:
int a;
int b;
asm("nop": "=r"(a), "r"(b), "g"(30));
Run Code Online (Sandbox Code Playgroud)
我可以使用llvm :: InlineAssembly :: getAsmString()函数获取asm字符串"nop",并且我还可以使用llvm :: InlineAsm :: ParseConstraints函数获取约束"rr imr"信息并迭代返回值.但我的问题是我无法获取asm操作数信息,尤其是asm operarands类型(a是整数类型,b是整数类型,30是常量int).
所以有人知道有没有办法获得asm操作数信息?
在 LLVM 中,InlineAsm是 的子类Value,并且关联的值始终是函数指针类型。该虚构函数的内容就是 asm 代码本身。
因此,要获取操作数的类型,请像分析函数指针一样对其进行分析。你有一个方便的工具FunctionType *InlineAsm::getFunctionType() const,可以完成一半的工作。
其余的非常简单:Type * FunctionType::getReturnType()获取输出参数和FunctionType::params()/或类似于获取输入参数。
| 归档时间: |
|
| 查看次数: |
701 次 |
| 最近记录: |