glibC和bioniC之间的区别

时间:2012-11-15 12:24:50

标签: c optimization glibc built-in bionic

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

我尝试用接下来的两种方式编译它:
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的工作原理{{1}}

1 个答案:

答案 0 :(得分:2)

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

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

这些检查检查库,如果没有glibc,那么我们没有cbrt功能。 所以我们无法将pow转换为cbrt,这是根本原因。