Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Raphael Zumer
aom-rav1e
Commits
15de7bd3
Commit
15de7bd3
authored
Aug 06, 2015
by
James Zern
Committed by
Gerrit Code Review
Aug 06, 2015
Browse files
Merge "Revert "VP9_COPY_CONVOLVE_SSE2 optimization""
parents
c54d1650
afd2f68d
Changes
1
Hide whitespace changes
Inline
Side-by-side
vpx_dsp/x86/vpx_convolve_copy_sse2.asm
View file @
15de7bd3
...
...
@@ -16,289 +16,140 @@ SECTION .text
%macro convolve_fn 1
INIT_XMM
ss
e2
cglobal
convolve_
%
1
,
4
,
7
,
8
,
src
,
src_stride
,
ds
t
,
ds
t_stride
,
\
cglobal
convolve_
%
1
,
4
,
7
,
4
,
src
,
src_stride
,
ds
t
,
ds
t_stride
,
\
fx
,
fxs
,
fy
,
fys
,
w
,
h
mov
r4d
,
dword
wm
cmp
r4d
,
4
mov
r4d
,
dword
wm
cmp
r4d
,
4
je
.w4
cmp
r4d
,
8
cmp
r4d
,
8
je
.w8
cmp
r4d
,
16
cmp
r4d
,
16
je
.w16
cmp
r4d
,
32
cmp
r4d
,
32
je
.w32
; 64xh
mov
r4d
,
dword
hm
shr
r4d
,
1
; ASSUMPTION: hm is at least EVEN
sub
r4d
,
1
movu
m0
,
[
srcq
]
movu
m4
,
[
srcq
+
src_strideq
]
movu
m1
,
[
srcq
+
16
]
movu
m5
,
[
srcq
+
src_strideq
+
16
]
movu
m2
,
[
srcq
+
32
]
movu
m6
,
[
srcq
+
src_strideq
+
32
]
movu
m3
,
[
srcq
+
48
]
movu
m7
,
[
srcq
+
src_strideq
+
48
]
mov
r4d
,
dword
hm
.loop64:
prefetcht0
[
srcq
+
64
]
prefetcht0
[
srcq
+
src_strideq
+
64
]
lea
srcq
,
[
srcq
+
src_strideq
*
2
]
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
16
]
movu
m2
,
[
srcq
+
32
]
movu
m3
,
[
srcq
+
48
]
add
srcq
,
src_strideq
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
16
]
mova
[
ds
tq
],
m0
movu
m0
,
[
srcq
]
mova
[
ds
tq
+
16
],
m1
movu
m1
,
[
srcq
+
16
]
pavgb
m2
,
[
ds
tq
+
32
]
mova
[
ds
tq
+
32
],
m2
movu
m2
,
[
srcq
+
32
]
pavgb
m3
,
[
ds
tq
+
48
]
mova
[
ds
tq
+
48
],
m3
movu
m3
,
[
srcq
+
48
]
pavgb
m4
,
[
ds
tq
+
ds
t_strideq
]
mova
[
ds
tq
+
ds
t_strideq
],
m4
movu
m4
,
[
srcq
+
src_strideq
]
pavgb
m5
,
[
ds
tq
+
ds
t_strideq
+
16
]
mova
[
ds
tq
+
ds
t_strideq
+
16
],
m5
movu
m5
,
[
srcq
+
src_strideq
+
16
]
pavgb
m6
,
[
ds
tq
+
ds
t_strideq
+
32
]
mova
[
ds
tq
+
ds
t_strideq
+
32
],
m6
movu
m6
,
[
srcq
+
src_strideq
+
32
]
pavgb
m7
,
[
ds
tq
+
ds
t_strideq
+
48
]
mova
[
ds
tq
+
ds
t_strideq
+
48
],
m7
movu
m7
,
[
srcq
+
src_strideq
+
48
]
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
2
]
%else
mova
[
ds
tq
],
m0
movu
m0
,
[
srcq
]
mova
[
ds
tq
+
16
],
m1
movu
m1
,
[
srcq
+
16
]
mova
[
ds
tq
+
32
],
m2
movu
m2
,
[
srcq
+
32
]
mova
[
ds
tq
+
48
],
m3
movu
m3
,
[
srcq
+
48
]
mova
[
ds
tq
+
ds
t_strideq
],
m4
movu
m4
,
[
srcq
+
src_strideq
]
mova
[
ds
tq
+
ds
t_strideq
+
16
],
m5
movu
m5
,
[
srcq
+
src_strideq
+
16
]
mova
[
ds
tq
+
ds
t_strideq
+
32
],
m6
movu
m6
,
[
srcq
+
src_strideq
+
32
]
mova
[
ds
tq
+
ds
t_strideq
+
48
],
m7
movu
m7
,
[
srcq
+
src_strideq
+
48
]
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
2
]
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
16
]
pavgb
m2
,
[
ds
tq
+
32
]
pavgb
m3
,
[
ds
tq
+
48
]
%endif
dec
r4d
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
16
],
m1
mova
[
ds
tq
+
32
],
m2
mova
[
ds
tq
+
48
],
m3
add
ds
tq
,
ds
t_strideq
dec
r4d
jnz
.loop64
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
16
]
pavgb
m2
,
[
ds
tq
+
32
]
pavgb
m3
,
[
ds
tq
+
48
]
pavgb
m4
,
[
ds
tq
+
ds
t_strideq
]
pavgb
m5
,
[
ds
tq
+
ds
t_strideq
+
16
]
pavgb
m6
,
[
ds
tq
+
ds
t_strideq
+
32
]
pavgb
m7
,
[
ds
tq
+
ds
t_strideq
+
48
]
%endif
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
16
],
m1
mova
[
ds
tq
+
32
],
m2
mova
[
ds
tq
+
48
],
m3
mova
[
ds
tq
+
ds
t_strideq
],
m4
mova
[
ds
tq
+
ds
t_strideq
+
16
],
m5
mova
[
ds
tq
+
ds
t_strideq
+
32
],
m6
mova
[
ds
tq
+
ds
t_strideq
+
48
],
m7
RET
.w32:
mov
r4d
,
dword
hm
sub
r4d
,
2
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
16
]
movu
m2
,
[
srcq
+
src_strideq
]
movu
m3
,
[
srcq
+
src_strideq
+
16
]
mov
r4d
,
dword
hm
.loop32:
prefetcht0
[
srcq
+
64
]
prefetcht0
[
srcq
+
src_strideq
+
64
]
lea
srcq
,
[
srcq
+
src_strideq
*
2
]
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
16
]
movu
m2
,
[
srcq
+
src_strideq
]
movu
m3
,
[
srcq
+
src_strideq
+
16
]
lea
srcq
,
[
srcq
+
src_strideq
*
2
]
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
16
]
pavgb
m2
,
[
ds
tq
+
ds
t_strideq
]
pavgb
m3
,
[
ds
tq
+
ds
t_strideq
+
16
]
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
16
]
pavgb
m2
,
[
ds
tq
+
ds
t_strideq
]
pavgb
m3
,
[
ds
tq
+
ds
t_strideq
+
16
]
%endif
mova
[
ds
tq
],
m0
movu
m0
,
[
srcq
]
mova
[
ds
tq
+
16
],
m1
movu
m1
,
[
srcq
+
16
]
mova
[
ds
tq
+
ds
t_strideq
],
m2
movu
m2
,
[
srcq
+
src_strideq
]
mova
[
ds
tq
+
ds
t_strideq
+
16
],
m3
movu
m3
,
[
srcq
+
src_strideq
+
16
]
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
2
]
sub
r4d
,
2
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
16
],
m1
mova
[
ds
tq
+
ds
t_strideq
],
m2
mova
[
ds
tq
+
ds
t_strideq
+
16
],
m3
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
2
]
sub
r4d
,
2
jnz
.loop32
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
16
]
pavgb
m2
,
[
ds
tq
+
ds
t_strideq
]
pavgb
m3
,
[
ds
tq
+
ds
t_strideq
+
16
]
%endif
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
16
],
m1
mova
[
ds
tq
+
ds
t_strideq
],
m2
mova
[
ds
tq
+
ds
t_strideq
+
16
],
m3
RET
.w16:
mov
r4d
,
dword
hm
sub
r4d
,
4
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
src_strideq
]
mov
r4d
,
dword
hm
lea
r5q
,
[
src_strideq
*
3
]
lea
r6q
,
[
ds
t_strideq
*
3
]
.loop16:
lea
srcq
,
[
srcq
+
src_strideq
]
prefetcht0
[
srcq
+
src_strideq
*
4
]
lea
srcq
,
[
srcq
+
src_strideq
]
prefetcht0
[
srcq
+
src_strideq
*
2
]
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
src_strideq
]
movu
m2
,
[
srcq
+
src_strideq
*
2
]
movu
m3
,
[
srcq
+
r5q
]
lea
srcq
,
[
srcq
+
src_strideq
*
4
]
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
ds
t_strideq
]
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
ds
t_strideq
]
pavgb
m2
,
[
ds
tq
+
ds
t_strideq
*
2
]
pavgb
m3
,
[
ds
tq
+
r6q
]
%endif
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
ds
t_strideq
],
m1
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
2
]
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
src_strideq
]
sub
r4d
,
2
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
ds
t_strideq
],
m1
mova
[
ds
tq
+
ds
t_strideq
*
2
],
m2
mova
[
ds
tq
+
r6q
],
m3
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
4
]
sub
r4d
,
4
jnz
.loop16
lea
srcq
,
[
srcq
+
src_strideq
*
2
]
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
ds
t_strideq
]
%endif
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
ds
t_strideq
],
m1
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
2
]
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
src_strideq
]
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
ds
t_strideq
]
%endif
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
ds
t_strideq
],
m1
RET
INIT_MMX
ss
e
.w8:
mov
r4d
,
dword
hm
sub
r4d
,
2
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
src_strideq
]
mov
r4d
,
dword
hm
lea
r5q
,
[
src_strideq
*
3
]
lea
r6q
,
[
ds
t_strideq
*
3
]
.loop8:
lea
srcq
,
[
srcq
+
src_strideq
]
prefetcht0
[
srcq
+
src_strideq
*
4
]
lea
srcq
,
[
srcq
+
src_strideq
]
prefetcht0
[
srcq
+
src_strideq
*
2
]
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
src_strideq
]
movu
m2
,
[
srcq
+
src_strideq
*
2
]
movu
m3
,
[
srcq
+
r5q
]
lea
srcq
,
[
srcq
+
src_strideq
*
4
]
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
ds
t_strideq
]
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
ds
t_strideq
]
pavgb
m2
,
[
ds
tq
+
ds
t_strideq
*
2
]
pavgb
m3
,
[
ds
tq
+
r6q
]
%endif
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
ds
t_strideq
],
m1
movu
m0
,
[
srcq
]
movu
m1
,
[
srcq
+
src_strideq
]
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
2
]
sub
r4d
,
2
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
ds
t_strideq
],
m1
mova
[
ds
tq
+
ds
t_strideq
*
2
],
m2
mova
[
ds
tq
+
r6q
],
m3
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
4
]
sub
r4d
,
4
jnz
.loop8
%ifidn %1, avg
pavgb
m0
,
[
ds
tq
]
pavgb
m1
,
[
ds
tq
+
ds
t_strideq
]
%endif
mova
[
ds
tq
],
m0
mova
[
ds
tq
+
ds
t_strideq
],
m1
RET
.w4:
mov
r4d
,
dword
hm
lea
r5q
,
[
src_strideq
*
3
]
lea
r6q
,
[
ds
t_strideq
*
3
]
mov
r4d
,
dword
hm
lea
r5q
,
[
src_strideq
*
3
]
lea
r6q
,
[
ds
t_strideq
*
3
]
.loop4:
movh
m0
,
[
srcq
]
movh
m1
,
[
srcq
+
src_strideq
]
movh
m2
,
[
srcq
+
src_strideq
*
2
]
movh
m3
,
[
srcq
+
r5q
]
lea
srcq
,
[
srcq
+
src_strideq
*
4
]
movh
m0
,
[
srcq
]
movh
m1
,
[
srcq
+
src_strideq
]
movh
m2
,
[
srcq
+
src_strideq
*
2
]
movh
m3
,
[
srcq
+
r5q
]
lea
srcq
,
[
srcq
+
src_strideq
*
4
]
%ifidn %1, avg
movh
m4
,
[
ds
tq
]
movh
m5
,
[
ds
tq
+
ds
t_strideq
]
movh
m6
,
[
ds
tq
+
ds
t_strideq
*
2
]
movh
m7
,
[
ds
tq
+
r6q
]
pavgb
m0
,
m4
pavgb
m1
,
m5
pavgb
m2
,
m6
pavgb
m3
,
m7
movh
m4
,
[
ds
tq
]
movh
m5
,
[
ds
tq
+
ds
t_strideq
]
movh
m6
,
[
ds
tq
+
ds
t_strideq
*
2
]
movh
m7
,
[
ds
tq
+
r6q
]
pavgb
m0
,
m4
pavgb
m1
,
m5
pavgb
m2
,
m6
pavgb
m3
,
m7
%endif
movh
[
ds
tq
],
m0
movh
[
ds
tq
+
ds
t_strideq
],
m1
movh
[
ds
tq
+
ds
t_strideq
*
2
],
m2
movh
[
ds
tq
+
r6q
],
m3
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
4
]
sub
r4d
,
4
movh
[
ds
tq
],
m0
movh
[
ds
tq
+
ds
t_strideq
],
m1
movh
[
ds
tq
+
ds
t_strideq
*
2
],
m2
movh
[
ds
tq
+
r6q
],
m3
lea
ds
tq
,
[
ds
tq
+
ds
t_strideq
*
4
]
sub
r4d
,
4
jnz
.loop4
RET
%endmacro
...
...
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