filename | acinclude.m4 |
changeset | 927:17b6b9e245d8 |
prev | 923:13ac59a786f4 |
next | 964:f2f3c7612d06 |
author | nkeynes |
date | Wed Jan 07 04:39:04 2009 +0000 (15 years ago) |
branch | lxdream-mem |
permissions | -rw-r--r-- |
last change | Introduce sh4_finalize_instruction to clean-up on instruction exits Remove the sh4_flush_icache special cases, now works through the general case. |
file | annotate | diff | log | raw |
nkeynes@923 | 1 | # AC_CHECK_FASTCALL([if-ok],[if-notok]) |
nkeynes@923 | 2 | # Test if the compiler recognizes __attribute__((regparm(3))) - we don't |
nkeynes@923 | 3 | # currently check if it actually works correctly, but probably should... |
nkeynes@923 | 4 | # ----------------------- |
nkeynes@923 | 5 | AC_DEFUN([AC_CHECK_FASTCALL], [ |
nkeynes@923 | 6 | AC_MSG_CHECKING([support for fastcall calling conventions]); |
nkeynes@923 | 7 | AC_RUN_IFELSE([ |
nkeynes@923 | 8 | AC_LANG_SOURCE([[ |
nkeynes@923 | 9 | int __attribute__((regparm(3))) foo(int a, int b) { return a+b; } |
nkeynes@923 | 10 | |
nkeynes@923 | 11 | int main(int argc, char *argv[]) |
nkeynes@923 | 12 | { |
nkeynes@923 | 13 | return foo( 1, 2 ) == 3 ? 0 : 1; |
nkeynes@923 | 14 | }]])], [ |
nkeynes@923 | 15 | AC_MSG_RESULT([yes]) |
nkeynes@923 | 16 | $1 ], [ |
nkeynes@923 | 17 | AC_MSG_RESULT([no]) |
nkeynes@923 | 18 | $2 ]) |
nkeynes@923 | 19 | ]) |
nkeynes@923 | 20 | |
nkeynes@927 | 21 | # AC_CHECK_FRAME_ADDRESS([if-ok],[if-notok]) |
nkeynes@927 | 22 | # Test if the compiler will let us modify the return address on the stack |
nkeynes@927 | 23 | # via __builtin_frame_address() |
nkeynes@927 | 24 | # ----------------------- |
nkeynes@927 | 25 | AC_DEFUN([AC_CHECK_FRAME_ADDRESS], [ |
nkeynes@927 | 26 | AC_MSG_CHECKING([if we have a working __builtin_frame_address()]); |
nkeynes@927 | 27 | AC_RUN_IFELSE([ |
nkeynes@927 | 28 | AC_LANG_SOURCE([[ |
nkeynes@927 | 29 | void * __attribute__((noinline)) first_arg( void *x, void *y ) { return x; } |
nkeynes@927 | 30 | int __attribute__((noinline)) foo( int arg, void *exc ) |
nkeynes@927 | 31 | { |
nkeynes@927 | 32 | if( arg < 2 ) { |
nkeynes@927 | 33 | *(((void **)__builtin_frame_address(0))+1) = exc; |
nkeynes@927 | 34 | } |
nkeynes@927 | 35 | return 0; |
nkeynes@927 | 36 | } |
nkeynes@927 | 37 | |
nkeynes@927 | 38 | int main(int argc, char *argv[]) |
nkeynes@927 | 39 | { |
nkeynes@927 | 40 | goto *first_arg(&&start, &&except); |
nkeynes@927 | 41 | |
nkeynes@927 | 42 | start: |
nkeynes@927 | 43 | return foo( argc, &&except ) + 1; |
nkeynes@927 | 44 | |
nkeynes@927 | 45 | except: |
nkeynes@927 | 46 | return 0; |
nkeynes@927 | 47 | }]])], [ |
nkeynes@927 | 48 | AC_MSG_RESULT([yes]) |
nkeynes@927 | 49 | $1 ], [ |
nkeynes@927 | 50 | AC_MSG_RESULT([no]) |
nkeynes@927 | 51 | $2 ]) |
nkeynes@927 | 52 | ]) |
nkeynes@927 | 53 | |
nkeynes@927 | 54 |
.