Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
F
ffmpeg.wasm-core
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Linshizhi
ffmpeg.wasm-core
Commits
53dfaedc
Commit
53dfaedc
authored
Jul 26, 2012
by
Ronald S. Bultje
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
x86/dsputilenc: bury inline asm under HAVE_INLINE_ASM.
parent
9e4bca16
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
63 additions
and
33 deletions
+63
-33
dsputilenc_mmx.c
libavcodec/x86/dsputilenc_mmx.c
+47
-33
fdct_mmx.c
libavcodec/x86/fdct_mmx.c
+4
-0
motion_est_mmx.c
libavcodec/x86/motion_est_mmx.c
+6
-0
mpegvideo_mmx.c
libavcodec/x86/mpegvideo_mmx.c
+6
-0
No files found.
libavcodec/x86/dsputilenc_mmx.c
View file @
53dfaedc
...
@@ -30,6 +30,8 @@
...
@@ -30,6 +30,8 @@
#include "dsputil_mmx.h"
#include "dsputil_mmx.h"
#if HAVE_INLINE_ASM
static
void
get_pixels_mmx
(
DCTELEM
*
block
,
const
uint8_t
*
pixels
,
int
line_size
)
static
void
get_pixels_mmx
(
DCTELEM
*
block
,
const
uint8_t
*
pixels
,
int
line_size
)
{
{
__asm__
volatile
(
__asm__
volatile
(
...
@@ -323,8 +325,6 @@ static int sse16_mmx(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int
...
@@ -323,8 +325,6 @@ static int sse16_mmx(void *v, uint8_t * pix1, uint8_t * pix2, int line_size, int
return
tmp
;
return
tmp
;
}
}
int
ff_sse16_sse2
(
void
*
v
,
uint8_t
*
pix1
,
uint8_t
*
pix2
,
int
line_size
,
int
h
);
static
int
hf_noise8_mmx
(
uint8_t
*
pix1
,
int
line_size
,
int
h
)
{
static
int
hf_noise8_mmx
(
uint8_t
*
pix1
,
int
line_size
,
int
h
)
{
int
tmp
;
int
tmp
;
__asm__
volatile
(
__asm__
volatile
(
...
@@ -925,17 +925,6 @@ static void sub_hfyu_median_prediction_mmx2(uint8_t *dst, const uint8_t *src1, c
...
@@ -925,17 +925,6 @@ static void sub_hfyu_median_prediction_mmx2(uint8_t *dst, const uint8_t *src1, c
"paddusw "#t", "#a" \n\t"\
"paddusw "#t", "#a" \n\t"\
"movd "#a", "#dst" \n\t"\
"movd "#a", "#dst" \n\t"\
#define hadamard_func(cpu) \
int ff_hadamard8_diff_##cpu (void *s, uint8_t *src1, uint8_t *src2, \
int stride, int h); \
int ff_hadamard8_diff16_##cpu(void *s, uint8_t *src1, uint8_t *src2, \
int stride, int h);
hadamard_func
(
mmx
)
hadamard_func
(
mmx2
)
hadamard_func
(
sse2
)
hadamard_func
(
ssse3
)
#define DCT_SAD4(m,mm,o)\
#define DCT_SAD4(m,mm,o)\
"mov"#m" "#o"+ 0(%1), "#mm"2 \n\t"\
"mov"#m" "#o"+ 0(%1), "#mm"2 \n\t"\
"mov"#m" "#o"+16(%1), "#mm"3 \n\t"\
"mov"#m" "#o"+16(%1), "#mm"3 \n\t"\
...
@@ -1094,10 +1083,26 @@ static int ssd_int8_vs_int16_mmx(const int8_t *pix1, const int16_t *pix2, int si
...
@@ -1094,10 +1083,26 @@ static int ssd_int8_vs_int16_mmx(const int8_t *pix1, const int16_t *pix2, int si
#undef PHADDD
#undef PHADDD
#endif //HAVE_SSSE3
#endif //HAVE_SSSE3
#endif
/* HAVE_INLINE_ASM */
int
ff_sse16_sse2
(
void
*
v
,
uint8_t
*
pix1
,
uint8_t
*
pix2
,
int
line_size
,
int
h
);
#define hadamard_func(cpu) \
int ff_hadamard8_diff_##cpu (void *s, uint8_t *src1, uint8_t *src2, \
int stride, int h); \
int ff_hadamard8_diff16_##cpu(void *s, uint8_t *src1, uint8_t *src2, \
int stride, int h);
hadamard_func
(
mmx
)
hadamard_func
(
mmx2
)
hadamard_func
(
sse2
)
hadamard_func
(
ssse3
)
void
ff_dsputilenc_init_mmx
(
DSPContext
*
c
,
AVCodecContext
*
avctx
)
void
ff_dsputilenc_init_mmx
(
DSPContext
*
c
,
AVCodecContext
*
avctx
)
{
{
int
mm_flags
=
av_get_cpu_flags
();
int
mm_flags
=
av_get_cpu_flags
();
#if HAVE_INLINE_ASM
int
bit_depth
=
avctx
->
bits_per_raw_sample
;
int
bit_depth
=
avctx
->
bits_per_raw_sample
;
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
...
@@ -1121,11 +1126,6 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
...
@@ -1121,11 +1126,6 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
c
->
diff_bytes
=
diff_bytes_mmx
;
c
->
diff_bytes
=
diff_bytes_mmx
;
c
->
sum_abs_dctelem
=
sum_abs_dctelem_mmx
;
c
->
sum_abs_dctelem
=
sum_abs_dctelem_mmx
;
#if HAVE_YASM
c
->
hadamard8_diff
[
0
]
=
ff_hadamard8_diff16_mmx
;
c
->
hadamard8_diff
[
1
]
=
ff_hadamard8_diff_mmx
;
#endif
c
->
pix_norm1
=
pix_norm1_mmx
;
c
->
pix_norm1
=
pix_norm1_mmx
;
c
->
sse
[
0
]
=
sse16_mmx
;
c
->
sse
[
0
]
=
sse16_mmx
;
c
->
sse
[
1
]
=
sse8_mmx
;
c
->
sse
[
1
]
=
sse8_mmx
;
...
@@ -1146,10 +1146,6 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
...
@@ -1146,10 +1146,6 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
if
(
mm_flags
&
AV_CPU_FLAG_MMX2
)
{
if
(
mm_flags
&
AV_CPU_FLAG_MMX2
)
{
#if HAVE_YASM
c
->
hadamard8_diff
[
0
]
=
ff_hadamard8_diff16_mmx2
;
c
->
hadamard8_diff
[
1
]
=
ff_hadamard8_diff_mmx2
;
#endif
c
->
sum_abs_dctelem
=
sum_abs_dctelem_mmx2
;
c
->
sum_abs_dctelem
=
sum_abs_dctelem_mmx2
;
c
->
vsad
[
4
]
=
vsad_intra16_mmx2
;
c
->
vsad
[
4
]
=
vsad_intra16_mmx2
;
...
@@ -1164,13 +1160,6 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
...
@@ -1164,13 +1160,6 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
if
(
bit_depth
<=
8
)
if
(
bit_depth
<=
8
)
c
->
get_pixels
=
get_pixels_sse2
;
c
->
get_pixels
=
get_pixels_sse2
;
c
->
sum_abs_dctelem
=
sum_abs_dctelem_sse2
;
c
->
sum_abs_dctelem
=
sum_abs_dctelem_sse2
;
#if HAVE_YASM
c
->
sse
[
0
]
=
ff_sse16_sse2
;
#if HAVE_ALIGNED_STACK
c
->
hadamard8_diff
[
0
]
=
ff_hadamard8_diff16_sse2
;
c
->
hadamard8_diff
[
1
]
=
ff_hadamard8_diff_sse2
;
#endif
#endif
}
}
#if HAVE_SSSE3
#if HAVE_SSSE3
...
@@ -1180,10 +1169,6 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
...
@@ -1180,10 +1169,6 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
}
}
c
->
add_8x8basis
=
add_8x8basis_ssse3
;
c
->
add_8x8basis
=
add_8x8basis_ssse3
;
c
->
sum_abs_dctelem
=
sum_abs_dctelem_ssse3
;
c
->
sum_abs_dctelem
=
sum_abs_dctelem_ssse3
;
#if HAVE_YASM && HAVE_ALIGNED_STACK
c
->
hadamard8_diff
[
0
]
=
ff_hadamard8_diff16_ssse3
;
c
->
hadamard8_diff
[
1
]
=
ff_hadamard8_diff_ssse3
;
#endif
}
}
#endif
#endif
...
@@ -1194,6 +1179,35 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
...
@@ -1194,6 +1179,35 @@ void ff_dsputilenc_init_mmx(DSPContext* c, AVCodecContext *avctx)
c
->
add_8x8basis
=
add_8x8basis_3dnow
;
c
->
add_8x8basis
=
add_8x8basis_3dnow
;
}
}
}
}
#endif
/* HAVE_INLINE_ASM */
#if HAVE_YASM
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
c
->
hadamard8_diff
[
0
]
=
ff_hadamard8_diff16_mmx
;
c
->
hadamard8_diff
[
1
]
=
ff_hadamard8_diff_mmx
;
if
(
mm_flags
&
AV_CPU_FLAG_MMX2
)
{
c
->
hadamard8_diff
[
0
]
=
ff_hadamard8_diff16_mmx2
;
c
->
hadamard8_diff
[
1
]
=
ff_hadamard8_diff_mmx2
;
}
if
(
mm_flags
&
AV_CPU_FLAG_SSE2
){
c
->
sse
[
0
]
=
ff_sse16_sse2
;
#if HAVE_ALIGNED_STACK
c
->
hadamard8_diff
[
0
]
=
ff_hadamard8_diff16_sse2
;
c
->
hadamard8_diff
[
1
]
=
ff_hadamard8_diff_sse2
;
#endif
}
#if HAVE_SSSE3 && HAVE_ALIGNED_STACK
if
(
mm_flags
&
AV_CPU_FLAG_SSSE3
)
{
c
->
hadamard8_diff
[
0
]
=
ff_hadamard8_diff16_ssse3
;
c
->
hadamard8_diff
[
1
]
=
ff_hadamard8_diff_ssse3
;
}
#endif
}
#endif
/* HAVE_YASM */
ff_dsputil_init_pix_mmx
(
c
,
avctx
);
ff_dsputil_init_pix_mmx
(
c
,
avctx
);
}
}
libavcodec/x86/fdct_mmx.c
View file @
53dfaedc
...
@@ -34,6 +34,8 @@
...
@@ -34,6 +34,8 @@
#include "libavutil/x86_cpu.h"
#include "libavutil/x86_cpu.h"
#include "libavcodec/dsputil.h"
#include "libavcodec/dsputil.h"
#if HAVE_INLINE_ASM
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//
//
// constants for the forward DCT
// constants for the forward DCT
...
@@ -579,3 +581,5 @@ void ff_fdct_sse2(int16_t *block)
...
@@ -579,3 +581,5 @@ void ff_fdct_sse2(int16_t *block)
fdct_col_sse2
(
block
,
block1
,
0
);
fdct_col_sse2
(
block
,
block1
,
0
);
fdct_row_sse2
(
block1
,
block
);
fdct_row_sse2
(
block1
,
block
);
}
}
#endif
/* HAVE_INLINE_ASM */
libavcodec/x86/motion_est_mmx.c
View file @
53dfaedc
...
@@ -26,6 +26,8 @@
...
@@ -26,6 +26,8 @@
#include "libavcodec/dsputil.h"
#include "libavcodec/dsputil.h"
#include "dsputil_mmx.h"
#include "dsputil_mmx.h"
#if HAVE_INLINE_ASM
DECLARE_ASM_CONST
(
8
,
uint64_t
,
round_tab
)[
3
]
=
{
DECLARE_ASM_CONST
(
8
,
uint64_t
,
round_tab
)[
3
]
=
{
0x0000000000000000ULL
,
0x0000000000000000ULL
,
0x0001000100010001ULL
,
0x0001000100010001ULL
,
...
@@ -422,8 +424,11 @@ static int sad16_xy2_ ## suf(void *v, uint8_t *blk2, uint8_t *blk1, int stride,
...
@@ -422,8 +424,11 @@ static int sad16_xy2_ ## suf(void *v, uint8_t *blk2, uint8_t *blk1, int stride,
PIX_SAD
(
mmx
)
PIX_SAD
(
mmx
)
PIX_SAD
(
mmx2
)
PIX_SAD
(
mmx2
)
#endif
/* HAVE_INLINE_ASM */
void
ff_dsputil_init_pix_mmx
(
DSPContext
*
c
,
AVCodecContext
*
avctx
)
void
ff_dsputil_init_pix_mmx
(
DSPContext
*
c
,
AVCodecContext
*
avctx
)
{
{
#if HAVE_INLINE_ASM
int
mm_flags
=
av_get_cpu_flags
();
int
mm_flags
=
av_get_cpu_flags
();
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
...
@@ -458,4 +463,5 @@ void ff_dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx)
...
@@ -458,4 +463,5 @@ void ff_dsputil_init_pix_mmx(DSPContext* c, AVCodecContext *avctx)
if
((
mm_flags
&
AV_CPU_FLAG_SSE2
)
&&
!
(
mm_flags
&
AV_CPU_FLAG_3DNOW
)
&&
avctx
->
codec_id
!=
CODEC_ID_SNOW
)
{
if
((
mm_flags
&
AV_CPU_FLAG_SSE2
)
&&
!
(
mm_flags
&
AV_CPU_FLAG_3DNOW
)
&&
avctx
->
codec_id
!=
CODEC_ID_SNOW
)
{
c
->
sad
[
0
]
=
sad16_sse2
;
c
->
sad
[
0
]
=
sad16_sse2
;
}
}
#endif
/* HAVE_INLINE_ASM */
}
}
libavcodec/x86/mpegvideo_mmx.c
View file @
53dfaedc
...
@@ -29,6 +29,8 @@
...
@@ -29,6 +29,8 @@
#include "libavcodec/mpegvideo.h"
#include "libavcodec/mpegvideo.h"
#include "dsputil_mmx.h"
#include "dsputil_mmx.h"
#if HAVE_INLINE_ASM
extern
uint16_t
ff_inv_zigzag_direct16
[
64
];
extern
uint16_t
ff_inv_zigzag_direct16
[
64
];
...
@@ -626,8 +628,11 @@ static void denoise_dct_sse2(MpegEncContext *s, DCTELEM *block){
...
@@ -626,8 +628,11 @@ static void denoise_dct_sse2(MpegEncContext *s, DCTELEM *block){
#include "mpegvideo_mmx_template.c"
#include "mpegvideo_mmx_template.c"
#endif
#endif
#endif
/* HAVE_INLINE_ASM */
void
ff_MPV_common_init_mmx
(
MpegEncContext
*
s
)
void
ff_MPV_common_init_mmx
(
MpegEncContext
*
s
)
{
{
#if HAVE_INLINE_ASM
int
mm_flags
=
av_get_cpu_flags
();
int
mm_flags
=
av_get_cpu_flags
();
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
if
(
mm_flags
&
AV_CPU_FLAG_MMX
)
{
...
@@ -662,4 +667,5 @@ void ff_MPV_common_init_mmx(MpegEncContext *s)
...
@@ -662,4 +667,5 @@ void ff_MPV_common_init_mmx(MpegEncContext *s)
}
}
}
}
}
}
#endif
/* HAVE_INLINE_ASM */
}
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment