2012-11-15 5 views
1

안녕하세요, 저는 최적화에 몇 가지 문제가 있습니다.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 가지 방법으로 컴파일하려고 :
나는 내장 기능 GCC 테스트 중 하나를 컴파일하려고
1 방법 :
gcc -mglibc -O -ffast-math -std=c99 -fno-ident -S -o builtins-58.s
그리고 출력 어셈블러 파일의 모든 call pow 변경됨 : call cbrt - 예상 됨

2 방향 :
-mglibc 대신 -mbionic를 사용하여 gcc -mbionic -O -ffast-math -std=c99 -fno-ident -S -o builtins-58.s
내가 누구 그것은 우리가 특별 검사가 GCC 4.7에서의 becuse 일 것 Bionic

+1

그리고 귀하의 질문은 무엇입니까? –

+0

@AmigableClarkKant glibc와 bionic의 기본 내장 함수 최적화가 다른 이유는 무엇입니까? – Arseniy

+0

함수가 동일한 값을 반환합니까? –

답변

2

에서 작동하는 방법 optmimizationbuiltin 기능을 알고 있나요 call pow

과 출력을 가지고 (TARGET_C99_FUNCTIONS 확인) in builins.def 파일은 모든 내장 기능을 정의합니다.

그리고 다른 파일에

우리는이 : 거기에 더 glibc 다음 우리가 cbrt 기능이 없어요 define TARGET_C99_FUNCTIONS (OPTION_GLIBC)

이 확인 검사 라이브러리 및합니다. powcbrt으로 변환 할 수 없으므로 그 근본 원인입니다.