[svn] / branches / dev-api-4 / xvidcore / src / quant / x86_asm / quantize_mpeg_xmm.asm Repository:
ViewVC logotype

Diff of /branches/dev-api-4/xvidcore/src/quant/x86_asm/quantize_mpeg_xmm.asm

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

revision 1229, Sun Nov 30 09:45:52 2003 UTC revision 1230, Sun Nov 30 16:13:16 2003 UTC
# Line 20  Line 20 
20  ; *  along with this program ; if not, write to the Free Software  ; *  along with this program ; if not, write to the Free Software
21  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA  ; *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
22  ; *  ; *
23  ; * $Id: quantize_mpeg_xmm.asm,v 1.1.2.4 2003-11-03 15:51:50 edgomez Exp $  ; * $Id: quantize_mpeg_xmm.asm,v 1.1.2.5 2003-11-30 16:13:16 edgomez Exp $
24  ; *  ; *
25  ; ***************************************************************************/  ; ***************************************************************************/
26    
# Line 89  Line 89 
89          %assign quant quant+1          %assign quant quant+1
90  %endrep  %endrep
91    
   
 ;-----------------------------------------------------------------------------  
 ; intra matrix  
 ; (TODO remove dependency on external tables for instance safiness)  
 ;-----------------------------------------------------------------------------  
   
92  %macro FIXX 1  %macro FIXX 1
93  dw (1 << 16) / (%1) + 1  dw (1 << 16) / (%1) + 1
94  %endmacro  %endmacro
95    
 cextern intra_matrix_fixl  
 cextern intra_matrix_fix  
 cextern intra_matrix1  
 cextern intra_matrix  
   
 ;-----------------------------------------------------------------------------  
 ; inter matrix  
 ; (TODO remove dependency on external tables for instance safiness)  
 ;-----------------------------------------------------------------------------  
   
 cextern inter_matrix1  
 cextern inter_matrix  
 cextern inter_matrix_fix  
 cextern inter_matrix_fixl  
   
   
