[cvs] / xvidcore / src / image / x86_asm / colorspace_rgb_mmx.asm Repository:
ViewVC logotype

Diff of /xvidcore/src/image/x86_asm/colorspace_rgb_mmx.asm

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

revision 1.10.2.3, Wed Sep 16 17:11:39 2009 UTC revision 1.11, Thu Dec 4 14:41:50 2008 UTC
# Line 48  Line 48 
48  %define V_ADD   128  %define V_ADD   128
49    
50  ; Scaling used during conversion  ; Scaling used during conversion
51  %define SCALEBITS_OUT 6  %define SCALEBITS 6
 %define SCALEBITS_IN  13  
   
 %define FIX_ROUND (1<<(SCALEBITS_IN-1))  
52    
53  ;=============================================================================  ;=============================================================================
54  ; Read only data  ; Read only data
# Line 66  Line 63 
63  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
64  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored
65    
66  bgr_y_mul: dw    803,     4129,      2105,      0  bgr_y_mul: dw    25,      129,        66,      0
67  bgr_u_mul: dw   3596,    -2384,     -1212,      0  bgr_u_mul: dw   112,      -74,       -38,      0
68  bgr_v_mul: dw   -582,    -3015,      3596,      0  bgr_v_mul: dw   -18,      -94,       112,      0
69    
70  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
71  ; BGR->YV12 multiplication matrices  ; BGR->YV12 multiplication matrices
72  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
73  ;         FIX(Y_R)      FIX(Y_G)        FIX(Y_B) Ignored  ;         FIX(Y_R)      FIX(Y_G)        FIX(Y_B) Ignored
74    
75  rgb_y_mul: dw   2105,     4129,       803,      0  rgb_y_mul: dw    66,      129,        25,      0
76  rgb_u_mul: dw  -1212,    -2384,      3596,      0  rgb_u_mul: dw   -38,      -74,       112,      0
77  rgb_v_mul: dw   3596,    -3015,      -582,      0  rgb_v_mul: dw   112,      -94,       -18,      0
78    
79  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
80  ; YV12->RGB data  ; YV12->RGB data
# Line 154  Line 151 
151    push x_stride    push x_stride
152    
153    movd x_stride_d, mm0    movd x_stride_d, mm0
154    add x_stride, FIX_ROUND    shr x_stride, 8
   shr x_stride, SCALEBITS_IN  
155    add x_stride, Y_ADD    add x_stride, Y_ADD
156    mov [y_ptr], dl                 ; y_ptr[0]    mov [y_ptr], dl                 ; y_ptr[0]
157    
158    movd x_stride_d, mm1    movd x_stride_d, mm1
159    add x_stride, FIX_ROUND    shr x_stride, 8
   shr x_stride, SCALEBITS_IN  
160    add x_stride, Y_ADD    add x_stride, Y_ADD
161    mov [y_ptr + 1], dl             ; y_ptr[1]    mov [y_ptr + 1], dl             ; y_ptr[1]
162    
163    movd x_stride_d, mm2    movd x_stride_d, mm2
164    add x_stride, FIX_ROUND    shr x_stride, 8
   shr x_stride, SCALEBITS_IN  
165    add x_stride, Y_ADD    add x_stride, Y_ADD
166    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]
167    
168    movd x_stride_d, mm3    movd x_stride_d, mm3
169    add x_stride, FIX_ROUND    shr x_stride, 8
   shr x_stride, SCALEBITS_IN  
170    add x_stride, Y_ADD    add x_stride, Y_ADD
171    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]
172    
# Line 189  Line 182 
182    paddd mm2, mm6    paddd mm2, mm6
183    
184    movd x_stride_d, mm0    movd x_stride_d, mm0
185    add x_stride, 4*FIX_ROUND    shr x_stride, 10
   shr x_stride, (SCALEBITS_IN+2)  
186    add x_stride, U_ADD    add x_stride, U_ADD
187    mov [u_ptr], dl    mov [u_ptr], dl
188    
189    movd x_stride_d, mm2    movd x_stride_d, mm2
190    add x_stride, 4*FIX_ROUND    shr x_stride, 10
   shr x_stride, (SCALEBITS_IN+2)  
