|
|
|
@ -256,15 +256,26 @@ |
|
|
|
|
%define ABSB ABSB_MMX |
|
|
|
|
%define ABSB2 ABSB2_MMX |
|
|
|
|
|
|
|
|
|
%macro SPLATB_MMX 3 |
|
|
|
|
%macro SPLATB_LOAD 3 |
|
|
|
|
%if cpuflag(ssse3) |
|
|
|
|
movd %1, [%2-3] |
|
|
|
|
pshufb %1, %3 |
|
|
|
|
%else |
|
|
|
|
movd %1, [%2-3] ;to avoid crossing a cacheline |
|
|
|
|
punpcklbw %1, %1 |
|
|
|
|
SPLATW %1, %1, 3 |
|
|
|
|
%endif |
|
|
|
|
%endmacro |
|
|
|
|
|
|
|
|
|
%macro SPLATB_SSSE3 3 |
|
|
|
|
movd %1, [%2-3] |
|
|
|
|
%macro SPLATB_REG 3 |
|
|
|
|
%if cpuflag(ssse3) |
|
|
|
|
movd %1, %2d |
|
|
|
|
pshufb %1, %3 |
|
|
|
|
%else |
|
|
|
|
movd %1, %2d |
|
|
|
|
punpcklbw %1, %1 |
|
|
|
|
SPLATW %1, %1, 0 |
|
|
|
|
%endif |
|
|
|
|
%endmacro |
|
|
|
|
|
|
|
|
|
%macro PALIGNR_MMX 4-5 ; [dst,] src1, src2, imm, tmp |
|
|
|
@ -296,6 +307,14 @@ |
|
|
|
|
%endif |
|
|
|
|
%endmacro |
|
|
|
|
|
|
|
|
|
%macro PSHUFLW 1+ |
|
|
|
|
%if mmsize == 8 |
|
|
|
|
pshufw %1 |
|
|
|
|
%else |
|
|
|
|
pshuflw %1 |
|
|
|
|
%endif |
|
|
|
|
%endmacro |
|
|
|
|
|
|
|
|
|
%macro DEINTB 5 ; mask, reg1, mask, reg2, optional src to fill masks from |
|
|
|
|
%ifnum %5 |
|
|
|
|
pand m%3, m%5, m%4 ; src .. y6 .. y4 |
|
|
|
@ -521,8 +540,22 @@ |
|
|
|
|
%if mmsize == 16 |
|
|
|
|
pshuflw %1, %2, (%3)*0x55 |
|
|
|
|
punpcklqdq %1, %1 |
|
|
|
|
%else |
|
|
|
|
%elif cpuflag(mmx2) |
|
|
|
|
pshufw %1, %2, (%3)*0x55 |
|
|
|
|
%else |
|
|
|
|
%ifnidn %1, %2 |
|
|
|
|
mova %1, %2 |
|
|
|
|
%endif |
|
|
|
|
%if %3 & 2 |
|
|
|
|
punpckhwd %1, %1 |
|
|
|
|
%else |
|
|
|
|
punpcklwd %1, %1 |
|
|
|
|
%endif |
|
|
|
|
%if %3 & 1 |
|
|
|
|
punpckhwd %1, %1 |
|
|
|
|
%else |
|
|
|
|
punpcklwd %1, %1 |
|
|
|
|
%endif |
|
|
|
|
%endif |
|
|
|
|
%endmacro |
|
|
|
|
|
|
|
|
|