2012-11-15 51 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,這是根本原因。