Modify x86util.asm to ease transitioning to 10-bit H.264 assembly.
Arguments for variable size instructions are added to many macros, along with other various changes. The x86util.asm code was ported from x264. Signed-off-by: Diego Biurrun <diego@biurrun.de>
This commit is contained in:
parent
6f2309ed2e
commit
d0005d347d
@ -59,12 +59,12 @@ SECTION .text
|
|||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro HADAMARD8 0
|
%macro HADAMARD8 0
|
||||||
SUMSUB_BADC m0, m1, m2, m3
|
SUMSUB_BADC w, 0, 1, 2, 3
|
||||||
SUMSUB_BADC m4, m5, m6, m7
|
SUMSUB_BADC w, 4, 5, 6, 7
|
||||||
SUMSUB_BADC m0, m2, m1, m3
|
SUMSUB_BADC w, 0, 2, 1, 3
|
||||||
SUMSUB_BADC m4, m6, m5, m7
|
SUMSUB_BADC w, 4, 6, 5, 7
|
||||||
SUMSUB_BADC m0, m4, m1, m5
|
SUMSUB_BADC w, 0, 4, 1, 5
|
||||||
SUMSUB_BADC m2, m6, m3, m7
|
SUMSUB_BADC w, 2, 6, 3, 7
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro ABS1_SUM 3
|
%macro ABS1_SUM 3
|
||||||
|
@ -59,11 +59,11 @@ SECTION .text
|
|||||||
movq m2, [%2+16]
|
movq m2, [%2+16]
|
||||||
movq m3, [%2+24]
|
movq m3, [%2+24]
|
||||||
|
|
||||||
IDCT4_1D 0, 1, 2, 3, 4, 5
|
IDCT4_1D w, 0, 1, 2, 3, 4, 5
|
||||||
mova m6, [pw_32]
|
mova m6, [pw_32]
|
||||||
TRANSPOSE4x4W 0, 1, 2, 3, 4
|
TRANSPOSE4x4W 0, 1, 2, 3, 4
|
||||||
paddw m0, m6
|
paddw m0, m6
|
||||||
IDCT4_1D 0, 1, 2, 3, 4, 5
|
IDCT4_1D w, 0, 1, 2, 3, 4, 5
|
||||||
pxor m7, m7
|
pxor m7, m7
|
||||||
|
|
||||||
STORE_DIFFx2 m0, m1, m4, m5, m7, 6, %1, %3
|
STORE_DIFFx2 m0, m1, m4, m5, m7, 6, %1, %3
|
||||||
@ -118,13 +118,13 @@ cglobal h264_idct_add_mmx, 3, 3, 0
|
|||||||
|
|
||||||
mova m2, %1
|
mova m2, %1
|
||||||
mova m5, %2
|
mova m5, %2
|
||||||
SUMSUB_BA m5, m2
|
SUMSUB_BA w, 5, 2
|
||||||
SUMSUB_BA m6, m5
|
SUMSUB_BA w, 6, 5
|
||||||
SUMSUB_BA m4, m2
|
SUMSUB_BA w, 4, 2
|
||||||
SUMSUB_BA m7, m6
|
SUMSUB_BA w, 7, 6
|
||||||
SUMSUB_BA m0, m4
|
SUMSUB_BA w, 0, 4
|
||||||
SUMSUB_BA m3, m2
|
SUMSUB_BA w, 3, 2
|
||||||
SUMSUB_BA m1, m5
|
SUMSUB_BA w, 1, 5
|
||||||
SWAP 7, 6, 4, 5, 2, 3, 1, 0 ; 70315246 -> 01234567
|
SWAP 7, 6, 4, 5, 2, 3, 1, 0 ; 70315246 -> 01234567
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
@ -715,10 +715,10 @@ x264_add8x4_idct_sse2:
|
|||||||
movhps m1, [r2+40]
|
movhps m1, [r2+40]
|
||||||
movhps m2, [r2+48]
|
movhps m2, [r2+48]
|
||||||
movhps m3, [r2+56]
|
movhps m3, [r2+56]
|
||||||
IDCT4_1D 0,1,2,3,4,5
|
IDCT4_1D w,0,1,2,3,4,5
|
||||||
TRANSPOSE2x4x4W 0,1,2,3,4
|
TRANSPOSE2x4x4W 0,1,2,3,4
|
||||||
paddw m0, [pw_32]
|
paddw m0, [pw_32]
|
||||||
IDCT4_1D 0,1,2,3,4,5
|
IDCT4_1D w,0,1,2,3,4,5
|
||||||
pxor m7, m7
|
pxor m7, m7
|
||||||
STORE_DIFFx2 m0, m1, m4, m5, m7, 6, r0, r3
|
STORE_DIFFx2 m0, m1, m4, m5, m7, 6, r0, r3
|
||||||
lea r0, [r0+r3*2]
|
lea r0, [r0+r3*2]
|
||||||
@ -859,8 +859,8 @@ cglobal h264_idct_add8_sse2, 5, 7, 8
|
|||||||
;void ff_h264_luma_dc_dequant_idct_mmx(DCTELEM *output, DCTELEM *input, int qmul)
|
;void ff_h264_luma_dc_dequant_idct_mmx(DCTELEM *output, DCTELEM *input, int qmul)
|
||||||
|
|
||||||
%macro WALSH4_1D 5
|
%macro WALSH4_1D 5
|
||||||
SUMSUB_BADC m%4, m%3, m%2, m%1, m%5
|
SUMSUB_BADC w, %4, %3, %2, %1, %5
|
||||||
SUMSUB_BADC m%4, m%2, m%3, m%1, m%5
|
SUMSUB_BADC w, %4, %2, %3, %1, %5
|
||||||
SWAP %1, %4, %3
|
SWAP %1, %4, %3
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
|
@ -1106,10 +1106,10 @@ cglobal vp8_idct_dc_add4uv_mmx, 3, 3
|
|||||||
; %5/%6 are temporary registers
|
; %5/%6 are temporary registers
|
||||||
; we assume m6/m7 have constant words 20091/17734 loaded in them
|
; we assume m6/m7 have constant words 20091/17734 loaded in them
|
||||||
%macro VP8_IDCT_TRANSFORM4x4_1D 6
|
%macro VP8_IDCT_TRANSFORM4x4_1D 6
|
||||||
SUMSUB_BA m%3, m%1, m%5 ;t0, t1
|
SUMSUB_BA w, %3, %1, %5 ;t0, t1
|
||||||
VP8_MULTIPLY_SUMSUB m%2, m%4, m%5,m%6 ;t2, t3
|
VP8_MULTIPLY_SUMSUB m%2, m%4, m%5,m%6 ;t2, t3
|
||||||
SUMSUB_BA m%4, m%3, m%5 ;tmp0, tmp3
|
SUMSUB_BA w, %4, %3, %5 ;tmp0, tmp3
|
||||||
SUMSUB_BA m%2, m%1, m%5 ;tmp1, tmp2
|
SUMSUB_BA w, %2, %1, %5 ;tmp1, tmp2
|
||||||
SWAP %4, %1
|
SWAP %4, %1
|
||||||
SWAP %4, %3
|
SWAP %4, %3
|
||||||
%endmacro
|
%endmacro
|
||||||
@ -1181,8 +1181,8 @@ VP8_IDCT_ADD sse
|
|||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro HADAMARD4_1D 4
|
%macro HADAMARD4_1D 4
|
||||||
SUMSUB_BADC m%2, m%1, m%4, m%3
|
SUMSUB_BADC w, %2, %1, %4, %3
|
||||||
SUMSUB_BADC m%4, m%2, m%3, m%1
|
SUMSUB_BADC w, %4, %2, %3, %1
|
||||||
SWAP %1, %4, %3
|
SWAP %1, %4, %3
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
|
@ -208,6 +208,17 @@
|
|||||||
pminub %2, %4
|
pminub %2, %4
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
|
%macro ABSD2_MMX 4
|
||||||
|
pxor %3, %3
|
||||||
|
pxor %4, %4
|
||||||
|
pcmpgtd %3, %1
|
||||||
|
pcmpgtd %4, %2
|
||||||
|
pxor %1, %3
|
||||||
|
pxor %2, %4
|
||||||
|
psubd %1, %3
|
||||||
|
psubd %2, %4
|
||||||
|
%endmacro
|
||||||
|
|
||||||
%macro ABSB_SSSE3 2
|
%macro ABSB_SSSE3 2
|
||||||
pabsb %1, %1
|
pabsb %1, %1
|
||||||
%endmacro
|
%endmacro
|
||||||
@ -230,12 +241,7 @@
|
|||||||
%macro SPLATB_MMX 3
|
%macro SPLATB_MMX 3
|
||||||
movd %1, [%2-3] ;to avoid crossing a cacheline
|
movd %1, [%2-3] ;to avoid crossing a cacheline
|
||||||
punpcklbw %1, %1
|
punpcklbw %1, %1
|
||||||
%if mmsize==16
|
SPLATW %1, %1, 3
|
||||||
pshuflw %1, %1, 0xff
|
|
||||||
punpcklqdq %1, %1
|
|
||||||
%else
|
|
||||||
pshufw %1, %1, 0xff
|
|
||||||
%endif
|
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro SPLATB_SSSE3 3
|
%macro SPLATB_SSSE3 3
|
||||||
@ -243,125 +249,169 @@
|
|||||||
pshufb %1, %3
|
pshufb %1, %3
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro PALIGNR_MMX 4
|
%macro PALIGNR_MMX 4-5 ; [dst,] src1, src2, imm, tmp
|
||||||
%ifnidn %4, %2
|
%define %%dst %1
|
||||||
|
%if %0==5
|
||||||
|
%ifnidn %1, %2
|
||||||
|
mova %%dst, %2
|
||||||
|
%endif
|
||||||
|
%rotate 1
|
||||||
|
%endif
|
||||||
|
%ifnidn %4, %2
|
||||||
mova %4, %2
|
mova %4, %2
|
||||||
%endif
|
%endif
|
||||||
%if mmsize == 8
|
%if mmsize==8
|
||||||
psllq %1, (8-%3)*8
|
psllq %%dst, (8-%3)*8
|
||||||
psrlq %4, %3*8
|
psrlq %4, %3*8
|
||||||
%else
|
%else
|
||||||
pslldq %1, 16-%3
|
pslldq %%dst, 16-%3
|
||||||
psrldq %4, %3
|
psrldq %4, %3
|
||||||
%endif
|
%endif
|
||||||
por %1, %4
|
por %%dst, %4
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro PALIGNR_SSSE3 4
|
%macro PALIGNR_SSSE3 4-5
|
||||||
|
%if %0==5
|
||||||
|
palignr %1, %2, %3, %4
|
||||||
|
%else
|
||||||
palignr %1, %2, %3
|
palignr %1, %2, %3
|
||||||
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro DEINTB 5 ; mask, reg1, mask, reg2, optional src to fill masks from
|
%macro DEINTB 5 ; mask, reg1, mask, reg2, optional src to fill masks from
|
||||||
%ifnum %5
|
%ifnum %5
|
||||||
mova m%1, m%5
|
pand m%3, m%5, m%4 ; src .. y6 .. y4
|
||||||
mova m%3, m%5
|
pand m%1, m%5, m%2 ; dst .. y6 .. y4
|
||||||
%else
|
%else
|
||||||
mova m%1, %5
|
mova m%1, %5
|
||||||
mova m%3, m%1
|
pand m%3, m%1, m%4 ; src .. y6 .. y4
|
||||||
|
pand m%1, m%1, m%2 ; dst .. y6 .. y4
|
||||||
%endif
|
%endif
|
||||||
pand m%1, m%2 ; dst .. y6 .. y4
|
psrlw m%2, 8 ; dst .. y7 .. y5
|
||||||
pand m%3, m%4 ; src .. y6 .. y4
|
psrlw m%4, 8 ; src .. y7 .. y5
|
||||||
psrlw m%2, 8 ; dst .. y7 .. y5
|
|
||||||
psrlw m%4, 8 ; src .. y7 .. y5
|
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro SUMSUB_BA 2-3
|
%macro SUMSUB_BA 3-4
|
||||||
%if %0==2
|
%if %0==3
|
||||||
paddw %1, %2
|
padd%1 m%2, m%3
|
||||||
paddw %2, %2
|
padd%1 m%3, m%3
|
||||||
psubw %2, %1
|
psub%1 m%3, m%2
|
||||||
%else
|
%else
|
||||||
mova %3, %1
|
%if avx_enabled == 0
|
||||||
paddw %1, %2
|
mova m%4, m%2
|
||||||
psubw %2, %3
|
padd%1 m%2, m%3
|
||||||
%endif
|
psub%1 m%3, m%4
|
||||||
%endmacro
|
|
||||||
|
|
||||||
%macro SUMSUB_BADC 4-5
|
|
||||||
%if %0==5
|
|
||||||
SUMSUB_BA %1, %2, %5
|
|
||||||
SUMSUB_BA %3, %4, %5
|
|
||||||
%else
|
%else
|
||||||
paddw %1, %2
|
padd%1 m%4, m%2, m%3
|
||||||
paddw %3, %4
|
psub%1 m%3, m%2
|
||||||
paddw %2, %2
|
SWAP %2, %4
|
||||||
paddw %4, %4
|
%endif
|
||||||
psubw %2, %1
|
|
||||||
psubw %4, %3
|
|
||||||
%endif
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro SUMSUB2_AB 3
|
%macro SUMSUB_BADC 5-6
|
||||||
mova %3, %1
|
%if %0==6
|
||||||
paddw %1, %1
|
SUMSUB_BA %1, %2, %3, %6
|
||||||
paddw %1, %2
|
SUMSUB_BA %1, %4, %5, %6
|
||||||
psubw %3, %2
|
%else
|
||||||
psubw %3, %2
|
padd%1 m%2, m%3
|
||||||
|
padd%1 m%4, m%5
|
||||||
|
padd%1 m%3, m%3
|
||||||
|
padd%1 m%5, m%5
|
||||||
|
psub%1 m%3, m%2
|
||||||
|
psub%1 m%5, m%4
|
||||||
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro SUMSUB2_BA 3
|
%macro SUMSUB2_AB 4
|
||||||
mova m%3, m%1
|
%ifnum %3
|
||||||
paddw m%1, m%2
|
psub%1 m%4, m%2, m%3
|
||||||
paddw m%1, m%2
|
psub%1 m%4, m%3
|
||||||
psubw m%2, m%3
|
padd%1 m%2, m%2
|
||||||
psubw m%2, m%3
|
padd%1 m%2, m%3
|
||||||
|
%else
|
||||||
|
mova m%4, m%2
|
||||||
|
padd%1 m%2, m%2
|
||||||
|
padd%1 m%2, %3
|
||||||
|
psub%1 m%4, %3
|
||||||
|
psub%1 m%4, %3
|
||||||
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro SUMSUBD2_AB 4
|
%macro SUMSUB2_BA 4
|
||||||
mova %4, %1
|
%if avx_enabled == 0
|
||||||
mova %3, %2
|
mova m%4, m%2
|
||||||
psraw %2, 1 ; %2: %2>>1
|
padd%1 m%2, m%3
|
||||||
psraw %1, 1 ; %1: %1>>1
|
padd%1 m%2, m%3
|
||||||
paddw %2, %4 ; %2: %2>>1+%1
|
psub%1 m%3, m%4
|
||||||
psubw %1, %3 ; %1: %1>>1-%2
|
psub%1 m%3, m%4
|
||||||
|
%else
|
||||||
|
padd%1 m%4, m%2, m%3
|
||||||
|
padd%1 m%4, m%3
|
||||||
|
psub%1 m%3, m%2
|
||||||
|
psub%1 m%3, m%2
|
||||||
|
SWAP %2, %4
|
||||||
|
%endif
|
||||||
|
%endmacro
|
||||||
|
|
||||||
|
%macro SUMSUBD2_AB 5
|
||||||
|
%ifnum %4
|
||||||
|
psra%1 m%5, m%2, 1 ; %3: %3>>1
|
||||||
|
psra%1 m%4, m%3, 1 ; %2: %2>>1
|
||||||
|
padd%1 m%4, m%2 ; %3: %3>>1+%2
|
||||||
|
psub%1 m%5, m%3 ; %2: %2>>1-%3
|
||||||
|
SWAP %2, %5
|
||||||
|
SWAP %3, %4
|
||||||
|
%else
|
||||||
|
mova %5, m%2
|
||||||
|
mova %4, m%3
|
||||||
|
psra%1 m%3, 1 ; %3: %3>>1
|
||||||
|
psra%1 m%2, 1 ; %2: %2>>1
|
||||||
|
padd%1 m%3, %5 ; %3: %3>>1+%2
|
||||||
|
psub%1 m%2, %4 ; %2: %2>>1-%3
|
||||||
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro DCT4_1D 5
|
%macro DCT4_1D 5
|
||||||
%ifnum %5
|
%ifnum %5
|
||||||
SUMSUB_BADC m%4, m%1, m%3, m%2; m%5
|
SUMSUB_BADC w, %4, %1, %3, %2, %5
|
||||||
SUMSUB_BA m%3, m%4, m%5
|
SUMSUB_BA w, %3, %4, %5
|
||||||
SUMSUB2_AB m%1, m%2, m%5
|
SUMSUB2_AB w, %1, %2, %5
|
||||||
SWAP %1, %3, %4, %5, %2
|
SWAP %1, %3, %4, %5, %2
|
||||||
%else
|
%else
|
||||||
SUMSUB_BADC m%4, m%1, m%3, m%2
|
SUMSUB_BADC w, %4, %1, %3, %2
|
||||||
SUMSUB_BA m%3, m%4
|
SUMSUB_BA w, %3, %4
|
||||||
mova [%5], m%2
|
mova [%5], m%2
|
||||||
SUMSUB2_AB m%1, [%5], m%2
|
SUMSUB2_AB w, %1, [%5], %2
|
||||||
SWAP %1, %3, %4, %2
|
SWAP %1, %3, %4, %2
|
||||||
%endif
|
%endif
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
%macro IDCT4_1D 5-6
|
%macro IDCT4_1D 6-7
|
||||||
%ifnum %5
|
%ifnum %6
|
||||||
SUMSUBD2_AB m%2, m%4, m%6, m%5
|
SUMSUBD2_AB %1, %3, %5, %7, %6
|
||||||
; %2: %2>>1-%4 %4: %2+%4>>1
|
; %3: %3>>1-%5 %5: %3+%5>>1
|
||||||
SUMSUB_BA m%3, m%1, m%6
|
SUMSUB_BA %1, %4, %2, %7
|
||||||
; %3: %1+%3 %1: %1-%3
|
; %4: %2+%4 %2: %2-%4
|
||||||
SUMSUB_BADC m%4, m%3, m%2, m%1, m%6
|
SUMSUB_BADC %1, %5, %4, %3, %2, %7
|
||||||
; %4: %1+%3 + (%2+%4>>1)
|
; %5: %2+%4 + (%3+%5>>1)
|
||||||
; %3: %1+%3 - (%2+%4>>1)
|
; %4: %2+%4 - (%3+%5>>1)
|
||||||
; %2: %1-%3 + (%2>>1-%4)
|
; %3: %2-%4 + (%3>>1-%5)
|
||||||
; %1: %1-%3 - (%2>>1-%4)
|
; %2: %2-%4 - (%3>>1-%5)
|
||||||
%else
|
%else
|
||||||
SUMSUBD2_AB m%2, m%4, [%5], [%5+16]
|
%ifidn %1, w
|
||||||
SUMSUB_BA m%3, m%1
|
SUMSUBD2_AB %1, %3, %5, [%6], [%6+16]
|
||||||
SUMSUB_BADC m%4, m%3, m%2, m%1
|
%else
|
||||||
|
SUMSUBD2_AB %1, %3, %5, [%6], [%6+32]
|
||||||
%endif
|
%endif
|
||||||
SWAP %1, %4, %3
|
SUMSUB_BA %1, %4, %2
|
||||||
; %1: %1+%3 + (%2+%4>>1) row0
|
SUMSUB_BADC %1, %5, %4, %3, %2
|
||||||
; %2: %1-%3 + (%2>>1-%4) row1
|
%endif
|
||||||
; %3: %1-%3 - (%2>>1-%4) row2
|
SWAP %2, %5, %4
|
||||||
; %4: %1+%3 - (%2+%4>>1) row3
|
; %2: %2+%4 + (%3+%5>>1) row0
|
||||||
|
; %3: %2-%4 + (%3>>1-%5) row1
|
||||||
|
; %4: %2-%4 - (%3>>1-%5) row2
|
||||||
|
; %5: %2+%4 - (%3+%5>>1) row3
|
||||||
%endmacro
|
%endmacro
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user