[svn] / branches / release-1_3-branch / xvidcore / src / image / x86_asm / colorspace_rgb_mmx.asm Repository:
ViewVC logotype

Diff of /branches/release-1_3-branch/xvidcore/src/image/x86_asm/colorspace_rgb_mmx.asm

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

trunk/xvidcore/src/image/x86_asm/colorspace_rgb_mmx.asm revision 1795, Wed Nov 26 01:04:34 2008 UTC branches/release-1_3-branch/xvidcore/src/image/x86_asm/colorspace_rgb_mmx.asm revision 2111, Thu Jun 11 00:51:36 2015 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 133  Line 136 
136    
137    pxor mm4, mm4    pxor mm4, mm4
138    pxor mm5, mm5    pxor mm5, mm5
139    %if %1 == 3     ; BGR (24-bit)
140      movd mm1, [x_ptr+2]
141      movd mm3, [x_ptr+x_stride+2]
142      psrlq mm1, 8                  ; src[%1...]
143      psrlq mm3, 8                  ; src[x_stride+%1...]
144    %else
145    movd mm1, [x_ptr+%1]            ; src[%1...]    movd mm1, [x_ptr+%1]            ; src[%1...]
146    movd mm3, [x_ptr+x_stride+%1]        ; src[x_stride+%1...]    movd mm3, [x_ptr+x_stride+%1]        ; src[x_stride+%1...]
147    %endif
148    punpcklbw mm1, mm4            ; [  |b |g |r ]    punpcklbw mm1, mm4            ; [  |b |g |r ]
149    punpcklbw mm3, mm5            ; [  |b |g |r ]    punpcklbw mm3, mm5            ; [  |b |g |r ]
150    paddw mm6, mm1                ; +[  |b4|g4|r4]    paddw mm6, mm1                ; +[  |b4|g4|r4]
# Line 151  Line 161 
161    push x_stride    push x_stride
162    
163    movd x_stride_d, mm0    movd x_stride_d, mm0
164    shr x_stride, 8    add x_stride, FIX_ROUND
165      shr x_stride, SCALEBITS_IN
166    add x_stride, Y_ADD    add x_stride, Y_ADD
167    mov [y_ptr], dl                 ; y_ptr[0]    mov [y_ptr], dl                 ; y_ptr[0]
168    
169    movd x_stride_d, mm1    movd x_stride_d, mm1
170    shr x_stride, 8    add x_stride, FIX_ROUND
171      shr x_stride, SCALEBITS_IN
172    add x_stride, Y_ADD    add x_stride, Y_ADD
173    mov [y_ptr + 1], dl             ; y_ptr[1]    mov [y_ptr + 1], dl             ; y_ptr[1]
174    
175    movd x_stride_d, mm2    movd x_stride_d, mm2
176    shr x_stride, 8    add x_stride, FIX_ROUND
177      shr x_stride, SCALEBITS_IN
178    add x_stride, Y_ADD    add x_stride, Y_ADD
179    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]
180    
181    movd x_stride_d, mm3    movd x_stride_d, mm3
182    shr x_stride, 8    add x_stride, FIX_ROUND
183      shr x_stride, SCALEBITS_IN
184    add x_stride, Y_ADD    add x_stride, Y_ADD
185    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]
186    
# Line 182  Line 196 
196    paddd mm2, mm6    paddd mm2, mm6
197    
198    movd x_stride_d, mm0    movd x_stride_d, mm0
199    shr x_stride, 10    add x_stride, 4*FIX_ROUND
200      shr x_stride, (SCALEBITS_IN+2)
201    add x_stride, U_ADD    add x_stride, U_ADD
202    mov [u_ptr], dl    mov [u_ptr], dl
203    
204    movd x_stride_d, mm2    movd x_stride_d, mm2
205    shr x_stride, 10    add x_stride, 4*FIX_ROUND
206      shr x_stride, (SCALEBITS_IN+2)
207    add x_stride, V_ADD    add x_stride, V_ADD
208    mov [v_ptr], dl    mov [v_ptr], dl
209    
# Line 228  Line 244 
244    
245    pxor mm4, mm4    pxor mm4, mm4
246    pxor mm5, mm5    pxor mm5, mm5
247    %if %1 == 3     ; BGR (24-bit)
248      movd mm1, [x_ptr+2]
249      movd mm3, [x_ptr+x_stride+2]
250      psrlq mm1, 8                  ; src[%1...]
251      psrlq mm3, 8                  ; src[x_stride+%1...]
252    %else
253    movd mm1, [x_ptr+%1]          ; src[%1...]    movd mm1, [x_ptr+%1]          ; src[%1...]
254    movd mm3, [x_ptr+x_stride+%1] ; src[x_stride+%1...]    movd mm3, [x_ptr+x_stride+%1] ; src[x_stride+%1...]
255    %endif
256    punpcklbw mm1, mm4            ; [  |b |g |r ]    punpcklbw mm1, mm4            ; [  |b |g |r ]
257    punpcklbw mm3, mm5            ; [  |b |g |r ]    punpcklbw mm3, mm5            ; [  |b |g |r ]
258    paddw mm6, mm1                ; +[  |b4|g4|r4]    paddw mm6, mm1                ; +[  |b4|g4|r4]
# Line 246  Line 269 
269    push x_stride    push x_stride
270    
271    movd x_stride_d, mm0    movd x_stride_d, mm0
272    shr x_stride, 8    add x_stride, FIX_ROUND
273      shr x_stride, SCALEBITS_IN
274    add x_stride, Y_ADD    add x_stride, Y_ADD
275    mov [y_ptr], dl                 ; y_ptr[0]    mov [y_ptr], dl                 ; y_ptr[0]
276    
277    movd x_stride_d, mm1    movd x_stride_d, mm1
278    shr x_stride, 8    add x_stride, FIX_ROUND
279      shr x_stride, SCALEBITS_IN
280    add x_stride, Y_ADD    add x_stride, Y_ADD
281    mov [y_ptr + 1], dl             ; y_ptr[1]    mov [y_ptr + 1], dl             ; y_ptr[1]
282    
283    movd x_stride_d, mm2    movd x_stride_d, mm2
284    shr x_stride, 8    add x_stride, FIX_ROUND
285      shr x_stride, SCALEBITS_IN
286    add x_stride, Y_ADD    add x_stride, Y_ADD
287    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]    mov [y_ptr + y_stride + 0], dl       ; y_ptr[y_stride + 0]
288    
289    movd x_stride_d, mm3    movd x_stride_d, mm3
290    shr x_stride, 8    add x_stride, FIX_ROUND
291      shr x_stride, SCALEBITS_IN
292    add x_stride, Y_ADD    add x_stride, Y_ADD
293    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]    mov [y_ptr + y_stride + 1], dl       ; y_ptr[y_stride + 1]
294    
# Line 277  Line 304 
304    paddd mm2, mm6    paddd mm2, mm6
305    
306    movd x_stride_d, mm0    movd x_stride_d, mm0
307    shr x_stride, 10    add x_stride, 4*FIX_ROUND
308      shr x_stride, (SCALEBITS_IN+2)
309    add x_stride, U_ADD    add x_stride, U_ADD
310    mov [u_ptr], dl    mov [u_ptr], dl
311    
312    movd x_stride_d, mm2    movd x_stride_d, mm2
313    shr x_stride, 10    add x_stride, 4*FIX_ROUND
314      shr x_stride, (SCALEBITS_IN+2)
315    add x_stride, V_ADD    add x_stride, V_ADD
316    mov [v_ptr], dl    mov [v_ptr], dl
317    
# Line 341  Line 370 
370    movq [TEMP_Y1], mm0       ; y3y2y1y0 -> mm7    movq [TEMP_Y1], mm0       ; y3y2y1y0 -> mm7
371    psubsw mm1, mm2           ; g7g6g5g4 -> mm1    psubsw mm1, mm2           ; g7g6g5g4 -> mm1
372    psubsw mm0, mm6           ; g3g2g1g0 -> mm0    psubsw mm0, mm6           ; g3g2g1g0 -> mm0
373    psraw mm1, SCALEBITS    psraw mm1, SCALEBITS_OUT
374    psraw mm0, SCALEBITS    psraw mm0, SCALEBITS_OUT
375    packuswb mm0, mm1         ;g7g6g5g4g3g2g1g0 -> mm0    packuswb mm0, mm1         ;g7g6g5g4g3g2g1g0 -> mm0
376    movq [TEMP_G1], mm0    movq [TEMP_G1], mm0
377    movq mm0, [y_ptr+y_stride]       ; y7y6y5y4y3y2y1y0 -> mm0    movq mm0, [y_ptr+y_stride]       ; y7y6y5y4y3y2y1y0 -> mm0
# Line 357  Line 386 
386    psubsw mm1, mm2           ; g7g6g5g4 -> mm1    psubsw mm1, mm2           ; g7g6g5g4 -> mm1
387    movq mm2, mm0    movq mm2, mm0
388    psubsw mm0, mm6           ; g3g2g1g0 -> mm0    psubsw mm0, mm6           ; g3g2g1g0 -> mm0
389    psraw mm1, SCALEBITS    psraw mm1, SCALEBITS_OUT
390    psraw mm0, SCALEBITS    psraw mm0, SCALEBITS_OUT
391    packuswb mm0, mm1         ; g7g6g5g4g3g2g1g0 -> mm0    packuswb mm0, mm1         ; g7g6g5g4g3g2g1g0 -> mm0
392    movq [TEMP_G2], mm0    movq [TEMP_G2], mm0
393    movq mm0, mm4    movq mm0, mm4
# Line 368  Line 397 
397    paddsw mm3, mm4           ; b7b6b5b4 -> mm3    paddsw mm3, mm4           ; b7b6b5b4 -> mm3
398    movq mm7, mm2             ; y3y2y1y0 -> mm7    movq mm7, mm2             ; y3y2y1y0 -> mm7
399    paddsw mm2, mm0           ; b3b2b1b0 -> mm2    paddsw mm2, mm0           ; b3b2b1b0 -> mm2
400    psraw mm3, SCALEBITS    psraw mm3, SCALEBITS_OUT
401    psraw mm2, SCALEBITS    psraw mm2, SCALEBITS_OUT
402    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2
403    movq [TEMP_B2], mm2    movq [TEMP_B2], mm2
404    movq mm3, [TEMP_Y2]    movq mm3, [TEMP_Y2]
# Line 378  Line 407 
407    paddsw mm3, mm4           ; b7b6b5b4 -> mm3    paddsw mm3, mm4           ; b7b6b5b4 -> mm3
408    movq mm4, mm2             ; TEMP_Y1 -> mm4    movq mm4, mm2             ; TEMP_Y1 -> mm4
409    paddsw mm2, mm0           ; b3b2b1b0 -> mm2    paddsw mm2, mm0           ; b3b2b1b0 -> mm2
410    psraw mm3, SCALEBITS    psraw mm3, SCALEBITS_OUT
411    psraw mm2, SCALEBITS    psraw mm2, SCALEBITS_OUT
412    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2    packuswb mm2, mm3         ; b7b6b5b4b3b2b1b0 -> mm2
413    movq [TEMP_B1], mm2    movq [TEMP_B1], mm2
414    movq mm0, mm5    movq mm0, mm5
# Line 387  Line 416 
416    punpcklwd mm0, mm0        ; v1v1v0v0 -> mm0    punpcklwd mm0, mm0        ; v1v1v0v0 -> mm0
417    paddsw mm1, mm5           ; r7r6r5r4 -> mm1    paddsw mm1, mm5           ; r7r6r5r4 -> mm1
418    paddsw mm7, mm0           ; r3r2r1r0 -> mm7    paddsw mm7, mm0           ; r3r2r1r0 -> mm7
419    psraw mm1, SCALEBITS    psraw mm1, SCALEBITS_OUT
420    psraw mm7, SCALEBITS    psraw mm7, SCALEBITS_OUT
421    packuswb mm7, mm1         ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)    packuswb mm7, mm1         ; r7r6r5r4r3r2r1r0 -> mm7 (TEMP_R2)
422    paddsw mm6, mm5           ; r7r6r5r4 -> mm6    paddsw mm6, mm5           ; r7r6r5r4 -> mm6
423    paddsw mm4, mm0           ; r3r2r1r0 -> mm4    paddsw mm4, mm0           ; r3r2r1r0 -> mm4
424    psraw mm6, SCALEBITS    psraw mm6, SCALEBITS_OUT
425    psraw mm4, SCALEBITS    psraw mm4, SCALEBITS_OUT
426    packuswb mm4, mm6         ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)    packuswb mm4, mm6         ; r7r6r5r4r3r2r1r0 -> mm4 (TEMP_R1)
427    movq mm0, [TEMP_B1]    movq mm0, [TEMP_B1]
428    movq mm1, [TEMP_G1]    movq mm1, [TEMP_G1]
# Line 500  Line 529 
529  ; Code  ; Code
530  ;=============================================================================  ;=============================================================================
531    
532  SECTION .rotext align=SECTION_ALIGN  TEXT
533    
534  %include "colorspace_mmx.inc"  %include "colorspace_mmx.inc"
535    
# Line 514  Line 543 
543  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
544  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
545    
546    NON_EXEC_STACK
 %ifidn __OUTPUT_FORMAT__,elf  
 section ".note.GNU-stack" noalloc noexec nowrite progbits  
 %endif  
   

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

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