FFmpeg
4.0
libavutil
x86
emms.h
Go to the documentation of this file.
1
/*
2
* This file is part of FFmpeg.
3
*
4
* FFmpeg is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU Lesser General Public
6
* License as published by the Free Software Foundation; either
7
* version 2.1 of the License, or (at your option) any later version.
8
*
9
* FFmpeg is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12
* Lesser General Public License for more details.
13
*
14
* You should have received a copy of the GNU Lesser General Public
15
* License along with FFmpeg; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#ifndef AVUTIL_X86_EMMS_H
20
#define AVUTIL_X86_EMMS_H
21
22
#include "config.h"
23
#include "
libavutil/attributes.h
"
24
#include "
libavutil/cpu.h
"
25
26
void
avpriv_emms_asm
(
void
);
27
28
#if HAVE_MMX_INLINE
29
# define emms_c emms_c
30
/**
31
* Empty mmx state.
32
* this must be called between any dsp function and float/double code.
33
* for example sin(); dsp->idct_put(); emms_c(); cos()
34
* Note, *alloc() and *free() also use float code in some libc implementations
35
* thus this also applies to them or any function using them.
36
*/
37
static
av_always_inline
void
emms_c
(
void
)
38
{
39
/* Some inlined functions may also use mmx instructions regardless of
40
* runtime cpuflags. With that in mind, we unconditionally empty the
41
* mmx state if the target cpu chosen at configure time supports it.
42
*/
43
#if !defined(__MMX__)
44
if
(
av_get_cpu_flags
() &
AV_CPU_FLAG_MMX
)
45
#endif
46
__asm__
volatile
(
"emms"
:::
"memory"
);
47
}
48
#elif HAVE_MMX && HAVE_MM_EMPTY
49
# include <mmintrin.h>
50
# define emms_c _mm_empty
51
#elif HAVE_MMX_EXTERNAL
52
# define emms_c avpriv_emms_asm
53
#endif
/* HAVE_MMX_INLINE */
54
55
#endif
/* AVUTIL_X86_EMMS_H */
attributes.h
Macro definitions for various function/variable attributes.
emms_c
#define emms_c()
Definition:
internal.h:55
avpriv_emms_asm
void avpriv_emms_asm(void)
cpu.h
AV_CPU_FLAG_MMX
#define AV_CPU_FLAG_MMX
standard MMX
Definition:
cpu.h:31
av_get_cpu_flags
int av_get_cpu_flags(void)
Return the flags which specify extensions supported by the CPU.
Definition:
cpu.c:93
av_always_inline
#define av_always_inline
Definition:
attributes.h:39
Generated on Tue May 22 2018 07:07:00 for FFmpeg by
1.8.13