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

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

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