| OLD | NEW |
| 1 ; Copyright (c) 2011 The Chromium Authors. All rights reserved. | 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 | 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 ; | 5 ; |
| 6 ; void SYMBOL(const uint8* argb, uint8* y, uint8* u, uint8* v, int width); | 6 ; void SYMBOL(const uint8* argb, uint8* y, uint8* u, uint8* v, int width); |
| 7 ; | 7 ; |
| 8 ; The main code that converts RGB pixels to YUV pixels. This function roughly | 8 ; The main code that converts RGB pixels to YUV pixels. This function roughly |
| 9 ; consists of three parts: converting one ARGB pixel to YUV pixels, converting | 9 ; consists of three parts: converting one ARGB pixel to YUV pixels, converting |
| 10 ; two ARGB pixels to YUV pixels, and converting four ARGB pixels to YUV pixels. | 10 ; two ARGB pixels to YUV pixels, and converting four ARGB pixels to YUV pixels. |
| 11 ; To write the structure of this function in C, it becomes the snippet listed | 11 ; To write the structure of this function in C, it becomes the snippet listed |
| 12 ; below. | 12 ; below. |
| 13 ; | 13 ; |
| 14 ; if (width & 1) { | 14 ; if (width & 1) { |
| 15 ; --width; | 15 ; --width; |
| 16 ; // Convert one ARGB pixel to one Y pixel, one U pixel, and one V pixel. | 16 ; // Convert one ARGB pixel to one Y pixel, one U pixel, and one V pixel. |
| 17 ; } | 17 ; } |
| 18 ; | 18 ; |
| 19 ; if (width & 2) { | 19 ; if (width & 2) { |
| 20 ; width -= 2; | 20 ; width -= 2; |
| 21 ; // Convert two ARGB pixels to two Y pixels, one U pixel, and one V pixel. | 21 ; // Convert two ARGB pixels to two Y pixels, one U pixel, and one V pixel. |
| 22 ; } | 22 ; } |
| 23 ; | 23 ; |
| 24 ; while (width) { | 24 ; while (width) { |
| 25 ; width -= 4; | 25 ; width -= 4; |
| 26 ; // Convert four ARGB pixels to four Y pixels, two U pixels, and two V | 26 ; // Convert four ARGB pixels to four Y pixels, two U pixels, and two V |
| 27 ; // pixels. | 27 ; // pixels. |
| 28 ; } | 28 ; } |
| 29 ; | 29 ; |
| 30 global mangle(SYMBOL) PRIVATE | 30 EXPORT SYMBOL |
| 31 align function_align | 31 align function_align |
| 32 | 32 |
| 33 mangle(SYMBOL): | 33 mangle(SYMBOL): |
| 34 %assign stack_offset 0 | 34 %assign stack_offset 0 |
| 35 PROLOGUE 5, 6, 8, ARGB, Y, U, V, WIDTH, TEMP | 35 PROLOGUE 5, 6, 8, ARGB, Y, U, V, WIDTH, TEMP |
| 36 | 36 |
| 37 ; Initialize constants used in this function. (We use immediates to avoid | 37 ; Initialize constants used in this function. (We use immediates to avoid |
| 38 ; dependency onto GOT.) | 38 ; dependency onto GOT.) |
| 39 LOAD_XMM XMM_CONST_Y0, 0x00420219 | 39 LOAD_XMM XMM_CONST_Y0, 0x00420219 |
| 40 LOAD_XMM XMM_CONST_Y1, 0x00007F00 | 40 LOAD_XMM XMM_CONST_Y1, 0x00007F00 |
| (...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 191 %if SUBSAMPLING == 0 | 191 %if SUBSAMPLING == 0 |
| 192 .convert_four_pixels_unaligned_next: | 192 .convert_four_pixels_unaligned_next: |
| 193 %endif | 193 %endif |
| 194 | 194 |
| 195 test WIDTHq, WIDTHq | 195 test WIDTHq, WIDTHq |
| 196 jnz .convert_four_pixels_unaligned | 196 jnz .convert_four_pixels_unaligned |
| 197 | 197 |
| 198 .convert_finish: | 198 .convert_finish: |
| 199 ; Just exit this function since this is a void function. | 199 ; Just exit this function since this is a void function. |
| 200 RET | 200 RET |
| OLD | NEW |