Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(142)

Side by Side Diff: media/base/simd/linear_scale_yuv_to_rgb_mmx_x64.asm

Issue 7891039: Resubmit - Rewrite color space conversions suite using YASM" (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
(Empty)
1 ; Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 ; Use of this source code is governed by a BSD-style license that can be
3 ; found in the LICENSE file.
4
5 %include "x86inc.asm"
6
7 ;
8 ; This file uses MMX instructions.
9 ;
10 SECTION_TEXT
11 CPU MMX
12
13 %define SYMBOL LinearScaleYUVToRGB32Row_MMX_X64
14 global mangle(SYMBOL) PRIVATE
15 align function_align
16
17 mangle(SYMBOL):
18 %assign stack_offset 0
19 extern mangle(kCoefficientsRgbY)
20
21 ; Parameters are in the following order:
22 ; 1. Y plane
23 ; 2. U plane
24 ; 3. V plane
25 ; 4. ARGB frame
26 ; 5. Width
27 ; 6. Source dx
28
29 PROLOGUE 6, 7, 3, Y, U, V, ARGB, WIDTH, SOURCE_DX, COMPL
30
31 %define TABLEq r10
32 %define Xq r11
33 %define INDEXq r12
34 %define COMPRd r13d
35 %define COMPRq r13
36 %define FRACTIONq r14
37
38 PUSH TABLEq
39 PUSH Xq
40 PUSH INDEXq
41 PUSH COMPRq
42 PUSH FRACTIONq
43
44 %macro EPILOGUE 0
45 POP FRACTIONq
46 POP COMPRq
47 POP INDEXq
48 POP Xq
49 POP TABLEq
50 %endmacro
51
52 LOAD_SYM TABLEq, mangle(kCoefficientsRgbY)
53
54 imul WIDTHq, SOURCE_DXq ; source_width = width * source_dx
55 xor Xq, Xq ; x = 0
56 cmp SOURCE_DXq, 0x20000
57 jl .lscaleend
58 mov Xq, 0x8000 ; x = 0.5 for 1/2 or less
59 jmp .lscaleend
60
61 .lscaleloop:
62 ; Interpolate U
63 mov INDEXq, Xq
64 sar INDEXq, 0x11
65 movzx COMPLd, BYTE [Uq + INDEXq]
66 movzx COMPRd, BYTE [Uq + INDEXq + 1]
67 mov FRACTIONq, Xq
68 and FRACTIONq, 0x1fffe
69 imul COMPRq, FRACTIONq
70 xor FRACTIONq, 0x1fffe
71 imul COMPLq, FRACTIONq
72 add COMPLq, COMPRq
73 shr COMPLq, 17
74 movq mm0, [TABLEq + 2048 + 8 * COMPLq]
75
76 ; Interpolate V
77 movzx COMPLd, BYTE [Vq + INDEXq]
78 movzx COMPRd, BYTE [Vq + INDEXq + 1]
79 ; Trick here to imul COMPL first then COMPR.
80 ; Saves two instruction. :)
81 imul COMPLq, FRACTIONq
82 xor FRACTIONq, 0x1fffe
83 imul COMPRq, FRACTIONq
84 add COMPLq, COMPRq
85 shr COMPLq, 17
86 paddsw mm0, [TABLEq + 4096 + 8 * COMPLq]
87
88 ; Interpolate first Y1.
89 lea INDEXq, [Xq + SOURCE_DXq] ; INDEXq now points to next pixel.
90 ; Xq points to current pixel.
91 mov FRACTIONq, Xq
92 sar Xq, 0x10
93 movzx COMPLd, BYTE [Yq + Xq]
94 movzx COMPRd, BYTE [Yq + Xq + 1]
95 and FRACTIONq, 0xffff
96 imul COMPRq, FRACTIONq
97 xor FRACTIONq, 0xffff
98 imul COMPLq, FRACTIONq
99 add COMPLq, COMPRq
100 shr COMPLq, 16
101 movq mm1, [TABLEq + 8 * COMPLq]
102
103 ; Interpolate Y2 if available.
104 cmp INDEXq, WIDTHq
105 jge .lscalelastpixel
106
107 lea Xq, [INDEXq + SOURCE_DXq] ; Xq points to next pixel.
108 ; INDEXq points to current pixel.
109 mov FRACTIONq, INDEXq
110 sar INDEXq, 0x10
111 movzx COMPLd, BYTE [Yq + INDEXq]
112 movzx COMPRd, BYTE [Yq + INDEXq + 1]
113 and FRACTIONq, 0xffff
114 imul COMPRq, FRACTIONq
115 xor FRACTIONq, 0xffff
116 imul COMPLq, FRACTIONq
117 add COMPLq, COMPRq
118 shr COMPLq, 16
119 movq mm2, [TABLEq + 8 * COMPLq]
120
121 paddsw mm1, mm0
122 paddsw mm2, mm0
123 psraw mm1, 0x6
124 psraw mm2, 0x6
125 packuswb mm1, mm2
126 movntq [ARGBq], mm1
127 add ARGBq, 0x8
128
129 .lscaleend:
130 cmp Xq, WIDTHq
131 jl .lscaleloop
132 jmp .epilogue
133
134 .lscalelastpixel:
135 paddsw mm1, mm0
136 psraw mm1, 6
137 packuswb mm1, mm1
138 movd [ARGBq], mm1
139
140 .epilogue
141 EPILOGUE
142 RET
OLDNEW
« no previous file with comments | « media/base/simd/linear_scale_yuv_to_rgb_mmx.inc ('k') | media/base/simd/linear_scale_yuv_to_rgb_sse.asm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698