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
arm
mathops.h
Go to the documentation of this file.
1
/*
2
* simple math operations
3
* Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al
4
*
5
* This file is part of FFmpeg.
6
*
7
* FFmpeg is free software; you can redistribute it and/or
8
* modify it under the terms of the GNU Lesser General Public
9
* License as published by the Free Software Foundation; either
10
* version 2.1 of the License, or (at your option) any later version.
11
*
12
* FFmpeg is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
* Lesser General Public License for more details.
16
*
17
* You should have received a copy of the GNU Lesser General Public
18
* License along with FFmpeg; if not, write to the Free Software
19
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20
*/
21
22
#ifndef AVCODEC_ARM_MATHOPS_H
23
#define AVCODEC_ARM_MATHOPS_H
24
25
#include <stdint.h>
26
#include "
config.h
"
27
#include "
libavutil/common.h
"
28
29
#if HAVE_INLINE_ASM
30
31
#if HAVE_ARMV6_INLINE
32
#define MULH MULH
33
static
inline
av_const
int
MULH
(
int
a
,
int
b
)
34
{
35
int
r
;
36
__asm__ (
"smmul %0, %1, %2"
:
"=r"
(r) :
"r"
(a),
"r"
(b));
37
return
r
;
38
}
39
40
#define FASTDIV FASTDIV
41
static
av_always_inline
av_const
int
FASTDIV
(
int
a,
int
b)
42
{
43
int
r
;
44
__asm__ (
"cmp %2, #2 \n\t"
45
"ldr %0, [%3, %2, lsl #2] \n\t"
46
"ite le \n\t"
47
"lsrle %0, %1, #1 \n\t"
48
"smmulgt %0, %0, %1 \n\t"
49
:
"=&r"
(r) :
"r"
(a),
"r"
(b),
"r"
(
ff_inverse
) :
"cc"
);
50
return
r
;
51
}
52
53
#else
/* HAVE_ARMV6_INLINE */
54
55
#define FASTDIV FASTDIV
56
static
av_always_inline
av_const
int
FASTDIV
(
int
a,
int
b)
57
{
58
int
r
, t;
59
__asm__ (
"umull %1, %0, %2, %3"
60
:
"=&r"
(r),
"=&r"
(t) :
"r"
(a),
"r"
(
ff_inverse
[b]));
61
return
r
;
62
}
63
#endif
64
65
#define MLS64(d, a, b) MAC64(d, -(a), b)
66
67
#if HAVE_ARMV5TE_INLINE
68
69
/* signed 16x16 -> 32 multiply add accumulate */
70
# define MAC16(rt, ra, rb) \
71
__asm__ ("smlabb %0, %1, %2, %0" : "+r"(rt) : "r"(ra), "r"(rb));
72
73
/* signed 16x16 -> 32 multiply */
74
# define MUL16 MUL16
75
static
inline
av_const
int
MUL16
(
int
ra
,
int
rb)
76
{
77
int
rt;
78
__asm__ (
"smulbb %0, %1, %2"
:
"=r"
(rt) :
"r"
(ra),
"r"
(rb));
79
return
rt;
80
}
81
82
#endif
83
84
#define mid_pred mid_pred
85
static
inline
av_const
int
mid_pred
(
int
a,
int
b,
int
c
)
86
{
87
int
m;
88
__asm__ (
89
"mov %0, %2 \n\t"
90
"cmp %1, %2 \n\t"
91
"itt gt \n\t"
92
"movgt %0, %1 \n\t"
93
"movgt %1, %2 \n\t"
94
"cmp %1, %3 \n\t"
95
"it le \n\t"
96
"movle %1, %3 \n\t"
97
"cmp %0, %1 \n\t"
98
"it gt \n\t"
99
"movgt %0, %1 \n\t"
100
:
"=&r"
(m),
"+r"
(a)
101
:
"r"
(b),
"r"
(c)
102
:
"cc"
);
103
return
m;
104
}
105
106
#endif
/* HAVE_INLINE_ASM */
107
108
#endif
/* AVCODEC_ARM_MATHOPS_H */
av_const
#define av_const
Definition:
attributes.h:76
b
const char * b
Definition:
vf_curves.c:113
ff_inverse
const uint32_t ff_inverse[257]
Definition:
mathtables.c:27
config.h
r
const char * r
Definition:
vf_curves.c:111
MUL16
#define MUL16(ra, rb)
Definition:
mathops.h:88
ra
#define ra
Definition:
regdef.h:57
FASTDIV
#define FASTDIV(a, b)
Definition:
mathops.h:202
mid_pred
#define mid_pred
Definition:
mathops.h:97
common.h
common internal and external API header
c
static double c[64]
Definition:
vsrc_mptestsrc.c:87
av_always_inline
#define av_always_inline
Definition:
attributes.h:39
a
a
Definition:
h264pred_template.c:468
MULH
#define MULH
Definition:
mathops.h:42
Generated on Fri Jan 12 2018 01:47:38 for FFmpeg by
1.8.6