History

x86: h264_idct: port to cpuflags

Diego Biurrun committed 14 years ago

Commit 2e89aee1 parent 490df521 file · +70 −69Browse files

Unified · Split

libavcodec/x86/h264_idct.asm+70−69
@@ -76,9 +76,9 @@ SECTION .text · 75 unmodified lines
7676 STORE_DIFFx2 m2, m3, m4, m5, m7, 6, %1, %3
7777 %endmacro
7878
79−INIT_MMX
79+INIT_MMX mmx
8080 ; ff_h264_idct_add_mmx(uint8_t *dst, int16_t *block, int stride)
81−cglobal h264_idct_add_8_mmx, 3, 3, 0
81+cglobal h264_idct_add_8, 3, 3, 0
8282 IDCT4_ADD r0, r1, r2
8383 RET
8484
@@ -180,9 +180,9 @@ cglobal h264_idct_add_8_mmx, 3, 3, 0 · 95 unmodified lines
180180 STORE_DIFFx2 m1, m2, m5, m6, m7, 6, %1, %3
181181 %endmacro
182182
183−INIT_MMX
183+INIT_MMX mmx
184184 ; ff_h264_idct8_add_mmx(uint8_t *dst, int16_t *block, int stride)
185−cglobal h264_idct8_add_8_mmx, 3, 4, 0
185+cglobal h264_idct8_add_8, 3, 4, 0
186186 %assign pad 128+4-(stack_offset&7)
187187 SUB rsp, pad
188188
@@ -240,9 +240,9 @@ cglobal h264_idct8_add_8_mmx, 3, 4, 0 · 51 unmodified lines
240240 STORE_DIFF m1, m6, m7, [%1+%4 ]
241241 %endmacro
242242
243−INIT_XMM
243+INIT_XMM sse2
244244 ; ff_h264_idct8_add_sse2(uint8_t *dst, int16_t *block, int stride)
245−cglobal h264_idct8_add_8_sse2, 3, 4, 10
245+cglobal h264_idct8_add_8, 3, 4, 10
246246 IDCT8_ADD_SSE r0, r1, r2, r3
247247 RET
248248
@@ -285,24 +285,25 @@ cglobal h264_idct8_add_8_sse2, 3, 4, 10 · 36 unmodified lines
285285 %1 [%2+%4 ], m5
286286 %endmacro
287287
288−INIT_MMX
288+INIT_MMX mmxext
289289 ; ff_h264_idct_dc_add_mmxext(uint8_t *dst, int16_t *block, int stride)
290−cglobal h264_idct_dc_add_8_mmxext, 3, 3, 0
290+cglobal h264_idct_dc_add_8, 3, 3, 0
291291 DC_ADD_MMXEXT_INIT r1, r2
292292 DC_ADD_MMXEXT_OP movh, r0, r2, r1
293293 RET
294294
295295 ; ff_h264_idct8_dc_add_mmxext(uint8_t *dst, int16_t *block, int stride)
296−cglobal h264_idct8_dc_add_8_mmxext, 3, 3, 0
296+cglobal h264_idct8_dc_add_8, 3, 3, 0
297297 DC_ADD_MMXEXT_INIT r1, r2
298298 DC_ADD_MMXEXT_OP mova, r0, r2, r1
299299 lea r0, [r0+r2*4]
300300 DC_ADD_MMXEXT_OP mova, r0, r2, r1
301301 RET
302302
303+INIT_MMX mmx
303304 ; ff_h264_idct_add16_mmx(uint8_t *dst, const int *block_offset,
304305 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
305−cglobal h264_idct_add16_8_mmx, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
306+cglobal h264_idct_add16_8, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
306307 xor r5, r5
307308 %ifdef PIC
308309 lea picregq, [scan8_mem]
@@ -324,7 +325,7 @@ cglobal h264_idct_add16_8_mmx, 5, 7 + npicregs, 0, dst, block_offset, block, str · 15 unmodified lines
324325
325326 ; ff_h264_idct8_add4_mmx(uint8_t *dst, const int *block_offset,
326327 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
327−cglobal h264_idct8_add4_8_mmx, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
328+cglobal h264_idct8_add4_8, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
328329 %assign pad 128+4-(stack_offset&7)
329330 SUB rsp, pad
330331
@@ -354,9 +355,10 @@ cglobal h264_idct8_add4_8_mmx, 5, 7 + npicregs, 0, dst, block_offset, block, str · 23 unmodified lines
354355 ADD rsp, pad
355356 RET
356357
358+INIT_MMX mmxext
357359 ; ff_h264_idct_add16_mmxext(uint8_t *dst, const int *block_offset,
358360 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
359−cglobal h264_idct_add16_8_mmxext, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
361+cglobal h264_idct_add16_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
360362 xor r5, r5
361363 %ifdef PIC
362364 lea picregq, [scan8_mem]
@@ -398,9 +400,10 @@ cglobal h264_idct_add16_8_mmxext, 5, 8 + npicregs, 0, dst1, block_offset, block, · 35 unmodified lines
398400 jl .nextblock
399401 REP_RET
400402
403+INIT_MMX mmx
401404 ; ff_h264_idct_add16intra_mmx(uint8_t *dst, const int *block_offset,
402405 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
403−cglobal h264_idct_add16intra_8_mmx, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
406+cglobal h264_idct_add16intra_8, 5, 7 + npicregs, 0, dst, block_offset, block, stride, nnzc, cntr, coeff, picreg
404407 xor r5, r5
405408 %ifdef PIC
406409 lea picregq, [scan8_mem]
@@ -421,10 +424,11 @@ cglobal h264_idct_add16intra_8_mmx, 5, 7 + npicregs, 0, dst, block_offset, block · 14 unmodified lines
421424 jl .nextblock
422425 REP_RET
423426
427+INIT_MMX mmxext
424428 ; ff_h264_idct_add16intra_mmxext(uint8_t *dst, const int *block_offset,
425429 ; DCTELEM *block, int stride,
426430 ; const uint8_t nnzc[6*8])
427−cglobal h264_idct_add16intra_8_mmxext, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
431+cglobal h264_idct_add16intra_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
428432 xor r5, r5
429433 %ifdef PIC
430434 lea picregq, [scan8_mem]
@@ -467,7 +471,7 @@ cglobal h264_idct_add16intra_8_mmxext, 5, 8 + npicregs, 0, dst1, block_offset, b · 36 unmodified lines
467471 ; ff_h264_idct8_add4_mmxext(uint8_t *dst, const int *block_offset,
468472 ; DCTELEM *block, int stride,
469473 ; const uint8_t nnzc[6*8])
470−cglobal h264_idct8_add4_8_mmxext, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
474+cglobal h264_idct8_add4_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
471475 %assign pad 128+4-(stack_offset&7)
472476 SUB rsp, pad
473477
@@ -524,10 +528,10 @@ cglobal h264_idct8_add4_8_mmxext, 5, 8 + npicregs, 0, dst1, block_offset, block, · 50 unmodified lines
524528 ADD rsp, pad
525529 RET
526530
527−INIT_XMM
531+INIT_XMM sse2
528532 ; ff_h264_idct8_add4_sse2(uint8_t *dst, const int *block_offset,
529533 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
530−cglobal h264_idct8_add4_8_sse2, 5, 8 + npicregs, 10, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
534+cglobal h264_idct8_add4_8, 5, 8 + npicregs, 10, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
531535 xor r5, r5
532536 %ifdef PIC
533537 lea picregq, [scan8_mem]
@@ -542,7 +546,7 @@ cglobal h264_idct8_add4_8_sse2, 5, 8 + npicregs, 10, dst1, block_offset, block, · 8 unmodified lines
542546 movsx r6, word [r2]
543547 test r6, r6
544548 jz .no_dc
545−INIT_MMX
549+INIT_MMX cpuname
546550 DC_ADD_MMXEXT_INIT r2, r3, r6
547551 %if ARCH_X86_64 == 0
548552 %define dst2q r1
@@ -562,7 +566,7 @@ INIT_MMX · 13 unmodified lines
562566 jl .nextblock
563567 REP_RET
564568 .no_dc:
565−INIT_XMM
569+INIT_XMM cpuname
566570 mov dst2d, dword [r1+r5*4]
567571 add dst2q, r0
568572 IDCT8_ADD_SSE dst2q, r2, r3, r6
@@ -576,7 +580,7 @@ INIT_XMM · 7 unmodified lines
576580 jl .nextblock
577581 REP_RET
578582
579−INIT_MMX
583+INIT_MMX mmx
580584 h264_idct_add8_mmx_plane:
581585 .nextblock:
582586 movzx r6, byte [scan8+r5]
@@ -602,7 +606,7 @@ h264_idct_add8_mmx_plane: · 19 unmodified lines
602606
603607 ; ff_h264_idct_add8_mmx(uint8_t **dest, const int *block_offset,
604608 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
605−cglobal h264_idct_add8_8_mmx, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
609+cglobal h264_idct_add8_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
606610 mov r5, 16
607611 add r2, 512
608612 %ifdef PIC
@@ -663,9 +667,10 @@ h264_idct_add8_mmxext_plane: · 54 unmodified lines
663667 jnz .nextblock
664668 rep ret
665669
670+INIT_MMX mmxext
666671 ; ff_h264_idct_add8_mmxext(uint8_t **dest, const int *block_offset,
667672 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
668−cglobal h264_idct_add8_8_mmxext, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
673+cglobal h264_idct_add8_8, 5, 8 + npicregs, 0, dst1, block_offset, block, stride, nnzc, cntr, coeff, dst2, picreg
669674 mov r5, 16
670675 add r2, 512
671676 %if ARCH_X86_64
@@ -685,7 +690,6 @@ cglobal h264_idct_add8_8_mmxext, 5, 8 + npicregs, 0, dst1, block_offset, block, · 13 unmodified lines
685690 call h264_idct_add8_mmxext_plane
686691 RET
687692
688−INIT_MMX
689693 ; r0 = uint8_t *dst, r2 = int16_t *block, r3 = int stride, r6=clobbered
690694 h264_idct_dc_add8_mmxext:
691695 movd m0, [r2 ] ; 0 0 X D
@@ -703,7 +707,7 @@ h264_idct_dc_add8_mmxext: · 11 unmodified lines
703707 ret
704708
705709 ALIGN 16
706−INIT_XMM
710+INIT_XMM sse2
707711 ; r0 = uint8_t *dst (clobbered), r2 = int16_t *block, r3 = int stride
708712 h264_add8x4_idct_sse2:
709713 movq m0, [r2+ 0]
@@ -743,7 +747,7 @@ h264_add8x4_idct_sse2: · 33 unmodified lines
743747
744748 ; ff_h264_idct_add16_sse2(uint8_t *dst, const int *block_offset,
745749 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
746−cglobal h264_idct_add16_8_sse2, 5, 5 + ARCH_X86_64, 8
750+cglobal h264_idct_add16_8, 5, 5 + ARCH_X86_64, 8
747751 %if ARCH_X86_64
748752 mov r5, r0
749753 %endif
@@ -790,7 +794,7 @@ cglobal h264_idct_add16_8_sse2, 5, 5 + ARCH_X86_64, 8 · 40 unmodified lines
790794
791795 ; ff_h264_idct_add16intra_sse2(uint8_t *dst, const int *block_offset,
792796 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
793−cglobal h264_idct_add16intra_8_sse2, 5, 7 + ARCH_X86_64, 8
797+cglobal h264_idct_add16intra_8, 5, 7 + ARCH_X86_64, 8
794798 %if ARCH_X86_64
795799 mov r7, r0
796800 %endif
@@ -841,7 +845,7 @@ cglobal h264_idct_add16intra_8_sse2, 5, 7 + ARCH_X86_64, 8 · 44 unmodified lines
841845
842846 ; ff_h264_idct_add8_sse2(uint8_t **dest, const int *block_offset,
843847 ; DCTELEM *block, int stride, const uint8_t nnzc[6*8])
844−cglobal h264_idct_add8_8_sse2, 5, 7 + ARCH_X86_64, 8
848+cglobal h264_idct_add8_8, 5, 7 + ARCH_X86_64, 8
845849 add r2, 512
846850 %if ARCH_X86_64
847851 mov r7, r0
@@ -887,29 +891,8 @@ cglobal h264_idct_add8_8_sse2, 5, 7 + ARCH_X86_64, 8 · 39 unmodified lines
887891 packssdw %2, m5
888892 %endmacro
889893
890−%macro STORE_WORDS_MMX 5
891− movd t0d, %1
892− psrlq %1, 32
893− movd t1d, %1
894− mov [t2+%2*32], t0w
895− mov [t2+%4*32], t1w
896− shr t0d, 16
897− shr t1d, 16
898− mov [t2+%3*32], t0w
899− mov [t2+%5*32], t1w
900−%endmacro
901−
902−%macro DEQUANT_STORE_MMX 1
903− DEQUANT_MMX m0, m1, %1
904− STORE_WORDS_MMX m0, 0, 1, 4, 5
905− STORE_WORDS_MMX m1, 2, 3, 6, 7
906−
907− DEQUANT_MMX m2, m3, %1
908− STORE_WORDS_MMX m2, 8, 9, 12, 13
909− STORE_WORDS_MMX m3, 10, 11, 14, 15
910−%endmacro
911−
912−%macro STORE_WORDS_SSE 9
894+%macro STORE_WORDS 5-9
895+%if cpuflag(sse)
913896 movd t0d, %1
914897 psrldq %1, 4
915898 movd t1d, %1
@@ -929,9 +912,21 @@ cglobal h264_idct_add8_8_sse2, 5, 7 + ARCH_X86_64, 8 · 13 unmodified lines
929912 shr t1d, 16
930913 mov [t2+%7*32], t0w
931914 mov [t2+%9*32], t1w
915+%else
916+ movd t0d, %1
917+ psrlq %1, 32
918+ movd t1d, %1
919+ mov [t2+%2*32], t0w
920+ mov [t2+%4*32], t1w
921+ shr t0d, 16
922+ shr t1d, 16
923+ mov [t2+%3*32], t0w
924+ mov [t2+%5*32], t1w
925+%endif
932926 %endmacro
933927
934−%macro DEQUANT_STORE_SSE2 1
928+%macro DEQUANT_STORE 1
929+%if cpuflag(sse2)
935930 movd xmm4, t3d
936931 movq xmm5, [pw_1]
937932 pshufd xmm4, xmm4, 0
@@ -953,15 +948,24 @@ cglobal h264_idct_add8_8_sse2, 5, 7 + ARCH_X86_64, 8 · 15 unmodified lines
953948 psrad xmm3, %1
954949 packssdw xmm0, xmm1
955950 packssdw xmm2, xmm3
956− STORE_WORDS_SSE xmm0, 0, 1, 4, 5, 2, 3, 6, 7
957− STORE_WORDS_SSE xmm2, 8, 9, 12, 13, 10, 11, 14, 15
951+ STORE_WORDS xmm0, 0, 1, 4, 5, 2, 3, 6, 7
952+ STORE_WORDS xmm2, 8, 9, 12, 13, 10, 11, 14, 15
953+%else
954+ DEQUANT_MMX m0, m1, %1
955+ STORE_WORDS m0, 0, 1, 4, 5
956+ STORE_WORDS m1, 2, 3, 6, 7
957+
958+ DEQUANT_MMX m2, m3, %1
959+ STORE_WORDS m2, 8, 9, 12, 13
960+ STORE_WORDS m3, 10, 11, 14, 15
961+%endif
958962 %endmacro
959963
960−%macro IDCT_DC_DEQUANT 2
961−cglobal h264_luma_dc_dequant_idct_%1, 3,4,%2
964+%macro IDCT_DC_DEQUANT 1
965+cglobal h264_luma_dc_dequant_idct, 3, 4, %1
962966 ; manually spill XMM registers for Win64 because
963967 ; the code here is initialized with INIT_MMX
964− WIN64_SPILL_XMM %2
968+ WIN64_SPILL_XMM %1
965969 movq m3, [r1+24]
966970 movq m2, [r1+16]
967971 movq m1, [r1+ 8]
@@ -984,11 +988,7 @@ cglobal h264_luma_dc_dequant_idct_%1, 3,4,%2 · 16 unmodified lines
984988 cmp t3d, 32767
985989 jg .big_qmul
986990 add t3d, 128 << 16
987−%ifidn %1,mmx
988− DEQUANT_STORE_MMX 8
989−%else
990− DEQUANT_STORE_SSE2 8
991−%endif
991+ DEQUANT_STORE 8
992992 RET
993993 .big_qmul:
994994 bsr t0d, t3d
@@ -999,16 +999,17 @@ cglobal h264_luma_dc_dequant_idct_%1, 3,4,%2 · 4 unmodified lines
999999 inc t1d
10001000 shr t3d, t0b
10011001 sub t1d, t0d
1002−%ifidn %1,mmx
1003− movd m6, t1d
1004− DEQUANT_STORE_MMX m6
1005−%else
1002+%if cpuflag(sse2)
10061003 movd xmm6, t1d
1007− DEQUANT_STORE_SSE2 xmm6
1004+ DEQUANT_STORE xmm6
1005+%else
1006+ movd m6, t1d
1007+ DEQUANT_STORE m6
10081008 %endif
10091009 RET
10101010 %endmacro
10111011
1012−INIT_MMX
1013−IDCT_DC_DEQUANT mmx, 0
1014−IDCT_DC_DEQUANT sse2, 7
1012+INIT_MMX mmx
1013+IDCT_DC_DEQUANT 0
1014+INIT_MMX sse2
1015+IDCT_DC_DEQUANT 7

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t