将C语言调用函数的代码转换为汇编代码。

3

我正在处理一个包含数学函数(如logexp)的C文件。我使用GCC编译C文件生成汇编代码。在汇编代码中,每当使用pow函数时,我发现它只会调用C函数。例如:

    movsd   xmm0, QWORD PTR 16[rbp]   
    call    log  
    addsd   xmm0, xmm0  
    call    exp  
    movsd   QWORD PTR -8[rbp], xmm0

我想知道是否有可能告诉GCC,除了调用C函数外,还要为logexp生成汇编代码?换句话说,能否告诉GCC生成不需要任何外部函数调用的汇编代码?谢谢。

你只需要查看libm的源代码。 - Paul R
我可以问一下你为什么想要这样做吗?比如说,你只是好奇,还是觉得你能够手动优化编译后的汇编代码? - phonetagger
这是我们研究项目的一部分,模拟器只接受纯汇编代码,不允许使用函数调用。 - user2675918
3个回答

1
我不相信这可以用标准方法完成。然而,您可以自己实现函数(或从现有库中复制代码,例如libm(libc的一部分),如Paul R所提到的),然后重要的是声明函数为inline

是的,我查了一下flibm包,它确实显示了各种数学函数的源代码。 - user2675918

1
你可以在GDB或其他调试器中加载程序,并在调用上设置断点,然后步入logexp函数,在那里转储它的反汇编代码(或者如果你运行一个适当的调试器,则可以复制并粘贴它)。即使没有库函数的源代码,你也可以这样做。

好主意,但这不是可移植的,对吧? - 1''
是的,这是一个好主意。我用 Visual Studio 做过这个,非常混乱和难以追踪,但至少可以做到。 - user2675918

1

正如其他人所说,您可以从libm中复制粘贴代码。

尝试使用-finline-functions-finline-limit=n进行编译。 有关更多信息,请参见OptimizeOptions


@mathk 是的,昨晚睡觉前我也在考虑这个问题。它必须是静态链接的。 - Scotty Bauer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接