[cvs] / xvidcore / src / quant / x86_asm / quantize_h263_mmx.asm Repository:
ViewVC logotype

Diff of /xvidcore/src/quant/x86_asm/quantize_h263_mmx.asm

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

revision 1.3, Mon Apr 12 15:49:56 2004 UTC revision 1.7, Sun Aug 29 10:02:38 2004 UTC
# Line 32  Line 32 
32    
33  %macro cglobal 1  %macro cglobal 1
34         %ifdef PREFIX         %ifdef PREFIX
35                    %ifdef MARK_FUNCS
36                            global _%1:function %1.endfunc-%1
37                            %define %1 _%1:function %1.endfunc-%1
38                    %else
39                  global _%1                  global _%1
40                  %define %1 _%1                  %define %1 _%1
41                    %endif
42            %else
43                    %ifdef MARK_FUNCS
44                            global %1:function %1.endfunc-%1
45          %else          %else
46                  global %1                  global %1
47          %endif          %endif
48            %endif
49  %endmacro  %endmacro
50    
51  ;=============================================================================  ;=============================================================================
# Line 44  Line 53 
53  ;=============================================================================  ;=============================================================================
54    
55  %ifdef FORMAT_COFF  %ifdef FORMAT_COFF
56  SECTION .rodata data  SECTION .rodata
57  %else  %else
58  SECTION .rodata data align=16  SECTION .rodata align=16
59  %endif  %endif
60    
61  ALIGN 16  ALIGN 16
# Line 132  Line 141 
141    push esi    push esi
142    
143    mov esi, [esp + 4 + 8]     ; data    mov esi, [esp + 4 + 8]     ; data
144      mov ecx,[esp + 4 + 16]     ; dcscalar
145    movsx eax, word [esi]      ; data[0]    movsx eax, word [esi]      ; data[0]
146    
147    mov ecx,[esp + 4 + 16]         ; dcscalar    sar ecx,1                  ; dcscalar /2
148    mov edx,eax    mov edx,eax
149    sar ecx,1    sar edx,31                 ; sgn(data[0])
150    add eax,ecx    xor ecx,edx                ; *sgn(data[0])
151    sub edx,ecx    sub eax,edx
152    cmovl eax,edx             ; +/- dcscalar/2    add eax,ecx                ; + (dcscalar/2)*sgn(data[0])
153    
154    mov ecx, [esp + 4 + 12]    ; quant    mov ecx, [esp + 4 + 12]    ; quant
155    cdq    cdq
156    idiv dword [esp + 4 + 16]  ; dcscalar    idiv dword [esp + 4 + 16]  ; dcscalar
# Line 224  Line 234 
234    
235    pop esi    pop esi
236    ret    ret
237    .endfunc
238    
239    
240  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
# Line 335  Line 346 
346    
347    pop esi    pop esi
348    ret    ret
349    .endfunc
350    
351  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
352  ;  ;
# Line 438  Line 450 
450    jnz .q1loop    jnz .q1loop
451    
452    jmp .done    jmp .done
453    .endfunc
454    
455    
456    
# Line 552  Line 565 
565    cmp ecx, 16    cmp ecx, 16
566    jnz .qes2_q1loop    jnz .qes2_q1loop
567    jmp .qes2_done    jmp .qes2_done
568    .endfunc
569    
570    
571  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
# Line 624  Line 638 
638    
639     ; deal with DC     ; deal with DC
640    mov eax, [esp+ 8]                ; coeff    mov eax, [esp+ 8]                ; coeff
641    movsx eax,word [eax]    movd mm1,[esp+16]                ; dcscalar
642    mov ecx,2047    movd mm0,[eax]                   ; coeff[0]
643    imul dword [esp+16]              ; dcscalar    pmullw mm0,mm1                   ; * dcscalar
644    mov edx, [esp+ 4]                ; data    mov edx, [esp+ 4]                ; data
645    cmp eax,ecx    paddsw mm0, mm5                  ; saturate +
646    cmovg eax,ecx    psubsw mm0, mm5
647    not ecx    psubsw mm0, mm5                  ; saturate -
648    cmp eax,ecx    paddsw mm0, mm5
649    cmovl eax,ecx    movd eax,mm0
   
650    mov [edx], ax    mov [edx], ax
651    
652    xor eax, eax                    ; return 0    xor eax, eax                    ; return 0
653    ret    ret
654    .endfunc
655    
656  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
657  ;  ;
# Line 711  Line 725 
725    
726     ; deal with DC     ; deal with DC
727    mov eax, [esp+ 8]                 ; coeff    mov eax, [esp+ 8]                 ; coeff
728    mov edx, [esp+ 4]                 ; data    movd mm1,[esp+16]                 ; dcscalar
729    movd mm0, [eax]    movd mm0, [eax]
730    pmullw mm0, [esp+16]              ; dcscalar    pmullw mm0, mm1
731      mov edx, [esp+ 4]                 ; data
732    pminsw mm0,mm4    pminsw mm0,mm4
733    pmaxsw mm0,mm5    pmaxsw mm0,mm5
734    movd eax, mm0    movd eax, mm0
# Line 721  Line 736 
736    
737    xor eax, eax                      ; return 0    xor eax, eax                      ; return 0
738    ret    ret
739    .endfunc
740    
741    
742  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
# Line 740  Line 756 
756    mov eax, [esp+ 8]                 ; coeff    mov eax, [esp+ 8]                 ; coeff
757    
758    movd xmm6,ecx                     ; quant    movd xmm6,ecx                     ; quant
759  ;  shr ecx,1  
760    shl ecx,31    shl ecx,31
761    pshuflw xmm6,xmm6,0    pshuflw xmm6,xmm6,0
762    pcmpeqw xmm0,xmm0    pcmpeqw xmm0,xmm0
# Line 809  Line 825 
825    
826    xor eax, eax              ; return 0    xor eax, eax              ; return 0
827    ret    ret
828    .endfunc
829    
830  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
831  ;  ;
# Line 879  Line 896 
896    
897    xor eax, eax              ; return 0    xor eax, eax              ; return 0
898    ret    ret
899    .endfunc
900    
901    
902  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
# Line 947  Line 965 
965    
966    xor eax, eax              ; return 0    xor eax, eax              ; return 0
967    ret    ret
968    .endfunc
969    
970    
971  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
# Line 1018  Line 1037 
1037    
1038    xor eax, eax              ; return 0    xor eax, eax              ; return 0
1039    ret    ret
1040    .endfunc
1041    

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.7

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