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

Side by Side Diff: media/base/simd/convert_yuv_to_rgb_mmx.inc

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
« no previous file with comments | « media/base/simd/convert_yuv_to_rgb_mmx.asm ('k') | media/base/simd/convert_yuv_to_rgb_sse.asm » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 global mangle(SYMBOL) PRIVATE
6 align function_align
7
8 ; Non-PIC code is the fastest so use this if possible.
9 %ifndef PIC
10 mangle(SYMBOL):
11 %assign stack_offset 0
12 PROLOGUE 5, 7, 3, Y, U, V, ARGB, WIDTH, TEMPU, TEMPV
13 extern mangle(kCoefficientsRgbY)
14 jmp .convertend
15
16 .convertloop:
17 movzx TEMPUd, BYTE [Uq]
18 add Uq, 1
19 movzx TEMPVd, BYTE [Vq]
20 add Vq, 1
21 movq mm0, [mangle(kCoefficientsRgbY) + 2048 + 8 * TEMPUq]
22 movzx TEMPUd, BYTE [Yq]
23 paddsw mm0, [mangle(kCoefficientsRgbY) + 4096 + 8 * TEMPVq]
24 movzx TEMPVd, BYTE [Yq + 1]
25 movq mm1, [mangle(kCoefficientsRgbY) + 8 * TEMPUq]
26 add Yq, 2
27 movq mm2, [mangle(kCoefficientsRgbY) + 8 * TEMPVq]
28 paddsw mm1, mm0
29 paddsw mm2, mm0
30 psraw mm1, 6
31 psraw mm2, 6
32 packuswb mm1, mm2
33 MOVQ [ARGBq], mm1
34 add ARGBq, 8
35
36 .convertend:
37 sub WIDTHq, 2
38 jns .convertloop
39
40 ; If number of pixels is odd then compute it.
41 and WIDTHq, 1
42 jz .convertdone
43
44 movzx TEMPUd, BYTE [Uq]
45 movq mm0, [mangle(kCoefficientsRgbY) + 2048 + 8 * TEMPUq]
46 movzx TEMPVd, BYTE [Vq]
47 paddsw mm0, [mangle(kCoefficientsRgbY) + 4096 + 8 * TEMPVq]
48 movzx TEMPUd, BYTE [Yq]
49 movq mm1, [mangle(kCoefficientsRgbY) + 8 * TEMPUq]
50 paddsw mm1, mm0
51 psraw mm1, 6
52 packuswb mm1, mm1
53 movd [ARGBq], mm1
54
55 .convertdone:
56 RET
57 %endif
58
59 ; With PIC code we need to load the address of mangle(kCoefficientsRgbY).
60 ; This code is slower than the above version.
61 %ifdef PIC
62 mangle(SYMBOL):
63 %assign stack_offset 0
64 PROLOGUE 5, 7, 3, Y, U, V, ARGB, WIDTH, TEMP, TABLE
65
66 extern mangle(kCoefficientsRgbY)
67 LOAD_SYM TABLEq, mangle(kCoefficientsRgbY)
68
69 jmp .convertend
70
71 .convertloop:
72 movzx TEMPd, BYTE [Uq]
73 movq mm0, [TABLEq + 2048 + 8 * TEMPq]
74 add Uq, 1
75
76 movzx TEMPd, BYTE [Vq]
77 paddsw mm0, [TABLEq + 4096 + 8 * TEMPq]
78 add Vq, 1
79
80 movzx TEMPd, BYTE [Yq]
81 movq mm1, [TABLEq + 8 * TEMPq]
82
83 movzx TEMPd, BYTE [Yq + 1]
84 movq mm2, [TABLEq + 8 * TEMPq]
85 add Yq, 2
86
87 ; Add UV components to Y component.
88 paddsw mm1, mm0
89 paddsw mm2, mm0
90
91 ; Down shift and then pack.
92 psraw mm1, 6
93 psraw mm2, 6
94 packuswb mm1, mm2
95 MOVQ [ARGBq], mm1
96 add ARGBq, 8
97
98 .convertend:
99 sub WIDTHq, 2
100 jns .convertloop
101
102 ; If number of pixels is odd then compute it.
103 and WIDTHq, 1
104 jz .convertdone
105
106 movzx TEMPd, BYTE [Uq]
107 movq mm0, [TABLEq + 2048 + 8 * TEMPq]
108 movzx TEMPd, BYTE [Vq]
109 paddsw mm0, [TABLEq + 4096 + 8 * TEMPq]
110 movzx TEMPd, BYTE [Yq]
111 movq mm1, [TABLEq + 8 * TEMPq]
112 paddsw mm1, mm0
113 psraw mm1, 6
114 packuswb mm1, mm1
115 movd [ARGBq], mm1
116
117 .convertdone:
118 RET
119 %endif
OLDNEW
« no previous file with comments | « media/base/simd/convert_yuv_to_rgb_mmx.asm ('k') | media/base/simd/convert_yuv_to_rgb_sse.asm » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698