History

avfilter/x86/af_afir: add FMA3 SIMD

Paul B Mahol committed 3 years ago

Commit c5effe71 parent 5f810432 files · +32 −0Browse files

Showing the changes to libavfilter (2 of 2 files). Show all

Unified · Split

2 files
  1. libavfilter/x86/af_afir.asm +27 −0
  2. libavfilter/x86/af_afir_init.c +5 −0
libavfilter/x86/af_afir.asm+27−0
@@ -67,3 +67,30 @@ INIT_XMM sse3 · 66 unmodified lines
6767 FCMUL_ADD
6868 INIT_YMM avx
6969 FCMUL_ADD
70+
71+%if HAVE_FMA3_EXTERNAL
72+INIT_YMM fma3
73+cglobal fcmul_add, 4,4,4, sum, t, c, len
74+ shl lend, 3
75+ add tq, lenq
76+ add cq, lenq
77+ add sumq, lenq
78+ neg lenq
79+.loop:
80+ movaps m0, [tq + lenq]
81+ movaps m1, [cq + lenq]
82+ vpermilps m3, m0, 177
83+ vpermilps m2, m1, 160
84+ vpermilps m1, m1, 245
85+ mulps m1, m1, m3
86+ vfmaddsub132ps m0, m1, m2
87+ addps m0, m0, [sumq + lenq]
88+ movaps [sumq + lenq], m0
89+ add lenq, mmsize
90+ jl .loop
91+ movss xm0, [tq + lenq]
92+ mulss xm0, [cq + lenq]
93+ addss xm0, [sumq + lenq]
94+ movss [sumq + lenq], xm0
95+ RET
96+%endif
libavfilter/x86/af_afir_init.c+5−0
@@ -26,6 +26,8 @@ void ff_fcmul_add_sse3(float *sum, const float *t, const float *c, · 25 unmodified lines
2626 ptrdiff_t len);
2727 void ff_fcmul_add_avx(float *sum, const float *t, const float *c,
2828 ptrdiff_t len);
29+void ff_fcmul_add_fma3(float *sum, const float *t, const float *c,
30+ ptrdiff_t len);
2931
3032 av_cold void ff_afir_init_x86(AudioFIRDSPContext *s)
3133 {
@@ -37,4 +39,7 @@ av_cold void ff_afir_init_x86(AudioFIRDSPContext *s) · 5 unmodified lines
3739 if (EXTERNAL_AVX_FAST(cpu_flags)) {
3840 s->fcmul_add = ff_fcmul_add_avx;
3941 }
42+ if (EXTERNAL_FMA3_FAST(cpu_flags)) {
43+ s->fcmul_add = ff_fcmul_add_fma3;
44+ }
4045 }

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t