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

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

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

revision 1856, Mon Mar 30 14:40:05 2009 UTC revision 1857, Wed May 13 09:39:20 2009 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 6  %define SCALEBITS_OUT 6
52    %define SCALEBITS_IN  13
53    
54    %define FIX_ROUND (1<<(SCALEBITS_IN-1))
55    
56  ;=============================================================================  ;=============================================================================
57  ; Read only data  ; Read only data
# Line 63  Line 66 
66  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
67  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored  ;         FIX(Y_B)      FIX(Y_G)        FIX(Y_R) Ignored
68    
69  bgr_y_mul: dw    25,      129,        66,      0  bgr_y_mul: dw    803,     4129,      2105,      0
70  bgr_u_mul: dw   112,      -74,       -38,      0  bgr_u_mul: dw   3596,    -2384,     -1212,      0
71  bgr_v_mul: dw   -18,      -94,       112,      0  bgr_v_mul: dw   -582,    -3015,      3596,      0
72    
73  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
74  ; BGR->YV12 multiplication matrices  ; BGR->YV12 multiplication matrices
75  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
76  ;         FIX(Y_R)      FIX(Y_G)        FIX(Y_B) Ignored  ;         FIX(Y_R)      FIX(Y_G)        FIX(Y_B) Ignored
77    
78  rgb_y_mul: dw    66,      129,        25,      0  rgb_y_mul: dw   2105,     4129,       803,      0
79  rgb_u_mul: dw   -38,      -74,       112,      0  rgb_u_mul: dw  -1212,    -2384,      3596,      0
80  rgb_v_mul: dw   112,      -94,       -18,      0  rgb_v_mul: dw   3596,    -3015,      -582,      0
81    
82  ;-----------------------------------------------------------------------------  ;-----------------------------------------------------------------------------
83  ; YV12->RGB data  ; YV12->RGB data
# Line 151  Line 154 
154    push x_stride    push x_stride
155    
156    movd x_stride_d, mm0    movd x_stride_d, mm0
157    shr x_stride, 8    add x_stride, FIX_ROUND
158      shr x_stride, SCALEBITS_IN
159    add x_stride, Y_ADD    add x_stride, Y_ADD
160    mov [y_ptr], dl                 ; y_ptr[0]    mov [y_ptr], dl                 ; y_ptr[0]
161    
162    movd x_stride_d, mm1    movd x_stride_d, mm1
163    shr x_stride, 8    add x_stride, FIX_ROUND
164      shr x_stride, SCALEBITS_IN
165    add x_stride, Y_ADD    add x_stride, Y_ADD
166    mov [y_ptr + 1], dl             ; y_ptr[1]    mov [y_ptr + 1], dl             ; y_ptr[1]
167    
168    movd x_stride_d, mm2    movd x_stride_d, mm2
169    shr x_stride, 8    add x_stride, FIX_ROUND
170      shr x_stride, SCALEBITS_IN
171    add x_stride, Y_ADD    add x_stride, Y_ADD
172    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]
173    
174    movd x_stride_d, mm3    movd x_stride_d, mm3
175    shr x_stride, 8    add x_stride, FIX_ROUND
176      shr x_stride, SCALEBITS_IN
177    add x_stride, Y_ADD    add x_stride, Y_ADD
178    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]
179    
# Line 182  Line 189 
189    paddd mm2, mm6    paddd mm2, mm6
190    
191    movd x_stride_d, mm0    movd x_stride_d, mm0
192    shr x_stride, 10    add x_stride, 4*FIX_ROUND
193      shr x_stride, (SCALEBITS_IN+2)
194    add x_stride, U_ADD    add x_stride, U_ADD
195    mov [u_ptr], dl    mov [u_ptr], dl
196    
197    movd x_stride_d, mm2    movd x_stride_d, mm2
198    shr x_stride, 10    add x_stride, 4*FIX_ROUND
199      shr x_stride, (SCALEBITS_IN+2)
200    add x_stride, V_ADD    add x_stride, V_ADD
201    mov [v_ptr], dl    mov [v_ptr], dl
202    
# Line 246  Line 255 
255    push x_stride    push x_stride
256    
257    movd x_stride_d, mm0    movd x_stride_d, mm0
258    shr x_stride, 8    add x_stride, FIX_ROUND
259      shr x_stride, SCALEBITS_IN
260    add x_stride, Y_ADD    add x_stride, Y_ADD
261    mov [y_ptr], dl                 ; y_ptr[0]    mov [y_ptr], dl                 ; y_ptr[0]
262    
263    movd x_stride_d, mm1    movd x_stride_d, mm1
264    shr x_stride, 8    add x_stride, FIX_ROUND
265      shr x_stride, SCALEBITS_IN
266    add x_stride, Y_ADD    add x_stride, Y_ADD
267    mov [y_ptr + 1], dl             ; y_ptr[1]    mov [y_ptr + 1], dl             ; y_ptr[1]
268    
269    movd x_stride_d, mm2    movd x_stride_d, mm2
270    shr x_stride, 8    add x_stride, FIX_ROUND
271      shr x_stride, SCALEBITS_IN
272    add x_stride, Y_ADD    add x_stride, Y_ADD
273    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]
274    
275    movd x_stride_d, mm3    movd x_stride_d, mm3
276    shr x_stride, 8    add x_stride, FIX_ROUND
277      shr x_stride, SCALEBITS_IN
278    add x_stride, Y_ADD    add x_stride, Y_ADD
279    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]
280    
# Line 277  Line 290 
290    paddd mm2, mm6    paddd mm2, mm6
291    
292    movd x_stride_d, mm0    movd x_stride_d, mm0
293    shr x_stride, 10    add x_stride, 4*FIX_ROUND
294      shr x_stride, (SCALEBITS_IN+2)
295    add x_stride, U_ADD    add x_stride, U_ADD
296    mov [u_ptr], dl    mov [u_ptr], dl
297    
298    movd x_stride_d, mm2    movd x_stride_d, mm2
299    shr x_stride, 10    add x_stride, 4*FIX_ROUND
300      shr x_stride, (SCALEBITS_IN+2)
301    add x_stride, V_ADD    add x_stride, V_ADD
302    mov [v_ptr], dl    mov [v_ptr], dl
303    
# Line 341  Line 356 
356    movq [TEMP_Y1], mm0       ; y3y2y1y0 -> mm7    movq [TEMP_Y1], mm0       ; y3y2y1y0 -> mm7
357    psubsw mm1, mm2           ; g7g6g5g4 -> mm1    psubsw mm1, mm2           ; g7g6g5g4 -> mm1
358    psubsw mm0, mm6           ; g3g2g1g0 -> mm0    psubsw mm0, mm6           ; g3g2g1g0 -> mm0
359    psraw mm1, SCALEBITS    psraw mm1, SCALEBITS_OUT
360    psraw mm0, SCALEBITS    psraw mm0, SCALEBITS_OUT
361    packuswb mm0, mm1         ;g7g6g5g4g3g2g1g0 -> mm0    packuswb mm0, mm1         ;g7g6g5g4g3g2g1g0 -> mm0
362    movq [TEMP_G1], mm0    movq [TEMP_G1], mm0
363    movq mm0, [y_ptr+y_stride]       ; y7y6y5y4y3y2y1y0 -> mm0    movq mm0, [y_ptr+y_stride]       ; y7y6y5y4y3y2y1y0 -> mm0
# Line 357  Line 372 
372    psubsw mm1, mm2           ; g7g6g5g4 -> mm1    psubsw mm1, mm2           ; g7g6g5g4 -> mm1
373    movq mm2, mm0    movq mm2, mm0
374    psubsw mm0, mm6           ; g3g2g1g0 -> mm0    psubsw mm0, mm6           ; g3g2g1g0 -> mm0
375    psraw mm1, SCALEBITS    psraw mm1, SCALEBITS_OUT
376    psraw mm0, SCALEBITS    psraw mm0, SCALEBITS_OUT
377    packuswb mm0, mm1         ; g7g6g5g4g3g2g1g0 -> mm0    packuswb mm0, mm1         ; g7g6g5g4g3g2g1g0 -> mm0
378    movq [TEMP_G2], mm0    movq [TEMP_G2], mm0
379    movq mm0, mm4    movq mm0, mm4
# Line 368  Line 383 
383    paddsw mm3, mm4           ; b7b6b5b4 -> mm3    paddsw mm3, mm4           ; b7b6b5b4 -> mm3
384    movq mm7, mm2             ; y3y2y1y0 -> mm7    movq mm7, mm2             ; y3y2y1y0 -> mm7
385    paddsw mm2, mm0           ; b3b2b1b0 -> mm2    paddsw mm2, mm0           ; b3b2b1b0 -> mm2
386    psraw mm3, SCALEBITS    psraw mm3, SCALEBITS_OUT
387    psraw mm2, SCALEBITS    psraw mm2, SCALEBITS_OUT
388    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2
389    movq [TEMP_B2], mm2    movq [TEMP_B2], mm2
390    movq mm3, [TEMP_Y2]    movq mm3, [TEMP_Y2]
# Line 378  Line 393 
393    paddsw mm3, mm4           ; b7b6b5b4 -> mm3    paddsw mm3, mm4           ; b7b6b5b4 -> mm3
394    movq mm4, mm2             ; TEMP_Y1 -> mm4    movq mm4, mm2             ; TEMP_Y1 -> mm4
395    paddsw mm2, mm0           ; b3b2b1b0 -> mm2    paddsw mm2, mm0           ; b3b2b1b0 -> mm2
396    psraw mm3, SCALEBITS    psraw mm3, SCALEBITS_OUT
397    psraw mm2, SCALEBITS    psraw mm2, SCALEBITS_OUT
398    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2
399    movq [TEMP_B1], mm2    movq [TEMP_B1], mm2
400    movq mm0, mm5    movq mm0, mm5
# Line 387  Line 402 
402    punpcklwd mm0, mm0        ; v1v1v0v0 -> mm0    punpcklwd mm0, mm0        ; v1v1v0v0 -> mm0
403    paddsw mm1, mm5           ; r7r6r5r4 -> mm1    paddsw mm1, mm5           ; r7r6r5r4 -> mm1
404    paddsw mm7, mm0           ; r3r2r1r0 -> mm7    paddsw mm7, mm0           ; r3r2r1r0 -> mm7
405    psraw mm1, SCALEBITS    psraw mm1, SCALEBITS_OUT
406    psraw mm7, SCALEBITS    psraw mm7, SCALEBITS_OUT
407    packuswb mm7, mm1         ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)    packuswb mm7, mm1         ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)
408    paddsw mm6, mm5           ; r7r6r5r4 -> mm6    paddsw mm6, mm5           ; r7r6r5r4 -> mm6
409    paddsw mm4, mm0           ; r3r2r1r0 -> mm4    paddsw mm4, mm0           ; r3r2r1r0 -> mm4
410    psraw mm6, SCALEBITS    psraw mm6, SCALEBITS_OUT
411    psraw mm4, SCALEBITS    psraw mm4, SCALEBITS_OUT
412    packuswb mm4, mm6         ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)    packuswb mm4, mm6         ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)
413    movq mm0, [TEMP_B1]    movq mm0, [TEMP_B1]
414    movq mm1, [TEMP_G1]    movq mm1, [TEMP_G1]

Legend:
Removed from v.1856  
changed lines
  Added in v.1857

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