neon: fix neon detection and compilation

This commit is contained in:
Wim Taymans 2020-04-03 13:30:08 +02:00
parent ab3a6d3441
commit a81e269a7e
3 changed files with 9 additions and 14 deletions

View file

@ -95,17 +95,12 @@ have_avx = cc.has_argument(avx_args)
have_avx2 = cc.has_argument(avx2_args)
have_neon = false
if host_machine.cpu_family() == 'arm' or host_machine.cpu_family() == 'aarch64'
if cc.compiles(
'''
#include <arm_neon.h>
int32x4_t testfunc(int16_t *a, int16_t *b) {
return vmull_s16(vld1_s16(a), vld1_s16(b));
}
''',
name : 'NEON support')
have_neon = true
endif
if host_machine.cpu_family() == 'aarch64'
neon_args = []
have_neon = true
elif cc.has_argument('-mfpu=neon')
neon_args = ['-mfpu=neon']
have_neon = true
endif

View file

@ -89,7 +89,7 @@ if have_neon
audioconvert_neon = static_library('audioconvert_neon',
['resample-native-neon.c',
'fmt-ops-neon.c' ],
c_args : ['-O3', '-DHAVE_NEON'],
c_args : [neon_args, '-O3', '-DHAVE_NEON'],
include_directories : [spa_inc],
install : false
)

View file

@ -132,7 +132,7 @@ static void inner_product_neon(float *d, const float * SPA_RESTRICT s,
"5:"
" vadd.f32 d0, d0, d1\n"
" vpadd.f32 d0, d0, d0\n"
" str d0, [%[d]]\n"
" vstr d0, [%[d]]\n"
: [d] "+r" (d), [s] "+r" (s), [taps] "+r" (taps),
[n_taps] "+l" (n_taps), [remainder] "+l" (remainder)
:
@ -209,7 +209,7 @@ static void inner_product_ip_neon(float *d, const float * SPA_RESTRICT s,
" vmla.f32 q0, q2, q10\n" /* sum[0] += sum[1] * x */
" vadd.f32 d0, d0, d1\n"
" vpadd.f32 d0, d0, d0\n"
" str d0, [%[d]]\n"
" vstr d0, [%[d]]\n"
: [d] "+r" (d), [s] "+r" (s), [t0] "+r" (t0), [t1] "+r" (t1),
[n_taps] "+l" (n_taps), [x] "+l" (x)
: