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
418c202c
Commit
418c202c
authored
Dec 22, 2014
by
Ronald S. Bultje
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
vp9/x86: simplify ABSSUM_CMP by inverting the comparison meaning.
parent
d1c55654
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 @
418c202c
...
...
@@ -35,6 +35,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
cextern
pw_4
cextern
pw_8
...
...
@@ -58,20 +59,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
...
...
@@ -438,17 +437,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)
...
...
@@ -456,19 +455,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
)
...
...
@@ -482,18 +481,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
...
...
@@ -516,27 +516,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