Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
小白菜888
Ffmpeg
提交
f99a5ef9
F
Ffmpeg
项目概览
小白菜888
/
Ffmpeg
通知
3
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
F
Ffmpeg
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
f99a5ef9
编写于
6月 30, 2011
作者:
J
Justin Ruggles
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ac3dsp: add x86-optimized versions of ac3dsp.extract_exponents().
上级
8b7b2d6a
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
111 addition
and
0 deletion
+111
-0
libavcodec/x86/ac3dsp.asm
libavcodec/x86/ac3dsp.asm
+102
-0
libavcodec/x86/ac3dsp_mmx.c
libavcodec/x86/ac3dsp_mmx.c
+9
-0
未找到文件。
libavcodec/x86/ac3dsp.asm
浏览文件 @
f99a5ef9
...
...
@@ -32,6 +32,11 @@ cextern ac3_bap_bits
pw_bap_mul1:
dw
21846
,
21846
,
0
,
32768
,
21846
,
21846
,
0
,
32768
pw_bap_mul2:
dw
5
,
7
,
0
,
7
,
5
,
7
,
0
,
7
; used in ff_ac3_extract_exponents()
pd_1:
times
4
dd
1
pd_151:
times
4
dd
151
pb_shuf_4dwb:
db
0
,
4
,
8
,
12
SECTION
.text
;-----------------------------------------------------------------------------
...
...
@@ -346,3 +351,100 @@ cglobal ac3_compute_mantissa_size_sse2, 1,2,4, mant_cnt, sum
movd
eax
,
m0
add
eax
,
sumd
RET
;------------------------------------------------------------------------------
; void ff_ac3_extract_exponents(uint8_t *exp, int32_t *coef, int nb_coefs)
;------------------------------------------------------------------------------
%macro PABSD_MMX 2
; src/dst, tmp
pxor
%
2
,
%
2
pcmpgtd
%
2
,
%
1
pxor
%
1
,
%
2
psubd
%
1
,
%
2
%endmacro
%macro PABSD_SSSE3 1-2
; src/dst, unused
pabsd
%
1
,
%
1
%endmacro
%ifdef HAVE_AMD3DNOW
INIT_MMX
cglobal
ac3_extract_exponents_3dnow
,
3
,
3
,
0
,
exp
,
coef
,
len
add
expq
,
lenq
lea
coefq
,
[
coefq
+
4
*
lenq
]
neg
lenq
movq
m3
,
[
pd_1
]
movq
m4
,
[
pd_151
]
.loop:
movq
m0
,
[
coefq
+
4
*
lenq
]
movq
m1
,
[
coefq
+
4
*
lenq
+
8
]
PABSD_MMX
m0
,
m2
PABSD_MMX
m1
,
m2
pslld
m0
,
1
por
m0
,
m3
pi2fd
m2
,
m0
psrld
m2
,
23
movq
m0
,
m4
psubd
m0
,
m2
pslld
m1
,
1
por
m1
,
m3
pi2fd
m2
,
m1
psrld
m2
,
23
movq
m1
,
m4
psubd
m1
,
m2
packssdw
m0
,
m0
packuswb
m0
,
m0
packssdw
m1
,
m1
packuswb
m1
,
m1
punpcklwd
m0
,
m1
movd
[
expq
+
lenq
],
m0
add
lenq
,
4
jl
.loop
REP_RET
%endif
%macro AC3_EXTRACT_EXPONENTS 1
cglobal
ac3_extract_exponents_
%
1
,
3
,
3
,
5
,
exp
,
coef
,
len
add
expq
,
lenq
lea
coefq
,
[
coefq
+
4
*
lenq
]
neg
lenq
mova
m2
,
[
pd_1
]
mova
m3
,
[
pd_151
]
%ifidn %1, ssse3
;
movd
m4
,
[
pb_shuf_4dwb
]
%endif
.loop:
; move 4 32-bit coefs to xmm0
mova
m0
,
[
coefq
+
4
*
lenq
]
; absolute value
PABSD
m0
,
m1
; convert to float and extract exponents
pslld
m0
,
1
por
m0
,
m2
cvtdq2ps
m1
,
m0
psrld
m1
,
23
mova
m0
,
m3
psubd
m0
,
m1
; move the lowest byte in each of 4 dwords to the low dword
%ifidn %1, ssse3
pshufb
m0
,
m4
%else
packssdw
m0
,
m0
packuswb
m0
,
m0
%endif
movd
[
expq
+
lenq
],
m0
add
lenq
,
4
jl
.loop
REP_RET
%endmacro
%ifdef HAVE_SSE
INIT_XMM
%define PABSD PABSD_MMX
AC3_EXTRACT_EXPONENTS
ss
e2
%ifdef HAVE_SSSE3
%define PABSD PABSD_SSSE3
AC3_EXTRACT_EXPONENTS
ss
se3
%endif
%endif
libavcodec/x86/ac3dsp_mmx.c
浏览文件 @
f99a5ef9
...
...
@@ -44,6 +44,10 @@ extern void ff_float_to_fixed24_sse2 (int32_t *dst, const float *src, unsigned i
extern
int
ff_ac3_compute_mantissa_size_sse2
(
uint16_t
mant_cnt
[
6
][
16
]);
extern
void
ff_ac3_extract_exponents_3dnow
(
uint8_t
*
exp
,
int32_t
*
coef
,
int
nb_coefs
);
extern
void
ff_ac3_extract_exponents_sse2
(
uint8_t
*
exp
,
int32_t
*
coef
,
int
nb_coefs
);
extern
void
ff_ac3_extract_exponents_ssse3
(
uint8_t
*
exp
,
int32_t
*
coef
,
int
nb_coefs
);
av_cold
void
ff_ac3dsp_init_x86
(
AC3DSPContext
*
c
,
int
bit_exact
)
{
int
mm_flags
=
av_get_cpu_flags
();
...
...
@@ -56,6 +60,7 @@ av_cold void ff_ac3dsp_init_x86(AC3DSPContext *c, int bit_exact)
c
->
ac3_rshift_int32
=
ff_ac3_rshift_int32_mmx
;
}
if
(
mm_flags
&
AV_CPU_FLAG_3DNOW
&&
HAVE_AMD3DNOW
)
{
c
->
extract_exponents
=
ff_ac3_extract_exponents_3dnow
;
if
(
!
bit_exact
)
{
c
->
float_to_fixed24
=
ff_float_to_fixed24_3dnow
;
}
...
...
@@ -72,6 +77,7 @@ av_cold void ff_ac3dsp_init_x86(AC3DSPContext *c, int bit_exact)
c
->
ac3_max_msb_abs_int16
=
ff_ac3_max_msb_abs_int16_sse2
;
c
->
float_to_fixed24
=
ff_float_to_fixed24_sse2
;
c
->
compute_mantissa_size
=
ff_ac3_compute_mantissa_size_sse2
;
c
->
extract_exponents
=
ff_ac3_extract_exponents_sse2
;
if
(
!
(
mm_flags
&
AV_CPU_FLAG_SSE2SLOW
))
{
c
->
ac3_lshift_int16
=
ff_ac3_lshift_int16_sse2
;
c
->
ac3_rshift_int32
=
ff_ac3_rshift_int32_sse2
;
...
...
@@ -79,6 +85,9 @@ av_cold void ff_ac3dsp_init_x86(AC3DSPContext *c, int bit_exact)
}
if
(
mm_flags
&
AV_CPU_FLAG_SSSE3
&&
HAVE_SSSE3
)
{
c
->
ac3_max_msb_abs_int16
=
ff_ac3_max_msb_abs_int16_ssse3
;
if
(
!
(
mm_flags
&
AV_CPU_FLAG_ATOM
))
{
c
->
extract_exponents
=
ff_ac3_extract_exponents_ssse3
;
}
}
#endif
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录