191    add x_stride, V_ADD    add x_stride, V_ADD
192    mov [v_ptr], dl    mov [v_ptr], dl
193    
# Line 255  Line 246 
246    push x_stride    push x_stride
247    
248    movd x_stride_d, mm0    movd x_stride_d, mm0
249    add x_stride, FIX_ROUND    shr x_stride, 8
   shr x_stride, SCALEBITS_IN  
250    add x_stride, Y_ADD    add x_stride, Y_ADD
251    mov [y_ptr], dl                 ; y_ptr[0]    mov [y_ptr], dl                 ; y_ptr[0]
252    
253    movd x_stride_d, mm1    movd x_stride_d, mm1
254    add x_stride, FIX_ROUND    shr x_stride, 8
   shr x_stride, SCALEBITS_IN  
255    add x_stride, Y_ADD    add x_stride, Y_ADD
256    mov [y_ptr + 1], dl             ; y_ptr[1]    mov [y_ptr + 1], dl             ; y_ptr[1]
257    
258    movd x_stride_d, mm2    movd x_stride_d, mm2
259    add x_stride, FIX_ROUND    shr x_stride, 8
   shr x_stride, SCALEBITS_IN  
260    add x_stride, Y_ADD    add x_stride, Y_ADD
261    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]
262    
263    movd x_stride_d, mm3    movd x_stride_d, mm3
264    add x_stride, FIX_ROUND    shr x_stride, 8
   shr x_stride, SCALEBITS_IN  
265    add x_stride, Y_ADD    add x_stride, Y_ADD
266    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]
267    
# Line 290  Line 277 
277    paddd mm2, mm6    paddd mm2, mm6
278    
279    movd x_stride_d, mm0    movd x_stride_d, mm0
280    add x_stride, 4*FIX_ROUND    shr x_stride, 10
   shr x_stride, (SCALEBITS_IN+2)  
281    add x_stride, U_ADD    add x_stride, U_ADD
282    mov [u_ptr], dl    mov [u_ptr], dl
283    
284    movd x_stride_d, mm2    movd x_stride_d, mm2
285    add x_stride, 4*FIX_ROUND    shr x_stride, 10
   shr x_stride, (SCALEBITS_IN+2)  
