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
e4961035
Commit
e4961035
authored
Dec 22, 2014
by
Ronald S. Bultje
Committed by
Anton Khirnov
Oct 04, 2016
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vp9lpf/x86: simplify ABSSUM_CMP by inverting the comparison meaning.
Signed-off-by:
Anton Khirnov
<
anton@khirnov.net
>
parent
683da278
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
52 additions
and
51 deletions
+52
-51
vp9lpf.asm
libavcodec/x86/vp9lpf.asm
+52
-51
No files found.
libavcodec/x86/vp9lpf.asm
View file @
e4961035
...
...
@@ -36,6 +36,7 @@ pb_40: times 16 db 0x40
pb_81
:
times
16
db
0x81
pb_f8
:
times
16
db
0xf8
pb_fe
:
times
16
db
0xfe
pb_ff
:
times
16
db
0xff
pw_4
:
times
8
dw
4
pw_8
:
times
8
dw
8
...
...
@@ -59,20 +60,18 @@ SECTION .text
por
%1
,
%4
%endmacro
; %1 = %1
<=
%2
%macro
CMP_
LTE
3
-
4
; src/dst, cmp, t
mp, pb_80
%if
%0
==
4
pxor
%1
,
%
4
; %1 = %1
>
%2
%macro
CMP_
GT
2
-
3
; src/dst, c
mp, pb_80
%if
%0
==
3
pxor
%1
,
%
3
%endif
pcmpgtb
%3
,
%2
,
%1
; cmp > src?
pcmpeqb
%1
,
%2
; cmp == src? XXX: avoid this with a -1/+1 well placed?
por
%1
,
%3
; cmp >= src?
pcmpgtb
%1
,
%2
%endmacro
; %1 = abs(%2-%3)
<=
%4
%macro
ABSSUB_
CMP
5
-
6
[
pb_80
]
; dst, src1, src2, cmp, tmp, [pb_80]
; %1 = abs(%2-%3)
>
%4
%macro
ABSSUB_
GT
5
-
6
[
pb_80
]
; dst, src1, src2, cmp, tmp, [pb_80]
ABSSUB
%1
,
%2
,
%3
,
%5
; dst = abs(src1-src2)
CMP_
LTE
%1
,
%4
,
%5
,
%6
; dst <=
cmp
CMP_
GT
%1
,
%4
,
%6
; dst >
cmp
%endmacro
%macro
MASK_APPLY
4
; %1=new_data/dst %2=old_data %3=mask %4=tmp
...
...
@@ -439,17 +438,17 @@ cglobal vp9_loop_filter_%1_%2_16, 2, 6, 16, %3, dst, stride, mstride, dst2, stri
SWAP
10
,
6
,
14
SWAP
11
,
7
,
15
%endif
ABSSUB_
CMP
m5
,
m8
,
m9
,
m2
,
m7
,
m0
; m5 = abs(p3-p2) <= I
ABSSUB_
CMP
m1
,
m9
,
m10
,
m2
,
m7
,
m0
; m1 = abs(p2-p1) <= I
p
and
m5
,
m1
ABSSUB_
CMP
m1
,
m10
,
m11
,
m2
,
m7
,
m0
; m1 = abs(p1-p0) <= I
p
and
m5
,
m1
ABSSUB_
CMP
m1
,
m12
,
m13
,
m2
,
m7
,
m0
; m1 = abs(q1-q0) <= I
p
and
m5
,
m1
ABSSUB_
CMP
m1
,
m13
,
m14
,
m2
,
m7
,
m0
; m1 = abs(q2-q1) <= I
p
and
m5
,
m1
ABSSUB_
CMP
m1
,
m14
,
m15
,
m2
,
m7
,
m0
; m1 = abs(q3-q2) <= I
p
and
m5
,
m1
ABSSUB_
GT
m5
,
m8
,
m9
,
m2
,
m7
,
m0
; m5 = abs(p3-p2) <= I
ABSSUB_
GT
m1
,
m9
,
m10
,
m2
,
m7
,
m0
; m1 = abs(p2-p1) <= I
p
or
m5
,
m1
ABSSUB_
GT
m1
,
m10
,
m11
,
m2
,
m7
,
m0
; m1 = abs(p1-p0) <= I
p
or
m5
,
m1
ABSSUB_
GT
m1
,
m12
,
m13
,
m2
,
m7
,
m0
; m1 = abs(q1-q0) <= I
p
or
m5
,
m1
ABSSUB_
GT
m1
,
m13
,
m14
,
m2
,
m7
,
m0
; m1 = abs(q2-q1) <= I
p
or
m5
,
m1
ABSSUB_
GT
m1
,
m14
,
m15
,
m2
,
m7
,
m0
; m1 = abs(q3-q2) <= I
p
or
m5
,
m1
ABSSUB
m1
,
m11
,
m12
,
m7
; abs(p0-q0)
paddusb
m1
,
m1
; abs(p0-q0) * 2
ABSSUB
m2
,
m10
,
m13
,
m7
; abs(p1-q1)
...
...
@@ -457,19 +456,19 @@ cglobal vp9_loop_filter_%1_%2_16, 2, 6, 16, %3, dst, stride, mstride, dst2, stri
psrlq
m2
,
1
; abs(p1-q1)/2
paddusb
m1
,
m2
; abs(p0-q0)*2 + abs(p1-q1)/2
pxor
m1
,
m0
pcmpgtb
m
4
,
m3
,
m1
; E > X?
p
cmpeqb
m3
,
m1
; E == X?
por
m3
,
m4
; E >= X?
p
and
m3
,
m5
; fm final value
pcmpgtb
m
1
,
m3
p
or
m1
,
m5
; fm final value
SWAP
1
,
3
p
xor
m3
,
[
pb_ff
]
; (m3: fm, m8..15: p3 p2 p1 p0 q0 q1 q2 q3)
; calc flat8in (if not 44_16) and hev masks
mova
m6
,
[
pb_81
]
; [1 1 1 1 ...] ^ 0x80
%if
%2
!
=
44
ABSSUB_
CMP
m2
,
m8
,
m11
,
m6
,
m5
; abs(p3 - p0) <= 1
ABSSUB_
GT
m2
,
m8
,
m11
,
m6
,
m5
; abs(p3 - p0) <= 1
mova
m8
,
[
pb_80
]
ABSSUB_
CMP
m1
,
m9
,
m11
,
m6
,
m5
,
m8
; abs(p2 - p0) <= 1
p
and
m2
,
m1
ABSSUB_
GT
m1
,
m9
,
m11
,
m6
,
m5
,
m8
; abs(p2 - p0) <= 1
p
or
m2
,
m1
ABSSUB
m4
,
m10
,
m11
,
m5
; abs(p1 - p0)
%if
%2
==
16
%if
cpuflag
(
ssse3
)
...
...
@@ -483,18 +482,19 @@ cglobal vp9_loop_filter_%1_%2_16, 2, 6, 16, %3, dst, stride, mstride, dst2, stri
pxor
m7
,
m8
pxor
m4
,
m8
pcmpgtb
m0
,
m4
,
m7
; abs(p1 - p0) > H (1/2 hev condition)
CMP_
LTE
m4
,
m6
,
m5
; abs(p1 - p0) <= 1
p
and
m2
,
m4
; (flat8in)
CMP_
GT
m4
,
m6
; abs(p1 - p0) <= 1
p
or
m2
,
m4
; (flat8in)
ABSSUB
m4
,
m13
,
m12
,
m1
; abs(q1 - q0)
pxor
m4
,
m8
pcmpgtb
m5
,
m4
,
m7
; abs(q1 - q0) > H (2/2 hev condition)
por
m0
,
m5
; hev final value
CMP_LTE
m4
,
m6
,
m5
; abs(q1 - q0) <= 1
pand
m2
,
m4
; (flat8in)
ABSSUB_CMP
m1
,
m14
,
m12
,
m6
,
m5
,
m8
; abs(q2 - q0) <= 1
pand
m2
,
m1
ABSSUB_CMP
m1
,
m15
,
m12
,
m6
,
m5
,
m8
; abs(q3 - q0) <= 1
pand
m2
,
m1
; flat8in final value
CMP_GT
m4
,
m6
; abs(q1 - q0) <= 1
por
m2
,
m4
; (flat8in)
ABSSUB_GT
m1
,
m14
,
m12
,
m6
,
m5
,
m8
; abs(q2 - q0) <= 1
por
m2
,
m1
ABSSUB_GT
m1
,
m15
,
m12
,
m6
,
m5
,
m8
; abs(q3 - q0) <= 1
por
m2
,
m1
; flat8in final value
pxor
m2
,
[
pb_ff
]
%if
%2
==
84
||
%2
==
48
pand
m2
,
[
mask_mix
%2
]
%endif
...
...
@@ -517,27 +517,28 @@ cglobal vp9_loop_filter_%1_%2_16, 2, 6, 16, %3, dst, stride, mstride, dst2, stri
; calc flat8out mask
mova
m8
,
[P7]
mova
m9
,
[P6]
ABSSUB_
CMP
m1
,
m8
,
m11
,
m6
,
m5
; abs(p7 - p0) <= 1
ABSSUB_
CMP
m7
,
m9
,
m11
,
m6
,
m5
; abs(p6 - p0) <= 1
p
and
m1
,
m7
ABSSUB_
GT
m1
,
m8
,
m11
,
m6
,
m5
; abs(p7 - p0) <= 1
ABSSUB_
GT
m7
,
m9
,
m11
,
m6
,
m5
; abs(p6 - p0) <= 1
p
or
m1
,
m7
mova
m8
,
[P5]
mova
m9
,
[P4]
ABSSUB_
CMP
m7
,
m8
,
m11
,
m6
,
m5
; abs(p5 - p0) <= 1
p
and
m1
,
m7
ABSSUB_
CMP
m7
,
m9
,
m11
,
m6
,
m5
; abs(p4 - p0) <= 1
p
and
m1
,
m7
ABSSUB_
GT
m7
,
m8
,
m11
,
m6
,
m5
; abs(p5 - p0) <= 1
p
or
m1
,
m7
ABSSUB_
GT
m7
,
m9
,
m11
,
m6
,
m5
; abs(p4 - p0) <= 1
p
or
m1
,
m7
mova
m14
,
[Q4]
mova
m15
,
[Q5]
ABSSUB_
CMP
m7
,
m14
,
m12
,
m6
,
m5
; abs(q4 - q0) <= 1
p
and
m1
,
m7
ABSSUB_
CMP
m7
,
m15
,
m12
,
m6
,
m5
; abs(q5 - q0) <= 1
p
and
m1
,
m7
ABSSUB_
GT
m7
,
m14
,
m12
,
m6
,
m5
; abs(q4 - q0) <= 1
p
or
m1
,
m7
ABSSUB_
GT
m7
,
m15
,
m12
,
m6
,
m5
; abs(q5 - q0) <= 1
p
or
m1
,
m7
mova
m14
,
[Q6]
mova
m15
,
[Q7]
ABSSUB_CMP
m7
,
m14
,
m12
,
m6
,
m5
; abs(q4 - q0) <= 1
pand
m1
,
m7
ABSSUB_CMP
m7
,
m15
,
m12
,
m6
,
m5
; abs(q5 - q0) <= 1
pand
m1
,
m7
; flat8out final value
ABSSUB_GT
m7
,
m14
,
m12
,
m6
,
m5
; abs(q4 - q0) <= 1
por
m1
,
m7
ABSSUB_GT
m7
,
m15
,
m12
,
m6
,
m5
; abs(q5 - q0) <= 1
por
m1
,
m7
; flat8out final value
pxor
m1
,
[
pb_ff
]
%endif
; if (fm) {
...
...
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