2

こんにちは、最適化に問題があります。
組み込み関数を使用して gcc テストの 1 つをコンパイルしようとしました。

#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 つの方法でコンパイルしようと

gcc -mglibc -O -ffast-math -std=c99 -fno-ident -S -o builtins-58.s
ました call powcall cbrt

2つの方法:代わりに
gcc -mbionic -O -ffast-math -std=c99 -fno-ident -S -o builtins-58.s
使用して、出力を取得しました-mbionic-mglibccall pow

optmimization関数がどのようにbuiltin機能するか知っている人はいますかBionic

4

1 に答える 1

3

これは、gcc 4.7TARGET_C99_FUNCTIONSではファイルに特別なチェック ( のチェック) がbuilins.defあり、すべての組み込み関数が定義されているために発生します。

そして、別のファイルには次のものがあります。 define TARGET_C99_FUNCTIONS (OPTION_GLIBC)

これらのチェックはライブラリをチェックし、存在しない場合glibcは関数がありませんcbrt。だから私たちは変身powできずcbrt、それが根本的な原因です。

于 2012-11-23T05:27:36.557 に答える