286    add x_stride, V_ADD    add x_stride, V_ADD
287    mov [v_ptr], dl    mov [v_ptr], dl
288    
# Line 356  Line 341 
341    movq [TEMP_Y1], mm0       ; y3y2y1y0 -> mm7    movq [TEMP_Y1], mm0       ; y3y2y1y0 -> mm7
342    psubsw mm1, mm2           ; g7g6g5g4 -> mm1    psubsw mm1, mm2           ; g7g6g5g4 -> mm1
343    psubsw mm0, mm6           ; g3g2g1g0 -> mm0    psubsw mm0, mm6           ; g3g2g1g0 -> mm0
344    psraw mm1, SCALEBITS_OUT    psraw mm1, SCALEBITS
345    psraw mm0, SCALEBITS_OUT    psraw mm0, SCALEBITS
346    packuswb mm0, mm1         ;g7g6g5g4g3g2g1g0 -> mm0    packuswb mm0, mm1         ;g7g6g5g4g3g2g1g0 -> mm0
347    movq [TEMP_G1], mm0    movq [TEMP_G1], mm0
348    movq mm0, [y_ptr+y_stride]       ; y7y6y5y4y3y2y1y0 -> mm0    movq mm0, [y_ptr+y_stride]       ; y7y6y5y4y3y2y1y0 -> mm0
# Line 372  Line 357 
357    psubsw mm1, mm2           ; g7g6g5g4 -> mm1    psubsw mm1, mm2           ; g7g6g5g4 -> mm1
358    movq mm2, mm0    movq mm2, mm0
359    psubsw mm0, mm6           ; g3g2g1g0 -> mm0    psubsw mm0, mm6           ; g3g2g1g0 -> mm0
360    psraw mm1, SCALEBITS_OUT    psraw mm1, SCALEBITS
361    psraw mm0, SCALEBITS_OUT    psraw mm0, SCALEBITS
362    packuswb mm0, mm1         ; g7g6g5g4g3g2g1g0 -> mm0    packuswb mm0, mm1         ; g7g6g5g4g3g2g1g0 -> mm0
363    movq [TEMP_G2], mm0    movq [TEMP_G2], mm0
364    movq mm0, mm4    movq mm0, mm4
# Line 383  Line 368 
368    paddsw mm3, mm4           ; b7b6b5b4 -> mm3    paddsw mm3, mm4           ; b7b6b5b4 -> mm3
369    movq mm7, mm2             ; y3y2y1y0 -> mm7    movq mm7, mm2             ; y3y2y1y0 -> mm7
370    paddsw mm2, mm0           ; b3b2b1b0 -> mm2    paddsw mm2, mm0           ; b3b2b1b0 -> mm2
371    psraw mm3, SCALEBITS_OUT    psraw mm3, SCALEBITS
372    psraw mm2, SCALEBITS_OUT    psraw mm2, SCALEBITS
373    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2
374    movq [TEMP_B2], mm2    movq [TEMP_B2], mm2
375    movq mm3, [TEMP_Y2]    movq mm3, [TEMP_Y2]
# Line 393  Line 378 
378    paddsw mm3, mm4           ; b7b6b5b4 -> mm3    paddsw mm3, mm4           ; b7b6b5b4 -> mm3
379    movq mm4, mm2             ; TEMP_Y1 -> mm4    movq mm4, mm2             ; TEMP_Y1 -> mm4
380    paddsw mm2, mm0           ; b3b2b1b0 -> mm2    paddsw mm2, mm0           ; b3b2b1b0 -> mm2
381    psraw mm3, SCALEBITS_OUT    psraw mm3, SCALEBITS
382    psraw mm2, SCALEBITS_OUT    psraw mm2, SCALEBITS
383    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2
384    movq [TEMP_B1], mm2    movq [TEMP_B1], mm2
385    movq mm0, mm5    movq mm0, mm5
# Line 402  Line 387 
387    punpcklwd mm0, mm0        ; v1v1v0v0 -> mm0    punpcklwd mm0, mm0        ; v1v1v0v0 -> mm0
388    paddsw mm1, mm5           ; r7r6r5r4 -> mm1    paddsw mm1, mm5           ; r7r6r5r4 -> mm1
389    paddsw mm7, mm0           ; r3r2r1r0 -> mm7    paddsw mm7, mm0           ; r3r2r1r0 -> mm7
390    psraw mm1, SCALEBITS_OUT    psraw mm1, SCALEBITS
391    psraw mm7, SCALEBITS_OUT    psraw mm7, SCALEBITS
392    packuswb mm7, mm1         ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)    packuswb mm7, mm1         ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)
393    paddsw mm6, mm5           ; r7r6r5r4 -> mm6    paddsw mm6, mm5           ; r7r6r5r4 -> mm6
394    paddsw mm4, mm0           ; r3r2r1r0 -> mm4    paddsw mm4, mm0           ; r3r2r1r0 -> mm4
395    psraw mm6, SCALEBITS_OUT    psraw mm6, SCALEBITS
396    psraw mm4, SCALEBITS_OUT    psraw mm4, SCALEBITS
397    packuswb mm4, mm6         ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)    packuswb mm4, mm6         ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)
398    movq mm0, [TEMP_B1]    movq mm0, [TEMP_B1]
399    movq mm1, [TEMP_G1]    movq mm1, [TEMP_G1]
# Line 529  Line 514 
514  MAKE_COLORSPACE  yv12_to_bgr_mmx,48,   3,8,2,  YV12_TO_BGR,  3, -1  MAKE_COLORSPACE  yv12_to_bgr_mmx,48,   3,8,2,  YV12_TO_BGR,  3, -1
515  MAKE_COLORSPACE  yv12_to_bgra_mmx,48,  4,8,2,  YV12_TO_BGR,  4, -1  MAKE_COLORSPACE  yv12_to_bgra_mmx,48,  4,8,2,  YV12_TO_BGR,  4, -1
516    
517  NON_EXEC_STACK  
518    %ifidn __OUTPUT_FORMAT__,elf
519    section ".note.GNU-stack" noalloc noexec nowrite progbits
520    %endif
521    

Legend:
Removed from v.1.10.2.3  
changed lines
  Added in v.1.11

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