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