[svn] / trunk / xvidcore / src / image / x86_asm / postprocessing_mmx.asm Repository:
ViewVC logotype

Diff of /trunk/xvidcore/src/image/x86_asm/postprocessing_mmx.asm

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1793, Tue Nov 11 20:46:24 2008 UTC revision 1844, Thu Dec 4 14:41:50 2008 UTC
# Line 19  Line 19 
19  ; *  along with this program; if not, write to the Free Software  ; *  along with this program; if not, write to the Free Software
20  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
21  ; *  ; *
22  ; * $Id: postprocessing_mmx.asm,v 1.6 2008-11-11 20:46:24 Isibaar Exp $  ; * $Id: postprocessing_mmx.asm,v 1.11 2008-12-04 14:41:50 Isibaar Exp $
23  ; *  ; *
24  ; *************************************************************************/  ; *************************************************************************/
25    
26  BITS 32  %include "nasm.inc"
   
 %macro cglobal 1  
         %ifdef PREFIX  
                 %ifdef MARK_FUNCS  
                         global _%1:function %1.endfunc-%1  
                         %define %1 _%1:function %1.endfunc-%1  
                         %define ENDFUNC .endfunc  
                 %else  
                         global _%1  
                         %define %1 _%1  
                         %define ENDFUNC  
                 %endif  
         %else  
                 %ifdef MARK_FUNCS  
                         global %1:function %1.endfunc-%1  
                         %define ENDFUNC .endfunc  
                 %else  
                         global %1  
                         %define ENDFUNC  
                 %endif  
         %endif  
 %endmacro  
27    
28  ;===========================================================================  ;===========================================================================
29  ; read only data  ; read only data
30  ;===========================================================================  ;===========================================================================
31    
32  %ifdef FORMAT_COFF  DATA
 SECTION .rodata  
 %else  
 SECTION .rodata align=16  
 %endif  
33    
34  mmx_0x80:  mmx_0x80:
35          times 8 db 0x80          times 8 db 0x80
# Line 72  Line 46 
46  ; Code  ; Code
47  ;=============================================================================  ;=============================================================================
48    
49  SECTION .text  TEXT
50    
51  cglobal image_brightness_mmx  cglobal image_brightness_mmx
52    
# Line 81  Line 55 
55  ;// image_brightness_mmx  ;// image_brightness_mmx
56  ;//////////////////////////////////////////////////////////////////////  ;//////////////////////////////////////////////////////////////////////
57    
58  align 16  align SECTION_ALIGN
59  image_brightness_mmx:  image_brightness_mmx:
60    
         push esi  
         push edi  
   
61          movq mm6, [mmx_0x80]          movq mm6, [mmx_0x80]
62    
63          mov eax, [esp+8+20] ; offset  %ifdef ARCH_IS_X86_64
64          movq mm7, [mmx_offset + (eax + 128)*8]   ; being lazy          XVID_MOVSX _EAX, prm5d
65            lea TMP0, [mmx_offset]
66            movq mm7, [TMP0 + (_EAX + 128)*8]   ; being lazy
67    %else
68            mov eax, prm5d ; offset
69            movq mm7, [mmx_offset + (_EAX + 128)*8]   ; being lazy
70    %endif
71    
72          mov edx, [esp+8+4]  ; Dst          mov TMP1, prm1  ; Dst
73          mov ecx, [esp+8+8]  ; stride          mov TMP0, prm2  ; stride
74          mov esi, [esp+8+12] ; width  
75          mov edi, [esp+8+16] ; height          push _ESI
76            push _EDI
77    %ifdef ARCH_IS_X86_64
78            mov _ESI, prm3
79            mov _EDI, prm4
80    %else
81            mov _ESI, [_ESP+8+12] ; width
82            mov _EDI, [_ESP+8+16] ; height
83    %endif
84    
85  .yloop:  .yloop:
86          xor     eax, eax          xor     _EAX, _EAX
87    
88  .xloop:  .xloop:
89          movq mm0, [edx + eax]          movq mm0, [TMP1 + _EAX]
90          movq mm1, [edx + eax + 8]       ; mm0 = [dst]          movq mm1, [TMP1 + _EAX + 8]     ; mm0 = [dst]
91    
92          paddb mm0, mm6                          ; unsigned -> signed domain          paddb mm0, mm6                          ; unsigned -> signed domain
93          paddb mm1, mm6          paddb mm1, mm6
# Line 111  Line 96 
96          psubb mm0, mm6          psubb mm0, mm6
97          psubb mm1, mm6                          ; signed -> unsigned domain          psubb mm1, mm6                          ; signed -> unsigned domain
98    
99          movq [edx + eax], mm0          movq [TMP1 + _EAX], mm0
100          movq [edx + eax + 8], mm1       ; [dst] = mm0          movq [TMP1 + _EAX + 8], mm1     ; [dst] = mm0
101    
102          add     eax,16          add     _EAX,16
103          cmp     eax,esi          cmp     _EAX,_ESI
104          jl .xloop          jl .xloop
105    
106          add edx, ecx                            ; dst += stride          add TMP1, TMP0                          ; dst += stride
107          sub edi, 1          dec _EDI
108          jg .yloop          jg .yloop
109    
110          pop edi          pop _EDI
111          pop esi          pop _ESI
112    
113          ret          ret
114  ENDFUNC  ENDFUNC

Legend:
Removed from v.1793  
changed lines
  Added in v.1844

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