| Index: media/base/simd/convert_rgb_to_yuv_ssse3.inc
|
| diff --git a/media/base/simd/convert_rgb_to_yuv_ssse3.inc b/media/base/simd/convert_rgb_to_yuv_ssse3.inc
|
| deleted file mode 100644
|
| index 5217c69bd77f22969b8f20954b3b0e9ec8b2326f..0000000000000000000000000000000000000000
|
| --- a/media/base/simd/convert_rgb_to_yuv_ssse3.inc
|
| +++ /dev/null
|
| @@ -1,200 +0,0 @@
|
| -; Copyright (c) 2011 The Chromium Authors. All rights reserved.
|
| -; Use of this source code is governed by a BSD-style license that can be
|
| -; found in the LICENSE file.
|
| -
|
| -;
|
| -; void SYMBOL(const uint8_t* argb, uint8_t* y, uint8_t* u, uint8_t* v, int width);
|
| -;
|
| -; The main code that converts RGB pixels to YUV pixels. This function roughly
|
| -; consists of three parts: converting one ARGB pixel to YUV pixels, converting
|
| -; two ARGB pixels to YUV pixels, and converting four ARGB pixels to YUV pixels.
|
| -; To write the structure of this function in C, it becomes the snippet listed
|
| -; below.
|
| -;
|
| -; if (width & 1) {
|
| -; --width;
|
| -; // Convert one ARGB pixel to one Y pixel, one U pixel, and one V pixel.
|
| -; }
|
| -;
|
| -; if (width & 2) {
|
| -; width -= 2;
|
| -; // Convert two ARGB pixels to two Y pixels, one U pixel, and one V pixel.
|
| -; }
|
| -;
|
| -; while (width) {
|
| -; width -= 4;
|
| -; // Convert four ARGB pixels to four Y pixels, two U pixels, and two V
|
| -; // pixels.
|
| -; }
|
| -;
|
| - EXPORT SYMBOL
|
| - align function_align
|
| -
|
| -mangle(SYMBOL):
|
| - %assign stack_offset 0
|
| - PROLOGUE 5, 6, 8, ARGB, Y, U, V, WIDTH, TEMP
|
| -
|
| - ; Initialize constants used in this function. (We use immediates to avoid
|
| - ; dependency onto GOT.)
|
| - LOAD_XMM XMM_CONST_Y0, 0x00420219
|
| - LOAD_XMM XMM_CONST_Y1, 0x00007F00
|
| - LOAD_XMM XMM_CONST_U, 0x00DAB670
|
| - LOAD_XMM XMM_CONST_V, 0x0070A2EE
|
| - LOAD_XMM XMM_CONST_128, 0x00800080
|
| -
|
| -.convert_one_pixel:
|
| - ; Divide the input width by two so it represents the offsets for u[] and v[].
|
| - ; When the width is odd, We read the rightmost ARGB pixel and convert its
|
| - ; colorspace to YUV. This code stores one Y pixel, one U pixel, and one V
|
| - ; pixel.
|
| - sar WIDTHq, 1
|
| - jnc .convert_two_pixels
|
| -
|
| - ; Read one ARGB (or RGB) pixel.
|
| - READ_ARGB xmm0, 1
|
| -
|
| - ; Calculate y[0] from one RGB pixel read above.
|
| - CALC_Y xmm1, xmm0
|
| - movd TEMPd, xmm1
|
| - mov BYTE [Yq + WIDTHq * 2], TEMPb
|
| -
|
| - ; Calculate u[0] from one RGB pixel read above. If this is an odd line, the
|
| - ; output pixel contains the U value calculated in the previous call. We also
|
| - ; read this pixel and calculate their average.
|
| - INIT_UV TEMPd, Uq, 4
|
| - CALC_UV xmm1, xmm0, XMM_CONST_U, TEMPd
|
| - movd TEMPd, xmm1
|
| - mov BYTE [Uq + WIDTHq], TEMPb
|
| -
|
| - ; Calculate v[0] from one RGB pixel. Same as u[0], we read the result of the
|
| - ; previous call and get their average.
|
| - INIT_UV TEMPd, Uq, 4
|
| - CALC_UV xmm1, xmm0, XMM_CONST_V, TEMPd
|
| - movd TEMPd, xmm1
|
| - mov BYTE [Vq + WIDTHq], TEMPb
|
| -
|
| -.convert_two_pixels:
|
| - ; If the input width is not a multiple of four, read the rightmost two ARGB
|
| - ; pixels and convert their colorspace to YUV. This code stores two Y pixels,
|
| - ; one U pixel, and one V pixel.
|
| - test WIDTHb, 2 / 2
|
| - jz .convert_four_pixels
|
| - sub WIDTHb, 2 / 2
|
| -
|
| - ; Read two ARGB (or RGB) pixels.
|
| - READ_ARGB xmm0, 2
|
| -
|
| - ; Calculate r[0] and r[1] from two RGB pixels read above.
|
| - CALC_Y xmm1, xmm0
|
| - movd TEMPd, xmm1
|
| - mov WORD [Yq + WIDTHq * 2], TEMPw
|
| -
|
| - ; Skip calculating u and v if the output buffer is NULL.
|
| - test Uq, Uq
|
| - jz .convert_four_pixels
|
| -
|
| - ; Calculate u[0] from two RGB pixels read above. (For details, read the above
|
| - ; comment in .convert_one_pixel).
|
| - INIT_UV TEMPd, Uq, 2
|
| - CALC_UV xmm1, xmm0, XMM_CONST_U, TEMPd
|
| - movd TEMPd, xmm1
|
| - mov BYTE [Uq + WIDTHq], TEMPb
|
| -
|
| - ; Calculate v[0] from two RGB pixels read above.
|
| - INIT_UV TEMPd, Vq, 2
|
| - CALC_UV xmm1, xmm0, XMM_CONST_V, TEMPd
|
| - movd TEMPd, xmm1
|
| - mov BYTE [Vq + WIDTHq], TEMPb
|
| -
|
| -.convert_four_pixels:
|
| - ; Read four ARGB pixels and convert their colorspace to YUV. This code stores
|
| - ; four Y pixels, two U pixels, and two V pixels.
|
| - test WIDTHq, WIDTHq
|
| - jz .convert_finish
|
| -
|
| -%if PIXELSIZE == 4
|
| - ; Check if the input buffer is aligned to a 16-byte boundary and use movdqa
|
| - ; for reading the ARGB pixels.
|
| - test ARGBw, 15
|
| - jnz .convert_four_pixels_unaligned
|
| -
|
| -.convert_four_pixels_aligned:
|
| - sub WIDTHq, 4 / 2
|
| -
|
| - ; Read four ARGB pixels. (We can use movdqa here since we have checked if the
|
| - ; source address is aligned.)
|
| - movdqa xmm0, DQWORD [ARGBq + WIDTHq * 4 * 2]
|
| -
|
| - ; Calculate y[0], y[1], y[2],and, y[3] from the input ARGB pixels.
|
| - CALC_Y xmm1, xmm0
|
| - movd DWORD [Yq + WIDTHq * 2], xmm1
|
| -
|
| -%if SUBSAMPLING == 0
|
| - ; Skip calculating u and v if the output buffer is NULL, which means we are
|
| - ; converting an odd line. (When we enable subsampling, these buffers must
|
| - ; contain the u and v values for the previous call, i.e. these variables must
|
| - ; not be NULL.)
|
| - test Uq, Uq
|
| - jz .convert_four_pixels_aligned_next
|
| -%endif
|
| -
|
| - ; Calculate u[0] and u[1] from four ARGB pixels read above.
|
| - INIT_UV TEMPd, Uq, 4
|
| - CALC_UV xmm1, xmm0, XMM_CONST_U, TEMPd
|
| - movd TEMPd, xmm1
|
| - mov WORD [Uq + WIDTHq], TEMPw
|
| -
|
| - ; Calculate v[0] and v[1] from four ARGB pixels read above.
|
| - INIT_UV TEMPd, Vq, 4
|
| - CALC_UV xmm1, xmm0, XMM_CONST_V, TEMPd
|
| - movd TEMPd, xmm1
|
| - mov WORD [Vq + WIDTHq], TEMPw
|
| -
|
| -%if SUBSAMPLING == 0
|
| -.convert_four_pixels_aligned_next:
|
| -%endif
|
| -
|
| - test WIDTHq, WIDTHq
|
| - jnz .convert_four_pixels_aligned
|
| -
|
| - jmp .convert_finish
|
| -%endif
|
| -
|
| -.convert_four_pixels_unaligned:
|
| - sub WIDTHq, 4 / 2
|
| -
|
| - ; Read four ARGB (or RGB) pixels.
|
| - READ_ARGB xmm0, 4
|
| -
|
| - ; Calculate y[0], y[1], y[2],and, y[3] from the input ARGB pixels.
|
| - CALC_Y xmm1, xmm0
|
| - movd DWORD [Yq + WIDTHq * 2], xmm1
|
| -
|
| -%if SUBSAMPLING == 0
|
| - ; Skip calculating u and v if the output buffer is NULL.
|
| - test Uq, Uq
|
| - jz .convert_four_pixels_unaligned_next
|
| -%endif
|
| -
|
| - ; Calculate u[0] and u[1] from the input ARGB pixels.
|
| - INIT_UV TEMPd, Uq, 4
|
| - CALC_UV xmm1, xmm0, XMM_CONST_U, TEMPd
|
| - movd TEMPd, xmm1
|
| - mov WORD [Uq + WIDTHq], TEMPw
|
| -
|
| - ; Calculate v[0] and v[1] from the input ARGB pixels.
|
| - INIT_UV TEMPd, Vq, 4
|
| - CALC_UV xmm1, xmm0, XMM_CONST_V, TEMPd
|
| - movd TEMPd, xmm1
|
| - mov WORD [Vq + WIDTHq], TEMPw
|
| -
|
| -%if SUBSAMPLING == 0
|
| -.convert_four_pixels_unaligned_next:
|
| -%endif
|
| -
|
| - test WIDTHq, WIDTHq
|
| - jnz .convert_four_pixels_unaligned
|
| -
|
| -.convert_finish:
|
| - ; Just exit this function since this is a void function.
|
| - RET
|
|
|