annotate src/opus-1.3/celt/arm/pitch_arm.h @ 168:ceec0dd9ec9c

Replace these with versions built using an older toolset (so as to avoid ABI compatibilities when linking on Ubuntu 14.04 for packaging purposes)
author Chris Cannam <cannam@all-day-breakfast.com>
date Fri, 07 Feb 2020 11:51:13 +0000
parents 4664ac0c1032
children
rev   line source
cannam@154 1 /* Copyright (c) 2010 Xiph.Org Foundation
cannam@154 2 * Copyright (c) 2013 Parrot */
cannam@154 3 /*
cannam@154 4 Redistribution and use in source and binary forms, with or without
cannam@154 5 modification, are permitted provided that the following conditions
cannam@154 6 are met:
cannam@154 7
cannam@154 8 - Redistributions of source code must retain the above copyright
cannam@154 9 notice, this list of conditions and the following disclaimer.
cannam@154 10
cannam@154 11 - Redistributions in binary form must reproduce the above copyright
cannam@154 12 notice, this list of conditions and the following disclaimer in the
cannam@154 13 documentation and/or other materials provided with the distribution.
cannam@154 14
cannam@154 15 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
cannam@154 16 ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
cannam@154 17 LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
cannam@154 18 A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
cannam@154 19 OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
cannam@154 20 EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
cannam@154 21 PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
cannam@154 22 PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
cannam@154 23 LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
cannam@154 24 NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
cannam@154 25 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
cannam@154 26 */
cannam@154 27
cannam@154 28 #if !defined(PITCH_ARM_H)
cannam@154 29 # define PITCH_ARM_H
cannam@154 30
cannam@154 31 # include "armcpu.h"
cannam@154 32
cannam@154 33 # if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
cannam@154 34 opus_val32 celt_inner_prod_neon(const opus_val16 *x, const opus_val16 *y, int N);
cannam@154 35 void dual_inner_prod_neon(const opus_val16 *x, const opus_val16 *y01,
cannam@154 36 const opus_val16 *y02, int N, opus_val32 *xy1, opus_val32 *xy2);
cannam@154 37
cannam@154 38 # if !defined(OPUS_HAVE_RTCD) && defined(OPUS_ARM_PRESUME_NEON)
cannam@154 39 # define OVERRIDE_CELT_INNER_PROD (1)
cannam@154 40 # define OVERRIDE_DUAL_INNER_PROD (1)
cannam@154 41 # define celt_inner_prod(x, y, N, arch) ((void)(arch), PRESUME_NEON(celt_inner_prod)(x, y, N))
cannam@154 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))
cannam@154 43 # endif
cannam@154 44 # endif
cannam@154 45
cannam@154 46 # if !defined(OVERRIDE_CELT_INNER_PROD)
cannam@154 47 # if defined(OPUS_HAVE_RTCD) && (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR))
cannam@154 48 extern opus_val32 (*const CELT_INNER_PROD_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *x, const opus_val16 *y, int N);
cannam@154 49 # define OVERRIDE_CELT_INNER_PROD (1)
cannam@154 50 # define celt_inner_prod(x, y, N, arch) ((*CELT_INNER_PROD_IMPL[(arch)&OPUS_ARCHMASK])(x, y, N))
cannam@154 51 # elif defined(OPUS_ARM_PRESUME_NEON_INTR)
cannam@154 52 # define OVERRIDE_CELT_INNER_PROD (1)
cannam@154 53 # define celt_inner_prod(x, y, N, arch) ((void)(arch), celt_inner_prod_neon(x, y, N))
cannam@154 54 # endif
cannam@154 55 # endif
cannam@154 56
cannam@154 57 # if !defined(OVERRIDE_DUAL_INNER_PROD)
cannam@154 58 # if defined(OPUS_HAVE_RTCD) && (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR))
cannam@154 59 extern void (*const DUAL_INNER_PROD_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *x,
cannam@154 60 const opus_val16 *y01, const opus_val16 *y02, int N, opus_val32 *xy1, opus_val32 *xy2);
cannam@154 61 # define OVERRIDE_DUAL_INNER_PROD (1)
cannam@154 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))
cannam@154 63 # elif defined(OPUS_ARM_PRESUME_NEON_INTR)
cannam@154 64 # define OVERRIDE_DUAL_INNER_PROD (1)
cannam@154 65 # define dual_inner_prod(x, y01, y02, N, xy1, xy2, arch) ((void)(arch), dual_inner_prod_neon(x, y01, y02, N, xy1, xy2))
cannam@154 66 # endif
cannam@154 67 # endif
cannam@154 68
cannam@154 69 # if defined(FIXED_POINT)
cannam@154 70
cannam@154 71 # if defined(OPUS_ARM_MAY_HAVE_NEON)
cannam@154 72 opus_val32 celt_pitch_xcorr_neon(const opus_val16 *_x, const opus_val16 *_y,
cannam@154 73 opus_val32 *xcorr, int len, int max_pitch, int arch);
cannam@154 74 # endif
cannam@154 75
cannam@154 76 # if defined(OPUS_ARM_MAY_HAVE_MEDIA)
cannam@154 77 # define celt_pitch_xcorr_media MAY_HAVE_EDSP(celt_pitch_xcorr)
cannam@154 78 # endif
cannam@154 79
cannam@154 80 # if defined(OPUS_ARM_MAY_HAVE_EDSP)
cannam@154 81 opus_val32 celt_pitch_xcorr_edsp(const opus_val16 *_x, const opus_val16 *_y,
cannam@154 82 opus_val32 *xcorr, int len, int max_pitch, int arch);
cannam@154 83 # endif
cannam@154 84
cannam@154 85 # if defined(OPUS_HAVE_RTCD) && \
cannam@154 86 ((defined(OPUS_ARM_MAY_HAVE_NEON) && !defined(OPUS_ARM_PRESUME_NEON)) || \
cannam@154 87 (defined(OPUS_ARM_MAY_HAVE_MEDIA) && !defined(OPUS_ARM_PRESUME_MEDIA)) || \
cannam@154 88 (defined(OPUS_ARM_MAY_HAVE_EDSP) && !defined(OPUS_ARM_PRESUME_EDSP)))
cannam@154 89 extern opus_val32
cannam@154 90 (*const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *,
cannam@154 91 const opus_val16 *, opus_val32 *, int, int, int);
cannam@154 92 # define OVERRIDE_PITCH_XCORR (1)
cannam@154 93 # define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
cannam@154 94 ((*CELT_PITCH_XCORR_IMPL[(arch)&OPUS_ARCHMASK])(_x, _y, \
cannam@154 95 xcorr, len, max_pitch, arch))
cannam@154 96
cannam@154 97 # elif defined(OPUS_ARM_PRESUME_EDSP) || \
cannam@154 98 defined(OPUS_ARM_PRESUME_MEDIA) || \
cannam@154 99 defined(OPUS_ARM_PRESUME_NEON)
cannam@154 100 # define OVERRIDE_PITCH_XCORR (1)
cannam@154 101 # define celt_pitch_xcorr (PRESUME_NEON(celt_pitch_xcorr))
cannam@154 102
cannam@154 103 # endif
cannam@154 104
cannam@154 105 # if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
cannam@154 106 void xcorr_kernel_neon_fixed(
cannam@154 107 const opus_val16 *x,
cannam@154 108 const opus_val16 *y,
cannam@154 109 opus_val32 sum[4],
cannam@154 110 int len);
cannam@154 111 # endif
cannam@154 112
cannam@154 113 # if defined(OPUS_HAVE_RTCD) && \
cannam@154 114 (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR))
cannam@154 115
cannam@154 116 extern void (*const XCORR_KERNEL_IMPL[OPUS_ARCHMASK + 1])(
cannam@154 117 const opus_val16 *x,
cannam@154 118 const opus_val16 *y,
cannam@154 119 opus_val32 sum[4],
cannam@154 120 int len);
cannam@154 121
cannam@154 122 # define OVERRIDE_XCORR_KERNEL (1)
cannam@154 123 # define xcorr_kernel(x, y, sum, len, arch) \
cannam@154 124 ((*XCORR_KERNEL_IMPL[(arch) & OPUS_ARCHMASK])(x, y, sum, len))
cannam@154 125
cannam@154 126 # elif defined(OPUS_ARM_PRESUME_NEON_INTR)
cannam@154 127 # define OVERRIDE_XCORR_KERNEL (1)
cannam@154 128 # define xcorr_kernel(x, y, sum, len, arch) \
cannam@154 129 ((void)arch, xcorr_kernel_neon_fixed(x, y, sum, len))
cannam@154 130
cannam@154 131 # endif
cannam@154 132
cannam@154 133 #else /* Start !FIXED_POINT */
cannam@154 134 /* Float case */
cannam@154 135 #if defined(OPUS_ARM_MAY_HAVE_NEON_INTR)
cannam@154 136 void celt_pitch_xcorr_float_neon(const opus_val16 *_x, const opus_val16 *_y,
cannam@154 137 opus_val32 *xcorr, int len, int max_pitch, int arch);
cannam@154 138 #endif
cannam@154 139
cannam@154 140 # if defined(OPUS_HAVE_RTCD) && \
cannam@154 141 (defined(OPUS_ARM_MAY_HAVE_NEON_INTR) && !defined(OPUS_ARM_PRESUME_NEON_INTR))
cannam@154 142 extern void
cannam@154 143 (*const CELT_PITCH_XCORR_IMPL[OPUS_ARCHMASK+1])(const opus_val16 *,
cannam@154 144 const opus_val16 *, opus_val32 *, int, int, int);
cannam@154 145
cannam@154 146 # define OVERRIDE_PITCH_XCORR (1)
cannam@154 147 # define celt_pitch_xcorr(_x, _y, xcorr, len, max_pitch, arch) \
cannam@154 148 ((*CELT_PITCH_XCORR_IMPL[(arch)&OPUS_ARCHMASK])(_x, _y, \
cannam@154 149 xcorr, len, max_pitch, arch))
cannam@154 150
cannam@154 151 # elif defined(OPUS_ARM_PRESUME_NEON_INTR)
cannam@154 152
cannam@154 153 # define OVERRIDE_PITCH_XCORR (1)
cannam@154 154 # define celt_pitch_xcorr celt_pitch_xcorr_float_neon
cannam@154 155
cannam@154 156 # endif
cannam@154 157
cannam@154 158 #endif /* end !FIXED_POINT */
cannam@154 159
cannam@154 160 #endif