xref: /aosp_15_r20/external/libopus/m4/as-gcc-inline-assembly.m4 (revision a58d3d2adb790c104798cd88c8a3aff4fa8b82cc)
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