|
|
|
@@ -25,16 +25,18 @@ |
|
|
|
SECTION_RODATA |
|
|
|
|
|
|
|
pb_128: times 16 db 128 |
|
|
|
pb_128_0 : times 8 db 0, 128 |
|
|
|
|
|
|
|
SECTION .text |
|
|
|
|
|
|
|
%macro THRESHOLD_8 0 |
|
|
|
;%1 depth (8 or 16) ; %2 b or w ; %3 constant |
|
|
|
%macro THRESHOLD 3 |
|
|
|
%if ARCH_X86_64 |
|
|
|
cglobal threshold8, 10, 13, 5, in, threshold, min, max, out, ilinesize, tlinesize, flinesize, slinesize, olinesize, w, h, x |
|
|
|
cglobal threshold%1, 10, 13, 5, in, threshold, min, max, out, ilinesize, tlinesize, flinesize, slinesize, olinesize, w, h, x |
|
|
|
mov wd, dword wm |
|
|
|
mov hd, dword hm |
|
|
|
%else |
|
|
|
cglobal threshold8, 5, 7, 5, in, threshold, min, max, out, w, x |
|
|
|
cglobal threshold%1, 5, 7, 5, in, threshold, min, max, out, w, x |
|
|
|
mov wd, r10m |
|
|
|
%define ilinesizeq r5mp |
|
|
|
%define tlinesizeq r6mp |
|
|
|
@@ -43,7 +45,10 @@ cglobal threshold8, 5, 7, 5, in, threshold, min, max, out, w, x |
|
|
|
%define olinesizeq r9mp |
|
|
|
%define hd r11mp |
|
|
|
%endif |
|
|
|
VBROADCASTI128 m4, [pb_128] |
|
|
|
VBROADCASTI128 m4, [%3] |
|
|
|
%if %1 == 16 |
|
|
|
add wq, wq ; w *= 2 (16 bits instead of 8) |
|
|
|
%endif |
|
|
|
add inq, wq |
|
|
|
add thresholdq, wq |
|
|
|
add minq, wq |
|
|
|
@@ -60,7 +65,7 @@ cglobal threshold8, 5, 7, 5, in, threshold, min, max, out, w, x |
|
|
|
movu m3, [maxq + xq] |
|
|
|
pxor m0, m4 |
|
|
|
pxor m1, m4 |
|
|
|
pcmpgtb m0, m1 |
|
|
|
pcmpgt%2 m0, m1 |
|
|
|
PBLENDVB m3, m2, m0 |
|
|
|
movu [outq + xq], m3 |
|
|
|
add xq, mmsize |
|
|
|
@@ -77,9 +82,11 @@ RET |
|
|
|
%endmacro |
|
|
|
|
|
|
|
INIT_XMM sse4 |
|
|
|
THRESHOLD_8 |
|
|
|
THRESHOLD 8, b, pb_128 |
|
|
|
THRESHOLD 16, w, pb_128_0 |
|
|
|
|
|
|
|
%if HAVE_AVX2_EXTERNAL |
|
|
|
INIT_YMM avx2 |
|
|
|
THRESHOLD_8 |
|
|
|
THRESHOLD 8, b, pb_128 |
|
|
|
THRESHOLD 16, w, pb_128_0 |
|
|
|
%endif |