nkeynes@923: # AC_CHECK_FASTCALL([if-ok],[if-notok]) nkeynes@923: # Test if the compiler recognizes __attribute__((regparm(3))) - we don't nkeynes@923: # currently check if it actually works correctly, but probably should... nkeynes@923: # ----------------------- nkeynes@923: AC_DEFUN([AC_CHECK_FASTCALL], [ nkeynes@923: AC_MSG_CHECKING([support for fastcall calling conventions]); nkeynes@923: AC_RUN_IFELSE([ nkeynes@923: AC_LANG_SOURCE([[ nkeynes@923: int __attribute__((regparm(3))) foo(int a, int b) { return a+b; } nkeynes@923: nkeynes@923: int main(int argc, char *argv[]) nkeynes@923: { nkeynes@923: return foo( 1, 2 ) == 3 ? 0 : 1; nkeynes@923: }]])], [ nkeynes@923: AC_MSG_RESULT([yes]) nkeynes@923: $1 ], [ nkeynes@923: AC_MSG_RESULT([no]) nkeynes@923: $2 ]) nkeynes@923: ]) nkeynes@923: nkeynes@1147: # AC_CHECK_FORCEINLINE([if-ok],[if-notok]) nkeynes@1147: # Test if the compiler recognizes __attribute__((always_inline)) nkeynes@1147: # ----------------------- nkeynes@1147: AC_DEFUN([AC_CHECK_FORCEINLINE], [ nkeynes@1147: AC_MSG_CHECKING([support for force inlining]); nkeynes@1147: AC_COMPILE_IFELSE([ nkeynes@1147: AC_LANG_SOURCE([[ nkeynes@1147: static int __attribute__((always_inline)) foo(int a, int b) { return a+b; } nkeynes@1147: nkeynes@1147: int main(int argc, char *argv[]) nkeynes@1147: { nkeynes@1147: return foo( 1, 2 ) == 3 ? 0 : 1; nkeynes@1147: }]])], [ nkeynes@1147: FORCEINLINE="__attribute__((always_inline))" nkeynes@1147: AC_MSG_RESULT([$FORCEINLINE]) nkeynes@1147: $1 ], [ nkeynes@1147: FORCEINLINE="" nkeynes@1147: AC_MSG_RESULT([no]) nkeynes@1147: $2 ]) nkeynes@1147: ]) nkeynes@1147: nkeynes@927: # AC_CHECK_FRAME_ADDRESS([if-ok],[if-notok]) nkeynes@927: # Test if the compiler will let us modify the return address on the stack nkeynes@927: # via __builtin_frame_address() nkeynes@927: # ----------------------- nkeynes@927: AC_DEFUN([AC_CHECK_FRAME_ADDRESS], [ nkeynes@927: AC_MSG_CHECKING([if we have a working __builtin_frame_address()]); nkeynes@927: AC_RUN_IFELSE([ nkeynes@927: AC_LANG_SOURCE([[ nkeynes@927: void * __attribute__((noinline)) first_arg( void *x, void *y ) { return x; } nkeynes@927: int __attribute__((noinline)) foo( int arg, void *exc ) nkeynes@927: { nkeynes@927: if( arg < 2 ) { nkeynes@1198: *(((void * volatile *)__builtin_frame_address(0))+1) = exc; nkeynes@927: } nkeynes@927: return 0; nkeynes@927: } nkeynes@927: nkeynes@927: int main(int argc, char *argv[]) nkeynes@927: { nkeynes@927: goto *first_arg(&&start, &&except); nkeynes@927: nkeynes@927: start: nkeynes@927: return foo( argc, &&except ) + 1; nkeynes@927: nkeynes@927: except: nkeynes@927: return 0; nkeynes@927: }]])], [ nkeynes@927: AC_MSG_RESULT([yes]) nkeynes@927: $1 ], [ nkeynes@927: AC_MSG_RESULT([no]) nkeynes@927: $2 ]) nkeynes@927: ]) nkeynes@927: nkeynes@964: # AC_CC_VERSION([if-gcc], [if-icc],[if-other]) nkeynes@964: # Check which C compiler we're using and branch accordingly, eg to set nkeynes@964: # different optimization flags. Currently recognizes gcc and icc nkeynes@964: # --------------- nkeynes@964: AC_DEFUN([AC_CC_VERSION], [ nkeynes@985: _GCC_VERSION=`$CC --version | $SED -ne '/gcc/p'` nkeynes@964: _ICC_VERSION=`$CC --version | $SED -ne '/(ICC)/p'` nkeynes@964: AC_MSG_CHECKING([CC version]) nkeynes@985: if test -n "$_ICC_VERSION"; then nkeynes@985: AC_MSG_RESULT([ICC]) nkeynes@985: [ $2 ] nkeynes@985: elif test -n "$_GCC_VERSION"; then nkeynes@964: AC_MSG_RESULT([GCC]) nkeynes@985: [ $1 ] nkeynes@964: else nkeynes@964: AC_MSG_RESULT([Unknown]) nkeynes@964: [ $3 ] nkeynes@964: fi nkeynes@964: ]); nkeynes@927: nkeynes@964: # AC_OBJC_VERSION([if-gcc],[if-other], [if-none]) nkeynes@964: # Check which objective C compiler we're using and branch accordingly. nkeynes@964: AC_DEFUN([AC_OBJC_VERSION], [ nkeynes@964: AC_MSG_CHECKING([OBJC version]) nkeynes@964: if test -n "$OBJC"; then nkeynes@964: _GOBJC_VERSION=`$OBJC --version | $SED -ne '/(GCC)/p'` nkeynes@964: if test -n "$_GOBJC_VERSION"; then nkeynes@964: AC_MSG_RESULT([GCC]) nkeynes@964: [ $1 ] nkeynes@964: else nkeynes@964: AC_MSG_RESULT([Unknown]) nkeynes@964: [ $2 ] nkeynes@964: fi nkeynes@964: else nkeynes@964: AC_MSG_RESULT([None]) nkeynes@964: [ $3 ] nkeynes@964: fi nkeynes@964: ]); nkeynes@977: nkeynes@977: # AC_HAVE_OBJC([if-present],[if-not-present]) nkeynes@977: # Check if we have a working Objective-C compiler nkeynes@977: AC_DEFUN([AC_HAVE_OBJC], [ nkeynes@977: AC_PROG_OBJC nkeynes@977: AC_MSG_CHECKING([for a working Objective-C compiler]) nkeynes@977: AC_LANG_PUSH([Objective C])dnl nkeynes@977: _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@interface Foo @end]], [])], nkeynes@977: [AC_MSG_RESULT([yes]) nkeynes@977: $1 ], nkeynes@977: [AC_MSG_RESULT([No]) nkeynes@977: $2 ]); nkeynes@977: AC_LANG_POP([Objective C]) nkeynes@977: ]);