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

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

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

revision 1519, Sat Jul 24 11:46:08 2004 UTC revision 1798, Wed Nov 26 02:21:02 2008 UTC
# Line 22  Line 22 
22  ; *  ; *
23  ; *************************************************************************/  ; *************************************************************************/
24    
25  BITS 32  %include "nasm.inc"
26    
27  %macro cglobal 1  ;===========================================================================
28          %ifdef PREFIX  ; read only data
29                  global _%1  ;===========================================================================
30                  %define %1 _%1  
31          %else  DATA
32                  global %1  
33          %endif  xmm_0x80:
34  %endmacro          times 16 db 0x80
35    
36    ;=============================================================================
37    ; Code
38    ;=============================================================================
39    
40    SECTION .rotext align=SECTION_ALIGN
41    
42    cglobal image_brightness_sse2
43    
44  %macro FILLBYTES 2  ;//////////////////////////////////////////////////////////////////////
45    ;// image_brightness_sse2
46    ;//////////////////////////////////////////////////////////////////////
47    
48          mov [%1], %2  %macro CREATE_OFFSET_VECTOR 2
49      mov [%1 +  0], %2
50          mov [%1 + 1], %2          mov [%1 + 1], %2
51          mov [%1 + 2], %2          mov [%1 + 2], %2
52          mov [%1 + 3], %2          mov [%1 + 3], %2
# Line 51  Line 62 
62          mov [%1 + 13], %2          mov [%1 + 13], %2
63          mov [%1 + 14], %2          mov [%1 + 14], %2
64          mov [%1 + 15], %2          mov [%1 + 15], %2
   
65  %endmacro  %endmacro
66    
67    ALIGN SECTION_ALIGN
68    image_brightness_sse2:
69    
70  ;===========================================================================  %ifdef ARCH_IS_X86_64
71  ; read only data    movsx _EAX, prm5d
 ;===========================================================================  
   
 %ifdef FORMAT_COFF  
 SECTION .rodata  
72  %else  %else
73  SECTION .rodata align=16    mov eax, prm5   ; brightness offset value
74  %endif  %endif
75      mov TMP1, prm1  ; Dst
76      mov TMP0, prm2  ; stride
77    
78  xmm_0x80:    push _ESI
79          times 16 db 0x80    push _EDI    ; 8 bytes offset for push
80      sub _ESP, 32 ; 32 bytes for local data (16bytes will be used, 16bytes more to align correctly mod 16)
 offset_xmm:  
         times 16 db 0x00  
   
 ;=============================================================================  
 ; Code  
 ;=============================================================================  
   
 SECTION .text  
   
 cglobal image_brightness_sse2  
   
   
 ;//////////////////////////////////////////////////////////////////////  
 ;// image_brightness_sse2  
 ;//////////////////////////////////////////////////////////////////////  
   
 align 16  
 image_brightness_sse2:  
   
         push esi  
         push edi  
81    
82          movdqa xmm6, [xmm_0x80]          movdqa xmm6, [xmm_0x80]
83    
84          mov eax, [esp+8+20] ; offset    ; Create a offset...offset vector
85      mov TMP1, _ESP          ; TMP1 will be esp aligned mod 16
86          FILLBYTES offset_xmm, al    add TMP1, 15            ; TMP1 = esp + 15
87      and TMP1, ~15           ; TMP1 = (esp + 15)&(~15)
88          movdqa xmm7, [offset_xmm]    CREATE_OFFSET_VECTOR TMP1, al
89      movdqa xmm7, [TMP1]
90          mov edx, [esp+8+4]  ; Dst  
91          mov ecx, [esp+8+8]  ; stride  %ifdef ARCH_IS_X86_64
92          mov esi, [esp+8+12] ; width    mov _ESI, prm3
93          mov edi, [esp+8+16] ; height    mov _EDI, prm4
94    %else
95      mov _ESI, [_ESP+8+32+12] ; width
96      mov _EDI, [_ESP+8+32+16] ; height
97    %endif
98    
99  .yloop  .yloop:
100          xor     eax, eax    xor _EAX, _EAX
101    
102  .xloop  .xloop:
103          movdqa xmm0, [edx + eax]    movdqa xmm0, [TMP1 + _EAX]
104          movdqa xmm1, [edx + eax + 16]   ; xmm0 = [dst]    movdqa xmm1, [TMP1 + _EAX + 16] ; xmm0 = [dst]
105    
106          paddb xmm0, xmm6                                ; unsigned -> signed domain          paddb xmm0, xmm6                                ; unsigned -> signed domain
107          paddb xmm1, xmm6          paddb xmm1, xmm6
# Line 117  Line 110 
110          psubb xmm0, xmm6          psubb xmm0, xmm6
111          psubb xmm1, xmm6                                ; signed -> unsigned domain          psubb xmm1, xmm6                                ; signed -> unsigned domain
112    
113          movdqa [edx + eax], xmm0    movdqa [TMP1 + _EAX], xmm0
114          movdqa [edx + eax + 16], xmm1   ; [dst] = xmm0    movdqa [TMP1 + _EAX + 16], xmm1 ; [dst] = xmm0
115    
116          add     eax,32    add _EAX,32
117          cmp     eax,esi    cmp _EAX,_ESI
118          jl .xloop          jl .xloop
119    
120          add edx, ecx                            ; dst += stride    add TMP1, TMP0                  ; dst += stride
121          sub edi, 1    sub _EDI, 1
122          jg .yloop          jg .yloop
123    
124          pop edi    add _ESP, 32
125          pop esi    pop _EDI
126      pop _ESI
127    
128          ret          ret
129    ENDFUNC
130  ;//////////////////////////////////////////////////////////////////////  ;//////////////////////////////////////////////////////////////////////
131    
132    %ifidn __OUTPUT_FORMAT__,elf
133    section ".note.GNU-stack" noalloc noexec nowrite progbits
134    %endif
135    

Legend:
Removed from v.1519  
changed lines
  Added in v.1798

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