[cvs] / xvidcore / src / bitstream / x86_asm / cbp_mmx.asm Repository:
ViewVC logotype

Annotation of /xvidcore/src/bitstream/x86_asm/cbp_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.19 - (view) (download)

1 : edgomez 1.9 ;/****************************************************************************
2 : Isibaar 1.1 ; *
3 : edgomez 1.9 ; * XVID MPEG-4 VIDEO CODEC
4 :     ; * - MMX CBP computation -
5 : Isibaar 1.1 ; *
6 : Skal 1.13 ; * Copyright (C) 2005 Carlo Bramini <carlo.bramix@libero.it>
7 :     ; * 2001-2003 Peter Ross <pross@xvid.org>
8 : edgomez 1.9 ; * 2002-2003 Pascal Massimino <skal@planet-d.net>
9 : edgomez 1.8 ; *
10 : edgomez 1.9 ; * This program is free software ; you can redistribute it and/or modify
11 :     ; * it under the terms of the GNU General Public License as published by
12 :     ; * the Free Software Foundation ; either version 2 of the License, or
13 :     ; * (at your option) any later version.
14 : edgomez 1.8 ; *
15 : edgomez 1.9 ; * This program is distributed in the hope that it will be useful,
16 :     ; * but WITHOUT ANY WARRANTY ; without even the implied warranty of
17 :     ; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 :     ; * GNU General Public License for more details.
19 : edgomez 1.8 ; *
20 : edgomez 1.9 ; * You should have received a copy of the GNU General Public License
21 :     ; * along with this program ; if not, write to the Free Software
22 :     ; * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
23 : Isibaar 1.1 ; *
24 : Isibaar 1.19 ; * $Id: cbp_mmx.asm,v 1.18 2008/12/04 14:41:50 Isibaar Exp $
25 : Isibaar 1.1 ; *
26 : edgomez 1.9 ; ***************************************************************************/
27 : edgomez 1.8
28 : edgomez 1.9 ;=============================================================================
29 :     ; Macros
30 :     ;=============================================================================
31 : Isibaar 1.1
32 : Isibaar 1.17 %include "nasm.inc"
33 : Isibaar 1.1
34 : edgomez 1.9 ;=============================================================================
35 :     ; Local data
36 :     ;=============================================================================
37 :    
38 : Isibaar 1.17 DATA
39 : edgomez 1.9
40 : Isibaar 1.17 ALIGN SECTION_ALIGN
41 : edgomez 1.9
42 : Skal 1.13 mult_mask:
43 :     db 0x10,0x20,0x04,0x08,0x01,0x02,0x00,0x00
44 : edgomez 1.9 ignore_dc:
45 : Skal 1.13 dw 0, -1, -1, -1
46 : edgomez 1.9
47 :     ;=============================================================================
48 :     ; Code
49 :     ;=============================================================================
50 : Isibaar 1.1
51 : Isibaar 1.18 TEXT
52 : Isibaar 1.1
53 : Isibaar 1.5 cglobal calc_cbp_mmx
54 : Isibaar 1.1
55 : edgomez 1.9 ;-----------------------------------------------------------------------------
56 : Isibaar 1.1 ; uint32_t calc_cbp_mmx(const int16_t coeff[6][64]);
57 : edgomez 1.9 ;-----------------------------------------------------------------------------
58 : Isibaar 1.1
59 : Isibaar 1.17 %macro MAKE_LOAD 2
60 :     por mm0, [%2-128*1+%1*8]
61 :     por mm1, [%2+128*0+%1*8]
62 :     por mm2, [%2+128*1+%1*8]
63 :     por mm3, [%2+128*2+%1*8]
64 :     por mm4, [%2+128*3+%1*8]
65 :     por mm5, [%2+128*4+%1*8]
66 : Skal 1.13 %endmacro
67 :    
68 : Isibaar 1.17 ALIGN SECTION_ALIGN
69 : Isibaar 1.5 calc_cbp_mmx:
70 : Isibaar 1.17 mov _EAX, prm1 ; coeff
71 : Isibaar 1.1
72 : edgomez 1.9 movq mm7, [ignore_dc]
73 : Skal 1.13 pxor mm6, mm6 ; used only for comparing
74 : Isibaar 1.17 movq mm0, [_EAX+128*0]
75 :     movq mm1, [_EAX+128*1]
76 :     movq mm2, [_EAX+128*2]
77 :     movq mm3, [_EAX+128*3]
78 :     movq mm4, [_EAX+128*4]
79 :     movq mm5, [_EAX+128*5]
80 :     add _EAX, 8+128
81 : edgomez 1.9 pand mm0, mm7
82 : Skal 1.13 pand mm1, mm7
83 :     pand mm2, mm7
84 :     pand mm3, mm7
85 :     pand mm4, mm7
86 :     pand mm5, mm7
87 :    
88 : Isibaar 1.17 MAKE_LOAD 0, _EAX
89 :     MAKE_LOAD 1, _EAX
90 :     MAKE_LOAD 2, _EAX
91 :     MAKE_LOAD 3, _EAX
92 :     MAKE_LOAD 4, _EAX
93 :     MAKE_LOAD 5, _EAX
94 :     MAKE_LOAD 6, _EAX
95 :     MAKE_LOAD 7, _EAX
96 :     MAKE_LOAD 8, _EAX
97 :     MAKE_LOAD 9, _EAX
98 :     MAKE_LOAD 10, _EAX
99 :     MAKE_LOAD 11, _EAX
100 :     MAKE_LOAD 12, _EAX
101 :     MAKE_LOAD 13, _EAX
102 :     MAKE_LOAD 14, _EAX
103 : Skal 1.13
104 :     movq mm7, [mult_mask]
105 :     packssdw mm0, mm1
106 :     packssdw mm2, mm3
107 :     packssdw mm4, mm5
108 :     packssdw mm0, mm2
109 :     packssdw mm4, mm6
110 : suxen_drol 1.14 pcmpeqw mm0, mm6
111 :     pcmpeqw mm4, mm6
112 :     pcmpeqw mm0, mm6
113 :     pcmpeqw mm4, mm6
114 : Skal 1.13 psrlw mm0, 15
115 :     psrlw mm4, 15
116 :     packuswb mm0, mm4
117 :     pmaddwd mm0, mm7
118 : Isibaar 1.5
119 : edgomez 1.9 movq mm1, mm0
120 :     psrlq mm1, 32
121 : Skal 1.13 paddusb mm0, mm1
122 : Isibaar 1.1
123 : Skal 1.13 movd eax, mm0
124 : Isibaar 1.17 shr _EAX, 8
125 :     and _EAX, 0x3F
126 : edgomez 1.9 ret
127 : Isibaar 1.16 ENDFUNC
128 : edgomez 1.12
129 : Isibaar 1.19 NON_EXEC_STACK

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4