1*a58d3d2aSXin Lidnl as-gcc-inline-assembly.m4 0.1.0 2*a58d3d2aSXin Li 3*a58d3d2aSXin Lidnl autostars m4 macro for detection of gcc inline assembly 4*a58d3d2aSXin Li 5*a58d3d2aSXin Lidnl David Schleef <[email protected]> 6*a58d3d2aSXin Li 7*a58d3d2aSXin Lidnl AS_COMPILER_FLAG(ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED]) 8*a58d3d2aSXin Lidnl Tries to compile with the given CFLAGS. 9*a58d3d2aSXin Lidnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags, 10*a58d3d2aSXin Lidnl and ACTION-IF-NOT-ACCEPTED otherwise. 11*a58d3d2aSXin Li 12*a58d3d2aSXin LiAC_DEFUN([AS_GCC_INLINE_ASSEMBLY], 13*a58d3d2aSXin Li[ 14*a58d3d2aSXin Li AC_MSG_CHECKING([if compiler supports gcc-style inline assembly]) 15*a58d3d2aSXin Li 16*a58d3d2aSXin Li AC_TRY_COMPILE([], [ 17*a58d3d2aSXin Li#ifdef __GNUC_MINOR__ 18*a58d3d2aSXin Li#if (__GNUC__ * 1000 + __GNUC_MINOR__) < 3004 19*a58d3d2aSXin Li#error GCC before 3.4 has critical bugs compiling inline assembly 20*a58d3d2aSXin Li#endif 21*a58d3d2aSXin Li#endif 22*a58d3d2aSXin Li__asm__ (""::) ], [flag_ok=yes], [flag_ok=no]) 23*a58d3d2aSXin Li 24*a58d3d2aSXin Li if test "X$flag_ok" = Xyes ; then 25*a58d3d2aSXin Li $1 26*a58d3d2aSXin Li true 27*a58d3d2aSXin Li else 28*a58d3d2aSXin Li $2 29*a58d3d2aSXin Li true 30*a58d3d2aSXin Li fi 31*a58d3d2aSXin Li AC_MSG_RESULT([$flag_ok]) 32*a58d3d2aSXin Li]) 33*a58d3d2aSXin Li 34*a58d3d2aSXin LiAC_DEFUN([AS_ASM_ARM_NEON], 35*a58d3d2aSXin Li[ 36*a58d3d2aSXin Li AC_MSG_CHECKING([if assembler supports NEON instructions on ARM]) 37*a58d3d2aSXin Li 38*a58d3d2aSXin Li AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[__asm__("vorr d0,d0,d0")])], 39*a58d3d2aSXin Li [AC_MSG_RESULT([yes]) 40*a58d3d2aSXin Li $1], 41*a58d3d2aSXin Li [AC_MSG_RESULT([no]) 42*a58d3d2aSXin Li $2]) 43*a58d3d2aSXin Li]) 44*a58d3d2aSXin Li 45*a58d3d2aSXin LiAC_DEFUN([AS_ASM_ARM_NEON_FORCE], 46*a58d3d2aSXin Li[ 47*a58d3d2aSXin Li AC_MSG_CHECKING([if assembler supports NEON instructions on ARM]) 48*a58d3d2aSXin Li 49*a58d3d2aSXin Li AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[__asm__(".arch armv7-a\n.fpu neon\n.object_arch armv4t\nvorr d0,d0,d0")])], 50*a58d3d2aSXin Li [AC_MSG_RESULT([yes]) 51*a58d3d2aSXin Li $1], 52*a58d3d2aSXin Li [AC_MSG_RESULT([no]) 53*a58d3d2aSXin Li $2]) 54*a58d3d2aSXin Li]) 55*a58d3d2aSXin Li 56*a58d3d2aSXin LiAC_DEFUN([AS_ASM_ARM_MEDIA], 57*a58d3d2aSXin Li[ 58*a58d3d2aSXin Li AC_MSG_CHECKING([if assembler supports ARMv6 media instructions on ARM]) 59*a58d3d2aSXin Li 60*a58d3d2aSXin Li AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[__asm__("shadd8 r3,r3,r3")])], 61*a58d3d2aSXin Li [AC_MSG_RESULT([yes]) 62*a58d3d2aSXin Li $1], 63*a58d3d2aSXin Li [AC_MSG_RESULT([no]) 64*a58d3d2aSXin Li $2]) 65*a58d3d2aSXin Li]) 66*a58d3d2aSXin Li 67*a58d3d2aSXin LiAC_DEFUN([AS_ASM_ARM_MEDIA_FORCE], 68*a58d3d2aSXin Li[ 69*a58d3d2aSXin Li AC_MSG_CHECKING([if assembler supports ARMv6 media instructions on ARM]) 70*a58d3d2aSXin Li 71*a58d3d2aSXin Li AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[__asm__(".arch armv6\n.object_arch armv4t\nshadd8 r3,r3,r3")])], 72*a58d3d2aSXin Li [AC_MSG_RESULT([yes]) 73*a58d3d2aSXin Li $1], 74*a58d3d2aSXin Li [AC_MSG_RESULT([no]) 75*a58d3d2aSXin Li $2]) 76*a58d3d2aSXin Li]) 77*a58d3d2aSXin Li 78*a58d3d2aSXin LiAC_DEFUN([AS_ASM_ARM_EDSP], 79*a58d3d2aSXin Li[ 80*a58d3d2aSXin Li AC_MSG_CHECKING([if assembler supports EDSP instructions on ARM]) 81*a58d3d2aSXin Li 82*a58d3d2aSXin Li AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[__asm__("qadd r3,r3,r3")])], 83*a58d3d2aSXin Li [AC_MSG_RESULT([yes]) 84*a58d3d2aSXin Li $1], 85*a58d3d2aSXin Li [AC_MSG_RESULT([no]) 86*a58d3d2aSXin Li $2]) 87*a58d3d2aSXin Li]) 88*a58d3d2aSXin Li 89*a58d3d2aSXin LiAC_DEFUN([AS_ASM_ARM_EDSP_FORCE], 90*a58d3d2aSXin Li[ 91*a58d3d2aSXin Li AC_MSG_CHECKING([if assembler supports EDSP instructions on ARM]) 92*a58d3d2aSXin Li 93*a58d3d2aSXin Li AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[__asm__(".arch armv5te\n.object_arch armv4t\nqadd r3,r3,r3")])], 94*a58d3d2aSXin Li [AC_MSG_RESULT([yes]) 95*a58d3d2aSXin Li $1], 96*a58d3d2aSXin Li [AC_MSG_RESULT([no]) 97*a58d3d2aSXin Li $2]) 98*a58d3d2aSXin Li]) 99