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
libavutil
arm
intmath.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2010 Mans Rullgard <mans@mansr.com>
3
*
4
* This file is part of FFmpeg.
5
*
6
* FFmpeg is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU Lesser General Public
8
* License as published by the Free Software Foundation; either
9
* version 2.1 of the License, or (at your option) any later version.
10
*
11
* FFmpeg is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
* Lesser General Public License for more details.
15
*
16
* You should have received a copy of the GNU Lesser General Public
17
* License along with FFmpeg; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19
*/
20
21
#ifndef AVUTIL_ARM_INTMATH_H
22
#define AVUTIL_ARM_INTMATH_H
23
24
#include <stdint.h>
25
26
#include "
config.h
"
27
#include "
libavutil/attributes.h
"
28
29
#if HAVE_INLINE_ASM
30
31
#if HAVE_ARMV6_INLINE
32
33
#define av_clip_uint8 av_clip_uint8_arm
34
static
av_always_inline
av_const
int
av_clip_uint8_arm(
int
a
)
35
{
36
int
x;
37
__asm__ (
"usat %0, #8, %1"
:
"=r"
(x) :
"r"
(a));
38
return
x;
39
}
40
41
#define av_clip_int8 av_clip_int8_arm
42
static
av_always_inline
av_const
int
av_clip_int8_arm(
int
a)
43
{
44
int
x;
45
__asm__ (
"ssat %0, #8, %1"
:
"=r"
(x) :
"r"
(a));
46
return
x;
47
}
48
49
#define av_clip_uint16 av_clip_uint16_arm
50
static
av_always_inline
av_const
int
av_clip_uint16_arm(
int
a)
51
{
52
int
x;
53
__asm__ (
"usat %0, #16, %1"
:
"=r"
(x) :
"r"
(a));
54
return
x;
55
}
56
57
#define av_clip_int16 av_clip_int16_arm
58
static
av_always_inline
av_const
int
av_clip_int16_arm(
int
a)
59
{
60
int
x;
61
__asm__ (
"ssat %0, #16, %1"
:
"=r"
(x) :
"r"
(a));
62
return
x;
63
}
64
65
#define av_clip_intp2 av_clip_intp2_arm
66
static
av_always_inline
av_const
int
av_clip_intp2_arm(
int
a,
int
p)
67
{
68
unsigned
x;
69
__asm__ (
"ssat %0, %2, %1"
:
"=r"
(x) :
"r"
(a),
"i"
(p+1));
70
return
x;
71
}
72
73
#define av_clip_uintp2 av_clip_uintp2_arm
74
static
av_always_inline
av_const
unsigned
av_clip_uintp2_arm(
int
a,
int
p)
75
{
76
unsigned
x;
77
__asm__ (
"usat %0, %2, %1"
:
"=r"
(x) :
"r"
(a),
"i"
(p));
78
return
x;
79
}
80
81
#define av_sat_add32 av_sat_add32_arm
82
static
av_always_inline
int
av_sat_add32_arm(
int
a,
int
b
)
83
{
84
int
r
;
85
__asm__ (
"qadd %0, %1, %2"
:
"=r"
(r) :
"r"
(a),
"r"
(b));
86
return
r
;
87
}
88
89
#define av_sat_dadd32 av_sat_dadd32_arm
90
static
av_always_inline
int
av_sat_dadd32_arm(
int
a,
int
b)
91
{
92
int
r
;
93
__asm__ (
"qdadd %0, %1, %2"
:
"=r"
(r) :
"r"
(a),
"r"
(b));
94
return
r
;
95
}
96
97
#endif
/* HAVE_ARMV6_INLINE */
98
99
#if HAVE_ASM_MOD_Q
100
101
#define av_clipl_int32 av_clipl_int32_arm
102
static
av_always_inline
av_const
int32_t
av_clipl_int32_arm(int64_t a)
103
{
104
int
x,
y
;
105
__asm__ (
"adds %1, %R2, %Q2, lsr #31 \n\t"
106
"itet ne \n\t"
107
"mvnne %1, #1<<31 \n\t"
108
"moveq %0, %Q2 \n\t"
109
"eorne %0, %1, %R2, asr #31 \n\t"
110
:
"=r"
(x),
"=&r"
(y) :
"r"
(a) :
"cc"
);
111
return
x;
112
}
113
114
#endif
/* HAVE_ASM_MOD_Q */
115
116
#endif
/* HAVE_INLINE_ASM */
117
118
#endif
/* AVUTIL_ARM_INTMATH_H */
av_const
#define av_const
Definition:
attributes.h:68
b
const char * b
Definition:
vf_curves.c:109
attributes.h
Macro definitions for various function/variable attributes.
config.h
r
const char * r
Definition:
vf_curves.c:107
y
float y
Definition:
avf_showspectrum.c:96
int32_t
int32_t
Definition:
audio_convert.c:194
av_always_inline
#define av_always_inline
Definition:
attributes.h:37
a
a
Definition:
h264pred_template.c:468
Generated on Thu Sep 10 2015 11:39:06 for FFmpeg by
1.8.6