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
x86
intreadwrite.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2010 Alexander Strange <astrange@ithinksw.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_X86_INTREADWRITE_H
22
#define AVUTIL_X86_INTREADWRITE_H
23
24
#include <stdint.h>
25
#include "
config.h
"
26
#include "
libavutil/attributes.h
"
27
28
#if HAVE_MMX
29
30
#if !HAVE_FAST_64BIT && defined(__MMX__)
31
32
#define AV_COPY64 AV_COPY64
33
static
av_always_inline
void
AV_COPY64
(
void
*d,
const
void
*
s
)
34
{
35
__asm__(
"movq %1, %%mm0 \n\t"
36
"movq %%mm0, %0 \n\t"
37
:
"=m"
(*(uint64_t*)d)
38
:
"m"
(*(
const
uint64_t*)s)
39
:
"mm0"
);
40
}
41
42
#define AV_SWAP64 AV_SWAP64
43
static
av_always_inline
void
AV_SWAP64
(
void
*
a
,
void
*
b
)
44
{
45
__asm__(
"movq %1, %%mm0 \n\t"
46
"movq %0, %%mm1 \n\t"
47
"movq %%mm0, %0 \n\t"
48
"movq %%mm1, %1 \n\t"
49
:
"+m"
(*(uint64_t*)a),
"+m"
(*(uint64_t*)b)
50
::
"mm0"
,
"mm1"
);
51
}
52
53
#define AV_ZERO64 AV_ZERO64
54
static
av_always_inline
void
AV_ZERO64
(
void
*d)
55
{
56
__asm__(
"pxor %%mm0, %%mm0 \n\t"
57
"movq %%mm0, %0 \n\t"
58
:
"=m"
(*(uint64_t*)d)
59
::
"mm0"
);
60
}
61
62
#endif
/* !HAVE_FAST_64BIT && defined(__MMX__) */
63
64
#ifdef __SSE__
65
66
#define AV_COPY128 AV_COPY128
67
static
av_always_inline
void
AV_COPY128
(
void
*d,
const
void
*s)
68
{
69
struct
v {uint64_t v[2];};
70
71
__asm__(
"movaps %1, %%xmm0 \n\t"
72
"movaps %%xmm0, %0 \n\t"
73
:
"=m"
(*(
struct
v*)d)
74
:
"m"
(*(
const
struct
v*)s)
75
:
"xmm0"
);
76
}
77
78
#endif
/* __SSE__ */
79
80
#ifdef __SSE2__
81
82
#define AV_ZERO128 AV_ZERO128
83
static
av_always_inline
void
AV_ZERO128
(
void
*d)
84
{
85
struct
v {uint64_t v[2];};
86
87
__asm__(
"pxor %%xmm0, %%xmm0 \n\t"
88
"movdqa %%xmm0, %0 \n\t"
89
:
"=m"
(*(
struct
v*)d)
90
::
"xmm0"
);
91
}
92
93
#endif
/* __SSE2__ */
94
95
#endif
/* HAVE_MMX */
96
97
#endif
/* AVUTIL_X86_INTREADWRITE_H */
s
const char * s
Definition:
avisynth_c.h:768
b
const char * b
Definition:
vf_curves.c:113
attributes.h
Macro definitions for various function/variable attributes.
config.h
AV_COPY64
#define AV_COPY64(d, s)
Definition:
intreadwrite.h:595
AV_ZERO128
#define AV_ZERO128(d)
Definition:
intreadwrite.h:627
AV_SWAP64
#define AV_SWAP64(a, b)
Definition:
intreadwrite.h:609
AV_ZERO64
#define AV_ZERO64(d)
Definition:
intreadwrite.h:623
AV_COPY128
#define AV_COPY128(d, s)
Definition:
intreadwrite.h:599
av_always_inline
#define av_always_inline
Definition:
attributes.h:39
a
a
Definition:
h264pred_template.c:468
Generated on Fri Jan 12 2018 01:48:06 for FFmpeg by
1.8.6