FFmpeg
4.0
libavcodec
ppc
mathops.h
Go to the documentation of this file.
1
/*
2
* simple math operations
3
* Copyright (c) 2001, 2002 Fabrice Bellard
4
* Copyright (c) 2006 Michael Niedermayer <michaelni@gmx.at> et al
5
*
6
* This file is part of FFmpeg.
7
*
8
* FFmpeg is free software; you can redistribute it and/or
9
* modify it under the terms of the GNU Lesser General Public
10
* License as published by the Free Software Foundation; either
11
* version 2.1 of the License, or (at your option) any later version.
12
*
13
* FFmpeg is distributed in the hope that it will be useful,
14
* but WITHOUT ANY WARRANTY; without even the implied warranty of
15
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16
* Lesser General Public License for more details.
17
*
18
* You should have received a copy of the GNU Lesser General Public
19
* License along with FFmpeg; if not, write to the Free Software
20
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
21
*/
22
23
#ifndef AVCODEC_PPC_MATHOPS_H
24
#define AVCODEC_PPC_MATHOPS_H
25
26
#include <stdint.h>
27
#include "config.h"
28
#include "
libavutil/common.h
"
29
30
#if HAVE_PPC4XX
31
/* signed 16x16 -> 32 multiply add accumulate */
32
#define MAC16(rt, ra, rb) \
33
__asm__ ("maclhw %0, %2, %3" : "=r" (rt) : "0" (rt), "r" (ra), "r" (rb));
34
35
/* signed 16x16 -> 32 multiply */
36
#define MUL16(ra, rb) \
37
({ int __rt; \
38
__asm__ ("mullhw %0, %1, %2" : "=r" (__rt) : "r" (ra), "r" (rb)); \
39
__rt; })
40
#endif
41
42
#define MULH MULH
43
static
inline
av_const
int
MULH
(
int
a
,
int
b
){
44
int
r
;
45
__asm__ (
"mulhw %0, %1, %2"
:
"=r"
(r) :
"r"
(a),
"r"
(b));
46
return
r
;
47
}
48
49
#if !ARCH_PPC64
50
static
inline
av_const
int64_t
MAC64
(int64_t d,
int
a
,
int
b
)
51
{
52
union
{ uint64_t x;
unsigned
hl[2]; } x = { d };
53
int
h
, l;
54
__asm__ (
"mullw %3, %4, %5 \n\t"
55
"mulhw %2, %4, %5 \n\t"
56
"addc %1, %1, %3 \n\t"
57
"adde %0, %0, %2 \n\t"
58
:
"+r"
(x.hl[0]),
"+r"
(x.hl[1]),
"=&r"
(h),
"=&r"
(l)
59
:
"r"
(a),
"r"
(b));
60
return
x.x;
61
}
62
#define MAC64(d, a, b) ((d) = MAC64(d, a, b))
63
64
static
inline
av_const
int64_t
MLS64
(int64_t d,
int
a
,
int
b
)
65
{
66
union
{ uint64_t x;
unsigned
hl[2]; } x = { d };
67
int
h
, l;
68
__asm__ (
"mullw %3, %4, %5 \n\t"
69
"mulhw %2, %4, %5 \n\t"
70
"subfc %1, %3, %1 \n\t"
71
"subfe %0, %2, %0 \n\t"
72
:
"+r"
(x.hl[0]),
"+r"
(x.hl[1]),
"=&r"
(h),
"=&r"
(l)
73
:
"r"
(a),
"r"
(b));
74
return
x.x;
75
}
76
#define MLS64(d, a, b) ((d) = MLS64(d, a, b))
77
#endif
78
79
#endif
/* AVCODEC_PPC_MATHOPS_H */
av_const
#define av_const
Definition:
attributes.h:76
h
h
Definition:
vp9dsp_template.c:2038
b
const char * b
Definition:
vf_curves.c:113
r
const char * r
Definition:
vf_curves.c:111
MAC64
#define MAC64(d, a, b)
Definition:
mathops.h:62
common.h
common internal and external API header
MLS64
#define MLS64(d, a, b)
Definition:
mathops.h:76
a
a
Definition:
h264pred_template.c:468
MULH
#define MULH
Definition:
mathops.h:42
Generated on Tue May 22 2018 07:06:28 for FFmpeg by
1.8.13