2012-11-15 20 views
1

嗨,我有一些优化问题。
我试图编译GCC的测试之一,内建函数:glibC和bioniC之间的差异

#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

是否有人知道如何optmimizationbuiltin功能Bionic

+1

你的问题是什么? –

+0

@AmigableClarkKant为什么优化glibc和仿生的内建函数是不同的? – Arseniy

+0

函数是否返回相同的值? –

回答

2

它发生becuse在GCC 4.7,我们有专门的检查工作(检查TARGET_C99_FUNCTIONS) 在builins.def文件中,其中定义了所有内置函数。

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

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