mirror of
https://gitlab.freedesktop.org/pulseaudio/pulseaudio.git
synced 2025-10-29 05:40:23 -04:00
volume: Add explicit checks for ARMv6 instructions
This ensures that the build does not fail if the ssat and pkhbt instructions are not available (armv5te and below). Fixes: http://www.pulseaudio.org/ticket/790
This commit is contained in:
parent
6828c594e3
commit
12b900858a
2 changed files with 36 additions and 5 deletions
33
configure.ac
33
configure.ac
|
|
@ -227,7 +227,7 @@ else
|
|||
[pulseaudio_cv_support_arm_atomic_ops=no])
|
||||
])
|
||||
AS_IF([test "$pulseaudio_cv_support_arm_atomic_ops" = "yes"], [
|
||||
AC_DEFINE([ATOMIC_ARM_INLINE_ASM], 1, [Have ARMv6 instructions.])
|
||||
AC_DEFINE([ATOMIC_ARM_INLINE_ASM], 1, [Have ARM atomic instructions.])
|
||||
need_libatomic_ops=no
|
||||
])
|
||||
fi
|
||||
|
|
@ -246,6 +246,37 @@ else
|
|||
esac
|
||||
fi
|
||||
|
||||
# If we're on ARM, check for the ARMV6 instructions we need */
|
||||
case $host in
|
||||
arm*)
|
||||
AC_CACHE_CHECK([support for required armv6 instructions],
|
||||
pulseaudio_cv_support_armv6,
|
||||
[AC_COMPILE_IFELSE(
|
||||
AC_LANG_PROGRAM([],
|
||||
[[volatile int a = -60000, b = 0xaaaabbbb, c = 0xccccdddd;
|
||||
asm volatile ("ldr r0, %2 \n"
|
||||
"ldr r2, %3 \n"
|
||||
"ldr r3, %4 \n"
|
||||
"ssat r1, #8, r0 \n"
|
||||
"str r1, %0 \n"
|
||||
"pkhbt r1, r3, r2, LSL #8 \n"
|
||||
"str r1, %1 \n"
|
||||
: "=m" (a), "=m" (b)
|
||||
: "m" (a), "m" (b), "m" (c)
|
||||
: "r0", "r1", "r2", "r3", "cc");
|
||||
return (a == -128 && b == 0xaabbdddd) ? 0 : -1;
|
||||
]]),
|
||||
[pulseaudio_cv_support_armv6=yes],
|
||||
[pulseaudio_cv_support_armv6=no])
|
||||
])
|
||||
AS_IF([test "$pulseaudio_cv_support_armv6" = "yes"], [
|
||||
AC_DEFINE([HAVE_ARMV6], 1, [Have ARMv6 instructions.])
|
||||
])
|
||||
;;
|
||||
*)
|
||||
;;
|
||||
esac
|
||||
|
||||
CC_CHECK_TLS
|
||||
|
||||
AC_CACHE_CHECK([whether $CC knows _Bool],
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@
|
|||
#include "sample-util.h"
|
||||
#include "endianmacros.h"
|
||||
|
||||
#if defined (__arm__)
|
||||
#if defined (__arm__) && defined (HAVE_ARMV6)
|
||||
|
||||
#define MOD_INC() \
|
||||
" subs r0, r6, %2 \n\t" \
|
||||
|
|
@ -182,11 +182,11 @@ static void run_test (void) {
|
|||
}
|
||||
#endif
|
||||
|
||||
#endif /* defined (__arm__) */
|
||||
#endif /* defined (__arm__) && defined (HAVE_ARMV6) */
|
||||
|
||||
|
||||
void pa_volume_func_init_arm (pa_cpu_arm_flag_t flags) {
|
||||
#if defined (__arm__)
|
||||
#if defined (__arm__) && defined (HAVE_ARMV6)
|
||||
pa_log_info("Initialising ARM optimized functions.");
|
||||
|
||||
#ifdef RUN_TEST
|
||||
|
|
@ -194,5 +194,5 @@ void pa_volume_func_init_arm (pa_cpu_arm_flag_t flags) {
|
|||
#endif
|
||||
|
||||
pa_set_volume_func (PA_SAMPLE_S16NE, (pa_do_volume_func_t) pa_volume_s16ne_arm);
|
||||
#endif /* defined (__arm__) */
|
||||
#endif /* defined (__arm__) && defined (HAVE_ARMV6) */
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue