28 #if !defined(PITCH_ARM_H)
33 # if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
34 opus_val32 celt_inner_prod_neon(
const opus_val16 *x,
const opus_val16 *y,
int N);
35 void dual_inner_prod_neon(
const opus_val16 *x,
const opus_val16 *y01,
36 const opus_val16 *y02,
int N, opus_val32 *xy1, opus_val32 *xy2);
38 # if !defined(OPUS_HAVE_RTCD) && defined(OPUS_ARM_PRESUME_NEON)
39 # define OVERRIDE_CELT_INNER_PROD (1)
40 # define OVERRIDE_DUAL_INNER_PROD (1)
41 # define celt_inner_prod(x, y, N, arch) ((void)(arch), PRESUME_NEON(celt_inner_prod)(x, y, N))
42 # define dual_inner_prod(x, y01, y02, N, xy1, xy2, arch) ((void)(arch), PRESUME_NEON(dual_inner_prod)(x, y01, y02, N, xy1, xy2))
46 # if !defined(OVERRIDE_CELT_INNER_PROD)
47 # if defined(OPUS_HAVE_RTCD) && (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR))
48 extern opus_val32 (*
const CELT_INNER_PROD_IMPL[OPUS_ARCHMASK+1])(
const opus_val16 *x,
const opus_val16 *y,
int N);
49 # define OVERRIDE_CELT_INNER_PROD (1)
50 # define celt_inner_prod(x, y, N, arch) ((*CELT_INNER_PROD_IMPL[(arch)&OPUS_ARCHMASK])(x, y, N))
51 # elif defined(OPUS_ARM_PRESUME_NEON_INTR)
52 # define OVERRIDE_CELT_INNER_PROD (1)
53 # define celt_inner_prod(x, y, N, arch) ((void)(arch), celt_inner_prod_neon(x, y, N))
57 # if !defined(OVERRIDE_DUAL_INNER_PROD)
58 # if defined(OPUS_HAVE_RTCD) && (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR))
59 extern void (*
const DUAL_INNER_PROD_IMPL[OPUS_ARCHMASK+1])(
const opus_val16 *x,
60 const opus_val16 *y01,
const opus_val16 *y02,
int N, opus_val32 *xy1, opus_val32 *xy2);
61 # define OVERRIDE_DUAL_INNER_PROD (1)
62 # define dual_inner_prod(x, y01, y02, N, xy1, xy2, arch) ((*DUAL_INNER_PROD_IMPL[(arch)&OPUS_ARCHMASK])(x, y01, y02, N, xy1, xy2))
63 # elif defined(OPUS_ARM_PRESUME_NEON_INTR)
64 # define OVERRIDE_DUAL_INNER_PROD (1)
65 # define dual_inner_prod(x, y01, y02, N, xy1, xy2, arch) ((void)(arch), dual_inner_prod_neon(x, y01, y02, N, xy1, xy2))
69 # if defined(FIXED_POINT)
71 # if defined(OPUS_ARM_MAY_HAVE_NEON)
72 opus_val32 celt_pitch_xcorr_neon(
const opus_val16 *_x,
const opus_val16 *_y,
73 opus_val32 *xcorr,
int len,
int max_pitch,
int arch);
76 # if defined(OPUS_ARM_MAY_HAVE_MEDIA)
77 # define celt_pitch_xcorr_media MAY_HAVE_EDSP(celt_pitch_xcorr)
80 # if defined(OPUS_ARM_MAY_HAVE_EDSP)
81 opus_val32 celt_pitch_xcorr_edsp(
const opus_val16 *_x,
const opus_val16 *_y,
82 opus_val32 *xcorr,
int len,
int max_pitch,
int arch);
85 # if defined(OPUS_HAVE_RTCD) && \
86 ((defined(OPUS_ARM_MAY_HAVE_NEON) && !defined(OPUS_ARM_PRESUME_NEON)) || \
87 (defined(OPUS_ARM_MAY_HAVE_MEDIA) && !defined(OPUS_ARM_PRESUME_MEDIA)) || \
88 (defined(OPUS_ARM_MAY_HAVE_EDSP) && !defined(OPUS_ARM_PRESUME_EDSP)))
90 (*
const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(
const opus_val16 *,
91 const opus_val16 *, opus_val32 *, int, int, int);
92 # define OVERRIDE_PITCH_XCORR (1)
93 # define celt_pitch_xcorr (*CELT_PITCH_XCORR_IMPL[(arch)&OPUS_ARCHMASK])
95 # elif defined(OPUS_ARM_PRESUME_EDSP) || \
96 defined(OPUS_ARM_PRESUME_MEDIA) || \
97 defined(OPUS_ARM_PRESUME_NEON)
98 # define OVERRIDE_PITCH_XCORR (1)
99 # define celt_pitch_xcorr (PRESUME_NEON(celt_pitch_xcorr))
103 # if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
104 void xcorr_kernel_neon_fixed(
111 # if defined(OPUS_HAVE_RTCD) && \
112 (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR))
114 extern void (*
const XCORR_KERNEL_IMPL[OPUS_ARCHMASK + 1])(
120 # define OVERRIDE_XCORR_KERNEL (1)
121 # define xcorr_kernel(x, y, sum, len, arch) \
122 ((*XCORR_KERNEL_IMPL[(arch) & OPUS_ARCHMASK])(x, y, sum, len))
124 # elif defined(OPUS_ARM_PRESUME_NEON_INTR)
125 # define OVERRIDE_XCORR_KERNEL (1)
126 # define xcorr_kernel(x, y, sum, len, arch) \
127 ((void)arch, xcorr_kernel_neon_fixed(x, y, sum, len))
133 #if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
134 void celt_pitch_xcorr_float_neon(
const opus_val16 *_x,
const opus_val16 *_y,
135 opus_val32 *xcorr,
int len,
int max_pitch);
138 # if defined(OPUS_HAVE_RTCD) && \
139 (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR))
141 (*
const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(
const opus_val16 *,
142 const opus_val16 *, opus_val32 *, int, int);
144 # define OVERRIDE_PITCH_XCORR (1)
145 # define celt_pitch_xcorr (*CELT_PITCH_XCORR_IMPL[(arch)&OPUS_ARCHMASK])
147 # elif defined(OPUS_ARM_PRESUME_NEON_INTR)
149 # define OVERRIDE_PITCH_XCORR (1)
150 # define celt_pitch_xcorr celt_pitch_xcorr_float_neon