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

Side by Side Diff: media/base/yuv_row_linux.cc

Issue 269106: -fPIC buildable version of yuv for 64 bit linux. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "media/base/yuv_row.h" 5 #include "media/base/yuv_row.h"
6 6
7 #ifdef _DEBUG 7 #ifdef _DEBUG
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #else 9 #else
10 #define DCHECK(a) 10 #define DCHECK(a)
(...skipping 21 matching lines...) Expand all
32 32
33 #define RGBV(i) { \ 33 #define RGBV(i) { \
34 0, \ 34 0, \
35 static_cast<int16>(-0.813 * 64 * (i - 128) + 0.5), \ 35 static_cast<int16>(-0.813 * 64 * (i - 128) + 0.5), \
36 static_cast<int16>(1.596 * 64 * (i - 128) + 0.5), \ 36 static_cast<int16>(1.596 * 64 * (i - 128) + 0.5), \
37 0 \ 37 0 \
38 } 38 }
39 39
40 #define MMX_ALIGNED(var) var __attribute__((aligned(16))) 40 #define MMX_ALIGNED(var) var __attribute__((aligned(16)))
41 41
42 MMX_ALIGNED(int16 kCoefficientsRgbY[256][4]) = { 42
43 MMX_ALIGNED(int16 kCoefficientsRgbY[768][4]) = {
43 RGBY(0x00), RGBY(0x01), RGBY(0x02), RGBY(0x03), 44 RGBY(0x00), RGBY(0x01), RGBY(0x02), RGBY(0x03),
44 RGBY(0x04), RGBY(0x05), RGBY(0x06), RGBY(0x07), 45 RGBY(0x04), RGBY(0x05), RGBY(0x06), RGBY(0x07),
45 RGBY(0x08), RGBY(0x09), RGBY(0x0A), RGBY(0x0B), 46 RGBY(0x08), RGBY(0x09), RGBY(0x0A), RGBY(0x0B),
46 RGBY(0x0C), RGBY(0x0D), RGBY(0x0E), RGBY(0x0F), 47 RGBY(0x0C), RGBY(0x0D), RGBY(0x0E), RGBY(0x0F),
47 RGBY(0x10), RGBY(0x11), RGBY(0x12), RGBY(0x13), 48 RGBY(0x10), RGBY(0x11), RGBY(0x12), RGBY(0x13),
48 RGBY(0x14), RGBY(0x15), RGBY(0x16), RGBY(0x17), 49 RGBY(0x14), RGBY(0x15), RGBY(0x16), RGBY(0x17),
49 RGBY(0x18), RGBY(0x19), RGBY(0x1A), RGBY(0x1B), 50 RGBY(0x18), RGBY(0x19), RGBY(0x1A), RGBY(0x1B),
50 RGBY(0x1C), RGBY(0x1D), RGBY(0x1E), RGBY(0x1F), 51 RGBY(0x1C), RGBY(0x1D), RGBY(0x1E), RGBY(0x1F),
51 RGBY(0x20), RGBY(0x21), RGBY(0x22), RGBY(0x23), 52 RGBY(0x20), RGBY(0x21), RGBY(0x22), RGBY(0x23),
52 RGBY(0x24), RGBY(0x25), RGBY(0x26), RGBY(0x27), 53 RGBY(0x24), RGBY(0x25), RGBY(0x26), RGBY(0x27),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
97 RGBY(0xD8), RGBY(0xD9), RGBY(0xDA), RGBY(0xDB), 98 RGBY(0xD8), RGBY(0xD9), RGBY(0xDA), RGBY(0xDB),
98 RGBY(0xDC), RGBY(0xDD), RGBY(0xDE), RGBY(0xDF), 99 RGBY(0xDC), RGBY(0xDD), RGBY(0xDE), RGBY(0xDF),
99 RGBY(0xE0), RGBY(0xE1), RGBY(0xE2), RGBY(0xE3), 100 RGBY(0xE0), RGBY(0xE1), RGBY(0xE2), RGBY(0xE3),
100 RGBY(0xE4), RGBY(0xE5), RGBY(0xE6), RGBY(0xE7), 101 RGBY(0xE4), RGBY(0xE5), RGBY(0xE6), RGBY(0xE7),
101 RGBY(0xE8), RGBY(0xE9), RGBY(0xEA), RGBY(0xEB), 102 RGBY(0xE8), RGBY(0xE9), RGBY(0xEA), RGBY(0xEB),
102 RGBY(0xEC), RGBY(0xED), RGBY(0xEE), RGBY(0xEF), 103 RGBY(0xEC), RGBY(0xED), RGBY(0xEE), RGBY(0xEF),
103 RGBY(0xF0), RGBY(0xF1), RGBY(0xF2), RGBY(0xF3), 104 RGBY(0xF0), RGBY(0xF1), RGBY(0xF2), RGBY(0xF3),
104 RGBY(0xF4), RGBY(0xF5), RGBY(0xF6), RGBY(0xF7), 105 RGBY(0xF4), RGBY(0xF5), RGBY(0xF6), RGBY(0xF7),
105 RGBY(0xF8), RGBY(0xF9), RGBY(0xFA), RGBY(0xFB), 106 RGBY(0xF8), RGBY(0xF9), RGBY(0xFA), RGBY(0xFB),
106 RGBY(0xFC), RGBY(0xFD), RGBY(0xFE), RGBY(0xFF), 107 RGBY(0xFC), RGBY(0xFD), RGBY(0xFE), RGBY(0xFF),
107 };
108 108
109 MMX_ALIGNED(int16 kCoefficientsRgbU[256][4]) = { 109 // Chroma U table.
110 RGBU(0x00), RGBU(0x01), RGBU(0x02), RGBU(0x03), 110 RGBU(0x00), RGBU(0x01), RGBU(0x02), RGBU(0x03),
111 RGBU(0x04), RGBU(0x05), RGBU(0x06), RGBU(0x07), 111 RGBU(0x04), RGBU(0x05), RGBU(0x06), RGBU(0x07),
112 RGBU(0x08), RGBU(0x09), RGBU(0x0A), RGBU(0x0B), 112 RGBU(0x08), RGBU(0x09), RGBU(0x0A), RGBU(0x0B),
113 RGBU(0x0C), RGBU(0x0D), RGBU(0x0E), RGBU(0x0F), 113 RGBU(0x0C), RGBU(0x0D), RGBU(0x0E), RGBU(0x0F),
114 RGBU(0x10), RGBU(0x11), RGBU(0x12), RGBU(0x13), 114 RGBU(0x10), RGBU(0x11), RGBU(0x12), RGBU(0x13),
115 RGBU(0x14), RGBU(0x15), RGBU(0x16), RGBU(0x17), 115 RGBU(0x14), RGBU(0x15), RGBU(0x16), RGBU(0x17),
116 RGBU(0x18), RGBU(0x19), RGBU(0x1A), RGBU(0x1B), 116 RGBU(0x18), RGBU(0x19), RGBU(0x1A), RGBU(0x1B),
117 RGBU(0x1C), RGBU(0x1D), RGBU(0x1E), RGBU(0x1F), 117 RGBU(0x1C), RGBU(0x1D), RGBU(0x1E), RGBU(0x1F),
118 RGBU(0x20), RGBU(0x21), RGBU(0x22), RGBU(0x23), 118 RGBU(0x20), RGBU(0x21), RGBU(0x22), RGBU(0x23),
119 RGBU(0x24), RGBU(0x25), RGBU(0x26), RGBU(0x27), 119 RGBU(0x24), RGBU(0x25), RGBU(0x26), RGBU(0x27),
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 RGBU(0xD8), RGBU(0xD9), RGBU(0xDA), RGBU(0xDB), 164 RGBU(0xD8), RGBU(0xD9), RGBU(0xDA), RGBU(0xDB),
165 RGBU(0xDC), RGBU(0xDD), RGBU(0xDE), RGBU(0xDF), 165 RGBU(0xDC), RGBU(0xDD), RGBU(0xDE), RGBU(0xDF),
166 RGBU(0xE0), RGBU(0xE1), RGBU(0xE2), RGBU(0xE3), 166 RGBU(0xE0), RGBU(0xE1), RGBU(0xE2), RGBU(0xE3),
167 RGBU(0xE4), RGBU(0xE5), RGBU(0xE6), RGBU(0xE7), 167 RGBU(0xE4), RGBU(0xE5), RGBU(0xE6), RGBU(0xE7),
168 RGBU(0xE8), RGBU(0xE9), RGBU(0xEA), RGBU(0xEB), 168 RGBU(0xE8), RGBU(0xE9), RGBU(0xEA), RGBU(0xEB),
169 RGBU(0xEC), RGBU(0xED), RGBU(0xEE), RGBU(0xEF), 169 RGBU(0xEC), RGBU(0xED), RGBU(0xEE), RGBU(0xEF),
170 RGBU(0xF0), RGBU(0xF1), RGBU(0xF2), RGBU(0xF3), 170 RGBU(0xF0), RGBU(0xF1), RGBU(0xF2), RGBU(0xF3),
171 RGBU(0xF4), RGBU(0xF5), RGBU(0xF6), RGBU(0xF7), 171 RGBU(0xF4), RGBU(0xF5), RGBU(0xF6), RGBU(0xF7),
172 RGBU(0xF8), RGBU(0xF9), RGBU(0xFA), RGBU(0xFB), 172 RGBU(0xF8), RGBU(0xF9), RGBU(0xFA), RGBU(0xFB),
173 RGBU(0xFC), RGBU(0xFD), RGBU(0xFE), RGBU(0xFF), 173 RGBU(0xFC), RGBU(0xFD), RGBU(0xFE), RGBU(0xFF),
174 };
175 174
176 MMX_ALIGNED(int16 kCoefficientsRgbV[256][4]) = { 175 // Chroma V table.
177 RGBV(0x00), RGBV(0x01), RGBV(0x02), RGBV(0x03), 176 RGBV(0x00), RGBV(0x01), RGBV(0x02), RGBV(0x03),
178 RGBV(0x04), RGBV(0x05), RGBV(0x06), RGBV(0x07), 177 RGBV(0x04), RGBV(0x05), RGBV(0x06), RGBV(0x07),
179 RGBV(0x08), RGBV(0x09), RGBV(0x0A), RGBV(0x0B), 178 RGBV(0x08), RGBV(0x09), RGBV(0x0A), RGBV(0x0B),
180 RGBV(0x0C), RGBV(0x0D), RGBV(0x0E), RGBV(0x0F), 179 RGBV(0x0C), RGBV(0x0D), RGBV(0x0E), RGBV(0x0F),
181 RGBV(0x10), RGBV(0x11), RGBV(0x12), RGBV(0x13), 180 RGBV(0x10), RGBV(0x11), RGBV(0x12), RGBV(0x13),
182 RGBV(0x14), RGBV(0x15), RGBV(0x16), RGBV(0x17), 181 RGBV(0x14), RGBV(0x15), RGBV(0x16), RGBV(0x17),
183 RGBV(0x18), RGBV(0x19), RGBV(0x1A), RGBV(0x1B), 182 RGBV(0x18), RGBV(0x19), RGBV(0x1A), RGBV(0x1B),
184 RGBV(0x1C), RGBV(0x1D), RGBV(0x1E), RGBV(0x1F), 183 RGBV(0x1C), RGBV(0x1D), RGBV(0x1E), RGBV(0x1F),
185 RGBV(0x20), RGBV(0x21), RGBV(0x22), RGBV(0x23), 184 RGBV(0x20), RGBV(0x21), RGBV(0x22), RGBV(0x23),
186 RGBV(0x24), RGBV(0x25), RGBV(0x26), RGBV(0x27), 185 RGBV(0x24), RGBV(0x25), RGBV(0x26), RGBV(0x27),
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 RGBV(0xFC), RGBV(0xFD), RGBV(0xFE), RGBV(0xFF), 239 RGBV(0xFC), RGBV(0xFD), RGBV(0xFE), RGBV(0xFF),
241 }; 240 };
242 241
243 #undef RGBY 242 #undef RGBY
244 #undef RGBU 243 #undef RGBU
245 #undef RGBV 244 #undef RGBV
246 #undef MMX_ALIGNED 245 #undef MMX_ALIGNED
247 246
248 #if defined(ARCH_CPU_X86_64) 247 #if defined(ARCH_CPU_X86_64)
249 248
249 // AMD64 ABI uses register paremters.
250 void FastConvertYUVToRGB32Row(const uint8* y_buf, // rdi 250 void FastConvertYUVToRGB32Row(const uint8* y_buf, // rdi
251 const uint8* u_buf, // rsi 251 const uint8* u_buf, // rsi
252 const uint8* v_buf, // rdx 252 const uint8* v_buf, // rdx
253 uint8* rgb_buf, // rcx 253 uint8* rgb_buf, // rcx
254 int width); // r8 254 int width) { // r8
255
256 asm( 255 asm(
257 ".global FastConvertYUVToRGB32Row\n"
258 "FastConvertYUVToRGB32Row:\n"
259 "jmp convertend\n" 256 "jmp convertend\n"
260
261 "convertloop:" 257 "convertloop:"
262 "movzb (%rsi),%r10\n" 258 "movzb (%1),%%r10\n"
263 "add $0x1,%rsi\n" 259 "add $0x1,%1\n"
264 "movzb (%rdx),%r11\n" 260 "movzb (%2),%%r11\n"
265 "add $0x1,%rdx\n" 261 "add $0x1,%2\n"
266 "movq kCoefficientsRgbU(,%r10,8),%xmm0\n" 262 "movq 2048(%5,%%r10,8),%%xmm0\n"
267 "movzb (%rdi),%r10\n" 263 "movzb (%0),%%r10\n"
268 "movq kCoefficientsRgbV(,%r11,8),%xmm1\n" 264 "movq 4096(%5,%%r11,8),%%xmm1\n"
269 "movzb 0x1(%rdi),%r11\n" 265 "movzb 0x1(%0),%%r11\n"
270 "paddsw %xmm1,%xmm0\n" 266 "paddsw %%xmm1,%%xmm0\n"
271 "movq kCoefficientsRgbY(,%r10,8),%xmm2\n" 267 "movq (%5,%%r10,8),%%xmm2\n"
272 "add $0x2,%rdi\n" 268 "add $0x2,%0\n"
273 "movq kCoefficientsRgbY(,%r11,8),%xmm3\n" 269 "movq (%5,%%r11,8),%%xmm3\n"
274 "paddsw %xmm0,%xmm2\n" 270 "paddsw %%xmm0,%%xmm2\n"
275 "paddsw %xmm0,%xmm3\n" 271 "paddsw %%xmm0,%%xmm3\n"
276 "shufps $0x44,%xmm3,%xmm2\n" 272 "shufps $0x44,%%xmm3,%%xmm2\n"
277 "psraw $0x6,%xmm2\n" 273 "psraw $0x6,%%xmm2\n"
278 "packuswb %xmm2,%xmm2\n" 274 "packuswb %%xmm2,%%xmm2\n"
279 "movq %xmm2,0x0(%rcx)\n" 275 "movq %%xmm2,0x0(%3)\n"
280 "add $0x8,%rcx\n" 276 "add $0x8,%3\n"
281 "convertend:" 277 "convertend:"
282 "sub $0x2,%r8\n" 278 "sub $0x2,%4\n"
283 "jns convertloop\n" 279 "jns convertloop\n"
284 280
285 "convertnext:" 281 "convertnext:"
286 "add $0x1,%r8\n" 282 "add $0x1,%4\n"
287 "js convertdone\n" 283 "js convertdone\n"
288 284
289 "movzb (%rsi),%r10\n" 285 "movzb (%1),%%r10\n"
290 "movq kCoefficientsRgbU(,%r10,8),%xmm0\n" 286 "movq 2048(%5,%%r10,8),%%xmm0\n"
291 "movzb (%rdx),%r10\n" 287 "movzb (%2),%%r10\n"
292 "movq kCoefficientsRgbV(,%r10,8),%xmm1\n" 288 "movq 4096(%5,%%r10,8),%%xmm1\n"
293 "paddsw %xmm1,%xmm0\n" 289 "paddsw %%xmm1,%%xmm0\n"
294 "movzb (%rdi),%r10\n" 290 "movzb (%0),%%r10\n"
295 "movq kCoefficientsRgbY(,%r10,8),%xmm1\n" 291 "movq (%5,%%r10,8),%%xmm1\n"
296 "paddsw %xmm0,%xmm1\n" 292 "paddsw %%xmm0,%%xmm1\n"
297 "psraw $0x6,%xmm1\n" 293 "psraw $0x6,%%xmm1\n"
298 "packuswb %xmm1,%xmm1\n" 294 "packuswb %%xmm1,%%xmm1\n"
299 "movd %xmm1,0x0(%rcx)\n" 295 "movd %%xmm1,0x0(%3)\n"
300 "convertdone:" 296 "convertdone:"
301 "ret\n" 297 :
298 : "r"(y_buf), // %0
299 "r"(u_buf), // %1
300 "r"(v_buf), // %2
301 "r"(rgb_buf), // %3
302 "r"(width), // %4
303 "r" (kCoefficientsRgbY) // %5
304 : "memory", "r10", "r11", "xmm0", "xmm1", "xmm2", "xmm3"
302 ); 305 );
303 306 }
304 307
305 void ScaleYUVToRGB32Row(const uint8* y_buf, // rdi 308 void ScaleYUVToRGB32Row(const uint8* y_buf, // rdi
306 const uint8* u_buf, // rsi 309 const uint8* u_buf, // rsi
307 const uint8* v_buf, // rdx 310 const uint8* v_buf, // rdx
308 uint8* rgb_buf, // rcx 311 uint8* rgb_buf, // rcx
309 int width, // r8 312 int width, // r8
310 int scaled_dx); // r9 313 int scaled_dx) { // r9
311
312 asm( 314 asm(
313 ".global ScaleYUVToRGB32Row\n" 315 "xor %%r11,%%r11\n"
314 "ScaleYUVToRGB32Row:\n" 316 "sub $0x2,%4\n"
315 "xor %r11,%r11\n"
316 "sub $0x2,%r8\n"
317 "js scalenext\n" 317 "js scalenext\n"
318 318
319 "scaleloop:" 319 "scaleloop:"
320 "mov %r11,%r10\n" 320 "mov %%r11,%%r10\n"
321 "sar $0x5,%r10\n" 321 "sar $0x5,%%r10\n"
322 "movzb (%rsi,%r10,1),%rax\n" 322 "movzb (%1,%%r10,1),%%rax\n"
323 "movq kCoefficientsRgbU(,%rax,8),%xmm0\n" 323 "movq 2048(%5,%%rax,8),%%xmm0\n"
324 "movzb (%rdx,%r10,1),%rax\n" 324 "movzb (%2,%%r10,1),%%rax\n"
325 "movq kCoefficientsRgbV(,%rax,8),%xmm1\n" 325 "movq 4096(%5,%%rax,8),%%xmm1\n"
326 "lea (%r11,%r9),%r10\n" 326 "lea (%%r11,%6),%%r10\n"
327 "sar $0x4,%r11\n" 327 "sar $0x4,%%r11\n"
328 "movzb (%rdi,%r11,1),%rax\n" 328 "movzb (%0,%%r11,1),%%rax\n"
329 "paddsw %xmm1,%xmm0\n" 329 "paddsw %%xmm1,%%xmm0\n"
330 "movq kCoefficientsRgbY(,%rax,8),%xmm1\n" 330 "movq (%5,%%rax,8),%%xmm1\n"
331 "lea (%r10,%r9),%r11\n" 331 "lea (%%r10,%6),%%r11\n"
332 "sar $0x4,%r10\n" 332 "sar $0x4,%%r10\n"
333 "movzb (%rdi,%r10,1),%rax\n" 333 "movzb (%0,%%r10,1),%%rax\n"
334 "movq kCoefficientsRgbY(,%rax,8),%xmm2\n" 334 "movq (%5,%%rax,8),%%xmm2\n"
335 "paddsw %xmm0,%xmm1\n" 335 "paddsw %%xmm0,%%xmm1\n"
336 "paddsw %xmm0,%xmm2\n" 336 "paddsw %%xmm0,%%xmm2\n"
337 "shufps $0x44,%xmm2,%xmm1\n" 337 "shufps $0x44,%%xmm2,%%xmm1\n"
338 "psraw $0x6,%xmm1\n" 338 "psraw $0x6,%%xmm1\n"
339 "packuswb %xmm1,%xmm1\n" 339 "packuswb %%xmm1,%%xmm1\n"
340 "movq %xmm1,0x0(%rcx)\n" 340 "movq %%xmm1,0x0(%3)\n"
341 "add $0x8,%rcx\n" 341 "add $0x8,%3\n"
342 "sub $0x2,%r8\n" 342 "sub $0x2,%4\n"
343 "jns scaleloop\n" 343 "jns scaleloop\n"
344 344
345 "scalenext:" 345 "scalenext:"
346 "add $0x1,%r8\n" 346 "add $0x1,%4\n"
347 "js scaledone\n" 347 "js scaledone\n"
348 348
349 "mov %r11,%r10\n" 349 "mov %%r11,%%r10\n"
350 "sar $0x5,%r10\n" 350 "sar $0x5,%%r10\n"
351 "movzb (%rsi,%r10,1),%rax\n" 351 "movzb (%1,%%r10,1),%%rax\n"
352 "movq kCoefficientsRgbU(,%rax,8),%xmm0\n" 352 "movq 2048(%5,%%rax,8),%%xmm0\n"
353 "movzb (%rdx,%r10,1),%rax\n" 353 "movzb (%2,%%r10,1),%%rax\n"
354 "movq kCoefficientsRgbV(,%rax,8),%xmm1\n" 354 "movq 4096(%5,%%rax,8),%%xmm1\n"
355 "paddsw %xmm1,%xmm0\n" 355 "paddsw %%xmm1,%%xmm0\n"
356 "sar $0x4,%r11\n" 356 "sar $0x4,%%r11\n"
357 "movzb (%rdi,%r11,1),%rax\n" 357 "movzb (%0,%%r11,1),%%rax\n"
358 "movq kCoefficientsRgbY(,%rax,8),%xmm1\n" 358 "movq (%5,%%rax,8),%%xmm1\n"
359 "paddsw %xmm0,%xmm1\n" 359 "paddsw %%xmm0,%%xmm1\n"
360 "psraw $0x6,%xmm1\n" 360 "psraw $0x6,%%xmm1\n"
361 "packuswb %xmm1,%xmm1\n" 361 "packuswb %%xmm1,%%xmm1\n"
362 "movd %xmm1,0x0(%rcx)\n" 362 "movd %%xmm1,0x0(%3)\n"
363 363
364 "scaledone:" 364 "scaledone:"
365 "ret\n" 365 :
366 : "r"(y_buf), // %0
367 "r"(u_buf), // %1
368 "r"(v_buf), // %2
369 "r"(rgb_buf), // %3
370 "r"(width), // %4
371 "r" (kCoefficientsRgbY), // %5
372 "r"(static_cast<long>(scaled_dx)) // %6
373 : "memory", "r10", "r11", "rax", "xmm0", "xmm1", "xmm2"
366 ); 374 );
375 }
367 376
368 #else 377 #else
369 378
370 void FastConvertYUVToRGB32Row(const uint8* y_buf, 379 void FastConvertYUVToRGB32Row(const uint8* y_buf,
371 const uint8* u_buf, 380 const uint8* u_buf,
372 const uint8* v_buf, 381 const uint8* v_buf,
373 uint8* rgb_buf, 382 uint8* rgb_buf,
374 int width); 383 int width);
375 384
376 asm( 385 asm(
377 ".global FastConvertYUVToRGB32Row\n" 386 ".global FastConvertYUVToRGB32Row\n"
378 "FastConvertYUVToRGB32Row:\n" 387 "FastConvertYUVToRGB32Row:\n"
379 "pusha\n" 388 "pusha\n"
380 "mov 0x24(%esp),%edx\n" 389 "mov 0x24(%esp),%edx\n"
381 "mov 0x28(%esp),%edi\n" 390 "mov 0x28(%esp),%edi\n"
382 "mov 0x2c(%esp),%esi\n" 391 "mov 0x2c(%esp),%esi\n"
383 "mov 0x30(%esp),%ebp\n" 392 "mov 0x30(%esp),%ebp\n"
384 "mov 0x34(%esp),%ecx\n" 393 "mov 0x34(%esp),%ecx\n"
385 "jmp convertend\n" 394 "jmp convertend\n"
386 395
387 "convertloop:" 396 "convertloop:"
388 "movzbl (%edi),%eax\n" 397 "movzbl (%edi),%eax\n"
389 "add $0x1,%edi\n" 398 "add $0x1,%edi\n"
390 "movzbl (%esi),%ebx\n" 399 "movzbl (%esi),%ebx\n"
391 "add $0x1,%esi\n" 400 "add $0x1,%esi\n"
392 "movq kCoefficientsRgbU(,%eax,8),%mm0\n" 401 "movq kCoefficientsRgbY+2048(,%eax,8),%mm0\n"
393 "movzbl (%edx),%eax\n" 402 "movzbl (%edx),%eax\n"
394 "paddsw kCoefficientsRgbV(,%ebx,8),%mm0\n" 403 "paddsw kCoefficientsRgbY+4096(,%ebx,8),%mm0\n"
395 "movzbl 0x1(%edx),%ebx\n" 404 "movzbl 0x1(%edx),%ebx\n"
396 "movq kCoefficientsRgbY(,%eax,8),%mm1\n" 405 "movq kCoefficientsRgbY(,%eax,8),%mm1\n"
397 "add $0x2,%edx\n" 406 "add $0x2,%edx\n"
398 "movq kCoefficientsRgbY(,%ebx,8),%mm2\n" 407 "movq kCoefficientsRgbY(,%ebx,8),%mm2\n"
399 "paddsw %mm0,%mm1\n" 408 "paddsw %mm0,%mm1\n"
400 "paddsw %mm0,%mm2\n" 409 "paddsw %mm0,%mm2\n"
401 "psraw $0x6,%mm1\n" 410 "psraw $0x6,%mm1\n"
402 "psraw $0x6,%mm2\n" 411 "psraw $0x6,%mm2\n"
403 "packuswb %mm2,%mm1\n" 412 "packuswb %mm2,%mm1\n"
404 "movntq %mm1,0x0(%ebp)\n" 413 "movntq %mm1,0x0(%ebp)\n"
405 "add $0x8,%ebp\n" 414 "add $0x8,%ebp\n"
406 "convertend:" 415 "convertend:"
407 "sub $0x2,%ecx\n" 416 "sub $0x2,%ecx\n"
408 "jns convertloop\n" 417 "jns convertloop\n"
409 418
410 "and $0x1,%ecx\n" 419 "and $0x1,%ecx\n"
411 "je convertdone\n" 420 "je convertdone\n"
412 421
413 "movzbl (%edi),%eax\n" 422 "movzbl (%edi),%eax\n"
414 "movq kCoefficientsRgbU(,%eax,8),%mm0\n" 423 "movq kCoefficientsRgbY+2048(,%eax,8),%mm0\n"
415 "movzbl (%esi),%eax\n" 424 "movzbl (%esi),%eax\n"
416 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n" 425 "paddsw kCoefficientsRgbY+4096(,%eax,8),%mm0\n"
417 "movzbl (%edx),%eax\n" 426 "movzbl (%edx),%eax\n"
418 "movq kCoefficientsRgbY(,%eax,8),%mm1\n" 427 "movq kCoefficientsRgbY(,%eax,8),%mm1\n"
419 "paddsw %mm0,%mm1\n" 428 "paddsw %mm0,%mm1\n"
420 "psraw $0x6,%mm1\n" 429 "psraw $0x6,%mm1\n"
421 "packuswb %mm1,%mm1\n" 430 "packuswb %mm1,%mm1\n"
422 "movd %mm1,0x0(%ebp)\n" 431 "movd %mm1,0x0(%ebp)\n"
423 "convertdone:" 432 "convertdone:"
424 "popa\n" 433 "popa\n"
425 "ret\n" 434 "ret\n"
426 ); 435 );
(...skipping 15 matching lines...) Expand all
442 "mov 0x2c(%esp),%esi\n" 451 "mov 0x2c(%esp),%esi\n"
443 "mov 0x30(%esp),%ebp\n" 452 "mov 0x30(%esp),%ebp\n"
444 "mov 0x34(%esp),%ecx\n" 453 "mov 0x34(%esp),%ecx\n"
445 "xor %ebx,%ebx\n" 454 "xor %ebx,%ebx\n"
446 "jmp scaleend\n" 455 "jmp scaleend\n"
447 456
448 "scaleloop:" 457 "scaleloop:"
449 "mov %ebx,%eax\n" 458 "mov %ebx,%eax\n"
450 "sar $0x5,%eax\n" 459 "sar $0x5,%eax\n"
451 "movzbl (%edi,%eax,1),%eax\n" 460 "movzbl (%edi,%eax,1),%eax\n"
452 "movq kCoefficientsRgbU(,%eax,8),%mm0\n" 461 "movq kCoefficientsRgbY+2048(,%eax,8),%mm0\n"
453 "mov %ebx,%eax\n" 462 "mov %ebx,%eax\n"
454 "sar $0x5,%eax\n" 463 "sar $0x5,%eax\n"
455 "movzbl (%esi,%eax,1),%eax\n" 464 "movzbl (%esi,%eax,1),%eax\n"
456 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n" 465 "paddsw kCoefficientsRgbY+4096(,%eax,8),%mm0\n"
457 "mov %ebx,%eax\n" 466 "mov %ebx,%eax\n"
458 "add 0x38(%esp),%ebx\n" 467 "add 0x38(%esp),%ebx\n"
459 "sar $0x4,%eax\n" 468 "sar $0x4,%eax\n"
460 "movzbl (%edx,%eax,1),%eax\n" 469 "movzbl (%edx,%eax,1),%eax\n"
461 "movq kCoefficientsRgbY(,%eax,8),%mm1\n" 470 "movq kCoefficientsRgbY(,%eax,8),%mm1\n"
462 "mov %ebx,%eax\n" 471 "mov %ebx,%eax\n"
463 "add 0x38(%esp),%ebx\n" 472 "add 0x38(%esp),%ebx\n"
464 "sar $0x4,%eax\n" 473 "sar $0x4,%eax\n"
465 "movzbl (%edx,%eax,1),%eax\n" 474 "movzbl (%edx,%eax,1),%eax\n"
466 "movq kCoefficientsRgbY(,%eax,8),%mm2\n" 475 "movq kCoefficientsRgbY(,%eax,8),%mm2\n"
467 "paddsw %mm0,%mm1\n" 476 "paddsw %mm0,%mm1\n"
468 "paddsw %mm0,%mm2\n" 477 "paddsw %mm0,%mm2\n"
469 "psraw $0x6,%mm1\n" 478 "psraw $0x6,%mm1\n"
470 "psraw $0x6,%mm2\n" 479 "psraw $0x6,%mm2\n"
471 "packuswb %mm2,%mm1\n" 480 "packuswb %mm2,%mm1\n"
472 "movntq %mm1,0x0(%ebp)\n" 481 "movntq %mm1,0x0(%ebp)\n"
473 "add $0x8,%ebp\n" 482 "add $0x8,%ebp\n"
474 "scaleend:" 483 "scaleend:"
475 "sub $0x2,%ecx\n" 484 "sub $0x2,%ecx\n"
476 "jns scaleloop\n" 485 "jns scaleloop\n"
477 486
478 "and $0x1,%ecx\n" 487 "and $0x1,%ecx\n"
479 "je scaledone\n" 488 "je scaledone\n"
480 489
481 "mov %ebx,%eax\n" 490 "mov %ebx,%eax\n"
482 "sar $0x5,%eax\n" 491 "sar $0x5,%eax\n"
483 "movzbl (%edi,%eax,1),%eax\n" 492 "movzbl (%edi,%eax,1),%eax\n"
484 "movq kCoefficientsRgbU(,%eax,8),%mm0\n" 493 "movq kCoefficientsRgbY+2048(,%eax,8),%mm0\n"
485 "mov %ebx,%eax\n" 494 "mov %ebx,%eax\n"
486 "sar $0x5,%eax\n" 495 "sar $0x5,%eax\n"
487 "movzbl (%esi,%eax,1),%eax\n" 496 "movzbl (%esi,%eax,1),%eax\n"
488 "paddsw kCoefficientsRgbV(,%eax,8),%mm0\n" 497 "paddsw kCoefficientsRgbY+4096(,%eax,8),%mm0\n"
489 "mov %ebx,%eax\n" 498 "mov %ebx,%eax\n"
490 "sar $0x4,%eax\n" 499 "sar $0x4,%eax\n"
491 "movzbl (%edx,%eax,1),%eax\n" 500 "movzbl (%edx,%eax,1),%eax\n"
492 "movq kCoefficientsRgbY(,%eax,8),%mm1\n" 501 "movq kCoefficientsRgbY(,%eax,8),%mm1\n"
493 "paddsw %mm0,%mm1\n" 502 "paddsw %mm0,%mm1\n"
494 "psraw $0x6,%mm1\n" 503 "psraw $0x6,%mm1\n"
495 "packuswb %mm1,%mm1\n" 504 "packuswb %mm1,%mm1\n"
496 "movd %mm1,0x0(%ebp)\n" 505 "movd %mm1,0x0(%ebp)\n"
497 506
498 "scaledone:" 507 "scaledone:"
(...skipping 182 matching lines...) Expand 10 before | Expand all | Expand 10 after
681 uint8 v = v_buf[scaled_x >> 5]; 690 uint8 v = v_buf[scaled_x >> 5];
682 uint8 y0 = y_buf[scaled_x >> 4]; 691 uint8 y0 = y_buf[scaled_x >> 4];
683 YuvPixel(y0, u, v, rgb_buf); 692 YuvPixel(y0, u, v, rgb_buf);
684 rgb_buf += 4; 693 rgb_buf += 4;
685 scaled_x += scaled_dx; 694 scaled_x += scaled_dx;
686 } 695 }
687 } 696 }
688 #endif // USE_MMX 697 #endif // USE_MMX
689 } // extern "C" 698 } // extern "C"
690 699
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698