96  %define nop4    db      08Dh, 074h, 026h,0  %define nop4    db      08Dh, 074h, 026h,0
97  %define nop3    add     esp, byte 0  %define nop3    add     esp, byte 0
98  %define nop2    mov     esp, esp  %define nop2    mov     esp, esp
# Line 188  Line 166 
166  ; uint32_t quant_mpeg_intra_xmm(int16_t * coeff,  ; uint32_t quant_mpeg_intra_xmm(int16_t * coeff,
167  ;                               const int16_t const * data,  ;                               const int16_t const * data,
168  ;                               const uint32_t quant,  ;                               const uint32_t quant,
169  ;                               const uint32_t dcscalar);  ;                               const uint32_t dcscalar,
170    ;                               const uint16_t *mpeg_matrices);
171  ;  ;
172  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
173    
# Line 201  Line 180 
180    push edi    push edi
181    push ebx    push ebx
182    nop    nop
183    mov edi, mmzero    mov edi, [esp + 12 + 20]              ; mpeg_quant_matrices
184    mov esi, -14    mov esi, -14
185    pxor mm0, mm0    pxor mm0, mm0
186    pxor mm3, mm3    pxor mm3, mm3
# Line 224  Line 203 
203    psraw mm4, 15    psraw mm4, 15
204    psllw mm0, 4      ;level << 4 ;    psllw mm0, 4      ;level << 4 ;
205    psllw mm3, 4    psllw mm3, 4
206    paddw mm0, [intra_matrix1 + 8*esi+112]    paddw mm0, [edi + 128 + 8*esi+112]
207    paddw mm3, [intra_matrix1 + 8*esi+120]    paddw mm3, [edi + 128 + 8*esi+120]
208    movq mm5, [intra_matrix_fixl + 8*esi+112]    movq mm5, [edi + 384 + 8*esi+112]
209    movq mm7, [intra_matrix_fixl + 8*esi+120]    movq mm7, [edi + 384 + 8*esi+120]
210    pmulhuw mm5, mm0    pmulhuw mm5, mm0
211    pmulhuw mm7, mm3    pmulhuw mm7, mm3
212    mov esp, esp    mov esp, esp
213    movq mm2, [intra_matrix + 8*esi+112]    movq mm2, [edi + 8*esi+112]
214    movq mm6, [intra_matrix + 8*esi+120]    movq mm6, [edi + 8*esi+120]
215    pmullw mm2, mm5    pmullw mm2, mm5
216    pmullw mm6, mm7    pmullw mm6, mm7
217    psubw mm0, mm2    psubw mm0, mm2
# Line 243  Line 222 
222    paddw mm5, mm2    paddw mm5, mm2
223    paddw mm7, mm2    paddw mm7, mm2
224    mov esp, esp    mov esp, esp
225    pmulhuw mm0, [intra_matrix_fix + 8*esi+112]    pmulhuw mm0, [edi + 256 + 8*esi+112]
226    pmulhuw mm3, [intra_matrix_fix + 8*esi+120]    pmulhuw mm3, [edi + 256 + 8*esi+120]
227    paddw mm5, mm0    paddw mm5, mm0
228    paddw mm7, mm3    paddw mm7, mm3
229    movq mm0, [edi]    pxor mm0, mm0
230    movq mm3, [edi]    pxor mm3, mm3
231    pmulhuw mm5, mm6      ; mm0 = (mm0 / 2Q) >> 16    pmulhuw mm5, mm6      ; mm0 = (mm0 / 2Q) >> 16
232    pmulhuw mm7, mm6      ;  (level + quantd) / quant (0<quant<32)    pmulhuw mm7, mm6      ;  (level + quantd) / quant (0<quant<32)
233    pxor mm5, mm1         ; mm0 *= sign(mm0)    pxor mm5, mm1         ; mm0 *= sign(mm0)
# Line 301  Line 280 
280    psraw mm4, 15    psraw mm4, 15
281    psllw mm0, 4                              ; level << 4    psllw mm0, 4                              ; level << 4
282    psllw mm3, 4    psllw mm3, 4
283    paddw mm0, [intra_matrix1 + 8*esi+112]    ;mm0 is to be divided    paddw mm0, [edi + 128 + 8*esi+112]    ;mm0 is to be divided
284    paddw mm3, [intra_matrix1 + 8*esi+120]    ;intra1 contains fix for division by 1    paddw mm3, [edi + 128 + 8*esi+120]    ;intra1 contains fix for division by 1
285    movq mm5, [intra_matrix_fixl + 8*esi+112] ;with rounding down    movq mm5, [edi + 384 + 8*esi+112] ;with rounding down
286    movq mm7, [intra_matrix_fixl + 8*esi+120]    movq mm7, [edi + 384 + 8*esi+120]
287    pmulhuw mm5, mm0    pmulhuw mm5, mm0
288    pmulhuw mm7, mm3      ;mm7: first approx of division    pmulhuw mm7, mm3      ;mm7: first approx of division
289    mov esp, esp    mov esp, esp
290    movq mm2, [intra_matrix + 8*esi+112]    movq mm2, [edi + 8*esi+112]
291    movq mm6, [intra_matrix + 8*esi+120]      ; divs for q<=16    movq mm6, [edi + 8*esi+120]      ; divs for q<=16
292    pmullw mm2, mm5       ;test value <= original    pmullw mm2, mm5       ;test value <= original
293    pmullw mm6, mm7    pmullw mm6, mm7
294    psubw mm0, mm2        ;mismatch    psubw mm0, mm2        ;mismatch
# Line 319  Line 298 
298    paddw mm5, mm2        ;first approx with quantd    paddw mm5, mm2        ;first approx with quantd
299    paddw mm7, mm2    paddw mm7, mm2
300    mov esp, esp    mov esp, esp
301    pmulhuw mm0, [intra_matrix_fix + 8*esi+112]   ;correction    pmulhuw mm0, [edi + 256 + 8*esi+112]   ;correction
302    pmulhuw mm3, [intra_matrix_fix + 8*esi+120]    pmulhuw mm3, [edi + 256 + 8*esi+120]
303    paddw mm5, mm0        ;final result with quantd    paddw mm5, mm0        ;final result with quantd
304    paddw mm7, mm3    paddw mm7, mm3
305    movq mm0, [edi]    pxor mm0, mm0
306    movq mm3, [edi]    pxor mm3, mm3
307    mov esp, esp    mov esp, esp
308    psrlw mm5, 1          ;  (level + quantd) /2  (quant = 1)    psrlw mm5, 1          ;  (level + quantd) /2  (quant = 1)
309    psrlw mm7, 1    psrlw mm7, 1
# Line 351  Line 330 
330    psraw mm4, 15    psraw mm4, 15
331    psllw mm0, 4          ; level << 4    psllw mm0, 4          ; level << 4
332    psllw mm3, 4          ;    psllw mm3, 4          ;
333    paddw mm0, [intra_matrix1 + 8*esi+112] ;mm0 is to be divided intra1 contains fix for division by 1    paddw mm0, [edi + 128 + 8*esi+112] ;mm0 is to be divided intra1 contains fix for division by 1
334    paddw mm3, [intra_matrix1 + 8*esi+120]    paddw mm3, [edi + 128 + 8*esi+120]
335    movq mm5, [intra_matrix_fixl + 8*esi+112]    movq mm5, [edi + 384 + 8*esi+112]
336    movq mm7, [intra_matrix_fixl + 8*esi+120]    movq mm7, [edi + 384 + 8*esi+120]
337    pmulhuw mm5, mm0    pmulhuw mm5, mm0
338    pmulhuw mm7, mm3      ;mm7: first approx of division    pmulhuw mm7, mm3      ;mm7: first approx of division
339    mov esp, esp    mov esp, esp
340    movq mm2, [intra_matrix + 8*esi+112]    movq mm2, [edi + 8*esi+112]
341    movq mm6, [intra_matrix + 8*esi+120]    movq mm6, [edi + 8*esi+120]
342    pmullw mm2, mm5       ;test value <= original    pmullw mm2, mm5       ;test value <= original
343    pmullw mm6, mm7    pmullw mm6, mm7
344    psubw mm0, mm2        ;mismatch    psubw mm0, mm2        ;mismatch
# Line 370  Line 349 
349    paddw mm5, mm2        ;first approx with quantd    paddw mm5, mm2        ;first approx with quantd
350    paddw mm7, mm2    paddw mm7, mm2
351    mov esp, esp    mov esp, esp
352    pmulhuw mm0, [intra_matrix_fix + 8*esi+112] ;correction    pmulhuw mm0, [edi + 256 + 8*esi+112] ;correction
353    pmulhuw mm3, [intra_matrix_fix + 8*esi+120]    pmulhuw mm3, [edi + 256 + 8*esi+120]
354    paddw mm5, mm0        ;final result with quantd    paddw mm5, mm0        ;final result with quantd
355    paddw mm7, mm3    paddw mm7, mm3
356    movq mm0, [edi]    pxor mm0, mm0
357    movq mm3, [edi]    pxor mm3, mm3
358    mov esp, esp    mov esp, esp
359    pmulhuw mm5, mm6      ; mm0 = (mm0 / 2Q) >> 16    pmulhuw mm5, mm6      ; mm0 = (mm0 / 2Q) >> 16
360    pmulhuw mm7, mm6      ;  (level + quantd) / quant (0<quant<32)    pmulhuw mm7, mm6      ;  (level + quantd) / quant (0<quant<32)
# Line 395  Line 374 
374  ;  ;
375  ; uint32_t quant_mpeg_inter_xmm(int16_t * coeff,  ; uint32_t quant_mpeg_inter_xmm(int16_t * coeff,
376  ;                               const int16_t const * data,  ;                               const int16_t const * data,
377  ;                               const uint32_t quant);  ;                               const uint32_t quant,
378    ;                               const uint16_t *mpeg_matrices);
379  ;  ;
380  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
381    
# Line 408  Line 388 
388    push edi    push edi
389    push ebx    push ebx
390    nop    nop
391    mov edi, mmzero    mov edi, [esp + 12 + 16]
392    mov esi, -14    mov esi, -14
393    mov ebx, esp    mov ebx, esp
394    sub esp, byte 24    sub esp, byte 24
# Line 437  Line 417 
417    psraw mm4, 15    psraw mm4, 15
418    psllw mm0, 4          ; level << 4    psllw mm0, 4          ; level << 4
419    psllw mm3, 4          ;    psllw mm3, 4          ;
420    paddw mm0, [inter_matrix1 + 8*esi+112]    paddw mm0, [edi + 640 + 8*esi+112]
421    paddw mm3, [inter_matrix1 + 8*esi+120]    paddw mm3, [edi + 640 + 8*esi+120]
422    movq mm5, [inter_matrix_fixl + 8*esi+112]    movq mm5, [edi + 896 + 8*esi+112]
423    movq mm7, [inter_matrix_fixl + 8*esi+120]    movq mm7, [edi + 896 + 8*esi+120]
424    pmulhuw mm5, mm0    pmulhuw mm5, mm0
425    pmulhuw mm7, mm3    pmulhuw mm7, mm3
426    mov esp, esp    mov esp, esp
427    movq mm2, [inter_matrix + 8*esi+112]    movq mm2, [edi + 512 + 8*esi+112]
428    movq mm6, [inter_matrix + 8*esi+120]    movq mm6, [edi + 512 + 8*esi+120]
429    pmullw mm2, mm5    pmullw mm2, mm5
430    pmullw mm6, mm7    pmullw mm6, mm7
431    psubw mm0, mm2    psubw mm0, mm2
432    psubw mm3, mm6    psubw mm3, mm6
433    movq mm2, [byte ebx]    movq mm2, [byte ebx]
434    movq mm6, [mmx_divs + ecx * 8 - 8]    movq mm6, [mmx_divs + ecx * 8 - 8]
435    pmulhuw mm0, [inter_matrix_fix + 8*esi+112]    pmulhuw mm0, [edi + 768 + 8*esi+112]
436    pmulhuw mm3, [inter_matrix_fix + 8*esi+120]    pmulhuw mm3, [edi + 768 + 8*esi+120]
437    paddw mm2, [ebx+8]    ;sum    paddw mm2, [ebx+8]    ;sum
438    paddw mm5, mm0    paddw mm5, mm0
439    paddw mm7, mm3    paddw mm7, mm3
440    movq mm0, [edi]    pxor mm0, mm0
441    movq mm3, [edi]    pxor mm3, mm3
442    pmulhuw mm5, mm6      ; mm0 = (mm0 / 2Q) >> 16    pmulhuw mm5, mm6      ; mm0 = (mm0 / 2Q) >> 16
443    pmulhuw mm7, mm6      ;  (level ) / quant (0<quant<32)    pmulhuw mm7, mm6      ;  (level ) / quant (0<quant<32)
444    add esi, byte 2    add esi, byte 2
# Line 501  Line 481 
481    psraw mm4, 15    psraw mm4, 15
482    psllw mm0, 4                              ; level << 4    psllw mm0, 4                              ; level << 4
483    psllw mm3, 4    psllw mm3, 4
484    paddw mm0, [inter_matrix1 + 8*esi+112]    ;mm0 is to be divided    paddw mm0, [edi + 640 + 8*esi+112]    ;mm0 is to be divided
485    paddw mm3, [inter_matrix1 + 8*esi+120]    ; inter1 contains fix for division by 1    paddw mm3, [edi + 640 + 8*esi+120]    ; inter1 contains fix for division by 1
486    movq mm5, [inter_matrix_fixl + 8*esi+112] ;with rounding down    movq mm5, [edi + 896 + 8*esi+112] ;with rounding down
487    movq mm7, [inter_matrix_fixl + 8*esi+120]    movq mm7, [edi + 896 + 8*esi+120]
488    pmulhuw mm5, mm0    pmulhuw mm5, mm0
489    pmulhuw mm7, mm3                          ;mm7: first approx of division    pmulhuw mm7, mm3                          ;mm7: first approx of division
490    mov esp, esp    mov esp, esp
491    movq mm2, [inter_matrix + 8*esi+112]    movq mm2, [edi + 512 + 8*esi+112]
492    movq mm6, [inter_matrix + 8*esi+120]      ; divs for q<=16    movq mm6, [edi + 512 + 8*esi+120]      ; divs for q<=16
493    pmullw mm2, mm5                           ;test value <= original    pmullw mm2, mm5                           ;test value <= original
494    pmullw mm6, mm7    pmullw mm6, mm7
495    psubw mm0, mm2                            ;mismatch    psubw mm0, mm2                            ;mismatch
496    psubw mm3, mm6    psubw mm3, mm6
497    movq mm2, [byte ebx]    movq mm2, [byte ebx]
498    pmulhuw mm0, [inter_matrix_fix + 8*esi+112]  ;correction    pmulhuw mm0, [edi + 768 + 8*esi+112]  ;correction
499    pmulhuw mm3, [inter_matrix_fix + 8*esi+120]    pmulhuw mm3, [edi + 768 + 8*esi+120]
500    paddw mm2, [ebx+8]    ;sum    paddw mm2, [ebx+8]    ;sum
501    paddw mm5, mm0        ;final result    paddw mm5, mm0        ;final result
502    paddw mm7, mm3    paddw mm7, mm3
503    movq mm0, [edi]    pxor mm0, mm0
504    movq mm3, [edi]    pxor mm3, mm3
505    psrlw mm5, 1          ;  (level ) /2  (quant = 1)    psrlw mm5, 1          ;  (level ) /2  (quant = 1)
506    psrlw mm7, 1    psrlw mm7, 1
507    add esi, byte 2    add esi, byte 2
# Line 550  Line 530 
530    psraw mm4,15    psraw mm4,15
531    psllw mm0, 4          ; level << 4    psllw mm0, 4          ; level << 4
532    psllw mm3, 4          ;    psllw mm3, 4          ;
533    paddw mm0, [inter_matrix1 + 8*esi+112] ;mm0 is to be divided inter1 contains fix for division by 1    paddw mm0, [edi + 640 + 8*esi+112] ;mm0 is to be divided inter1 contains fix for division by 1
534    paddw mm3, [inter_matrix1 + 8*esi+120]    paddw mm3, [edi + 640 + 8*esi+120]
535    movq mm5,[inter_matrix_fixl + 8*esi+112]    movq mm5,[edi + 896 + 8*esi+112]
536    movq mm7,[inter_matrix_fixl + 8*esi+120]    movq mm7,[edi + 896 + 8*esi+120]
537    pmulhuw mm5,mm0    pmulhuw mm5,mm0
538    pmulhuw mm7,mm3       ;mm7: first approx of division    pmulhuw mm7,mm3       ;mm7: first approx of division
539    mov esp,esp    mov esp,esp
540    movq mm2,[inter_matrix + 8*esi+112]    movq mm2,[edi + 512 + 8*esi+112]
541    movq mm6,[inter_matrix + 8*esi+120]    movq mm6,[edi + 512 + 8*esi+120]
542    pmullw mm2,mm5        ;test value <= original    pmullw mm2,mm5        ;test value <= original
543    pmullw mm6,mm7    pmullw mm6,mm7
544    psubw mm0,mm2         ;mismatch    psubw mm0,mm2         ;mismatch
545    psubw mm3,mm6    psubw mm3,mm6
546    movq mm2,[byte ebx]    movq mm2,[byte ebx]
547    movq mm6,[mmx_div + ecx * 8 - 8]  ; divs for q<=16    movq mm6,[mmx_div + ecx * 8 - 8]  ; divs for q<=16
548    pmulhuw mm0,[inter_matrix_fix + 8*esi+112] ;correction    pmulhuw mm0,[edi + 768 + 8*esi+112] ;correction
549    pmulhuw mm3,[inter_matrix_fix + 8*esi+120]    pmulhuw mm3,[edi + 768 + 8*esi+120]
550    paddw mm2,[ebx+8]     ;sum    paddw mm2,[ebx+8]     ;sum
551    paddw mm5,mm0         ;final result    paddw mm5,mm0         ;final result
552    paddw mm7,mm3    paddw mm7,mm3
553    movq mm0,[edi]    pxor mm0,mm0
554    movq mm3,[edi]    pxor mm3,mm3
555    pmulhuw mm5, mm6      ; mm0 = (mm0 / 2Q) >> 16    pmulhuw mm5, mm6      ; mm0 = (mm0 / 2Q) >> 16
556    pmulhuw mm7, mm6      ;  (level ) / quant (0<quant<32)    pmulhuw mm7, mm6      ;  (level ) / quant (0<quant<32)
557    add esi,byte 2    add esi,byte 2
# Line 595  Line 575 
575  ; uint32_t dequant_mpeg_intra_3dne(int16_t *data,  ; uint32_t dequant_mpeg_intra_3dne(int16_t *data,
576  ;                                  const int16_t const *coeff,  ;                                  const int16_t const *coeff,
577  ;                                  const uint32_t quant,  ;                                  const uint32_t quant,
578  ;                                  const uint32_t dcscalar);  ;                                  const uint32_t dcscalar,
579    ;                                  const uint16_t *mpeg_matrices);
580  ;  ;
581  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
582    
# Line 622  Line 603 
603    movq mm2, [eax+8] ;preshifted quant    movq mm2, [eax+8] ;preshifted quant
604    movq mm7, [eax+8]    movq mm7, [eax+8]
605  %endif  %endif
606    pmullw mm2, [intra_matrix + 16 * %1 ]     ; matrix[i]*quant    pmullw mm2, [edi + 16 * %1 ]     ; matrix[i]*quant
607    pmullw mm7, [intra_matrix + 16 * %1 +8]   ; matrix[i+1]*quant    pmullw mm7, [edi + 16 * %1 +8]   ; matrix[i+1]*quant
608    movq mm5, mm0    movq mm5, mm0
609    movq mm6, mm3    movq mm6, mm3
610    pmulhw mm0, mm2   ; high of coeff*(matrix*quant)    pmulhw mm0, mm2   ; high of coeff*(matrix*quant)
# Line 667  Line 648 
648    movq [eax+8], mm7    movq [eax+8], mm7
649    imul ebx, [esp+16+8+32]    ; dcscalar    imul ebx, [esp+16+8+32]    ; dcscalar
650    movq mm2, mm7    movq mm2, mm7
651      push edi
652      mov edi, [esp + 32 + 12 + 20] ; mpeg_quant_matrices
653  ALIGN 4  ALIGN 4
654    
655    DEQUANT4INTRAMMX 0    DEQUANT4INTRAMMX 0
# Line 690  Line 672 
672    
673    DEQUANT4INTRAMMX 3    DEQUANT4INTRAMMX 3
674    
675    mov esi, [esp+32]    mov esi, [esp+36]
676    mov [byte edx], bx    mov [byte edx], bx
677    mov ebx, [esp+32+4]    mov ebx, [esp+36+4]
678    
679    DEQUANT4INTRAMMX 4    DEQUANT4INTRAMMX 4
680    DEQUANT4INTRAMMX 5    DEQUANT4INTRAMMX 5
681    DEQUANT4INTRAMMX 6    DEQUANT4INTRAMMX 6
682    DEQUANT4INTRAMMX 7    DEQUANT4INTRAMMX 7
683    
684      pop edi
685    
686    add esp, byte 32+8    add esp, byte 32+8
687    
688    xor eax, eax    xor eax, eax
# Line 708  Line 692 
692  ;  ;
693  ; uint32_t dequant_mpeg_inter_3dne(int16_t * data,  ; uint32_t dequant_mpeg_inter_3dne(int16_t * data,
694  ;                                  const int16_t * const coeff,  ;                                  const int16_t * const coeff,
695  ;                                  const uint32_t quant);  ;                                  const uint32_t quant,
696    ;                                  const uint16_t *mpeg_matrices);
697  ;  ;
698  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
699    
# Line 727  Line 712 
712    paddw mm7, mm7    ; << 1    paddw mm7, mm7    ; << 1
713    pxor mm6, mm6     ; mismatch sum    pxor mm6, mm6     ; mismatch sum
714    push esi    push esi
715      push edi
716    mov esi, mmzero    mov esi, mmzero
717    pxor mm1, mm1    pxor mm1, mm1
718    pxor mm3, mm3    pxor mm3, mm3
719      mov edi, [esp + 8 + 16] ; mpeg_quant_matrices
720    nop    nop
721    nop4    nop4
722    
# Line 760  Line 747 
747    
748    movq mm4, mm7     ; (matrix*quant)    movq mm4, mm7     ; (matrix*quant)
749    nop    nop
750    pmullw mm4, [inter_matrix + 8*eax + 7*16]    pmullw mm4, [edi + 512 + 8*eax + 7*16]
751    movq mm5, mm4    movq mm5, mm4
752    pmulhw mm5, mm0   ; high of c*(matrix*quant)    pmulhw mm5, mm0   ; high of c*(matrix*quant)
753    pmullw mm0, mm4   ; low  of c*(matrix*quant)    pmullw mm0, mm4   ; low  of c*(matrix*quant)
754    
755    movq mm4, mm7     ; (matrix*quant)    movq mm4, mm7     ; (matrix*quant)
756    pmullw mm4, [inter_matrix + 8*eax + 7*16 + 8]    pmullw mm4, [edi + 512 + 8*eax + 7*16 + 8]
757    add eax, byte 2    add eax, byte 2
758    
759    pcmpgtw mm5, [esi]    pcmpgtw mm5, [esi]
# Line 805  Line 792 
792    pxor mm1, mm2    pxor mm1, mm2
793    pxor mm6, mm1    pxor mm6, mm1
794    movd eax, mm6    movd eax, mm6
795      pop edi
796    and eax, byte 1    and eax, byte 1
797    xor eax, byte 1    xor eax, byte 1
798    mov esi, [esp]    mov esi, [esp]

Legend:
Removed from v.1229  
changed lines
  Added in v.1230

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