Libav
Main Page
Related Pages
Modules
Data Structures
Files
Examples
File List
Globals
libavcodec
x86
audiodsp_mmx.c
Go to the documentation of this file.
1
/*
2
* This file is part of Libav.
3
*
4
* Libav 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
* Libav 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 Libav; if not, write to the Free Software
16
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17
*/
18
19
#include "config.h"
20
#include "
libavutil/x86/asm.h
"
21
#include "
audiodsp.h
"
22
23
#if HAVE_INLINE_ASM
24
25
void
ff_vector_clipf_sse
(
float
*dst,
const
float
*src,
26
float
min
,
float
max,
int
len
)
27
{
28
x86_reg
i = (len - 16) * 4;
29
__asm__
volatile
(
30
"movss %3, %%xmm4 \n\t"
31
"movss %4, %%xmm5 \n\t"
32
"shufps $0, %%xmm4, %%xmm4 \n\t"
33
"shufps $0, %%xmm5, %%xmm5 \n\t"
34
"1: \n\t"
35
"movaps (%2, %0), %%xmm0 \n\t"
// 3/1 on intel
36
"movaps 16(%2, %0), %%xmm1 \n\t"
37
"movaps 32(%2, %0), %%xmm2 \n\t"
38
"movaps 48(%2, %0), %%xmm3 \n\t"
39
"maxps %%xmm4, %%xmm0 \n\t"
40
"maxps %%xmm4, %%xmm1 \n\t"
41
"maxps %%xmm4, %%xmm2 \n\t"
42
"maxps %%xmm4, %%xmm3 \n\t"
43
"minps %%xmm5, %%xmm0 \n\t"
44
"minps %%xmm5, %%xmm1 \n\t"
45
"minps %%xmm5, %%xmm2 \n\t"
46
"minps %%xmm5, %%xmm3 \n\t"
47
"movaps %%xmm0, (%1, %0) \n\t"
48
"movaps %%xmm1, 16(%1, %0) \n\t"
49
"movaps %%xmm2, 32(%1, %0) \n\t"
50
"movaps %%xmm3, 48(%1, %0) \n\t"
51
"sub $64, %0 \n\t"
52
"jge 1b \n\t"
53
:
"+&r"
(i)
54
:
"r"
(dst),
"r"
(src),
"m"
(min),
"m"
(max)
55
:
"memory"
);
56
}
57
58
#endif
/* HAVE_INLINE_ASM */
ff_vector_clipf_sse
void ff_vector_clipf_sse(float *dst, const float *src, float min, float max, int len)
x86_reg
int x86_reg
Definition:
asm.h:70
asm.h
audiodsp.h
len
int len
Definition:
vorbis_enc_data.h:452
min
float min
Definition:
vorbis_enc_data.h:456
Generated on Sat Mar 30 2019 22:34:12 for Libav by
1.8.8