3

我正在处理一个带有一些数学函数的 C 文件,例如logexp. 我用 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 函数,还可以为logand生成汇编代码exp?换句话说,是否可以告诉 GCC 生成不需要任何外部函数调用的汇编代码?

谢谢,

4

3 回答 3

1

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

于 2013-08-12T21:47:27.063 回答
1

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

于 2013-08-12T21:57:02.093 回答
1

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

尝试编译-finline-functions-finline-limit=n 查看OptimizeOptions了解更多信息

于 2013-08-12T21:58:56.973 回答