mirror of
https://git.ffmpeg.org/ffmpeg.git
synced 2025-02-17 04:17:05 +00:00
vp9lpf/x86: simplify ABSSUM_CMP by inverting the comparison meaning.
Signed-off-by: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
parent
683da2788e
commit
e4961035b2
@ -36,6 +36,7 @@ pb_40: times 16 db 0x40
|
|||||||
pb_81: times 16 db 0x81
|
pb_81: times 16 db 0x81
|
||||||
pb_f8: times 16 db 0xf8
|
pb_f8: times 16 db 0xf8
|
||||||
pb_fe: times 16 db 0xfe
|
pb_fe: times 16 db 0xfe
|
||||||
|
pb_ff: times 16 db 0xff
|
||||||
|
|
||||||
pw_4: times 8 dw 4
|
pw_4: times 8 dw 4
|
||||||
pw_8: times 8 dw 8
|
pw_8: times 8 dw 8
|
||||||
@ -59,20 +60,18 @@ SECTION .text
|
|||||||
por %1, %4
|
por %1, %4
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
; %1 = %1<=%2
|
; %1 = %1>%2
|
||||||
%macro CMP_LTE 3-4 ; src/dst, cmp, tmp, pb_80
|
%macro CMP_GT 2-3 ; src/dst, cmp, pb_80
|
||||||
%if %0 == 4
|
%if %0 == 3
|
||||||
pxor %1, %4
|
pxor %1, %3
|
||||||
%endif
|
%endif
|
||||||
pcmpgtb %3, %2, %1 ; cmp > src?
|
pcmpgtb %1, %2
|
||||||
pcmpeqb %1, %2 ; cmp == src? XXX: avoid this with a -1/+1 well placed?
|
|
||||||
por %1, %3 ; cmp >= src?
|
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
; %1 = abs(%2-%3) <= %4
|
; %1 = abs(%2-%3) > %4
|
||||||
%macro ABSSUB_CMP 5-6 [pb_80]; dst, src1, src2, cmp, tmp, [pb_80]
|
%macro ABSSUB_GT 5-6 [pb_80]; dst, src1, src2, cmp, tmp, [pb_80]
|
||||||
ABSSUB %1, %2, %3, %5 ; dst = abs(src1-src2)
|
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
|
%endmacro
|
||||||
|
|
||||||
%macro MASK_APPLY 4 ; %1=new_data/dst %2=old_data %3=mask %4=tmp
|
%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 10, 6, 14
|
||||||
SWAP 11, 7, 15
|
SWAP 11, 7, 15
|
||||||
%endif
|
%endif
|
||||||
ABSSUB_CMP m5, m8, m9, m2, m7, m0 ; m5 = abs(p3-p2) <= I
|
ABSSUB_GT m5, m8, m9, m2, m7, m0 ; m5 = abs(p3-p2) <= I
|
||||||
ABSSUB_CMP m1, m9, m10, m2, m7, m0 ; m1 = abs(p2-p1) <= I
|
ABSSUB_GT m1, m9, m10, m2, m7, m0 ; m1 = abs(p2-p1) <= I
|
||||||
pand m5, m1
|
por m5, m1
|
||||||
ABSSUB_CMP m1, m10, m11, m2, m7, m0 ; m1 = abs(p1-p0) <= I
|
ABSSUB_GT m1, m10, m11, m2, m7, m0 ; m1 = abs(p1-p0) <= I
|
||||||
pand m5, m1
|
por m5, m1
|
||||||
ABSSUB_CMP m1, m12, m13, m2, m7, m0 ; m1 = abs(q1-q0) <= I
|
ABSSUB_GT m1, m12, m13, m2, m7, m0 ; m1 = abs(q1-q0) <= I
|
||||||
pand m5, m1
|
por m5, m1
|
||||||
ABSSUB_CMP m1, m13, m14, m2, m7, m0 ; m1 = abs(q2-q1) <= I
|
ABSSUB_GT m1, m13, m14, m2, m7, m0 ; m1 = abs(q2-q1) <= I
|
||||||
pand m5, m1
|
por m5, m1
|
||||||
ABSSUB_CMP m1, m14, m15, m2, m7, m0 ; m1 = abs(q3-q2) <= I
|
ABSSUB_GT m1, m14, m15, m2, m7, m0 ; m1 = abs(q3-q2) <= I
|
||||||
pand m5, m1
|
por m5, m1
|
||||||
ABSSUB m1, m11, m12, m7 ; abs(p0-q0)
|
ABSSUB m1, m11, m12, m7 ; abs(p0-q0)
|
||||||
paddusb m1, m1 ; abs(p0-q0) * 2
|
paddusb m1, m1 ; abs(p0-q0) * 2
|
||||||
ABSSUB m2, m10, m13, m7 ; abs(p1-q1)
|
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
|
psrlq m2, 1 ; abs(p1-q1)/2
|
||||||
paddusb m1, m2 ; abs(p0-q0)*2 + abs(p1-q1)/2
|
paddusb m1, m2 ; abs(p0-q0)*2 + abs(p1-q1)/2
|
||||||
pxor m1, m0
|
pxor m1, m0
|
||||||
pcmpgtb m4, m3, m1 ; E > X?
|
pcmpgtb m1, m3
|
||||||
pcmpeqb m3, m1 ; E == X?
|
por m1, m5 ; fm final value
|
||||||
por m3, m4 ; E >= X?
|
SWAP 1, 3
|
||||||
pand m3, m5 ; fm final value
|
pxor m3, [pb_ff]
|
||||||
|
|
||||||
; (m3: fm, m8..15: p3 p2 p1 p0 q0 q1 q2 q3)
|
; (m3: fm, m8..15: p3 p2 p1 p0 q0 q1 q2 q3)
|
||||||
; calc flat8in (if not 44_16) and hev masks
|
; calc flat8in (if not 44_16) and hev masks
|
||||||
mova m6, [pb_81] ; [1 1 1 1 ...] ^ 0x80
|
mova m6, [pb_81] ; [1 1 1 1 ...] ^ 0x80
|
||||||
%if %2 != 44
|
%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]
|
mova m8, [pb_80]
|
||||||
ABSSUB_CMP m1, m9, m11, m6, m5, m8 ; abs(p2 - p0) <= 1
|
ABSSUB_GT m1, m9, m11, m6, m5, m8 ; abs(p2 - p0) <= 1
|
||||||
pand m2, m1
|
por m2, m1
|
||||||
ABSSUB m4, m10, m11, m5 ; abs(p1 - p0)
|
ABSSUB m4, m10, m11, m5 ; abs(p1 - p0)
|
||||||
%if %2 == 16
|
%if %2 == 16
|
||||||
%if cpuflag(ssse3)
|
%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 m7, m8
|
||||||
pxor m4, m8
|
pxor m4, m8
|
||||||
pcmpgtb m0, m4, m7 ; abs(p1 - p0) > H (1/2 hev condition)
|
pcmpgtb m0, m4, m7 ; abs(p1 - p0) > H (1/2 hev condition)
|
||||||
CMP_LTE m4, m6, m5 ; abs(p1 - p0) <= 1
|
CMP_GT m4, m6 ; abs(p1 - p0) <= 1
|
||||||
pand m2, m4 ; (flat8in)
|
por m2, m4 ; (flat8in)
|
||||||
ABSSUB m4, m13, m12, m1 ; abs(q1 - q0)
|
ABSSUB m4, m13, m12, m1 ; abs(q1 - q0)
|
||||||
pxor m4, m8
|
pxor m4, m8
|
||||||
pcmpgtb m5, m4, m7 ; abs(q1 - q0) > H (2/2 hev condition)
|
pcmpgtb m5, m4, m7 ; abs(q1 - q0) > H (2/2 hev condition)
|
||||||
por m0, m5 ; hev final value
|
por m0, m5 ; hev final value
|
||||||
CMP_LTE m4, m6, m5 ; abs(q1 - q0) <= 1
|
CMP_GT m4, m6 ; abs(q1 - q0) <= 1
|
||||||
pand m2, m4 ; (flat8in)
|
por m2, m4 ; (flat8in)
|
||||||
ABSSUB_CMP m1, m14, m12, m6, m5, m8 ; abs(q2 - q0) <= 1
|
ABSSUB_GT m1, m14, m12, m6, m5, m8 ; abs(q2 - q0) <= 1
|
||||||
pand m2, m1
|
por m2, m1
|
||||||
ABSSUB_CMP m1, m15, m12, m6, m5, m8 ; abs(q3 - q0) <= 1
|
ABSSUB_GT m1, m15, m12, m6, m5, m8 ; abs(q3 - q0) <= 1
|
||||||
pand m2, m1 ; flat8in final value
|
por m2, m1 ; flat8in final value
|
||||||
|
pxor m2, [pb_ff]
|
||||||
%if %2 == 84 || %2 == 48
|
%if %2 == 84 || %2 == 48
|
||||||
pand m2, [mask_mix%2]
|
pand m2, [mask_mix%2]
|
||||||
%endif
|
%endif
|
||||||
@ -517,27 +517,28 @@ cglobal vp9_loop_filter_%1_%2_16, 2, 6, 16, %3, dst, stride, mstride, dst2, stri
|
|||||||
; calc flat8out mask
|
; calc flat8out mask
|
||||||
mova m8, [P7]
|
mova m8, [P7]
|
||||||
mova m9, [P6]
|
mova m9, [P6]
|
||||||
ABSSUB_CMP m1, m8, m11, m6, m5 ; abs(p7 - p0) <= 1
|
ABSSUB_GT m1, m8, m11, m6, m5 ; abs(p7 - p0) <= 1
|
||||||
ABSSUB_CMP m7, m9, m11, m6, m5 ; abs(p6 - p0) <= 1
|
ABSSUB_GT m7, m9, m11, m6, m5 ; abs(p6 - p0) <= 1
|
||||||
pand m1, m7
|
por m1, m7
|
||||||
mova m8, [P5]
|
mova m8, [P5]
|
||||||
mova m9, [P4]
|
mova m9, [P4]
|
||||||
ABSSUB_CMP m7, m8, m11, m6, m5 ; abs(p5 - p0) <= 1
|
ABSSUB_GT m7, m8, m11, m6, m5 ; abs(p5 - p0) <= 1
|
||||||
pand m1, m7
|
por m1, m7
|
||||||
ABSSUB_CMP m7, m9, m11, m6, m5 ; abs(p4 - p0) <= 1
|
ABSSUB_GT m7, m9, m11, m6, m5 ; abs(p4 - p0) <= 1
|
||||||
pand m1, m7
|
por m1, m7
|
||||||
mova m14, [Q4]
|
mova m14, [Q4]
|
||||||
mova m15, [Q5]
|
mova m15, [Q5]
|
||||||
ABSSUB_CMP m7, m14, m12, m6, m5 ; abs(q4 - q0) <= 1
|
ABSSUB_GT m7, m14, m12, m6, m5 ; abs(q4 - q0) <= 1
|
||||||
pand m1, m7
|
por m1, m7
|
||||||
ABSSUB_CMP m7, m15, m12, m6, m5 ; abs(q5 - q0) <= 1
|
ABSSUB_GT m7, m15, m12, m6, m5 ; abs(q5 - q0) <= 1
|
||||||
pand m1, m7
|
por m1, m7
|
||||||
mova m14, [Q6]
|
mova m14, [Q6]
|
||||||
mova m15, [Q7]
|
mova m15, [Q7]
|
||||||
ABSSUB_CMP m7, m14, m12, m6, m5 ; abs(q4 - q0) <= 1
|
ABSSUB_GT m7, m14, m12, m6, m5 ; abs(q4 - q0) <= 1
|
||||||
pand m1, m7
|
por m1, m7
|
||||||
ABSSUB_CMP m7, m15, m12, m6, m5 ; abs(q5 - q0) <= 1
|
ABSSUB_GT m7, m15, m12, m6, m5 ; abs(q5 - q0) <= 1
|
||||||
pand m1, m7 ; flat8out final value
|
por m1, m7 ; flat8out final value
|
||||||
|
pxor m1, [pb_ff]
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
; if (fm) {
|
; if (fm) {
|
||||||
|
Loading…
Reference in New Issue
Block a user