FFmpeg
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
Examples
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
libavcodec
mips
celp_math_mips.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2012
3
* MIPS Technologies, Inc., California.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions
7
* are met:
8
* 1. Redistributions of source code must retain the above copyright
9
* notice, this list of conditions and the following disclaimer.
10
* 2. Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* 3. Neither the name of the MIPS Technologies, Inc., nor the names of its
14
* contributors may be used to endorse or promote products derived from
15
* this software without specific prior written permission.
16
*
17
* THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND
18
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20
* ARE DISCLAIMED. IN NO EVENT SHALL THE MIPS TECHNOLOGIES, INC. BE LIABLE
21
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27
* SUCH DAMAGE.
28
*
29
* Author: Nedeljko Babic (nbabic@mips.com)
30
*
31
* Math operations optimized for MIPS
32
*
33
* This file is part of FFmpeg.
34
*
35
* FFmpeg is free software; you can redistribute it and/or
36
* modify it under the terms of the GNU Lesser General Public
37
* License as published by the Free Software Foundation; either
38
* version 2.1 of the License, or (at your option) any later version.
39
*
40
* FFmpeg is distributed in the hope that it will be useful,
41
* but WITHOUT ANY WARRANTY; without even the implied warranty of
42
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
43
* Lesser General Public License for more details.
44
*
45
* You should have received a copy of the GNU Lesser General Public
46
* License along with FFmpeg; if not, write to the Free Software
47
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
48
*/
49
50
/**
51
* @file
52
* Reference: libavcodec/celp_math.c
53
*/
54
#include "
config.h
"
55
#include "
libavcodec/celp_math.h
"
56
#include "
libavutil/mips/asmdefs.h
"
57
58
#if HAVE_INLINE_ASM
59
#if !HAVE_MIPS32R6 && !HAVE_MIPS64R6
60
static
float
ff_dot_productf_mips(
const
float
*
a
,
const
float
*
b
,
61
int
length
)
62
{
63
float
sum;
64
const
float
* a_end = a +
length
;
65
66
__asm__
volatile
(
67
"mtc1 $zero, %[sum] \n\t"
68
"blez %[length], ff_dot_productf_end%= \n\t"
69
"ff_dot_productf_madd%=: \n\t"
70
"lwc1 $f2, 0(%[a]) \n\t"
71
"lwc1 $f1, 0(%[b]) \n\t"
72
PTR_ADDIU
"%[a], %[a], 4 \n\t"
73
PTR_ADDIU
"%[b], %[b], 4 \n\t"
74
"madd.s %[sum], %[sum], $f1, $f2 \n\t"
75
"bne %[a], %[a_end], ff_dot_productf_madd%= \n\t"
76
"ff_dot_productf_end%=: \n\t"
77
78
: [sum]
"=&f"
(sum), [a]
"+r"
(a), [
b
]
"+r"
(
b
)
79
: [a_end]
"r"
(a_end), [
length
]
"r"
(
length
)
80
:
"$f1"
,
"$f2"
,
"memory"
81
);
82
return
sum;
83
}
84
#endif
/* !HAVE_MIPS32R6 && !HAVE_MIPS64R6 */
85
#endif
/* HAVE_INLINE_ASM */
86
87
void
ff_celp_math_init_mips
(
CELPMContext
*
c
)
88
{
89
#if HAVE_INLINE_ASM
90
#if !HAVE_MIPS32R6 && !HAVE_MIPS64R6
91
c->
dot_productf
= ff_dot_productf_mips;
92
#endif
93
#endif
94
}
asmdefs.h
MIPS assembly defines from sys/asm.h but rewritten for use with C inline assembly (rather than from w...
b
const char * b
Definition:
vf_curves.c:113
CELPMContext::dot_productf
float(* dot_productf)(const float *a, const float *b, int length)
Return the dot product.
Definition:
celp_math.h:37
config.h
length
GLsizei GLsizei * length
Definition:
opengl_enc.c:115
CELPMContext
Definition:
celp_math.h:28
PTR_ADDIU
#define PTR_ADDIU
Definition:
asmdefs.h:48
c
static double c[64]
Definition:
vsrc_mptestsrc.c:87
celp_math.h
ff_celp_math_init_mips
void ff_celp_math_init_mips(CELPMContext *c)
Definition:
celp_math_mips.c:87
a
a
Definition:
h264pred_template.c:468
Generated on Fri Jan 12 2018 01:47:44 for FFmpeg by
1.8.6