【发布时间】:2012-11-15 12:24:49
【问题描述】:
您好,我在优化方面遇到了一些问题。
我尝试使用内置函数编译 gcc 测试之一:
#include <stdio.h>
#ifdef HAVE_C99_RUNTIME
double test1 (double x)
{
return __builtin_pow (x, 1/3);
}
double test2 (double x)
{
return __builtin_pow (x, 4./3.);
}
double test3a (double x)
{
return __builtin_pow (x, 5./3.);
}
double test3b (double x)
{
return __builtin_pow (x, -5./3.);
}
double test4 (double x)
{
return __builtin_pow (x, 7./3.);
}
#endif
我尝试用以下 2 种方式编译它:
1 种方式:gcc -mglibc -O -ffast-math -std=c99 -fno-ident -S -o builtins-58.s
并且在输出汇编文件中所有call pow 都更改为call cbrt - 这是预期的
2路:gcc -mbionic -O -ffast-math -std=c99 -fno-ident -S -o builtins-58.s
使用-mbionic 而不是-mglibc 我得到了call pow 的输出
有人知道optmimization 的builtin 函数在Bionic 中是如何工作的吗
【问题讨论】:
-
@AmigableClarkKant 为什么对 glibc 和仿生的内置函数优化不同?
-
函数返回的值是否相同?
-
两者的源代码都是现成的。为什么不看看呢?
-
@HansPassant 在使用内置数学函数的优化选项的情况下我找不到区别
-
@Pepelac,那么你应该阅读这些库的源代码。它可能是不同的。此外,编译器如何选择将源代码转换为机器指令完全取决于编译器。如果你切换编译器,你可能会得到 another 输出。
标签: c optimization glibc built-in bionic