2

嗨,我在优化方面遇到了一些问题。
我尝试使用内置函数编译 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

有谁知道函数是如何工作optmimizationbuiltinBionic

4

1 回答 1

3

这是因为在 gcc 4.7 中我们TARGET_C99_FUNCTIONS在文件中进行了特殊检查(检查)builins.def,其中定义了所有内置函数。

在另一个文件中,我们有: define TARGET_C99_FUNCTIONS (OPTION_GLIBC)

这些检查检查库,如果没有,glibc则我们没有cbrt功能。所以我们不能转型powcbrt这是根本原因。

于 2012-11-23T05:27:36.557 回答