188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org/*
288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *  Copyright 2011 The LibYuv Project Authors. All rights reserved.
388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *
488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *  Use of this source code is governed by a BSD-style license
588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *  that can be found in the LICENSE file in the root of the source
688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *  tree. An additional intellectual property rights grant can be found
788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *  in the file PATENTS. All contributing project authors may
888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org *  be found in the AUTHORS file in the root of the source tree.
988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org */
1088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
1141294d96d7dbf9bc215b09832a8336c5fb158f0bjohannkoenig@chromium.org#include "libyuv/row.h"
1288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
1388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef __cplusplus
1488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgnamespace libyuv {
1588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgextern "C" {
1688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
1788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
1888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// This module is for GCC x86 and x64.
1988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if !defined(LIBYUV_DISABLE_X86) && (defined(__x86_64__) || defined(__i386__))
2088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
2188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(HAS_ARGBTOYROW_SSSE3) || defined(HAS_ARGBGRAYROW_SSSE3)
2288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
2388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Constants for ARGB
2488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToY = {
2588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0
2688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
2788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
2888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// JPeg full range.
2988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToYJ = {
3088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0, 15, 75, 38, 0
3188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
3288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // defined(HAS_ARGBTOYROW_SSSE3) || defined(HAS_ARGBGRAYROW_SSSE3)
3388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
3488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(HAS_ARGBTOYROW_SSSE3) || defined(HAS_I422TOARGBROW_SSSE3)
3588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
3688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToU = {
3788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0
3888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
3988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
4088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToUJ = {
4188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  127, -84, -43, 0, 127, -84, -43, 0, 127, -84, -43, 0, 127, -84, -43, 0
4288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
4388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
4488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToV = {
4588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0,
4688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
4788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
4888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToVJ = {
4988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  -20, -107, 127, 0, -20, -107, 127, 0, -20, -107, 127, 0, -20, -107, 127, 0
5088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
5188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
5288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Constants for BGRA
5388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kBGRAToY = {
5488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13
5588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
5688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
5788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kBGRAToU = {
5888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112
5988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
6088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
6188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kBGRAToV = {
6288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18
6388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
6488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
6588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Constants for ABGR
6688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kABGRToY = {
6788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0, 33, 65, 13, 0
6888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
6988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
7088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kABGRToU = {
7188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0, -38, -74, 112, 0
7288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
7388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
7488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kABGRToV = {
7588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0, 112, -94, -18, 0
7688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
7788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
7888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Constants for RGBA.
7988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kRGBAToY = {
8088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33, 0, 13, 65, 33
8188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
8288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
8388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kRGBAToU = {
8488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38, 0, 112, -74, -38
8588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
8688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
8788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kRGBAToV = {
8888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112, 0, -18, -94, 112
8988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
9088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
9188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kAddY16 = {
9288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u, 16u
9388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
9488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
9588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec16 kAddYJ64 = {
9688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  64, 64, 64, 64, 64, 64, 64, 64
9788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
9888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
9988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kAddUV128 = {
10088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u,
10188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  128u, 128u, 128u, 128u, 128u, 128u, 128u, 128u
10288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
10388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
10488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec16 kAddUVJ128 = {
10588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u, 0x8080u
10688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
10788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // defined(HAS_ARGBTOYROW_SSSE3) || defined(HAS_I422TOARGBROW_SSSE3)
10888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
10988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_RGB24TOARGBROW_SSSE3
11088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
11188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for converting RGB24 to ARGB.
11288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleMaskRGB24ToARGB = {
11388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0u, 1u, 2u, 12u, 3u, 4u, 5u, 13u, 6u, 7u, 8u, 14u, 9u, 10u, 11u, 15u
11488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
11588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
11688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for converting RAW to ARGB.
11788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleMaskRAWToARGB = {
11888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  2u, 1u, 0u, 12u, 5u, 4u, 3u, 13u, 8u, 7u, 6u, 14u, 11u, 10u, 9u, 15u
11988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
12088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
12188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for converting ARGB to RGB24.
12288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleMaskARGBToRGB24 = {
12388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 10u, 12u, 13u, 14u, 128u, 128u, 128u, 128u
12488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
12588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
12688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for converting ARGB to RAW.
12788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleMaskARGBToRAW = {
12888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 8u, 14u, 13u, 12u, 128u, 128u, 128u, 128u
12988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
13088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
13188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for converting ARGBToRGB24 for I422ToRGB24.  First 8 + next 4
13288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleMaskARGBToRGB24_0 = {
13388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  0u, 1u, 2u, 4u, 5u, 6u, 8u, 9u, 128u, 128u, 128u, 128u, 10u, 12u, 13u, 14u
13488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
13588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
13688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for converting ARGB to RAW.
13788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleMaskARGBToRAW_0 = {
13888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  2u, 1u, 0u, 6u, 5u, 4u, 10u, 9u, 128u, 128u, 128u, 128u, 8u, 14u, 13u, 12u
13988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
14088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_RGB24TOARGBROW_SSSE3
14188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
14288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(TESTING) && defined(__x86_64__)
14388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid TestRow_SSE2(const uint8* src_y, uint8* dst_argb, int pix) {
14488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
14588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  5                               \n"
14688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%eax,%%eax                     \n"
14788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%ebx,%%ebx                     \n"
14888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%ecx,%%ecx                     \n"
14988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%edx,%%edx                     \n"
15088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%esi,%%esi                     \n"
15188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%edi,%%edi                     \n"
15288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%ebp,%%ebp                     \n"
15388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%esp,%%esp                     \n"
15488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  5                               \n"
15588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%r8d,%%r8d                     \n"
15688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%r9d,%%r9d                     \n"
15788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%r10d,%%r10d                   \n"
15888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%r11d,%%r11d                   \n"
15988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%r12d,%%r12d                   \n"
16088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%r13d,%%r13d                   \n"
16188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%r14d,%%r14d                   \n"
16288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %%r15d,%%r15d                   \n"
16388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  5                               \n"
16488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%rax),%%eax                   \n"
16588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%rbx),%%ebx                   \n"
16688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%rcx),%%ecx                   \n"
16788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%rdx),%%edx                   \n"
16888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%rsi),%%esi                   \n"
16988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%rdi),%%edi                   \n"
17088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%rbp),%%ebp                   \n"
17188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%rsp),%%esp                   \n"
17288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  5                               \n"
17388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%r8),%%r8d                    \n"
17488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%r9),%%r9d                    \n"
17588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%r10),%%r10d                  \n"
17688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%r11),%%r11d                  \n"
17788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%r12),%%r12d                  \n"
17888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%r13),%%r13d                  \n"
17988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%r14),%%r14d                  \n"
18088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       (%%r15),%%r15d                  \n"
18188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
18288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  5                               \n"
18388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%rax),%%eax               \n"
18488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%rbx),%%ebx               \n"
18588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%rcx),%%ecx               \n"
18688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%rdx),%%edx               \n"
18788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%rsi),%%esi               \n"
18888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%rdi),%%edi               \n"
18988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%rbp),%%ebp               \n"
19088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%rsp),%%esp               \n"
19188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  5                               \n"
19288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%r8),%%r8d                \n"
19388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%r9),%%r9d                \n"
19488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%r10),%%r10d              \n"
19588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%r11),%%r11d              \n"
19688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%r12),%%r12d              \n"
19788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%r13),%%r13d              \n"
19888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%r14),%%r14d              \n"
19988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       0x10(%%r15),%%r15d              \n"
20088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
20188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  5                               \n"
20288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%eax                      \n"
20388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%ebx                      \n"
20488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%ecx                      \n"
20588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%edx                      \n"
20688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%esi                      \n"
20788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%edi                      \n"
20888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%ebp                      \n"
20988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%esp                      \n"
21088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  5                               \n"
21188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%r8d                      \n"
21288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%r9d                      \n"
21388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%r10d                     \n"
21488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%r11d                     \n"
21588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%r12d                     \n"
21688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%r13d                     \n"
21788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%r14d                     \n"
21888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       0x10,%%r15d                     \n"
21988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
22088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    ".p2align  2                               \n"
22188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
22288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(0) ",%%xmm0         \n"
22388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,0) ",%0            \n"
22488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
22588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
22688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
22788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
22888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_y),     // %0
22988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
23088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
23188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
23288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
23388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
23488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
23588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
23688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
23788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
23888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // TESTING
23988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
24088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_I400TOARGBROW_SSE2
24188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid I400ToARGBRow_SSE2(const uint8* src_y, uint8* dst_argb, int pix) {
24288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
24388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
24488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm5                    \n"
24588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
24688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
24788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(0) ",%%xmm0         \n"
24888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,0) ",%0            \n"
24988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm0                   \n"
25088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
25188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm0,%%xmm0                   \n"
25288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm1                   \n"
25388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm0                   \n"
25488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm1                   \n"
25588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
25688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,1) "   \n"
25788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
25888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
25988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
26088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_y),     // %0
26188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
26288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
26388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
26488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
26588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
26688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
26788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
26888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
26988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
27088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
27188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid I400ToARGBRow_Unaligned_SSE2(const uint8* src_y, uint8* dst_argb,
27288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                  int pix) {
27388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
27488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
27588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm5                    \n"
27688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
27788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
27888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(0) ",%%xmm0         \n"
27988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,0) ",%0            \n"
28088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm0                   \n"
28188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
28288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm0,%%xmm0                   \n"
28388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm1                   \n"
28488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm0                   \n"
28588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm1                   \n"
28688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
28788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,1) "   \n"
28888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
28988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
29088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
29188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_y),     // %0
29288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
29388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
29488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
29588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
29688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
29788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
29888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
29988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
30088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
30188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_I400TOARGBROW_SSE2
30288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
30388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_RGB24TOARGBROW_SSSE3
30488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid RGB24ToARGBRow_SSSE3(const uint8* src_rgb24, uint8* dst_argb, int pix) {
30588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
30688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"  // generate mask 0xff000000
30788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm5                    \n"
30888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
30988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
31088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
31188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
31288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
31388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm3   \n"
31488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x30,0) ",%0           \n"
31588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm2                   \n"
31688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "palignr   $0x8,%%xmm1,%%xmm2              \n"
31788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm2                   \n"
31888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm2                   \n"
31988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "palignr   $0xc,%%xmm0,%%xmm1              \n"
32088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm0                   \n"
32188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2," MEMACCESS2(0x20,1) "   \n"
32288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm0                   \n"
32388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm1                   \n"
32488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
32588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm1                   \n"
32688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "palignr   $0x4,%%xmm3,%%xmm3              \n"
32788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm3                   \n"
32888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,1) "   \n"
32988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm3                   \n"
33088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
33188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3," MEMACCESS2(0x30,1) "   \n"
33288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,1) ",%1           \n"
33388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
33488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_rgb24),  // %0
33588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
33688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
33788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kShuffleMaskRGB24ToARGB)  // %3
33888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
33988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
34088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
34188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
34288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
34388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
34488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
34588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid RAWToARGBRow_SSSE3(const uint8* src_raw, uint8* dst_argb, int pix) {
34688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
34788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"  // generate mask 0xff000000
34888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm5                    \n"
34988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
35088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
35188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
35288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
35388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
35488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm3   \n"
35588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x30,0) ",%0           \n"
35688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm2                   \n"
35788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "palignr   $0x8,%%xmm1,%%xmm2              \n"
35888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm2                   \n"
35988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm2                   \n"
36088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "palignr   $0xc,%%xmm0,%%xmm1              \n"
36188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm0                   \n"
36288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2," MEMACCESS2(0x20,1) "   \n"
36388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm0                   \n"
36488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm1                   \n"
36588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
36688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm1                   \n"
36788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "palignr   $0x4,%%xmm3,%%xmm3              \n"
36888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm3                   \n"
36988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,1) "   \n"
37088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm3                   \n"
37188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
37288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3," MEMACCESS2(0x30,1) "   \n"
37388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,1) ",%1           \n"
37488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
37588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_raw),   // %0
37688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
37788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
37888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kShuffleMaskRAWToARGB)  // %3
37988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
38088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
38188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
38288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
38388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
38488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
38588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
38688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid RGB565ToARGBRow_SSE2(const uint8* src, uint8* dst, int pix) {
38788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
38888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       $0x1080108,%%eax                \n"
38988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%eax,%%xmm5                    \n"
39088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
39188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       $0x20802080,%%eax               \n"
39288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%eax,%%xmm6                    \n"
39388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm6,%%xmm6              \n"
39488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm3,%%xmm3                   \n"
39588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0xb,%%xmm3                     \n"
39688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
39788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0xa,%%xmm4                     \n"
39888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x5,%%xmm4                     \n"
39988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm7,%%xmm7                   \n"
40088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x8,%%xmm7                     \n"
40188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
40288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
40388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
40488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
40588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
40688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
40788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                   \n"
40888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm3,%%xmm1                   \n"
40988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0xb,%%xmm2                     \n"
41088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm5,%%xmm1                   \n"
41188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm5,%%xmm2                   \n"
41288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x8,%%xmm1                     \n"
41388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm2,%%xmm1                   \n"
41488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm4,%%xmm0                   \n"
41588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm6,%%xmm0                   \n"
41688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm7,%%xmm0                   \n"
41788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1,%%xmm2                   \n"
41888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm1                   \n"
41988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm0,%%xmm2                   \n"
42088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
42188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm1,0x00,1,0,2)           //  movdqa  %%xmm1,(%1,%0,2)
42288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm2,0x10,1,0,2)           //  movdqa  %%xmm2,0x10(%1,%0,2)
42388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
42488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
42588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
42688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
42788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
42888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)   // %2
42988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
43088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc", "eax"
43188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
43288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
43388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
43488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
43588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
43688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
43788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
43888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
43988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
44088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGB1555ToARGBRow_SSE2(const uint8* src, uint8* dst, int pix) {
44188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
44288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       $0x1080108,%%eax                \n"
44388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%eax,%%xmm5                    \n"
44488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
44588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       $0x42004200,%%eax               \n"
44688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%eax,%%xmm6                    \n"
44788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm6,%%xmm6              \n"
44888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm3,%%xmm3                   \n"
44988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0xb,%%xmm3                     \n"
45088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm4                   \n"
45188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x6,%%xmm4                     \n"
45288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm7,%%xmm7                   \n"
45388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x8,%%xmm7                     \n"
45488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
45588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
45688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
45788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
45888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
45988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
46088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                   \n"
46188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x1,%%xmm1                     \n"
46288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0xb,%%xmm2                     \n"
46388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm3,%%xmm1                   \n"
46488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm5,%%xmm2                   \n"
46588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm5,%%xmm1                   \n"
46688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x8,%%xmm1                     \n"
46788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm2,%%xmm1                   \n"
46888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                   \n"
46988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm4,%%xmm0                   \n"
47088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm2                     \n"
47188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm6,%%xmm0                   \n"
47288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm7,%%xmm2                   \n"
47388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm2,%%xmm0                   \n"
47488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1,%%xmm2                   \n"
47588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm1                   \n"
47688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm0,%%xmm2                   \n"
47788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
47888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm1,0x00,1,0,2)           //  movdqa  %%xmm1,(%1,%0,2)
47988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm2,0x10,1,0,2)           //  movdqa  %%xmm2,0x10(%1,%0,2)
48088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
48188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
48288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
48388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
48488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
48588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)   // %2
48688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
48788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc", "eax"
48888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
48988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
49088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
49188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
49288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
49388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
49488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
49588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
49688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
49788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGB4444ToARGBRow_SSE2(const uint8* src, uint8* dst, int pix) {
49888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
49988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       $0xf0f0f0f,%%eax                \n"
50088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%eax,%%xmm4                    \n"
50188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm4,%%xmm4              \n"
50288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4,%%xmm5                   \n"
50388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x4,%%xmm5                     \n"
50488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
50588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
50688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
50788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
50888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
50988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                   \n"
51088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm4,%%xmm0                   \n"
51188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm2                   \n"
51288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
51388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm3                   \n"
51488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x4,%%xmm1                     \n"
51588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x4,%%xmm3                     \n"
51688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm1,%%xmm0                   \n"
51788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm3,%%xmm2                   \n"
51888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
51988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm0                   \n"
52088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm2,%%xmm1                   \n"
52188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
52288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,2)           //  movdqa  %%xmm0,(%1,%0,2)
52388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm1,0x10,1,0,2)           //  movdqa  %%xmm1,0x10(%1,%0,2)
52488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
52588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
52688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
52788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
52888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
52988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)   // %2
53088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
53188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc", "eax"
53288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
53388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
53488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
53588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
53688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
53788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
53888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
53988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
54088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
54188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToRGB24Row_SSSE3(const uint8* src, uint8* dst, int pix) {
54288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
54388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm6                       \n"
54488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
54588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
54688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
54788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
54888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
54988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
55088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
55188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm0                   \n"
55288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm1                   \n"
55388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm2                   \n"
55488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm3                   \n"
55588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1,%%xmm4                   \n"
55688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrldq    $0x4,%%xmm1                     \n"
55788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslldq    $0xc,%%xmm4                     \n"
55888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm5                   \n"
55988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
56088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslldq    $0x8,%%xmm5                     \n"
56188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
56288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm1                   \n"
56388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrldq    $0x8,%%xmm2                     \n"
56488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslldq    $0x4,%%xmm3                     \n"
56588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm3,%%xmm2                   \n"
56688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,1) "   \n"
56788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm2," MEMACCESS2(0x20,1) "   \n"
56888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x30,1) ",%1           \n"
56988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
57088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
57188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
57288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
57388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)   // %2
57488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kShuffleMaskARGBToRGB24)  // %3
57588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
57688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
57788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6"
57888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
57988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
58088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
58188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
58288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToRAWRow_SSSE3(const uint8* src, uint8* dst, int pix) {
58388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
58488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm6                       \n"
58588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
58688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
58788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
58888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
58988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
59088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
59188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
59288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm0                   \n"
59388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm1                   \n"
59488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm2                   \n"
59588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm3                   \n"
59688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1,%%xmm4                   \n"
59788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrldq    $0x4,%%xmm1                     \n"
59888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslldq    $0xc,%%xmm4                     \n"
59988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm5                   \n"
60088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
60188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslldq    $0x8,%%xmm5                     \n"
60288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
60388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm1                   \n"
60488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrldq    $0x8,%%xmm2                     \n"
60588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslldq    $0x4,%%xmm3                     \n"
60688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm3,%%xmm2                   \n"
60788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,1) "   \n"
60888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm2," MEMACCESS2(0x20,1) "   \n"
60988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x30,1) ",%1           \n"
61088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
61188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
61288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
61388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
61488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)   // %2
61588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kShuffleMaskARGBToRAW)  // %3
61688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
61788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
61888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6"
61988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
62088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
62188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
62288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
62388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToRGB565Row_SSE2(const uint8* src, uint8* dst, int pix) {
62488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
62588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm3,%%xmm3                   \n"
62688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x1b,%%xmm3                    \n"
62788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
62888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x1a,%%xmm4                    \n"
62988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x5,%%xmm4                     \n"
63088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
63188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0xb,%%xmm5                     \n"
63288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
63388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
63488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
63588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
63688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                   \n"
63788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x8,%%xmm0                     \n"
63888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x3,%%xmm1                     \n"
63988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x5,%%xmm2                     \n"
64088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrad     $0x10,%%xmm0                    \n"
64188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm3,%%xmm1                   \n"
64288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm4,%%xmm2                   \n"
64388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
64488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm2,%%xmm1                   \n"
64588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm1,%%xmm0                   \n"
64688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm0,%%xmm0                   \n"
64788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
64888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
64988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
65088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%2                         \n"
65188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
65288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
65388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
65488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)   // %2
65588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
65688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
65788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
65888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
65988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
66088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
66188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
66288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
66388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToARGB1555Row_SSE2(const uint8* src, uint8* dst, int pix) {
66488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
66588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
66688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x1b,%%xmm4                    \n"
66788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4,%%xmm5                   \n"
66888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x5,%%xmm5                     \n"
66988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4,%%xmm6                   \n"
67088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0xa,%%xmm6                     \n"
67188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm7,%%xmm7                   \n"
67288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0xf,%%xmm7                     \n"
67388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
67488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
67588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
67688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
67788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                   \n"
67888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm3                   \n"
67988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrad     $0x10,%%xmm0                    \n"
68088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x3,%%xmm1                     \n"
68188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x6,%%xmm2                     \n"
68288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x9,%%xmm3                     \n"
68388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm7,%%xmm0                   \n"
68488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm4,%%xmm1                   \n"
68588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm2                   \n"
68688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm3                   \n"
68788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm1,%%xmm0                   \n"
68888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm3,%%xmm2                   \n"
68988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm2,%%xmm0                   \n"
69088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm0,%%xmm0                   \n"
69188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
69288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
69388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMACCESS2(0x8,1) ",%1        \n"
69488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%2                         \n"
69588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
69688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
69788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
69888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)   // %2
69988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
70088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
70188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
70288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
70388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
70488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
70588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
70688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
70788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToARGB4444Row_SSE2(const uint8* src, uint8* dst, int pix) {
70888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
70988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
71088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0xc,%%xmm4                     \n"
71188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4,%%xmm3                   \n"
71288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm3                     \n"
71388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
71488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
71588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
71688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
71788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm3,%%xmm0                   \n"
71888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm4,%%xmm1                   \n"
71988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlq     $0x4,%%xmm0                     \n"
72088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlq     $0x8,%%xmm1                     \n"
72188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm1,%%xmm0                   \n"
72288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
72388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
72488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
72588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
72688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%2                         \n"
72788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
72888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
72988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
73088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)   // %2
73188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
73288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
73388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
73488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4"
73588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
73688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
73788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
73888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_RGB24TOARGBROW_SSSE3
73988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
74088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBTOYROW_SSSE3
74188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToYRow_SSSE3(const uint8* src_argb, uint8* dst_y, int pix) {
74288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
74388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
74488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
74588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
74688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
74788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
74888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
74988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
75088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
75188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
75288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
75388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
75488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
75588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
75688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
75788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
75888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
75988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
76088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
76188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
76288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
76388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
76488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
76588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
76688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
76788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
76888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
76988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToY),   // %3
77088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddY16)     // %4
77188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
77288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
77388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
77488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
77588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
77688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
77788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
77888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToYRow_Unaligned_SSSE3(const uint8* src_argb, uint8* dst_y, int pix) {
77988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
78088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
78188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
78288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
78388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
78488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
78588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
78688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
78788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
78888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
78988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
79088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
79188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
79288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
79388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
79488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
79588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
79688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
79788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
79888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
79988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
80088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
80188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
80288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
80388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
80488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
80588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
80688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToY),   // %3
80788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddY16)     // %4
80888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
80988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
81088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
81188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
81288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
81388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
81488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBTOYROW_SSSE3
81588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
81688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBTOYJROW_SSSE3
81788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToYJRow_SSSE3(const uint8* src_argb, uint8* dst_y, int pix) {
81888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
81988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
82088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
82188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
82288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
82388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
82488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
82588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
82688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
82788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
82888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
82988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
83088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
83188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
83288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
83388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
83488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm0                   \n"
83588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm2                   \n"
83688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
83788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
83888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
83988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
84088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
84188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
84288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
84388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
84488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
84588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
84688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToYJ),  // %3
84788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddYJ64)    // %4
84888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
84988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
85088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
85188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
85288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
85388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
85488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
85588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToYJRow_Unaligned_SSSE3(const uint8* src_argb, uint8* dst_y, int pix) {
85688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
85788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
85888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
85988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
86088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
86188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
86288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
86388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
86488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
86588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
86688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
86788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
86888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
86988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
87088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
87188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
87288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm0                   \n"
87388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm2                   \n"
87488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
87588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
87688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
87788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
87888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
87988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
88088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
88188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
88288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
88388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
88488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToYJ),  // %3
88588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddYJ64)    // %4
88688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
88788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
88888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
88988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
89088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
89188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
89288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBTOYJROW_SSSE3
89388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
89488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBTOUVROW_SSSE3
89588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// TODO(fbarchard): pass xmm constants to single block of assembly.
89688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// fpic on GCC 4.2 for OSX runs out of GPR registers. "m" effectively takes
89788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// 3 registers - ebx, ebp and eax. "m" can be passed with 3 normal registers,
89888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// or 4 if stack frame is disabled. Doing 2 assembly blocks is a work around
89988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// and considered unsafe.
90088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToUVRow_SSSE3(const uint8* src_argb0, int src_stride_argb,
90188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                       uint8* dst_u, uint8* dst_v, int width) {
90288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
90388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
90488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
90588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
90688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
90788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToU),  // %0
90888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToV),  // %1
90988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)  // %2
91088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
91188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
91288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
91388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
91488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
91588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
91688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
91788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
91888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
91988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
92088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x00,0,4,1,xmm0)            //  pavgb   (%0,%4,1),%%xmm0
92188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x10,0,4,1,xmm1)            //  pavgb   0x10(%0,%4,1),%%xmm1
92288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x20,0,4,1,xmm2)            //  pavgb   0x20(%0,%4,1),%%xmm2
92388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x30,0,4,1,xmm6)            //  pavgb   0x30(%0,%4,1),%%xmm6
92488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
92588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
92688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
92788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
92888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
92988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
93088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
93188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
93288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
93388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
93488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
93588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
93688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
93788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
93888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
93988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
94088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
94188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
94288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
94388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
94488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
94588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
94688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
94788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
94888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps    %%xmm0,(%1,%2,1)
94988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
95088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
95188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),       // %0
95288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
95388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
95488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
95588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_argb)) // %4
95688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
95788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
95888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
95988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
96088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
96188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
96288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
96388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
96488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
96588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
96688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// TODO(fbarchard): Share code with ARGBToUVRow_SSSE3.
96788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToUVJRow_SSSE3(const uint8* src_argb0, int src_stride_argb,
96888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        uint8* dst_u, uint8* dst_v, int width) {
96988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
97088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
97188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
97288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
97388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
97488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToUJ),  // %0
97588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToVJ),  // %1
97688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUVJ128)  // %2
97788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
97888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
97988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
98088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
98188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
98288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
98388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
98488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
98588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
98688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
98788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x00,0,4,1,xmm0)            //  pavgb   (%0,%4,1),%%xmm0
98888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x10,0,4,1,xmm1)            //  pavgb   0x10(%0,%4,1),%%xmm1
98988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x20,0,4,1,xmm2)            //  pavgb   0x20(%0,%4,1),%%xmm2
99088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x30,0,4,1,xmm6)            //  pavgb   0x30(%0,%4,1),%%xmm6
99188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
99288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
99388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
99488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
99588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
99688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
99788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
99888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
99988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
100088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
100188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
100288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
100388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
100488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
100588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
100688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
100788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
100888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm0                   \n"
100988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm1                   \n"
101088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
101188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
101288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
101388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
101488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
101588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
101688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
101788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
101888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
101988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),       // %0
102088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
102188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
102288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
102388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_argb)) // %4
102488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
102588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
102688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
102788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
102888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
102988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
103088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
103188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
103288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
103388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
103488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToUVRow_Unaligned_SSSE3(const uint8* src_argb0, int src_stride_argb,
103588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 uint8* dst_u, uint8* dst_v, int width) {
103688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
103788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
103888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
103988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
104088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
104188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToU),         // %0
104288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToV),         // %1
104388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)         // %2
104488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
104588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
104688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
104788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
104888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
104988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
105088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
105188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
105288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
105388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
105488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,4,1,xmm7)           //  movdqu  (%0,%4,1),%%xmm7
105588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
105688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x10,0,4,1,xmm7)           //  movdqu  0x10(%0,%4,1),%%xmm7
105788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm1                   \n"
105888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x20,0,4,1,xmm7)           //  movdqu  0x20(%0,%4,1),%%xmm7
105988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
106088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x30,0,4,1,xmm7)           //  movdqu  0x30(%0,%4,1),%%xmm7
106188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm6                   \n"
106288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
106388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
106488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
106588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
106688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
106788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
106888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
106988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
107088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
107188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
107288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
107388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
107488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
107588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
107688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
107788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
107888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
107988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
108088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
108188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
108288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
108388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
108488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
108588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
108688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
108788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
108888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
108988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),       // %0
109088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
109188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
109288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
109388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_argb)) // %4
109488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
109588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
109688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
109788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
109888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
109988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
110088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
110188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
110288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
110388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
110488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToUVJRow_Unaligned_SSSE3(const uint8* src_argb0, int src_stride_argb,
110588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                  uint8* dst_u, uint8* dst_v, int width) {
110688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
110788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
110888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
110988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
111088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
111188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToUJ),         // %0
111288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToVJ),         // %1
111388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUVJ128)         // %2
111488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
111588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
111688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
111788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
111888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
111988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
112088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
112188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
112288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
112388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
112488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,4,1,xmm7)           //  movdqu  (%0,%4,1),%%xmm7
112588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
112688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x10,0,4,1,xmm7)           //  movdqu  0x10(%0,%4,1),%%xmm7
112788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm1                   \n"
112888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x20,0,4,1,xmm7)           //  movdqu  0x20(%0,%4,1),%%xmm7
112988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
113088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x30,0,4,1,xmm7)           //  movdqu  0x30(%0,%4,1),%%xmm7
113188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm6                   \n"
113288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
113388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
113488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
113588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
113688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
113788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
113888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
113988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
114088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
114188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
114288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
114388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
114488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
114588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
114688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
114788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
114888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
114988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm0                   \n"
115088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm1                   \n"
115188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
115288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
115388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
115488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
115588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
115688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
115788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
115888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
115988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
116088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),       // %0
116188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
116288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
116388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
116488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_argb))
116588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
116688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
116788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
116888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
116988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
117088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
117188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
117288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
117388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
117488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
117588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToUV444Row_SSSE3(const uint8* src_argb, uint8* dst_u, uint8* dst_v,
117688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          int width) {
117788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
117888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
117988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
118088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
118188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
118288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToU),  // %0
118388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToV),  // %1
118488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)  // %2
118588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
118688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
118788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
118888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
118988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
119088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
119188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
119288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
119388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
119488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
119588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
119688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
119788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm6                   \n"
119888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
119988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm2                   \n"
120088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
120188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm2                     \n"
120288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm2,%%xmm0                   \n"
120388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
120488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
120588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
120688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
120788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
120888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
120988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
121088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm0                   \n"
121188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
121288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm2                   \n"
121388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
121488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
121588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm2                   \n"
121688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
121788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm2                     \n"
121888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm2,%%xmm0                   \n"
121988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
122088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
122188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
122288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,2,1)           //  movdqa  %%xmm0,(%1,%2,1)
122388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
122488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
122588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),        // %0
122688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
122788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
122888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
122988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
123088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
123188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
123288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
123388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
123488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
123588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6"
123688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
123788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
123888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
123988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
124088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToUV444Row_Unaligned_SSSE3(const uint8* src_argb, uint8* dst_u,
124188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                    uint8* dst_v, int width) {
124288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
124388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
124488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
124588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
124688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
124788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToU),  // %0
124888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToV),  // %1
124988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)  // %2
125088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
125188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
125288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
125388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
125488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
125588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
125688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
125788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
125888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
125988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
126088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
126188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
126288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm6                   \n"
126388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
126488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm2                   \n"
126588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
126688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm2                     \n"
126788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm2,%%xmm0                   \n"
126888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
126988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
127088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
127188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
127288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
127388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
127488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
127588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm0                   \n"
127688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
127788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm2                   \n"
127888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
127988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
128088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm2                   \n"
128188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
128288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm2                     \n"
128388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm2,%%xmm0                   \n"
128488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
128588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
128688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
128788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,2,1)           //  movdqu  %%xmm0,(%1,%2,1)
128888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
128988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
129088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),        // %0
129188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
129288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
129388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
129488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
129588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
129688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
129788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
129888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
129988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
130088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6"
130188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
130288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
130388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
130488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
130588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToUV422Row_SSSE3(const uint8* src_argb0,
130688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          uint8* dst_u, uint8* dst_v, int width) {
130788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
130888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
130988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
131088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
131188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
131288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToU),  // %0
131388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToV),  // %1
131488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)  // %2
131588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
131688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
131788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
131888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
131988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
132088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
132188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
132288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
132388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
132488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
132588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
132688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
132788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
132888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
132988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
133088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
133188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
133288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
133388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
133488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
133588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
133688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
133788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
133888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
133988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
134088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
134188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
134288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
134388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
134488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
134588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
134688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
134788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
134888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
134988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
135088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
135188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),       // %0
135288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
135388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
135488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
135588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
135688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
135788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
135888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
135988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
136088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
136188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
136288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
136388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
136488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
136588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
136688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToUV422Row_Unaligned_SSSE3(const uint8* src_argb0,
136788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                    uint8* dst_u, uint8* dst_v, int width) {
136888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
136988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
137088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
137188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
137288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
137388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToU),  // %0
137488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToV),  // %1
137588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)  // %2
137688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
137788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
137888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
137988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
138088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
138188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
138288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
138388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
138488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
138588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
138688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
138788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
138888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
138988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
139088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
139188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
139288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
139388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
139488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
139588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
139688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
139788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
139888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
139988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
140088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
140188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
140288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
140388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
140488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
140588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
140688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
140788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
140888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
140988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
141088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
141188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
141288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),       // %0
141388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
141488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
141588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
141688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
141788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
141888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
141988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
142088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
142188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
142288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
142388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
142488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
142588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
142688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
142788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid BGRAToYRow_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix) {
142888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
142988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
143088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
143188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
143288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
143388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
143488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
143588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
143688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
143788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
143888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
143988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
144088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
144188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
144288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
144388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
144488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
144588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
144688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
144788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
144888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
144988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
145088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
145188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
145288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_bgra),  // %0
145388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
145488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
145588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kBGRAToY),   // %3
145688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddY16)     // %4
145788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
145888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
145988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
146088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
146188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
146288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
146388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
146488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid BGRAToYRow_Unaligned_SSSE3(const uint8* src_bgra, uint8* dst_y, int pix) {
146588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
146688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
146788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
146888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
146988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
147088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
147188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
147288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
147388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
147488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
147588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
147688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
147788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
147888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
147988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
148088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
148188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
148288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
148388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
148488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
148588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
148688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
148788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
148888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
148988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_bgra),  // %0
149088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
149188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
149288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kBGRAToY),   // %3
149388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddY16)     // %4
149488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
149588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
149688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
149788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
149888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
149988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
150088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
150188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid BGRAToUVRow_SSSE3(const uint8* src_bgra0, int src_stride_bgra,
150288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                       uint8* dst_u, uint8* dst_v, int width) {
150388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
150488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
150588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
150688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
150788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
150888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kBGRAToU),         // %0
150988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kBGRAToV),         // %1
151088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)         // %2
151188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
151288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
151388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
151488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
151588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
151688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
151788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
151888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
151988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
152088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
152188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x00,0,4,1,xmm0)            //  pavgb   (%0,%4,1),%%xmm0
152288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x10,0,4,1,xmm1)            //  pavgb   0x10(%0,%4,1),%%xmm1
152388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x20,0,4,1,xmm2)            //  pavgb   0x20(%0,%4,1),%%xmm2
152488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x30,0,4,1,xmm6)            //  pavgb   0x30(%0,%4,1),%%xmm6
152588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
152688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
152788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
152888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
152988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
153088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
153188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
153288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
153388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
153488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
153588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
153688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
153788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
153888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
153988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
154088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
154188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
154288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
154388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
154488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
154588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
154688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
154788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
154888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
154988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
155088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
155188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
155288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_bgra0),       // %0
155388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
155488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
155588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
155688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_bgra)) // %4
155788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
155888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
155988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
156088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
156188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
156288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
156388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
156488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
156588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
156688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
156788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid BGRAToUVRow_Unaligned_SSSE3(const uint8* src_bgra0, int src_stride_bgra,
156888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 uint8* dst_u, uint8* dst_v, int width) {
156988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
157088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
157188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
157288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
157388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
157488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kBGRAToU),         // %0
157588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kBGRAToV),         // %1
157688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)         // %2
157788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
157888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
157988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
158088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
158188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
158288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
158388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
158488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
158588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
158688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
158788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,4,1,xmm7)           //  movdqu  (%0,%4,1),%%xmm7
158888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
158988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x10,0,4,1,xmm7)           //  movdqu  0x10(%0,%4,1),%%xmm7
159088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm1                   \n"
159188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x20,0,4,1,xmm7)           //  movdqu  0x20(%0,%4,1),%%xmm7
159288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
159388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x30,0,4,1,xmm7)           //  movdqu  0x30(%0,%4,1),%%xmm7
159488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm6                   \n"
159588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
159688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
159788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
159888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
159988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
160088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
160188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
160288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
160388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
160488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
160588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
160688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
160788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
160888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
160988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
161088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
161188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
161288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
161388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
161488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
161588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
161688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
161788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
161888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
161988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
162088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
162188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
162288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_bgra0),       // %0
162388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
162488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
162588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
162688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_bgra)) // %4
162788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
162888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
162988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
163088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
163188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
163288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
163388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
163488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
163588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
163688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
163788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ABGRToYRow_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix) {
163888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
163988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
164088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
164188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
164288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
164388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
164488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
164588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
164688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
164788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
164888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
164988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
165088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
165188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
165288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
165388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
165488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
165588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
165688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
165788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
165888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
165988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
166088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
166188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
166288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_abgr),  // %0
166388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
166488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
166588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kABGRToY),   // %3
166688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddY16)     // %4
166788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
166888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
166988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
167088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
167188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
167288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
167388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
167488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ABGRToYRow_Unaligned_SSSE3(const uint8* src_abgr, uint8* dst_y, int pix) {
167588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
167688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
167788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
167888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
167988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
168088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
168188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
168288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
168388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
168488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
168588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
168688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
168788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
168888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
168988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
169088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
169188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
169288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
169388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
169488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
169588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
169688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
169788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
169888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
169988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_abgr),  // %0
170088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
170188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
170288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kABGRToY),   // %3
170388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddY16)     // %4
170488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
170588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
170688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
170788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
170888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
170988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
171088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
171188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid RGBAToYRow_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix) {
171288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
171388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
171488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
171588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
171688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
171788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
171888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
171988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
172088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
172188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
172288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
172388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
172488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
172588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
172688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
172788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
172888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
172988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
173088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
173188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
173288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
173388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
173488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
173588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
173688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_rgba),  // %0
173788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
173888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
173988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kRGBAToY),   // %3
174088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddY16)     // %4
174188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
174288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
174388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
174488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
174588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
174688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
174788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
174888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid RGBAToYRow_Unaligned_SSSE3(const uint8* src_rgba, uint8* dst_y, int pix) {
174988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
175088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
175188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
175288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
175388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
175488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
175588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
175688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
175788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
175888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
175988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
176088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
176188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm3                   \n"
176288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
176388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
176488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm3,%%xmm2                   \n"
176588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
176688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm2                     \n"
176788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
176888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
176988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
177088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
177188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
177288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
177388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_rgba),  // %0
177488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
177588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
177688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kRGBAToY),   // %3
177788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddY16)     // %4
177888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
177988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
178088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
178188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
178288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
178388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
178488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
178588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ABGRToUVRow_SSSE3(const uint8* src_abgr0, int src_stride_abgr,
178688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                       uint8* dst_u, uint8* dst_v, int width) {
178788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
178888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
178988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
179088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
179188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
179288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kABGRToU),         // %0
179388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kABGRToV),         // %1
179488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)         // %2
179588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
179688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
179788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
179888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
179988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
180088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
180188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
180288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
180388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
180488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
180588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x00,0,4,1,xmm0)            //  pavgb   (%0,%4,1),%%xmm0
180688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x10,0,4,1,xmm1)            //  pavgb   0x10(%0,%4,1),%%xmm1
180788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x20,0,4,1,xmm2)            //  pavgb   0x20(%0,%4,1),%%xmm2
180888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x30,0,4,1,xmm6)            //  pavgb   0x30(%0,%4,1),%%xmm6
180988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
181088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
181188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
181288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
181388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
181488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
181588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
181688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
181788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
181888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
181988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
182088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
182188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
182288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
182388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
182488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
182588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
182688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
182788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
182888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
182988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
183088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
183188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
183288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
183388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
183488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
183588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
183688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_abgr0),       // %0
183788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
183888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
183988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
184088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_abgr)) // %4
184188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
184288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
184388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
184488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
184588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
184688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
184788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
184888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
184988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
185088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
185188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ABGRToUVRow_Unaligned_SSSE3(const uint8* src_abgr0, int src_stride_abgr,
185288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 uint8* dst_u, uint8* dst_v, int width) {
185388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
185488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
185588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
185688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
185788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
185888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kABGRToU),         // %0
185988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kABGRToV),         // %1
186088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)         // %2
186188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
186288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
186388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
186488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
186588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
186688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
186788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
186888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
186988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
187088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
187188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,4,1,xmm7)           //  movdqu  (%0,%4,1),%%xmm7
187288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
187388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x10,0,4,1,xmm7)           //  movdqu  0x10(%0,%4,1),%%xmm7
187488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm1                   \n"
187588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x20,0,4,1,xmm7)           //  movdqu  0x20(%0,%4,1),%%xmm7
187688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
187788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x30,0,4,1,xmm7)           //  movdqu  0x30(%0,%4,1),%%xmm7
187888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm6                   \n"
187988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
188088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
188188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
188288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
188388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
188488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
188588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
188688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
188788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
188888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
188988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
189088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
189188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
189288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
189388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
189488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
189588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
189688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
189788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
189888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
189988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
190088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
190188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
190288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
190388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
190488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
190588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
190688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_abgr0),       // %0
190788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
190888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
190988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
191088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_abgr)) // %4
191188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
191288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
191388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
191488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
191588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
191688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
191788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
191888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
191988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
192088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
192188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid RGBAToUVRow_SSSE3(const uint8* src_rgba0, int src_stride_rgba,
192288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                       uint8* dst_u, uint8* dst_v, int width) {
192388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
192488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
192588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
192688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
192788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
192888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kRGBAToU),         // %0
192988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kRGBAToV),         // %1
193088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)         // %2
193188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
193288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
193388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
193488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
193588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
193688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
193788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
193888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
193988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
194088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
194188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x00,0,4,1,xmm0)            //  pavgb   (%0,%4,1),%%xmm0
194288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x10,0,4,1,xmm1)            //  pavgb   0x10(%0,%4,1),%%xmm1
194388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x20,0,4,1,xmm2)            //  pavgb   0x20(%0,%4,1),%%xmm2
194488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x30,0,4,1,xmm6)            //  pavgb   0x30(%0,%4,1),%%xmm6
194588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
194688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
194788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
194888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
194988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
195088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
195188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
195288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
195388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
195488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
195588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
195688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
195788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
195888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
195988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
196088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
196188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
196288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
196388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
196488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
196588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
196688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
196788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
196888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
196988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
197088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
197188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
197288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_rgba0),       // %0
197388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
197488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
197588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
197688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_rgba))
197788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
197888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
197988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
198088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
198188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
198288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
198388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
198488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
198588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
198688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
198788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid RGBAToUVRow_Unaligned_SSSE3(const uint8* src_rgba0, int src_stride_rgba,
198888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 uint8* dst_u, uint8* dst_v, int width) {
198988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
199088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %0,%%xmm4                       \n"
199188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %1,%%xmm3                       \n"
199288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm5                       \n"
199388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
199488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kRGBAToU),         // %0
199588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kRGBAToV),         // %1
199688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddUV128)         // %2
199788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
199888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
199988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
200088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
200188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
200288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
200388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
200488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
200588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x30,0) ",%%xmm6   \n"
200688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
200788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,4,1,xmm7)           //  movdqu  (%0,%4,1),%%xmm7
200888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
200988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x10,0,4,1,xmm7)           //  movdqu  0x10(%0,%4,1),%%xmm7
201088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm1                   \n"
201188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x20,0,4,1,xmm7)           //  movdqu  0x20(%0,%4,1),%%xmm7
201288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
201388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x30,0,4,1,xmm7)           //  movdqu  0x30(%0,%4,1),%%xmm7
201488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm6                   \n"
201588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
201688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm7                   \n"
201788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm1,%%xmm0             \n"
201888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm1,%%xmm7             \n"
201988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm0                   \n"
202088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm7                   \n"
202188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0x88,%%xmm6,%%xmm2             \n"
202288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shufps    $0xdd,%%xmm6,%%xmm7             \n"
202388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm7,%%xmm2                   \n"
202488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
202588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm6                   \n"
202688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
202788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm2                   \n"
202888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
202988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
203088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm2,%%xmm0                   \n"
203188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm1                   \n"
203288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm0                     \n"
203388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x8,%%xmm1                     \n"
203488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packsswb  %%xmm1,%%xmm0                   \n"
203588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddb     %%xmm5,%%xmm0                   \n"
203688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
203788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlps    %%xmm0," MEMACCESS(1) "         \n"
203888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
203988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhps,xmm0,0x00,1,2,1)           //  movhps  %%xmm0,(%1,%2,1)
204088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
204188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
204288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_rgba0),       // %0
204388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),           // %1
204488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),           // %2
204588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)           // %3
204688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride_rgba)) // %4
204788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
204888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
204988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
205088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
205188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
205288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm6", "xmm7"
205388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
205488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
205588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
205688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBTOUVROW_SSSE3
205788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
205888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_I422TOARGBROW_SSSE3
205988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define UB 127 /* min(63,(int8)(2.018 * 64)) */
206088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define UG -25 /* (int8)(-0.391 * 64 - 0.5) */
206188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define UR 0
206288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
206388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define VB 0
206488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define VG -52 /* (int8)(-0.813 * 64 - 0.5) */
206588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define VR 102 /* (int8)(1.596 * 64 + 0.5) */
206688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
206788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Bias
206888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define BB UB * 128 + VB * 128
206988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define BG UG * 128 + VG * 128
207088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define BR UR * 128 + VR * 128
207188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
207288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define YG 74 /* (int8)(1.164 * 64 + 0.5) */
207388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
207488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstruct {
207588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec8 kUVToB;  // 0
207688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec8 kUVToG;  // 16
207788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec8 kUVToR;  // 32
207888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec16 kUVBiasB;  // 48
207988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec16 kUVBiasG;  // 64
208088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec16 kUVBiasR;  // 80
208188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec16 kYSub16;  // 96
208288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec16 kYToRgb;  // 112
208388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec8 kVUToB;  // 128
208488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec8 kVUToG;  // 144
208588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  vec8 kVUToR;  // 160
208688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org} static SIMD_ALIGNED(kYuvConstants) = {
208788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB },
208888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG },
208988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR },
209088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { BB, BB, BB, BB, BB, BB, BB, BB },
209188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { BG, BG, BG, BG, BG, BG, BG, BG },
209288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { BR, BR, BR, BR, BR, BR, BR, BR },
209388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { 16, 16, 16, 16, 16, 16, 16, 16 },
209488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { YG, YG, YG, YG, YG, YG, YG, YG },
209588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB, VB, UB },
209688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG, VG, UG },
209788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  { VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR, VR, UR }
209888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
209988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
210088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
210188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Read 8 UV from 411
210288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define READYUV444                                                             \
210388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq       " MEMACCESS([u_buf]) ",%%xmm0                   \n"            \
210488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN                                                                \
210588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq, 0x00, [u_buf], [v_buf], 1, xmm1)                            \
210688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x8, [u_buf]) ",%[u_buf]               \n"            \
210788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw  %%xmm1,%%xmm0                                   \n"
210888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
210988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Read 4 UV from 422, upsample to 8 UV
211088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define READYUV422                                                             \
211188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd       " MEMACCESS([u_buf]) ",%%xmm0                   \n"            \
211288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN                                                                \
211388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd, 0x00, [u_buf], [v_buf], 1, xmm1)                            \
211488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x4, [u_buf]) ",%[u_buf]               \n"            \
211588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw  %%xmm1,%%xmm0                                   \n"            \
211688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd  %%xmm0,%%xmm0                                   \n"
211788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
211888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Read 2 UV from 411, upsample to 8 UV
211988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define READYUV411                                                             \
212088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd       " MEMACCESS([u_buf]) ",%%xmm0                   \n"            \
212188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN                                                                \
212288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd, 0x00, [u_buf], [v_buf], 1, xmm1)                            \
212388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x2, [u_buf]) ",%[u_buf]               \n"            \
212488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw  %%xmm1,%%xmm0                                   \n"            \
212588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd  %%xmm0,%%xmm0                                   \n"            \
212688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckldq  %%xmm0,%%xmm0                                   \n"
212788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
212888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Read 4 UV from NV12, upsample to 8 UV
212988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define READNV12                                                               \
213088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq       " MEMACCESS([uv_buf]) ",%%xmm0                  \n"            \
213188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x8, [uv_buf]) ",%[uv_buf]             \n"            \
213288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd  %%xmm0,%%xmm0                                   \n"
213388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
213488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Convert 8 pixels: 8 UV and 8 Y
213588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define YUVTORGB                                                               \
213688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm0,%%xmm1                                   \n"            \
213788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm0,%%xmm2                                   \n"            \
213888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw  " MEMACCESS([kYuvConstants]) ",%%xmm0           \n"            \
213988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw  " MEMACCESS2(16, [kYuvConstants]) ",%%xmm1      \n"            \
214088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw  " MEMACCESS2(32, [kYuvConstants]) ",%%xmm2      \n"            \
214188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw      " MEMACCESS2(48, [kYuvConstants]) ",%%xmm0      \n"            \
214288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw      " MEMACCESS2(64, [kYuvConstants]) ",%%xmm1      \n"            \
214388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw      " MEMACCESS2(80, [kYuvConstants]) ",%%xmm2      \n"            \
214488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq       " MEMACCESS([y_buf]) ",%%xmm3                   \n"            \
214588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x8, [y_buf]) ",%[y_buf]               \n"            \
214688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw  %%xmm4,%%xmm3                                   \n"            \
214788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubsw     " MEMACCESS2(96, [kYuvConstants]) ",%%xmm3      \n"            \
214888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw     " MEMACCESS2(112, [kYuvConstants]) ",%%xmm3     \n"            \
214988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddsw     %%xmm3,%%xmm0                                   \n"            \
215088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddsw     %%xmm3,%%xmm1                                   \n"            \
215188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddsw     %%xmm3,%%xmm2                                   \n"            \
215288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw      $0x6,%%xmm0                                     \n"            \
215388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw      $0x6,%%xmm1                                     \n"            \
215488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw      $0x6,%%xmm2                                     \n"            \
215588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm0,%%xmm0                                   \n"            \
215688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm1,%%xmm1                                   \n"            \
215788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm2,%%xmm2                                   \n"
215888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
215988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Convert 8 pixels: 8 VU and 8 Y
216088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#define YVUTORGB                                                               \
216188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm0,%%xmm1                                   \n"            \
216288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm0,%%xmm2                                   \n"            \
216388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw  " MEMACCESS2(128, [kYuvConstants]) ",%%xmm0     \n"            \
216488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw  " MEMACCESS2(144, [kYuvConstants]) ",%%xmm1     \n"            \
216588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw  " MEMACCESS2(160, [kYuvConstants]) ",%%xmm2     \n"            \
216688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw      " MEMACCESS2(48, [kYuvConstants]) ",%%xmm0      \n"            \
216788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw      " MEMACCESS2(64, [kYuvConstants]) ",%%xmm1      \n"            \
216888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw      " MEMACCESS2(80, [kYuvConstants]) ",%%xmm2      \n"            \
216988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq       " MEMACCESS([y_buf]) ",%%xmm3                   \n"            \
217088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x8, [y_buf]) ",%[y_buf]               \n"            \
217188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw  %%xmm4,%%xmm3                                   \n"            \
217288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubsw     " MEMACCESS2(96, [kYuvConstants]) ",%%xmm3      \n"            \
217388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw     " MEMACCESS2(112, [kYuvConstants]) ",%%xmm3     \n"            \
217488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddsw     %%xmm3,%%xmm0                                   \n"            \
217588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddsw     %%xmm3,%%xmm1                                   \n"            \
217688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddsw     %%xmm3,%%xmm2                                   \n"            \
217788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw      $0x6,%%xmm0                                     \n"            \
217888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw      $0x6,%%xmm1                                     \n"            \
217988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw      $0x6,%%xmm2                                     \n"            \
218088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm0,%%xmm0                                   \n"            \
218188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm1,%%xmm1                                   \n"            \
218288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm2,%%xmm2                                   \n"
218388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
218488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I444ToARGBRow_SSSE3(const uint8* y_buf,
218588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* u_buf,
218688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* v_buf,
218788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_argb,
218888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int width) {
218988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
219088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
219188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
219288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
219388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
219488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
219588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV444
219688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
219788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
219888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
219988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
220088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
220188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
220288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS([dst_argb]) "         \n"
220388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "   \n"
220488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb]  \n"
220588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
220688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
220788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
220888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
220988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
221088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
221188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
221288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
221388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
221488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
221588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
221688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
221788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
221888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
221988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
222088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
222188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
222288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
222388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToRGB24Row_SSSE3(const uint8* y_buf,
222488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 const uint8* u_buf,
222588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 const uint8* v_buf,
222688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 uint8* dst_rgb24,
222788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 int width) {
222888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// fpic 32 bit gcc 4.2 on OSX runs out of GPR regs.
222988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__i386__)
223088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
223188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %[kShuffleMaskARGBToRGB24_0],%%xmm5 \n"
223288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %[kShuffleMaskARGBToRGB24],%%xmm6   \n"
223388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :: [kShuffleMaskARGBToRGB24_0]"m"(kShuffleMaskARGBToRGB24_0),
223488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [kShuffleMaskARGBToRGB24]"m"(kShuffleMaskARGBToRGB24));
223588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
223688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
223788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
223888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if !defined(__i386__)
223988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %[kShuffleMaskARGBToRGB24_0],%%xmm5 \n"
224088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %[kShuffleMaskARGBToRGB24],%%xmm6   \n"
224188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
224288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
224388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
224488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
224588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
224688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
224788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
224888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
224988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm2                   \n"
225088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
225188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
225288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
225388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm0                   \n"
225488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm1                   \n"
225588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "palignr   $0xc,%%xmm0,%%xmm1              \n"
225688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS([dst_rgb24]) "\n"
225788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x8,[dst_rgb24]) "\n"
225888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x18,[dst_rgb24]) ",%[dst_rgb24] \n"
225988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
226088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
226188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
226288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
226388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
226488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_rgb24]"+r"(dst_rgb24),  // %[dst_rgb24]
226588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
226688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB)
226788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if !defined(__i386__)
226888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , [kShuffleMaskARGBToRGB24_0]"m"(kShuffleMaskARGBToRGB24_0),
226988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [kShuffleMaskARGBToRGB24]"m"(kShuffleMaskARGBToRGB24)
227088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
227188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
227288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
227388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
227488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
227588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
227688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6"
227788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
227888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
227988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
228088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
228188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToRAWRow_SSSE3(const uint8* y_buf,
228288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                               const uint8* u_buf,
228388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                               const uint8* v_buf,
228488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                               uint8* dst_raw,
228588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                               int width) {
228688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// fpic 32 bit gcc 4.2 on OSX runs out of GPR regs.
228788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__i386__)
228888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
228988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %[kShuffleMaskARGBToRAW_0],%%xmm5 \n"
229088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %[kShuffleMaskARGBToRAW],%%xmm6   \n"
229188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :: [kShuffleMaskARGBToRAW_0]"m"(kShuffleMaskARGBToRAW_0),
229288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [kShuffleMaskARGBToRAW]"m"(kShuffleMaskARGBToRAW));
229388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
229488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
229588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
229688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if !defined(__i386__)
229788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %[kShuffleMaskARGBToRAW_0],%%xmm5 \n"
229888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %[kShuffleMaskARGBToRAW],%%xmm6   \n"
229988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
230088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
230188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
230288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
230388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
230488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
230588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
230688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
230788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm2                   \n"
230888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
230988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
231088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
231188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm0                   \n"
231288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm6,%%xmm1                   \n"
231388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "palignr   $0xc,%%xmm0,%%xmm1              \n"
231488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS([dst_raw]) " \n"
231588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x8,[dst_raw]) "\n"
231688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x18,[dst_raw]) ",%[dst_raw] \n"
231788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
231888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
231988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
232088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
232188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
232288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_raw]"+r"(dst_raw),  // %[dst_raw]
232388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
232488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB)
232588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if !defined(__i386__)
232688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , [kShuffleMaskARGBToRAW_0]"m"(kShuffleMaskARGBToRAW_0),
232788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [kShuffleMaskARGBToRAW]"m"(kShuffleMaskARGBToRAW)
232888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
232988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
233088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
233188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
233288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
233388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
233488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6"
233588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
233688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
233788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
233888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
233988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToARGBRow_SSSE3(const uint8* y_buf,
234088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* u_buf,
234188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* v_buf,
234288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_argb,
234388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int width) {
234488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
234588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
234688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
234788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
234888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
234988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
235088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
235188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
235288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
235388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
235488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
235588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
235688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
235788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS([dst_argb]) "\n"
235888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
235988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
236088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
236188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
236288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
236388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
236488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
236588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
236688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
236788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
236888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
236988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
237088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
237188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
237288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
237388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
237488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
237588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
237688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
237788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
237888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I411ToARGBRow_SSSE3(const uint8* y_buf,
237988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* u_buf,
238088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* v_buf,
238188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_argb,
238288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int width) {
238388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
238488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
238588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
238688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
238788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
238888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
238988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV411
239088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
239188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
239288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
239388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
239488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
239588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
239688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS([dst_argb]) "\n"
239788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
239888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
239988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
240088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
240188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
240288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
240388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
240488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
240588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
240688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
240788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
240888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
240988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
241088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
241188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
241288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
241388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
241488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
241588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
241688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
241788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP NV12ToARGBRow_SSSE3(const uint8* y_buf,
241888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* uv_buf,
241988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_argb,
242088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int width) {
242188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
242288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
242388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
242488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
242588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
242688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READNV12
242788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
242888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
242988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
243088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
243188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
243288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
243388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS([dst_argb]) "\n"
243488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
243588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
243688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
243788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
243888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
243988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [uv_buf]"+r"(uv_buf),    // %[uv_buf]
244088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
244188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
244288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
244388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
244488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // Does not use r14.
244588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
244688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
244788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
244888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
244988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
245088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
245188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP NV21ToARGBRow_SSSE3(const uint8* y_buf,
245288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* uv_buf,
245388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_argb,
245488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int width) {
245588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
245688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
245788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
245888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
245988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
246088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READNV12
246188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YVUTORGB
246288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
246388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
246488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
246588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
246688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
246788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS([dst_argb]) "\n"
246888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
246988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
247088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
247188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
247288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
247388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [uv_buf]"+r"(uv_buf),    // %[uv_buf]
247488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
247588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
247688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
247788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
247888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // Does not use r14.
247988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
248088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
248188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
248288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
248388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
248488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
248588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I444ToARGBRow_Unaligned_SSSE3(const uint8* y_buf,
248688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* u_buf,
248788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* v_buf,
248888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          uint8* dst_argb,
248988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          int width) {
249088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
249188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
249288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
249388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
249488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
249588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
249688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV444
249788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
249888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
249988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
250088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
250188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
250288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
250388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS([dst_argb]) "\n"
250488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
250588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
250688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
250788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
250888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
250988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
251088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
251188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
251288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
251388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
251488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
251588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
251688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
251788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
251888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
251988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
252088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
252188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
252288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
252388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
252488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToARGBRow_Unaligned_SSSE3(const uint8* y_buf,
252588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* u_buf,
252688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* v_buf,
252788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          uint8* dst_argb,
252888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          int width) {
252988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
253088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
253188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
253288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
253388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
253488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
253588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
253688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
253788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
253888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
253988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
254088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
254188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
254288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS([dst_argb]) "\n"
254388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
254488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
254588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
254688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
254788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
254888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
254988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
255088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
255188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
255288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
255388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
255488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
255588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
255688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
255788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
255888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
255988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
256088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
256188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
256288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
256388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I411ToARGBRow_Unaligned_SSSE3(const uint8* y_buf,
256488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* u_buf,
256588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* v_buf,
256688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          uint8* dst_argb,
256788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          int width) {
256888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
256988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
257088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
257188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
257288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
257388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
257488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV411
257588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
257688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
257788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
257888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
257988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
258088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
258188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS([dst_argb]) "\n"
258288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
258388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
258488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
258588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
258688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
258788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
258888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
258988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
259088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
259188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
259288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
259388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
259488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
259588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
259688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
259788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
259888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
259988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
260088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
260188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
260288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP NV12ToARGBRow_Unaligned_SSSE3(const uint8* y_buf,
260388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* uv_buf,
260488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          uint8* dst_argb,
260588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          int width) {
260688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
260788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
260888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
260988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
261088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
261188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READNV12
261288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
261388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
261488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
261588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
261688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
261788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
261888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS([dst_argb]) "\n"
261988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
262088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
262188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
262288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
262388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
262488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [uv_buf]"+r"(uv_buf),    // %[uv_buf]
262588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
262688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
262788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
262888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
262988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // Does not use r14.
263088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
263188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
263288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
263388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
263488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
263588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
263688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP NV21ToARGBRow_Unaligned_SSSE3(const uint8* y_buf,
263788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* uv_buf,
263888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          uint8* dst_argb,
263988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          int width) {
264088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
264188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
264288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
264388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
264488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
264588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READNV12
264688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YVUTORGB
264788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                   \n"
264888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
264988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
265088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm0                   \n"
265188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm1                   \n"
265288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS([dst_argb]) "\n"
265388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,[dst_argb]) "\n"
265488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_argb]) ",%[dst_argb] \n"
265588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
265688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
265788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
265888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [uv_buf]"+r"(uv_buf),    // %[uv_buf]
265988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_argb]"+r"(dst_argb),  // %[dst_argb]
266088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
266188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
266288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
266388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // Does not use r14.
266488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
266588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
266688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
266788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
266888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
266988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
267088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToBGRARow_SSSE3(const uint8* y_buf,
267188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* u_buf,
267288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* v_buf,
267388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_bgra,
267488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int width) {
267588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
267688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
267788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
267888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
267988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
268088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
268188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
268288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
268388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
268488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm1                   \n"
268588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm5                   \n"
268688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm5,%%xmm0                   \n"
268788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm1,%%xmm5                   \n"
268888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm0                   \n"
268988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm5," MEMACCESS([dst_bgra]) "\n"
269088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS2(0x10,[dst_bgra]) "\n"
269188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_bgra]) ",%[dst_bgra] \n"
269288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
269388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
269488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
269588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
269688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
269788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_bgra]"+r"(dst_bgra),  // %[dst_bgra]
269888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
269988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
270088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
270188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
270288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
270388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
270488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
270588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
270688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
270788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
270888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
270988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
271088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToABGRRow_SSSE3(const uint8* y_buf,
271188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* u_buf,
271288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* v_buf,
271388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_abgr,
271488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int width) {
271588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
271688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
271788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
271888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
271988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
272088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
272188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
272288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
272388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm2                   \n"
272488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
272588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm1                   \n"
272688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm0,%%xmm2                   \n"
272788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm0,%%xmm1                   \n"
272888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2," MEMACCESS([dst_abgr]) "\n"
272988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,[dst_abgr]) "\n"
273088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_abgr]) ",%[dst_abgr] \n"
273188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
273288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
273388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
273488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
273588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
273688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_abgr]"+r"(dst_abgr),  // %[dst_abgr]
273788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
273888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
273988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
274088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
274188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
274288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
274388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
274488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
274588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
274688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
274788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
274888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
274988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToRGBARow_SSSE3(const uint8* y_buf,
275088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* u_buf,
275188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                const uint8* v_buf,
275288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_rgba,
275388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int width) {
275488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
275588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
275688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
275788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
275888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
275988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
276088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
276188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
276288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
276388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm1                   \n"
276488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm5                   \n"
276588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm5,%%xmm0                   \n"
276688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm1,%%xmm5                   \n"
276788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm0                   \n"
276888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm5," MEMACCESS([dst_rgba]) "\n"
276988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS2(0x10,[dst_rgba]) "\n"
277088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_rgba]) ",%[dst_rgba] \n"
277188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
277288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
277388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
277488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
277588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
277688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_rgba]"+r"(dst_rgba),  // %[dst_rgba]
277788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
277888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
277988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
278088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
278188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
278288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
278388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
278488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
278588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
278688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
278788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
278888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
278988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToBGRARow_Unaligned_SSSE3(const uint8* y_buf,
279088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* u_buf,
279188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* v_buf,
279288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          uint8* dst_bgra,
279388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          int width) {
279488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
279588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
279688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
279788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
279888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
279988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
280088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
280188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
280288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
280388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm1                   \n"
280488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm5                   \n"
280588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm5,%%xmm0                   \n"
280688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm1,%%xmm5                   \n"
280788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm0                   \n"
280888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm5," MEMACCESS([dst_bgra]) "\n"
280988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS2(0x10,[dst_bgra]) "\n"
281088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_bgra]) ",%[dst_bgra] \n"
281188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
281288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
281388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
281488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
281588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
281688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_bgra]"+r"(dst_bgra),  // %[dst_bgra]
281788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
281888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
281988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
282088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
282188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
282288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
282388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
282488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
282588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
282688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
282788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
282888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
282988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToABGRRow_Unaligned_SSSE3(const uint8* y_buf,
283088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* u_buf,
283188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* v_buf,
283288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          uint8* dst_abgr,
283388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          int width) {
283488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
283588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
283688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
283788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
283888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
283988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
284088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
284188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
284288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm2                   \n"
284388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
284488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm1                   \n"
284588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm0,%%xmm2                   \n"
284688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm0,%%xmm1                   \n"
284788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm2," MEMACCESS([dst_abgr]) "\n"
284888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,[dst_abgr]) "\n"
284988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_abgr]) ",%[dst_abgr] \n"
285088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
285188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
285288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
285388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
285488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
285588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_abgr]"+r"(dst_abgr),  // %[dst_abgr]
285688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
285788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
285888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
285988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
286088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
286188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
286288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
286388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
286488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
286588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
286688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
286788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
286888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid OMITFP I422ToRGBARow_Unaligned_SSSE3(const uint8* y_buf,
286988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* u_buf,
287088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          const uint8* v_buf,
287188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          uint8* dst_rgba,
287288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                          int width) {
287388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
287488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %[u_buf],%[v_buf]               \n"
287588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
287688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
287788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
287888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
287988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    READYUV422
288088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    YUVTORGB
288188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
288288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm1                   \n"
288388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm5                   \n"
288488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm5,%%xmm0                   \n"
288588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm1,%%xmm5                   \n"
288688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm0                   \n"
288788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm5," MEMACCESS([dst_rgba]) "\n"
288888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS2(0x10,[dst_rgba]) "\n"
288988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,[dst_rgba]) ",%[dst_rgba] \n"
289088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%[width]                   \n"
289188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
289288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [y_buf]"+r"(y_buf),    // %[y_buf]
289388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [u_buf]"+r"(u_buf),    // %[u_buf]
289488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [v_buf]"+r"(v_buf),    // %[v_buf]
289588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [dst_rgba]"+r"(dst_rgba),  // %[dst_rgba]
289688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    [width]"+rm"(width)    // %[width]
289788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : [kYuvConstants]"r"(&kYuvConstants.kUVToB) // %[kYuvConstants]
289888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
289988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
290088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
290188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
290288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
290388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
290488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
290588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
290688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
290788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
290888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_I422TOARGBROW_SSSE3
290988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
291088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_YTOARGBROW_SSE2
291188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid YToARGBRow_SSE2(const uint8* y_buf,
291288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                     uint8* dst_argb,
291388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                     int width) {
291488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
291588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm5,%%xmm5                   \n"
291688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
291788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm4                    \n"
291888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       $0x00100010,%%eax               \n"
291988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%eax,%%xmm3                    \n"
292088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm3,%%xmm3              \n"
292188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       $0x004a004a,%%eax               \n"
292288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%eax,%%xmm2                    \n"
292388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm2,%%xmm2              \n"
292488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
292588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
292688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Step 1: Scale Y contribution to 8 G values. G = (y - 16) * 1.164
292788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(0) ",%%xmm0         \n"
292888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,0) ",%0            \n"
292988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
293088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubusw   %%xmm3,%%xmm0                   \n"
293188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm2,%%xmm0                   \n"
293288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $6, %%xmm0                      \n"
293388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
293488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
293588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Step 2: Weave into ARGB
293688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm0                   \n"
293788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
293888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm0,%%xmm0                   \n"
293988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm1                   \n"
294088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
294188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm1                   \n"
294288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
294388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,1) "   \n"
294488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
294588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
294688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
294788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
294888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(y_buf),     // %0
294988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
295088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)     // %2
295188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
295288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc", "eax"
295388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
295488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4"
295588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
295688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
295788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
295888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_YTOARGBROW_SSE2
295988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
296088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_MIRRORROW_SSSE3
296188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for reversing the bytes.
296288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleMirror = {
296388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  15u, 14u, 13u, 12u, 11u, 10u, 9u, 8u, 7u, 6u, 5u, 4u, 3u, 2u, 1u, 0u
296488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
296588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
296688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid MirrorRow_SSSE3(const uint8* src, uint8* dst, int width) {
296788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  intptr_t temp_width = (intptr_t)(width);
296888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
296988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm5                       \n"
297088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(-0x10,0) ",%0          \n"
297188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
297288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
297388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,0,2,1,xmm0)           //  movdqa  (%0,%2),%%xmm0
297488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm0                   \n"
297588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
297688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
297788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
297888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
297988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
298088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
298188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(temp_width)  // %2
298288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kShuffleMirror) // %3
298388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
298488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
298588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
298688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
298788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
298888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm5"
298988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
299088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
299188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
299288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_MIRRORROW_SSSE3
299388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
299488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_MIRRORROW_SSE2
299588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid MirrorRow_SSE2(const uint8* src, uint8* dst, int width) {
299688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  intptr_t temp_width = (intptr_t)(width);
299788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
299888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(-0x10,0) ",%0          \n"
299988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
300088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
300188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,2,1,xmm0)           //  movdqu  (%0,%2),%%xmm0
300288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
300388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x8,%%xmm0                     \n"
300488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
300588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm1,%%xmm0                   \n"
300688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x1b,%%xmm0,%%xmm0             \n"
300788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0x1b,%%xmm0,%%xmm0             \n"
300888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x4e,%%xmm0,%%xmm0             \n"
300988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
301088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
301188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1)",%1            \n"
301288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
301388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
301488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
301588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(temp_width)  // %2
301688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
301788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
301888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
301988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
302088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
302188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
302288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1"
302388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
302488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
302588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
302688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_MIRRORROW_SSE2
302788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
302888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_MIRRORROW_UV_SSSE3
302988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for reversing the bytes of UV channels.
303088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleMirrorUV = {
303188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  14u, 12u, 10u, 8u, 6u, 4u, 2u, 0u, 15u, 13u, 11u, 9u, 7u, 5u, 3u, 1u
303288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
303388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid MirrorUVRow_SSSE3(const uint8* src, uint8* dst_u, uint8* dst_v,
303488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                       int width) {
303588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  intptr_t temp_width = (intptr_t)(width);
303688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
303788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm1                       \n"
303888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA4(-0x10,0,3,2) ",%0       \n"
303988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
304088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
304188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
304288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
304388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(-0x10,0) ",%0            \n"
304488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm1,%%xmm0                   \n"
304588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $8,%3                           \n"
304688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlpd    %%xmm0," MEMACCESS(1) "         \n"
304788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
304888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movhpd,xmm0,0x00,1,2,1)           //  movhpd    %%xmm0,(%1,%2)
304988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
305088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
305188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),      // %0
305288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),    // %1
305388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),    // %2
305488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(temp_width)  // %3
305588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kShuffleMirrorUV)  // %4
305688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
305788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
305888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
305988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
306088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
306188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1"
306288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
306388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
306488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
306588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_MIRRORROW_UV_SSSE3
306688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
306788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBMIRRORROW_SSSE3
306888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for reversing the bytes.
306988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kARGBShuffleMirror = {
307088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  12u, 13u, 14u, 15u, 8u, 9u, 10u, 11u, 4u, 5u, 6u, 7u, 0u, 1u, 2u, 3u
307188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
307288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
307388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBMirrorRow_SSSE3(const uint8* src, uint8* dst, int width) {
307488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  intptr_t temp_width = (intptr_t)(width);
307588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
307688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA4(-0x10,0,2,4) ",%0     \n"
307788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm5                       \n"
307888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
307988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
308088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
308188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm0                   \n"
308288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(-0x10,0) ",%0          \n"
308388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%2                         \n"
308488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
308588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
308688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
308788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),  // %0
308888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),  // %1
308988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(temp_width)  // %2
309088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBShuffleMirror)  // %3
309188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
309288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
309388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm5"
309488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
309588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
309688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
309788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBMIRRORROW_SSSE3
309888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
309988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_SPLITUVROW_SSE2
310088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid SplitUVRow_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v, int pix) {
310188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
310288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb    %%xmm5,%%xmm5                    \n"
310388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw      $0x8,%%xmm5                      \n"
310488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub        %1,%2                            \n"
310588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
310688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                            \n"
310788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     " MEMACCESS(0) ",%%xmm0          \n"
310888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     " MEMACCESS2(0x10,0) ",%%xmm1    \n"
310988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x20,0) ",%0            \n"
311088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm0,%%xmm2                    \n"
311188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm1,%%xmm3                    \n"
311288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand       %%xmm5,%%xmm0                    \n"
311388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand       %%xmm5,%%xmm1                    \n"
311488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm1,%%xmm0                    \n"
311588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw      $0x8,%%xmm2                      \n"
311688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw      $0x8,%%xmm3                      \n"
311788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm3,%%xmm2                    \n"
311888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm0," MEMACCESS(1) "          \n"
311988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm2,0x00,1,2,1)             // movdqa     %%xmm2,(%1,%2)
312088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x10,1) ",%1            \n"
312188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub        $0x10,%3                         \n"
312288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg         1b                               \n"
312388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uv),     // %0
312488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),      // %1
312588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),      // %2
312688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)         // %3
312788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
312888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
312988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
313088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
313188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
313288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
313388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
313488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
313588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
313688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
313788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
313888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid SplitUVRow_Unaligned_SSE2(const uint8* src_uv, uint8* dst_u, uint8* dst_v,
313988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                               int pix) {
314088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
314188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb    %%xmm5,%%xmm5                    \n"
314288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw      $0x8,%%xmm5                      \n"
314388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub        %1,%2                            \n"
314488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
314588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                            \n"
314688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu     " MEMACCESS(0) ",%%xmm0          \n"
314788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu     " MEMACCESS2(0x10,0) ",%%xmm1    \n"
314888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x20,0) ",%0            \n"
314988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm0,%%xmm2                    \n"
315088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa     %%xmm1,%%xmm3                    \n"
315188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand       %%xmm5,%%xmm0                    \n"
315288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand       %%xmm5,%%xmm1                    \n"
315388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm1,%%xmm0                    \n"
315488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw      $0x8,%%xmm2                      \n"
315588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw      $0x8,%%xmm3                      \n"
315688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb   %%xmm3,%%xmm2                    \n"
315788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu     %%xmm0," MEMACCESS(1) "          \n"
315888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm2,0x00,1,2,1)             //  movdqu     %%xmm2,(%1,%2)
315988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea        " MEMLEA(0x10,1) ",%1            \n"
316088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub        $0x10,%3                         \n"
316188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg         1b                               \n"
316288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uv),     // %0
316388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),      // %1
316488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),      // %2
316588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)         // %3
316688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
316788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
316888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
316988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
317088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
317188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
317288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
317388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
317488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
317588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
317688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_SPLITUVROW_SSE2
317788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
317888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_MERGEUVROW_SSE2
317988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid MergeUVRow_SSE2(const uint8* src_u, const uint8* src_v, uint8* dst_uv,
318088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                     int width) {
318188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
318288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                             \n"
318388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
318488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                            \n"
318588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0           \n"
318688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,0,1,1,xmm1)             //  movdqa    (%0,%1,1),%%xmm1
318788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0             \n"
318888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                     \n"
318988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                     \n"
319088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm1,%%xmm2                     \n"
319188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(2) "           \n"
319288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2," MEMACCESS2(0x10,2) "     \n"
319388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,2) ",%2             \n"
319488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                          \n"
319588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                                \n"
319688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_u),     // %0
319788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_v),     // %1
319888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_uv),    // %2
319988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)      // %3
320088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
320188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
320288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
320388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
320488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
320588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
320688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2"
320788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
320888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
320988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
321088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
321188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid MergeUVRow_Unaligned_SSE2(const uint8* src_u, const uint8* src_v,
321288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                               uint8* dst_uv, int width) {
321388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
321488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                             \n"
321588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
321688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                            \n"
321788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0           \n"
321888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,1,1,xmm1)             //  movdqu    (%0,%1,1),%%xmm1
321988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0             \n"
322088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                     \n"
322188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm0                     \n"
322288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm1,%%xmm2                     \n"
322388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(2) "           \n"
322488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm2," MEMACCESS2(0x10,2) "     \n"
322588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,2) ",%2             \n"
322688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                          \n"
322788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                                \n"
322888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_u),     // %0
322988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_v),     // %1
323088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_uv),    // %2
323188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)      // %3
323288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
323388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
323488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
323588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
323688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
323788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
323888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2"
323988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
324088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
324188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
324288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_MERGEUVROW_SSE2
324388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
324488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_COPYROW_SSE2
324588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid CopyRow_SSE2(const uint8* src, uint8* dst, int count) {
324688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
324788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
324888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
324988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
325088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
325188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
325288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
325388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,1) "   \n"
325488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
325588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x20,%2                        \n"
325688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
325788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),   // %0
325888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),   // %1
325988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(count)  // %2
326088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
326188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
326288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
326388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1"
326488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
326588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
326688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
326788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_COPYROW_SSE2
326888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
326988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_COPYROW_X86
327088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid CopyRow_X86(const uint8* src, uint8* dst, int width) {
327188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  size_t width_tmp = (size_t)(width);
327288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
327388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shr       $0x2,%2                         \n"
327488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "rep movsl " MEMMOVESTRING(0,1) "          \n"
327588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+S"(src),  // %0
327688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+D"(dst),  // %1
327788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+c"(width_tmp) // %2
327888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
327988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
328088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
328188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
328288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_COPYROW_X86
328388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
328488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_COPYROW_ERMS
328588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Unaligned Multiple of 1.
328688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid CopyRow_ERMS(const uint8* src, uint8* dst, int width) {
328788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  size_t width_tmp = (size_t)(width);
328888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
328988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "rep movsb " MEMMOVESTRING(0,1) "          \n"
329088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+S"(src),  // %0
329188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+D"(dst),  // %1
329288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+c"(width_tmp) // %2
329388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
329488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
329588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
329688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
329788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_COPYROW_ERMS
329888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
329988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBCOPYALPHAROW_SSE2
330088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// width in pixels
330188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBCopyAlphaRow_SSE2(const uint8* src, uint8* dst, int width) {
330288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
330388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm0,%%xmm0                   \n"
330488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm0                    \n"
330588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm1,%%xmm1                   \n"
330688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x8,%%xmm1                     \n"
330788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
330888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
330988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm2         \n"
331088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm3   \n"
331188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
331288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm4         \n"
331388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,1) ",%%xmm5   \n"
331488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm0,%%xmm2                   \n"
331588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm0,%%xmm3                   \n"
331688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm1,%%xmm4                   \n"
331788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm1,%%xmm5                   \n"
331888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm2                   \n"
331988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm3                   \n"
332088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2," MEMACCESS(1) "         \n"
332188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3," MEMACCESS2(0x10,1) "   \n"
332288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
332388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
332488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
332588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),   // %0
332688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),   // %1
332788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)  // %2
332888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
332988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
333088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
333188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
333288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
333388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
333488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
333588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBCOPYALPHAROW_SSE2
333688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
333788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBCOPYALPHAROW_AVX2
333888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// width in pixels
333988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBCopyAlphaRow_AVX2(const uint8* src, uint8* dst, int width) {
334088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
334188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpcmpeqb  %%ymm0,%%ymm0,%%ymm0            \n"
334288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpsrld    $0x8,%%ymm0,%%ymm0              \n"
334388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
334488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
334588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   " MEMACCESS(0) ",%%ymm1         \n"
334688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   " MEMACCESS2(0x20,0) ",%%ymm2   \n"
334788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
334888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpblendvb %%ymm0," MEMACCESS(1) ",%%ymm1,%%ymm1        \n"
334988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpblendvb %%ymm0," MEMACCESS2(0x20,1) ",%%ymm2,%%ymm2  \n"
335088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   %%ymm1," MEMACCESS(1) "         \n"
335188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   %%ymm2," MEMACCESS2(0x20,1) "   \n"
335288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,1) ",%1           \n"
335388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
335488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
335588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vzeroupper                                \n"
335688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),   // %0
335788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),   // %1
335888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)  // %2
335988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
336088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
336188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
336288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2"
336388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
336488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
336588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
336688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBCOPYALPHAROW_AVX2
336788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
336888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBCOPYYTOALPHAROW_SSE2
336988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// width in pixels
337088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBCopyYToAlphaRow_SSE2(const uint8* src, uint8* dst, int width) {
337188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
337288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm0,%%xmm0                   \n"
337388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm0                    \n"
337488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm1,%%xmm1                   \n"
337588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x8,%%xmm1                     \n"
337688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
337788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
337888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(0) ",%%xmm2         \n"
337988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,0) ",%0            \n"
338088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm2                   \n"
338188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm3                   \n"
338288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm2                   \n"
338388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm4         \n"
338488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,1) ",%%xmm5   \n"
338588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm0,%%xmm2                   \n"
338688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm0,%%xmm3                   \n"
338788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm1,%%xmm4                   \n"
338888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm1,%%xmm5                   \n"
338988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm2                   \n"
339088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm3                   \n"
339188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2," MEMACCESS(1) "         \n"
339288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3," MEMACCESS2(0x10,1) "   \n"
339388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
339488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
339588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
339688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),   // %0
339788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),   // %1
339888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)  // %2
339988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
340088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
340188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
340288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
340388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
340488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
340588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
340688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBCOPYYTOALPHAROW_SSE2
340788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
340888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBCOPYYTOALPHAROW_AVX2
340988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// width in pixels
341088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBCopyYToAlphaRow_AVX2(const uint8* src, uint8* dst, int width) {
341188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
341288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpcmpeqb  %%ymm0,%%ymm0,%%ymm0            \n"
341388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpsrld    $0x8,%%ymm0,%%ymm0              \n"
341488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
341588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
341688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpmovzxbd " MEMACCESS(0) ",%%ymm1         \n"
341788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpmovzxbd " MEMACCESS2(0x8,0) ",%%ymm2    \n"
341888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
341988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpslld    $0x18,%%ymm1,%%ymm1             \n"
342088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpslld    $0x18,%%ymm2,%%ymm2             \n"
342188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpblendvb %%ymm0," MEMACCESS(1) ",%%ymm1,%%ymm1        \n"
342288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpblendvb %%ymm0," MEMACCESS2(0x20,1) ",%%ymm2,%%ymm2  \n"
342388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   %%ymm1," MEMACCESS(1) "         \n"
342488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   %%ymm2," MEMACCESS2(0x20,1) "   \n"
342588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,1) ",%1           \n"
342688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
342788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
342888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vzeroupper                                \n"
342988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src),   // %0
343088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),   // %1
343188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)  // %2
343288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
343388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
343488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
343588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2"
343688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
343788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
343888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
343988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBCOPYYTOALPHAROW_AVX2
344088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
344188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_SETROW_X86
344288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid SetRow_X86(uint8* dst, uint32 v32, int width) {
344388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  size_t width_tmp = (size_t)(width);
344488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
344588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shr       $0x2,%1                         \n"
344688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "rep stosl " MEMSTORESTRING(eax,0) "       \n"
344788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    : "+D"(dst),       // %0
344888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+c"(width_tmp)  // %1
344988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    : "a"(v32)         // %2
345088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    : "memory", "cc");
345188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
345288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
345388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBSetRows_X86(uint8* dst, uint32 v32, int width,
345488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                   int dst_stride, int height) {
345588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  for (int y = 0; y < height; ++y) {
345688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    size_t width_tmp = (size_t)(width);
345788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    uint32* d = (uint32*)(dst);
345888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    asm volatile (
345988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "rep stosl " MEMSTORESTRING(eax,0) "     \n"
346088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      : "+D"(d),         // %0
346188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org        "+c"(width_tmp)  // %1
346288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      : "a"(v32)         // %2
346388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      : "memory", "cc");
346488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    dst += dst_stride;
346588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  }
346688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
346788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_SETROW_X86
346888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
346988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_YUY2TOYROW_SSE2
347088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid YUY2ToYRow_SSE2(const uint8* src_yuy2, uint8* dst_y, int pix) {
347188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
347288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
347388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
347488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
347588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
347688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
347788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
347888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
347988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
348088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
348188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
348288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
348388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
348488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
348588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
348688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_yuy2),  // %0
348788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
348888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
348988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
349088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
349188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
349288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
349388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
349488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
349588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
349688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
349788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid YUY2ToUVRow_SSE2(const uint8* src_yuy2, int stride_yuy2,
349888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                      uint8* dst_u, uint8* dst_v, int pix) {
349988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
350088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
350188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
350288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
350388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
350488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
350588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
350688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
350788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
350888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,0,4,1,xmm2)           //  movdqa  (%0,%4,1),%%xmm2
350988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x10,0,4,1,xmm3)           //  movdqa  0x10(%0,%4,1),%%xmm3
351088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
351188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm2,%%xmm0                   \n"
351288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm3,%%xmm1                   \n"
351388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
351488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
351588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
351688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
351788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
351888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
351988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
352088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
352188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
352288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
352388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm1,0x00,1,2,1)             //  movq    %%xmm1,(%1,%2)
352488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
352588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
352688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
352788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_yuy2),    // %0
352888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),       // %1
352988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),       // %2
353088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)          // %3
353188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(stride_yuy2))  // %4
353288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
353388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
353488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
353588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
353688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
353788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
353888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
353988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
354088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
354188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
354288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid YUY2ToUV422Row_SSE2(const uint8* src_yuy2,
354388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                         uint8* dst_u, uint8* dst_v, int pix) {
354488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
354588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
354688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
354788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
354888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
354988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
355088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
355188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
355288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
355388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
355488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
355588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
355688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
355788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
355888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
355988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
356088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
356188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
356288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
356388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm1,0x00,1,2,1)             //  movq    %%xmm1,(%1,%2)
356488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
356588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
356688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
356788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_yuy2),    // %0
356888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),       // %1
356988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),       // %2
357088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)          // %3
357188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
357288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
357388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
357488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
357588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
357688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
357788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
357888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
357988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
358088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
358188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
358288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid YUY2ToYRow_Unaligned_SSE2(const uint8* src_yuy2,
358388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                               uint8* dst_y, int pix) {
358488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
358588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
358688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
358788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
358888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
358988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
359088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
359188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
359288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
359388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
359488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
359588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
359688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
359788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
359888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
359988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_yuy2),  // %0
360088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
360188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
360288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
360388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
360488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
360588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
360688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
360788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
360888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
360988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
361088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid YUY2ToUVRow_Unaligned_SSE2(const uint8* src_yuy2,
361188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                int stride_yuy2,
361288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_u, uint8* dst_v, int pix) {
361388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
361488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
361588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
361688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
361788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
361888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
361988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
362088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
362188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
362288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,4,1,xmm2)           //  movdqu  (%0,%4,1),%%xmm2
362388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x10,0,4,1,xmm3)           //  movdqu  0x10(%0,%4,1),%%xmm3
362488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
362588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm2,%%xmm0                   \n"
362688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm3,%%xmm1                   \n"
362788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
362888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
362988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
363088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
363188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
363288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
363388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
363488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
363588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
363688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
363788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm1,0x00,1,2,1)             //  movq    %%xmm1,(%1,%2)
363888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
363988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
364088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
364188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_yuy2),    // %0
364288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),       // %1
364388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),       // %2
364488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)          // %3
364588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(stride_yuy2))  // %4
364688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
364788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
364888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
364988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
365088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
365188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
365288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
365388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
365488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
365588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
365688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid YUY2ToUV422Row_Unaligned_SSE2(const uint8* src_yuy2,
365788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                   uint8* dst_u, uint8* dst_v, int pix) {
365888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
365988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
366088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
366188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
366288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
366388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
366488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
366588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
366688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
366788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
366888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
366988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
367088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
367188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
367288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
367388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
367488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
367588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
367688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
367788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm1,0x00,1,2,1)             //  movq    %%xmm1,(%1,%2)
367888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
367988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
368088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
368188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_yuy2),    // %0
368288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),       // %1
368388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),       // %2
368488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)          // %3
368588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
368688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
368788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
368888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
368988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
369088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
369188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
369288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
369388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
369488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
369588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
369688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid UYVYToYRow_SSE2(const uint8* src_uyvy, uint8* dst_y, int pix) {
369788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
369888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
369988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
370088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
370188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
370288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
370388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
370488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
370588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
370688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
370788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
370888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
370988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
371088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uyvy),  // %0
371188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
371288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
371388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
371488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
371588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
371688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1"
371788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
371888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
371988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
372088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
372188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid UYVYToUVRow_SSE2(const uint8* src_uyvy, int stride_uyvy,
372288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                      uint8* dst_u, uint8* dst_v, int pix) {
372388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
372488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
372588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
372688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
372788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
372888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
372988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
373088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
373188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
373288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,0,4,1,xmm2)           //  movdqa  (%0,%4,1),%%xmm2
373388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x10,0,4,1,xmm3)           //  movdqa  0x10(%0,%4,1),%%xmm3
373488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
373588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm2,%%xmm0                   \n"
373688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm3,%%xmm1                   \n"
373788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
373888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
373988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
374088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
374188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
374288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
374388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
374488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
374588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
374688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
374788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm1,0x00,1,2,1)             //  movq    %%xmm1,(%1,%2)
374888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
374988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
375088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
375188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uyvy),    // %0
375288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),       // %1
375388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),       // %2
375488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)          // %3
375588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(stride_uyvy))  // %4
375688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
375788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
375888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
375988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
376088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
376188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
376288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
376388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
376488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
376588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
376688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid UYVYToUV422Row_SSE2(const uint8* src_uyvy,
376788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                         uint8* dst_u, uint8* dst_v, int pix) {
376888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
376988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
377088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
377188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
377288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
377388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
377488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
377588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
377688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
377788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
377888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
377988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
378088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
378188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
378288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
378388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
378488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
378588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
378688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
378788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm1,0x00,1,2,1)             //  movq    %%xmm1,(%1,%2)
378888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
378988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
379088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
379188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uyvy),    // %0
379288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),       // %1
379388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),       // %2
379488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)          // %3
379588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
379688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
379788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
379888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
379988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
380088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
380188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
380288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
380388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
380488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
380588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
380688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid UYVYToYRow_Unaligned_SSE2(const uint8* src_uyvy,
380788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                               uint8* dst_y, int pix) {
380888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
380988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
381088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
381188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
381288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
381388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
381488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
381588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
381688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
381788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
381888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
381988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
382088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
382188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uyvy),  // %0
382288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),     // %1
382388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
382488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
382588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
382688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
382788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1"
382888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
382988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
383088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
383188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
383288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid UYVYToUVRow_Unaligned_SSE2(const uint8* src_uyvy, int stride_uyvy,
383388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                uint8* dst_u, uint8* dst_v, int pix) {
383488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
383588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
383688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
383788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
383888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
383988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
384088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
384188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
384288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
384388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,0,4,1,xmm2)           //  movdqu  (%0,%4,1),%%xmm2
384488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x10,0,4,1,xmm3)           //  movdqu  0x10(%0,%4,1),%%xmm3
384588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
384688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm2,%%xmm0                   \n"
384788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm3,%%xmm1                   \n"
384888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
384988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
385088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
385188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
385288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
385388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
385488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
385588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
385688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
385788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
385888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm1,0x00,1,2,1)             //  movq    %%xmm1,(%1,%2)
385988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
386088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
386188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
386288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uyvy),    // %0
386388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),       // %1
386488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),       // %2
386588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)          // %3
386688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(stride_uyvy))  // %4
386788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
386888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
386988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
387088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
387188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
387288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
387388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
387488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
387588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
387688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
387788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid UYVYToUV422Row_Unaligned_SSE2(const uint8* src_uyvy,
387888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                   uint8* dst_u, uint8* dst_v, int pix) {
387988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
388088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
388188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm5                     \n"
388288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                           \n"
388388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
388488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
388588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
388688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
388788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
388888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
388988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
389088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
389188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
389288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
389388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
389488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
389588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
389688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
389788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
389888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm1,0x00,1,2,1)             //  movq    %%xmm1,(%1,%2)
389988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
390088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
390188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
390288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uyvy),    // %0
390388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_u),       // %1
390488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_v),       // %2
390588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)          // %3
390688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
390788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
390888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
390988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
391088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
391188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
391288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
391388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
391488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
391588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
391688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_YUY2TOYROW_SSE2
391788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
391888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBBLENDROW_SSE2
391988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Blend 8 pixels at a time.
392088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBBlendRow_SSE2(const uint8* src_argb0, const uint8* src_argb1,
392188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                       uint8* dst_argb, int width) {
392288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
392388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm7,%%xmm7                   \n"
392488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0xf,%%xmm7                     \n"
392588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm6,%%xmm6                   \n"
392688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm6                     \n"
392788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
392888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x8,%%xmm5                     \n"
392988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
393088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm4                    \n"
393188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
393288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        91f                             \n"
393388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        99f                             \n"
393488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
393588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 1 pixel loop until destination pointer is aligned.
393688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "10:                                         \n"
393788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "test      $0xf,%2                         \n"
393888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        19f                             \n"
393988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(0) ",%%xmm3         \n"
394088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,0) ",%0            \n"
394188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm0                   \n"
394288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm3                   \n"
394388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(1) ",%%xmm2         \n"
394488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm3                     \n"
394588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0xf5,%%xmm3,%%xmm3             \n"
394688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0xf5,%%xmm3,%%xmm3             \n"
394788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm2                   \n"
394888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm7,%%xmm3                   \n"
394988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm2                   \n"
395088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(1) ",%%xmm1         \n"
395188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,1) ",%1            \n"
395288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
395388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
395488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm1                   \n"
395588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm2                     \n"
395688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm2,%%xmm0                   \n"
395788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
395888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
395988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
396088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0," MEMACCESS(2) "         \n"
396188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,2) ",%2            \n"
396288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       10b                             \n"
396388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
396488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "19:                                         \n"
396588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $1-4,%3                         \n"
396688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        49f                             \n"
396788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
396888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
396988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
397088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "41:                                         \n"
397188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm3         \n"
397288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
397388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm0                   \n"
397488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm3                   \n"
397588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm2         \n"
397688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm3                     \n"
397788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0xf5,%%xmm3,%%xmm3             \n"
397888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0xf5,%%xmm3,%%xmm3             \n"
397988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm2                   \n"
398088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm7,%%xmm3                   \n"
398188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm2                   \n"
398288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm1         \n"
398388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
398488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
398588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
398688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm1                   \n"
398788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm2                     \n"
398888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm2,%%xmm0                   \n"
398988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
399088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
399188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
399288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(2) "         \n"
399388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
399488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       41b                             \n"
399588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
399688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "49:                                         \n"
399788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x3,%3                         \n"
399888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        99f                             \n"
399988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
400088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 1 pixel loop.
400188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "91:                                         \n"
400288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(0) ",%%xmm3         \n"
400388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,0) ",%0            \n"
400488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm0                   \n"
400588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm3                   \n"
400688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(1) ",%%xmm2         \n"
400788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm3                     \n"
400888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0xf5,%%xmm3,%%xmm3             \n"
400988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0xf5,%%xmm3,%%xmm3             \n"
401088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm2                   \n"
401188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm7,%%xmm3                   \n"
401288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm2                   \n"
401388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(1) ",%%xmm1         \n"
401488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,1) ",%1            \n"
401588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
401688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
401788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm1                   \n"
401888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm2                     \n"
401988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm2,%%xmm0                   \n"
402088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
402188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
402288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
402388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0," MEMACCESS(2) "         \n"
402488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,2) ",%2            \n"
402588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       91b                             \n"
402688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "99:                                         \n"
402788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),    // %0
402888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_argb1),    // %1
402988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),     // %2
403088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)         // %3
403188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
403288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
403388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
403488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
403588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
403688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
403788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
403888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBBLENDROW_SSE2
403988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
404088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBBLENDROW_SSSE3
404188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for isolating alpha.
404288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleAlpha = {
404388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  3u, 0x80, 3u, 0x80, 7u, 0x80, 7u, 0x80,
404488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  11u, 0x80, 11u, 0x80, 15u, 0x80, 15u, 0x80
404588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
404688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
404788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Blend 8 pixels at a time
404888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table for reversing the bytes.
404988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
405088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Same as SSE2, but replaces
405188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//    psrlw      xmm3, 8          // alpha
405288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//    pshufhw    xmm3, xmm3,0F5h  // 8 alpha words
405388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//    pshuflw    xmm3, xmm3,0F5h
405488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// with..
405588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//    pshufb     xmm3, kShuffleAlpha // alpha
405688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
405788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBBlendRow_SSSE3(const uint8* src_argb0, const uint8* src_argb1,
405888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        uint8* dst_argb, int width) {
405988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
406088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm7,%%xmm7                   \n"
406188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0xf,%%xmm7                     \n"
406288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm6,%%xmm6                   \n"
406388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm6                     \n"
406488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
406588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x8,%%xmm5                     \n"
406688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
406788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm4                    \n"
406888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
406988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        91f                             \n"
407088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        99f                             \n"
407188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
407288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 1 pixel loop until destination pointer is aligned.
407388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "10:                                         \n"
407488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "test      $0xf,%2                         \n"
407588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        19f                             \n"
407688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(0) ",%%xmm3         \n"
407788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,0) ",%0            \n"
407888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm0                   \n"
407988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm3                   \n"
408088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(1) ",%%xmm2         \n"
408188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %4,%%xmm3                       \n"
408288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm2                   \n"
408388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm7,%%xmm3                   \n"
408488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm2                   \n"
408588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(1) ",%%xmm1         \n"
408688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,1) ",%1            \n"
408788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
408888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
408988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm1                   \n"
409088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm2                     \n"
409188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm2,%%xmm0                   \n"
409288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
409388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
409488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
409588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0," MEMACCESS(2) "         \n"
409688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,2) ",%2            \n"
409788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       10b                             \n"
409888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
409988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "19:                                         \n"
410088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $1-4,%3                         \n"
410188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        49f                             \n"
410288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "test      $0xf,%0                         \n"
410388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jne       41f                             \n"
410488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "test      $0xf,%1                         \n"
410588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jne       41f                             \n"
410688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
410788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
410888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
410988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "40:                                         \n"
411088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm3         \n"
411188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
411288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm0                   \n"
411388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm3                   \n"
411488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm2         \n"
411588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %4,%%xmm3                       \n"
411688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm2                   \n"
411788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm7,%%xmm3                   \n"
411888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm2                   \n"
411988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm1         \n"
412088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
412188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
412288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
412388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm1                   \n"
412488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm2                     \n"
412588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm2,%%xmm0                   \n"
412688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
412788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
412888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
412988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(2) "         \n"
413088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
413188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       40b                             \n"
413288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       49f                             \n"
413388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
413488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel unaligned loop.
413588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
413688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "41:                                         \n"
413788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm3         \n"
413888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
413988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm0                   \n"
414088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm3                   \n"
414188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm2         \n"
414288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %4,%%xmm3                       \n"
414388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm2                   \n"
414488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm7,%%xmm3                   \n"
414588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm2                   \n"
414688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm1         \n"
414788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
414888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
414988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
415088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm1                   \n"
415188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm2                     \n"
415288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm2,%%xmm0                   \n"
415388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
415488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
415588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
415688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(2) "         \n"
415788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
415888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       41b                             \n"
415988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
416088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "49:                                         \n"
416188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x3,%3                         \n"
416288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        99f                             \n"
416388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
416488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 1 pixel loop.
416588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "91:                                         \n"
416688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(0) ",%%xmm3         \n"
416788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,0) ",%0            \n"
416888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3,%%xmm0                   \n"
416988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm3                   \n"
417088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(1) ",%%xmm2         \n"
417188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %4,%%xmm3                       \n"
417288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm2                   \n"
417388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm7,%%xmm3                   \n"
417488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm2                   \n"
417588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(1) ",%%xmm1         \n"
417688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,1) ",%1            \n"
417788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
417888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm4,%%xmm0                   \n"
417988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm1                   \n"
418088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm2                     \n"
418188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm2,%%xmm0                   \n"
418288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
418388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
418488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
418588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0," MEMACCESS(2) "         \n"
418688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,2) ",%2            \n"
418788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       91b                             \n"
418888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "99:                                         \n"
418988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),    // %0
419088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_argb1),    // %1
419188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),     // %2
419288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)         // %3
419388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kShuffleAlpha)  // %4
419488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
419588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
419688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
419788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
419888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
419988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
420088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBBLENDROW_SSSE3
420188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
420288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBATTENUATEROW_SSE2
420388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Attenuate 4 pixels at a time.
420488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// aligned to 16 bytes
420588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBAttenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width) {
420688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
420788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
420888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm4                    \n"
420988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
421088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x8,%%xmm5                     \n"
421188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
421288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
421388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
421488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
421588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
421688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm0                   \n"
421788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0xff,%%xmm0,%%xmm2             \n"
421888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0xff,%%xmm2,%%xmm2             \n"
421988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm0                   \n"
422088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm1         \n"
422188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm1,%%xmm1                   \n"
422288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0xff,%%xmm1,%%xmm2             \n"
422388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0xff,%%xmm2,%%xmm2             \n"
422488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm1                   \n"
422588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm2         \n"
422688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
422788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
422888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm4,%%xmm2                   \n"
422988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
423088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
423188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
423288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm2,%%xmm0                   \n"
423388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%2                         \n"
423488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
423588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
423688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
423788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),    // %0
423888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),    // %1
423988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)        // %2
424088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
424188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
424288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
424388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
424488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
424588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
424688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
424788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBATTENUATEROW_SSE2
424888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
424988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBATTENUATEROW_SSSE3
425088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shuffle table duplicating alpha
425188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleAlpha0 = {
425288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  3u, 3u, 3u, 3u, 3u, 3u, 128u, 128u, 7u, 7u, 7u, 7u, 7u, 7u, 128u, 128u,
425388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
425488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic uvec8 kShuffleAlpha1 = {
425588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  11u, 11u, 11u, 11u, 11u, 11u, 128u, 128u,
425688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  15u, 15u, 15u, 15u, 15u, 15u, 128u, 128u,
425788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
425888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Attenuate 4 pixels at a time.
425988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// aligned to 16 bytes
426088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBAttenuateRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width) {
426188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
426288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm3,%%xmm3                   \n"
426388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm3                    \n"
426488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
426588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
426688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
426788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
426888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
426988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
427088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
427188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm4,%%xmm0                   \n"
427288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm1         \n"
427388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm1                   \n"
427488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm1,%%xmm0                   \n"
427588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm1         \n"
427688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm1                   \n"
427788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm2         \n"
427888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm2,%%xmm2                   \n"
427988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm1                   \n"
428088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm2         \n"
428188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
428288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm3,%%xmm2                   \n"
428388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
428488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
428588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
428688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm2,%%xmm0                   \n"
428788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%2                         \n"
428888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
428988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
429088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
429188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),    // %0
429288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),    // %1
429388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)        // %2
429488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kShuffleAlpha0),  // %3
429588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kShuffleAlpha1)  // %4
429688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
429788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
429888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
429988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
430088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
430188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
430288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBATTENUATEROW_SSSE3
430388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
430488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBUNATTENUATEROW_SSE2
430588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Unattenuate 4 pixels at a time.
430688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// aligned to 16 bytes
430788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBUnattenuateRow_SSE2(const uint8* src_argb, uint8* dst_argb,
430888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                             int width) {
430988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  uintptr_t alpha = 0;
431088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
431188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
431288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
431388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
431488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
431588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x03,0) ",%3       \n"
431688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm0                   \n"
431788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,4,3,4,xmm2)             //  movd      0x0(%4,%3,4),%%xmm2
431888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x07,0) ",%3       \n"
431988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,4,3,4,xmm3)             //  movd      0x0(%4,%3,4),%%xmm3
432088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x40,%%xmm2,%%xmm2             \n"
432188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x40,%%xmm3,%%xmm3             \n"
432288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlhps   %%xmm3,%%xmm2                   \n"
432388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm0                   \n"
432488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm1         \n"
432588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x0b,0) ",%3       \n"
432688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm1,%%xmm1                   \n"
432788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
432888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,4,3,4,xmm2)             //  movd      0x0(%4,%3,4),%%xmm2
432988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x0f,0) ",%3       \n"
433088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,4,3,4,xmm3)             //  movd      0x0(%4,%3,4),%%xmm3
433188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x40,%%xmm2,%%xmm2             \n"
433288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x40,%%xmm3,%%xmm3             \n"
433388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlhps   %%xmm3,%%xmm2                   \n"
433488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm1                   \n"
433588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
433688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
433788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%2                         \n"
433888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
433988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
434088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
434188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),    // %0
434288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),    // %1
434388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width),       // %2
434488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(alpha)        // %3
434588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(fixed_invtbl8)  // %4
434688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
434788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
434888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
434988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
435088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
435188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
435288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
435388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
435488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
435588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBUNATTENUATEROW_SSE2
435688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
435788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBGRAYROW_SSSE3
435888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Convert 8 ARGB pixels (64 bytes) to 8 Gray ARGB pixels
435988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBGrayRow_SSSE3(const uint8* src_argb, uint8* dst_argb, int width) {
436088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
436188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm4                       \n"
436288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm5                       \n"
436388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
436488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 8 pixel loop.
436588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
436688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
436788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
436888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
436988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm0                   \n"
437088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
437188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm0                   \n"
437288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm5,%%xmm0                   \n"
437388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
437488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
437588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm2         \n"
437688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm3   \n"
437788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
437888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x18,%%xmm2                    \n"
437988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x18,%%xmm3                    \n"
438088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm3,%%xmm2                   \n"
438188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm2                   \n"
438288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm3                   \n"
438388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm0                   \n"
438488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm3                   \n"
438588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
438688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm3,%%xmm0                   \n"
438788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm3,%%xmm1                   \n"
438888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
438988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
439088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,1) "   \n"
439188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
439288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
439388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),   // %0
439488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),   // %1
439588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)       // %2
439688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToYJ),   // %3
439788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kAddYJ64)     // %4
439888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
439988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
440088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
440188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
440288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
440388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
440488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBGRAYROW_SSSE3
440588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
440688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBSEPIAROW_SSSE3
440788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//    b = (r * 35 + g * 68 + b * 17) >> 7
440888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//    g = (r * 45 + g * 88 + b * 22) >> 7
440988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//    r = (r * 50 + g * 98 + b * 24) >> 7
441088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Constant for ARGB color to sepia tone
441188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToSepiaB = {
441288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  17, 68, 35, 0, 17, 68, 35, 0, 17, 68, 35, 0, 17, 68, 35, 0
441388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
441488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
441588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToSepiaG = {
441688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  22, 88, 45, 0, 22, 88, 45, 0, 22, 88, 45, 0, 22, 88, 45, 0
441788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
441888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
441988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgstatic vec8 kARGBToSepiaR = {
442088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  24, 98, 50, 0, 24, 98, 50, 0, 24, 98, 50, 0, 24, 98, 50, 0
442188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org};
442288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
442388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Convert 8 ARGB pixels (32 bytes) to 8 Sepia ARGB pixels.
442488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBSepiaRow_SSSE3(uint8* dst_argb, int width) {
442588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
442688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %2,%%xmm2                       \n"
442788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %3,%%xmm3                       \n"
442888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %4,%%xmm4                       \n"
442988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
443088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 8 pixel loop.
443188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
443288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
443388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
443488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm6   \n"
443588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm2,%%xmm0                   \n"
443688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm2,%%xmm6                   \n"
443788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm6,%%xmm0                   \n"
443888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
443988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
444088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm5         \n"
444188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
444288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm5                   \n"
444388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
444488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm5                   \n"
444588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm5                     \n"
444688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm5,%%xmm5                   \n"
444788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
444888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm5         \n"
444988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
445088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm5                   \n"
445188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
445288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm1,%%xmm5                   \n"
445388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm5                     \n"
445488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm5,%%xmm5                   \n"
445588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm6         \n"
445688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
445788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x18,%%xmm6                    \n"
445888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x18,%%xmm1                    \n"
445988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm6                   \n"
446088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm6,%%xmm6                   \n"
446188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm6,%%xmm5                   \n"
446288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
446388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm5,%%xmm0                   \n"
446488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm5,%%xmm1                   \n"
446588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%1                         \n"
446688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(0) "         \n"
446788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,0) "   \n"
446888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
446988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
447088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(dst_argb),      // %0
447188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)          // %1
447288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "m"(kARGBToSepiaB),  // %2
447388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToSepiaG),  // %3
447488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "m"(kARGBToSepiaR)   // %4
447588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
447688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
447788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6"
447888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
447988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
448088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
448188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBSEPIAROW_SSSE3
448288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
448388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBCOLORMATRIXROW_SSSE3
448488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Tranform 8 ARGB pixels (32 bytes) with color matrix.
448588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Same as Sepia except matrix is provided.
448688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBColorMatrixRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
448788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                              const int8* matrix_argb, int width) {
448888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
448988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(3) ",%%xmm5         \n"
449088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x00,%%xmm5,%%xmm2             \n"
449188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x55,%%xmm5,%%xmm3             \n"
449288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0xaa,%%xmm5,%%xmm4             \n"
449388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0xff,%%xmm5,%%xmm5             \n"
449488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
449588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 8 pixel loop.
449688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
449788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
449888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
449988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm7   \n"
450088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm2,%%xmm0                   \n"
450188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm2,%%xmm7                   \n"
450288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm6         \n"
450388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
450488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm6                   \n"
450588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm1                   \n"
450688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddsw   %%xmm7,%%xmm0                   \n"
450788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddsw   %%xmm1,%%xmm6                   \n"
450888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x6,%%xmm0                     \n"
450988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x6,%%xmm6                     \n"
451088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
451188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm6,%%xmm6                   \n"
451288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm6,%%xmm0                   \n"
451388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm1         \n"
451488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm7   \n"
451588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm1                   \n"
451688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm4,%%xmm7                   \n"
451788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddsw   %%xmm7,%%xmm1                   \n"
451888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm6         \n"
451988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm7   \n"
452088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm5,%%xmm6                   \n"
452188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm5,%%xmm7                   \n"
452288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddsw   %%xmm7,%%xmm6                   \n"
452388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x6,%%xmm1                     \n"
452488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psraw     $0x6,%%xmm6                     \n"
452588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm1                   \n"
452688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm6,%%xmm6                   \n"
452788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm6,%%xmm1                   \n"
452888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm6                   \n"
452988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm1,%%xmm0                   \n"
453088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm6                   \n"
453188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
453288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
453388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm6," MEMACCESS2(0x10,1) "   \n"
453488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
453588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
453688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
453788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),      // %0
453888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),      // %1
453988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)          // %2
454088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(matrix_argb)     // %3
454188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
454288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
454388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
454488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
454588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
454688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
454788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBCOLORMATRIXROW_SSSE3
454888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
454988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBQUANTIZEROW_SSE2
455088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Quantize 4 ARGB pixels (16 bytes).
455188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// aligned to 16 bytes
455288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBQuantizeRow_SSE2(uint8* dst_argb, int scale, int interval_size,
455388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          int interval_offset, int width) {
455488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
455588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %2,%%xmm2                       \n"
455688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm3                       \n"
455788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %4,%%xmm4                       \n"
455888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x40,%%xmm2,%%xmm2             \n"
455988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x44,%%xmm2,%%xmm2             \n"
456088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x40,%%xmm3,%%xmm3             \n"
456188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x44,%%xmm3,%%xmm3             \n"
456288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x40,%%xmm4,%%xmm4             \n"
456388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x44,%%xmm4,%%xmm4             \n"
456488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm5,%%xmm5                   \n"
456588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm6,%%xmm6                   \n"
456688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm6                    \n"
456788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
456888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
456988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
457088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
457188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
457288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
457388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm0                   \n"
457488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm1         \n"
457588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm5,%%xmm1                   \n"
457688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm1                   \n"
457788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm0                   \n"
457888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm7         \n"
457988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmullw    %%xmm3,%%xmm1                   \n"
458088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm6,%%xmm7                   \n"
458188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm4,%%xmm0                   \n"
458288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm4,%%xmm1                   \n"
458388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
458488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm7,%%xmm0                   \n"
458588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%1                         \n"
458688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(0) "         \n"
458788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
458888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
458988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(dst_argb),       // %0
459088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)           // %1
459188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(scale),           // %2
459288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "r"(interval_size),   // %3
459388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "r"(interval_offset)  // %4
459488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
459588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
459688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
459788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
459888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
459988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
460088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBQUANTIZEROW_SSE2
460188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
460288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBSHADEROW_SSE2
460388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Shade 4 pixels at a time by specified value.
460488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Aligned to 16 bytes.
460588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBShadeRow_SSE2(const uint8* src_argb, uint8* dst_argb, int width,
460688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                       uint32 value) {
460788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
460888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm2                       \n"
460988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm2                   \n"
461088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklqdq %%xmm2,%%xmm2                  \n"
461188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
461288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
461388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
461488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
461588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
461688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
461788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
461888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm0                   \n"
461988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm1,%%xmm1                   \n"
462088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm0                   \n"
462188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm1                   \n"
462288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm0                     \n"
462388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x8,%%xmm1                     \n"
462488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
462588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%2                         \n"
462688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
462788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
462888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
462988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
463088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
463188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)      // %2
463288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(value)       // %3
463388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
463488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
463588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2"
463688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
463788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
463888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
463988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBSHADEROW_SSE2
464088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
464188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBMULTIPLYROW_SSE2
464288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Multiply 2 rows of ARGB pixels together, 4 pixels at a time.
464388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBMultiplyRow_SSE2(const uint8* src_argb0, const uint8* src_argb1,
464488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          uint8* dst_argb, int width) {
464588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
464688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm5,%%xmm5                   \n"
464788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
464888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
464988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
465088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
465188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
465288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
465388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm2         \n"
465488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
465588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0,%%xmm1                   \n"
465688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm2,%%xmm3                   \n"
465788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm0                   \n"
465888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm1,%%xmm1                   \n"
465988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
466088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm5,%%xmm3                   \n"
466188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm2,%%xmm0                   \n"
466288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm3,%%xmm1                   \n"
466388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
466488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
466588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(2) "         \n"
466688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
466788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
466888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),  // %0
466988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_argb1),  // %1
467088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),   // %2
467188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)       // %3
467288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
467388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
467488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
467588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
467688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
467788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
467888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
467988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBMULTIPLYROW_SSE2
468088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
468188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBADDROW_SSE2
468288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Add 2 rows of ARGB pixels together, 4 pixels at a time.
468388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBAddRow_SSE2(const uint8* src_argb0, const uint8* src_argb1,
468488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                     uint8* dst_argb, int width) {
468588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
468688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
468788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
468888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
468988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
469088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
469188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm1         \n"
469288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
469388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
469488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
469588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(2) "         \n"
469688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
469788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
469888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),  // %0
469988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_argb1),  // %1
470088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),   // %2
470188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)       // %3
470288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
470388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
470488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
470588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1"
470688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
470788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
470888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
470988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBADDROW_SSE2
471088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
471188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBSUBTRACTROW_SSE2
471288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Subtract 2 rows of ARGB pixels, 4 pixels at a time.
471388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBSubtractRow_SSE2(const uint8* src_argb0, const uint8* src_argb1,
471488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          uint8* dst_argb, int width) {
471588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
471688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
471788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
471888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
471988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
472088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
472188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm1         \n"
472288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
472388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubusb   %%xmm1,%%xmm0                   \n"
472488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
472588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(2) "         \n"
472688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
472788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
472888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb0),  // %0
472988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_argb1),  // %1
473088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),   // %2
473188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)       // %3
473288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
473388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
473488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
473588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1"
473688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
473788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
473888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
473988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBSUBTRACTROW_SSE2
474088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
474188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_SOBELXROW_SSE2
474288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// SobelX as a matrix is
474388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// -1  0  1
474488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// -2  0  2
474588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// -1  0  1
474688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid SobelXRow_SSE2(const uint8* src_y0, const uint8* src_y1,
474788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                    const uint8* src_y2, uint8* dst_sobelx, int width) {
474888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
474988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
475088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%2                           \n"
475188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%3                           \n"
475288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm5,%%xmm5                   \n"
475388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
475488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 8 pixel loop.
475588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
475688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
475788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(0) ",%%xmm0         \n"
475888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS2(0x2,0) ",%%xmm1    \n"
475988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
476088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm1                   \n"
476188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm1,%%xmm0                   \n"
476288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
476388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x00,0,1,1,xmm1)             //  movq      (%0,%1,1),%%xmm1
476488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x02,0,1,1,xmm2)             //  movq      0x2(%0,%1,1),%%xmm2
476588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm1                   \n"
476688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
476788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm2,%%xmm1                   \n"
476888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
476988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x00,0,2,1,xmm2)             //  movq      (%0,%2,1),%%xmm2
477088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x02,0,2,1,xmm3)             //  movq      0x2(%0,%2,1),%%xmm3
477188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
477288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm3                   \n"
477388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm3,%%xmm2                   \n"
477488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm2,%%xmm0                   \n"
477588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm1,%%xmm0                   \n"
477688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm1,%%xmm0                   \n"
477788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm1,%%xmm1                   \n"
477888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm0,%%xmm1                   \n"
477988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaxsw    %%xmm1,%%xmm0                   \n"
478088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
478188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%4                         \n"
478288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
478388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm0,0x00,0,3,1)             //  movq      %%xmm0,(%0,%3,1)
478488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,0) ",%0            \n"
478588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
478688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_y0),      // %0
478788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_y1),      // %1
478888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_y2),      // %2
478988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_sobelx),  // %3
479088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)        // %4
479188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
479288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
479388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
479488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
479588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
479688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
479788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
479888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
479988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
480088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
480188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_SOBELXROW_SSE2
480288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
480388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_SOBELYROW_SSE2
480488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// SobelY as a matrix is
480588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// -1 -2 -1
480688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//  0  0  0
480788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org//  1  2  1
480888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid SobelYRow_SSE2(const uint8* src_y0, const uint8* src_y1,
480988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                    uint8* dst_sobely, int width) {
481088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
481188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
481288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%2                           \n"
481388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm5,%%xmm5                   \n"
481488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
481588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 8 pixel loop.
481688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
481788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
481888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(0) ",%%xmm0         \n"
481988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x00,0,1,1,xmm1)             //  movq      (%0,%1,1),%%xmm1
482088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
482188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm1                   \n"
482288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm1,%%xmm0                   \n"
482388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
482488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS2(0x1,0) ",%%xmm1    \n"
482588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x01,0,1,1,xmm2)             //  movq      0x1(%0,%1,1),%%xmm2
482688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm1                   \n"
482788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
482888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm2,%%xmm1                   \n"
482988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
483088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS2(0x2,0) ",%%xmm2    \n"
483188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x02,0,1,1,xmm3)             //  movq      0x2(%0,%1,1),%%xmm3
483288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm2                   \n"
483388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm3                   \n"
483488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm3,%%xmm2                   \n"
483588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm2,%%xmm0                   \n"
483688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm1,%%xmm0                   \n"
483788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm1,%%xmm0                   \n"
483888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm1,%%xmm1                   \n"
483988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm0,%%xmm1                   \n"
484088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaxsw    %%xmm1,%%xmm0                   \n"
484188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
484288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%3                         \n"
484388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
484488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movq,xmm0,0x00,0,2,1)             //  movq      %%xmm0,(%0,%2,1)
484588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,0) ",%0            \n"
484688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
484788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_y0),      // %0
484888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_y1),      // %1
484988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_sobely),  // %2
485088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)        // %3
485188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
485288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
485388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
485488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
485588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
485688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
485788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
485888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
485988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
486088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
486188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_SOBELYROW_SSE2
486288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
486388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_SOBELROW_SSE2
486488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Adds Sobel X and Sobel Y and stores Sobel into ARGB.
486588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// A = 255
486688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// R = Sobel
486788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// G = Sobel
486888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// B = Sobel
486988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid SobelRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
487088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                   uint8* dst_argb, int width) {
487188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
487288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
487388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
487488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm5                    \n"
487588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
487688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 8 pixel loop.
487788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
487888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
487988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
488088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,0,1,1,xmm1)           //  movdqa    (%0,%1,1),%%xmm1
488188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
488288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
488388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                   \n"
488488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm2                   \n"
488588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm0,%%xmm0                   \n"
488688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm1                   \n"
488788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm2,%%xmm1                   \n"
488888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm2,%%xmm2                   \n"
488988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm1                   \n"
489088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm2                   \n"
489188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm3                   \n"
489288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm0,%%xmm3                   \n"
489388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm0,%%xmm0                   \n"
489488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm3                   \n"
489588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "por       %%xmm5,%%xmm0                   \n"
489688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
489788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS(2) "         \n"
489888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2," MEMACCESS2(0x10,2) "   \n"
489988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3," MEMACCESS2(0x20,2) "   \n"
490088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS2(0x30,2) "   \n"
490188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,2) ",%2           \n"
490288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
490388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_sobelx),  // %0
490488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_sobely),  // %1
490588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),    // %2
490688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)        // %3
490788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
490888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
490988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
491088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
491188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
491288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
491388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm5"
491488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
491588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
491688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
491788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_SOBELROW_SSE2
491888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
491988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_SOBELTOPLANEROW_SSE2
492088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Adds Sobel X and Sobel Y and stores Sobel into a plane.
492188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid SobelToPlaneRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
492288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          uint8* dst_y, int width) {
492388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
492488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
492588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
492688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pslld     $0x18,%%xmm5                    \n"
492788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
492888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 8 pixel loop.
492988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
493088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
493188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
493288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,0,1,1,xmm1)           //  movdqa    (%0,%1,1),%%xmm1
493388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
493488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm0                   \n"
493588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
493688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(2) "         \n"
493788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
493888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
493988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_sobelx),  // %0
494088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_sobely),  // %1
494188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_y),       // %2
494288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)        // %3
494388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
494488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
494588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
494688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
494788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
494888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
494988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1"
495088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
495188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
495288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
495388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_SOBELTOPLANEROW_SSE2
495488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
495588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_SOBELXYROW_SSE2
495688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Mixes Sobel X, Sobel Y and Sobel into ARGB.
495788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// A = 255
495888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// R = Sobel X
495988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// G = Sobel
496088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// B = Sobel Y
496188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid SobelXYRow_SSE2(const uint8* src_sobelx, const uint8* src_sobely,
496288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                     uint8* dst_argb, int width) {
496388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
496488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
496588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
496688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
496788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 8 pixel loop.
496888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
496988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
497088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
497188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,0,1,1,xmm1)           //  movdqa    (%0,%1,1),%%xmm1
497288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
497388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm2                   \n"
497488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddusb   %%xmm1,%%xmm2                   \n"
497588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm3                   \n"
497688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm3                   \n"
497788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm5,%%xmm0                   \n"
497888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1,%%xmm4                   \n"
497988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm4                   \n"
498088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm2,%%xmm1                   \n"
498188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4,%%xmm6                   \n"
498288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm3,%%xmm6                   \n"
498388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm3,%%xmm4                   \n"
498488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1,%%xmm7                   \n"
498588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm0,%%xmm7                   \n"
498688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm0,%%xmm1                   \n"
498788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%3                        \n"
498888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm6," MEMACCESS(2) "         \n"
498988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4," MEMACCESS2(0x10,2) "   \n"
499088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm7," MEMACCESS2(0x20,2) "   \n"
499188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x30,2) "   \n"
499288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,2) ",%2           \n"
499388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
499488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_sobelx),  // %0
499588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_sobely),  // %1
499688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),    // %2
499788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)        // %3
499888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
499988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
500088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
500188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
500288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
500388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
500488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
500588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
500688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
500788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
500888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_SOBELXYROW_SSE2
500988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
501088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_COMPUTECUMULATIVESUMROW_SSE2
501188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Creates a table of cumulative sums where each value is a sum of all values
501288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// above and to the left of the value, inclusive of the value.
501388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ComputeCumulativeSumRow_SSE2(const uint8* row, int32* cumsum,
501488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                  const int32* previous_cumsum, int width) {
501588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
501688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm0,%%xmm0                   \n"
501788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm1,%%xmm1                   \n"
501888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
501988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        49f                             \n"
502088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "test      $0xf,%1                         \n"
502188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jne       49f                             \n"
502288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
502388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // 4 pixel loop                              \n"
502488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
502588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "40:                                         \n"
502688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm2         \n"
502788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
502888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm4                   \n"
502988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm2                   \n"
503088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm3                   \n"
503188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm1,%%xmm2                   \n"
503288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm3                   \n"
503388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm1,%%xmm4                   \n"
503488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4,%%xmm5                   \n"
503588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm1,%%xmm4                   \n"
503688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm1,%%xmm5                   \n"
503788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm2,%%xmm0                   \n"
503888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(2) ",%%xmm2         \n"
503988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm0,%%xmm2                   \n"
504088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm3,%%xmm0                   \n"
504188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,2) ",%%xmm3   \n"
504288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm0,%%xmm3                   \n"
504388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm4,%%xmm0                   \n"
504488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,2) ",%%xmm4   \n"
504588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm0,%%xmm4                   \n"
504688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm5,%%xmm0                   \n"
504788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,2) ",%%xmm5   \n"
504888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,2) ",%2           \n"
504988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm0,%%xmm5                   \n"
505088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2," MEMACCESS(1) "         \n"
505188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm3," MEMACCESS2(0x10,1) "   \n"
505288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4," MEMACCESS2(0x20,1) "   \n"
505388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm5," MEMACCESS2(0x30,1) "   \n"
505488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,1) ",%1           \n"
505588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
505688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       40b                             \n"
505788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
505888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "49:                                         \n"
505988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x3,%3                         \n"
506088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        19f                             \n"
506188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
506288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // 1 pixel loop                              \n"
506388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
506488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "10:                                         \n"
506588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      " MEMACCESS(0) ",%%xmm2         \n"
506688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,0) ",%0            \n"
506788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm1,%%xmm2                   \n"
506888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm1,%%xmm2                   \n"
506988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm2,%%xmm0                   \n"
507088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(2) ",%%xmm2         \n"
507188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
507288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddd     %%xmm0,%%xmm2                   \n"
507388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm2," MEMACCESS(1) "         \n"
507488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
507588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
507688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       10b                             \n"
507788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
507888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "19:                                         \n"
507988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(row),  // %0
508088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(cumsum),  // %1
508188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(previous_cumsum),  // %2
508288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)  // %3
508388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
508488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
508588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
508688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
508788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
508888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
508988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
509088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_COMPUTECUMULATIVESUMROW_SSE2
509188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
509288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
509388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid CumulativeSumToAverageRow_SSE2(const int32* topleft, const int32* botleft,
509488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                    int width, int area, uint8* dst,
509588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                    int count) {
509688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
509788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %5,%%xmm5                       \n"
509888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm5,%%xmm5                   \n"
509988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "rcpss     %%xmm5,%%xmm4                   \n"
510088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm4,%%xmm4              \n"
510188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
510288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        49f                             \n"
510388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmpl      $0x80,%5                        \n"
510488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "ja        40f                             \n"
510588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
510688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
510788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm6,%%xmm6                   \n"
510888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x10,%%xmm6                    \n"
510988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm6,%%xmm6                   \n"
511088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm6,%%xmm5                   \n"
511188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm4,%%xmm5                   \n"
511288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtps2dq  %%xmm5,%%xmm5                   \n"
511388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm5,%%xmm5                   \n"
511488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
511588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // 4 pixel small loop                        \n"
511688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
511788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "4:                                         \n"
511888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
511988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
512088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
512188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
512288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
512388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x00,0,4,4,xmm0)            // psubd    0x00(%0,%4,4),%%xmm0
512488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x10,0,4,4,xmm1)            // psubd    0x10(%0,%4,4),%%xmm1
512588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x20,0,4,4,xmm2)            // psubd    0x20(%0,%4,4),%%xmm2
512688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x30,0,4,4,xmm3)            // psubd    0x30(%0,%4,4),%%xmm3
512788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
512888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS(1) ",%%xmm0         \n"
512988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS2(0x10,1) ",%%xmm1   \n"
513088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS2(0x20,1) ",%%xmm2   \n"
513188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS2(0x30,1) ",%%xmm3   \n"
513288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
513388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x00,1,4,4,xmm0)            // paddd    0x00(%1,%4,4),%%xmm0
513488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x10,1,4,4,xmm1)            // paddd    0x10(%1,%4,4),%%xmm1
513588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x20,1,4,4,xmm2)            // paddd    0x20(%1,%4,4),%%xmm2
513688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x30,1,4,4,xmm3)            // paddd    0x30(%1,%4,4),%%xmm3
513788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,1) ",%1           \n"
513888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm1,%%xmm0                   \n"
513988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm3,%%xmm2                   \n"
514088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm5,%%xmm0                   \n"
514188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhuw   %%xmm5,%%xmm2                   \n"
514288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
514388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(2) "         \n"
514488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
514588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
514688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       4b                              \n"
514788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       49f                             \n"
514888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
514988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // 4 pixel loop                              \n"
515088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
515188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "40:                                         \n"
515288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
515388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
515488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x20,0) ",%%xmm2   \n"
515588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x30,0) ",%%xmm3   \n"
515688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
515788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x00,0,4,4,xmm0)            // psubd    0x00(%0,%4,4),%%xmm0
515888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x10,0,4,4,xmm1)            // psubd    0x10(%0,%4,4),%%xmm1
515988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x20,0,4,4,xmm2)            // psubd    0x20(%0,%4,4),%%xmm2
516088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x30,0,4,4,xmm3)            // psubd    0x30(%0,%4,4),%%xmm3
516188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
516288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS(1) ",%%xmm0         \n"
516388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS2(0x10,1) ",%%xmm1   \n"
516488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS2(0x20,1) ",%%xmm2   \n"
516588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS2(0x30,1) ",%%xmm3   \n"
516688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
516788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x00,1,4,4,xmm0)            // paddd    0x00(%1,%4,4),%%xmm0
516888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x10,1,4,4,xmm1)            // paddd    0x10(%1,%4,4),%%xmm1
516988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x20,1,4,4,xmm2)            // paddd    0x20(%1,%4,4),%%xmm2
517088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x30,1,4,4,xmm3)            // paddd    0x30(%1,%4,4),%%xmm3
517188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,1) ",%1           \n"
517288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm0,%%xmm0                   \n"
517388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm1,%%xmm1                   \n"
517488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm4,%%xmm0                   \n"
517588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm4,%%xmm1                   \n"
517688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm2,%%xmm2                   \n"
517788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm3,%%xmm3                   \n"
517888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm4,%%xmm2                   \n"
517988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm4,%%xmm3                   \n"
518088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtps2dq  %%xmm0,%%xmm0                   \n"
518188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtps2dq  %%xmm1,%%xmm1                   \n"
518288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtps2dq  %%xmm2,%%xmm2                   \n"
518388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtps2dq  %%xmm3,%%xmm3                   \n"
518488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm1,%%xmm0                   \n"
518588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm3,%%xmm2                   \n"
518688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm2,%%xmm0                   \n"
518788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(2) "         \n"
518888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
518988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
519088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       40b                             \n"
519188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
519288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "49:                                         \n"
519388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x3,%3                         \n"
519488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        19f                             \n"
519588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
519688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // 1 pixel loop                              \n"
519788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
519888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "10:                                         \n"
519988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
520088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(psubd,0x00,0,4,4,xmm0)            // psubd    0x00(%0,%4,4),%%xmm0
520188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
520288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubd     " MEMACCESS(1) ",%%xmm0         \n"
520388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
520488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(paddd,0x00,1,4,4,xmm0)            // paddd    0x00(%1,%4,4),%%xmm0
520588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
520688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm0,%%xmm0                   \n"
520788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm4,%%xmm0                   \n"
520888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtps2dq  %%xmm0,%%xmm0                   \n"
520988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm0,%%xmm0                   \n"
521088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
521188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0," MEMACCESS(2) "         \n"
521288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,2) ",%2            \n"
521388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
521488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       10b                             \n"
521588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "19:                                         \n"
521688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(topleft),  // %0
521788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(botleft),  // %1
521888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst),      // %2
521988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(count)    // %3
522088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(width)),  // %4
522188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "rm"(area)     // %5
522288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
522388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
522488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
522588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
522688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
522788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6"
522888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
522988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
523088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
523188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_CUMULATIVESUMTOAVERAGEROW_SSE2
523288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
523388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBAFFINEROW_SSE2
523488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Copy ARGB pixels from source image with slope to a row of destination.
523588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgLIBYUV_API
523688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBAffineRow_SSE2(const uint8* src_argb, int src_argb_stride,
523788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        uint8* dst_argb, const float* src_dudv, int width) {
523888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  intptr_t src_argb_stride_temp = src_argb_stride;
523988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  intptr_t temp = 0;
524088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
524188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(3) ",%%xmm2         \n"
524288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS2(0x08,3) ",%%xmm7   \n"
524388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shl       $0x10,%1                        \n"
524488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x4,%1                         \n"
524588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %1,%%xmm5                       \n"
524688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%4                         \n"
524788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        49f                             \n"
524888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
524988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x44,%%xmm7,%%xmm7             \n"
525088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
525188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm0                   \n"
525288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm7,%%xmm0                   \n"
525388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movlhps   %%xmm0,%%xmm2                   \n"
525488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm7,%%xmm4                   \n"
525588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm4,%%xmm4                   \n"
525688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm3                   \n"
525788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm4,%%xmm3                   \n"
525888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm4,%%xmm4                   \n"
525988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
526088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // 4 pixel loop                              \n"
526188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
526288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "40:                                         \n"
526388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvttps2dq %%xmm2,%%xmm0                   \n"  // x, y float to int first 2
526488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvttps2dq %%xmm3,%%xmm1                   \n"  // x, y float to int next 2
526588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm1,%%xmm0                   \n"  // x, y as 8 shorts
526688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddwd   %%xmm5,%%xmm0                   \n"  // off = x * 4 + y * stride
526788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k1                      \n"
526888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x39,%%xmm0,%%xmm0             \n"
526988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k5                      \n"
527088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x39,%%xmm0,%%xmm0             \n"
527188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
527288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,0,1,1,xmm1)             //  movd      (%0,%1,1),%%xmm1
527388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,0,5,1,xmm6)             //  movd      (%0,%5,1),%%xmm6
527488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckldq %%xmm6,%%xmm1                   \n"
527588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm4,%%xmm2                   \n"
527688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm1," MEMACCESS(2) "         \n"
527788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k1                      \n"
527888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x39,%%xmm0,%%xmm0             \n"
527988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k5                      \n"
528088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
528188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,0,1,1,xmm0)             //  movd      (%0,%1,1),%%xmm0
528288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,0,5,1,xmm6)             //  movd      (%0,%5,1),%%xmm6
528388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckldq %%xmm6,%%xmm0                   \n"
528488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm4,%%xmm3                   \n"
528588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%4                         \n"
528688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS2(0x08,2) "   \n"
528788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
528888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       40b                             \n"
528988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
529088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "49:                                         \n"
529188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x3,%4                         \n"
529288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jl        19f                             \n"
529388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
529488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  // 1 pixel loop                              \n"
529588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
529688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "10:                                         \n"
529788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvttps2dq %%xmm2,%%xmm0                   \n"
529888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm0,%%xmm0                   \n"
529988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddwd   %%xmm5,%%xmm0                   \n"
530088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm7,%%xmm2                   \n"
530188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k1                      \n"
530288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
530388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movd,0x00,0,1,1,xmm0)             //  movd      (%0,%1,1),%%xmm0
530488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%4                         \n"
530588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0," MEMACCESS(2) "         \n"
530688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x04,2) ",%2           \n"
530788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jge       10b                             \n"
530888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "19:                                         \n"
530988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
531088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_argb_stride_temp),  // %1
531188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %2
531288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_dudv),  // %3
531388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width),    // %4
531488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(temp)   // %5
531588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
531688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
531788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
531888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
531988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
532088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
532188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
532288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
532388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
532488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
532588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBAFFINEROW_SSE2
532688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
532788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_INTERPOLATEROW_SSSE3
532888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Bilinear filter 16x2 -> 16x1
532988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid InterpolateRow_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
533088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          ptrdiff_t src_stride, int dst_width,
533188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          int source_y_fraction) {
533288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
533388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%0                           \n"
533488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shr       %3                              \n"
533588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x0,%3                         \n"
533688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        100f                            \n"
533788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x20,%3                        \n"
533888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        75f                             \n"
533988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x40,%3                        \n"
534088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        50f                             \n"
534188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x60,%3                        \n"
534288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        25f                             \n"
534388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
534488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm0                       \n"
534588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "neg       %3                              \n"
534688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x80,%3                        \n"
534788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm5                       \n"
534888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm5                   \n"
534988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm5,%%xmm5                   \n"
535088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
535188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
535288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // General purpose row blend.
535388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
535488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
535588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm0         \n"
535688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,1,4,1,xmm2)
535788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
535888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm0                   \n"
535988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm2,%%xmm1                   \n"
536088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm5,%%xmm0                   \n"
536188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm5,%%xmm1                   \n"
536288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
536388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm1                     \n"
536488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
536588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
536688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
536788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)
536888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
536988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
537088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
537188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
537288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 25 / 75.
537388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
537488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "25:                                         \n"
537588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm0         \n"
537688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,1,4,1,xmm1)
537788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
537888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
537988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
538088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
538188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)
538288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
538388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        25b                             \n"
538488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
538588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
538688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 50 / 50.
538788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
538888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "50:                                         \n"
538988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm0         \n"
539088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,1,4,1,xmm1)
539188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
539288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
539388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
539488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)
539588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
539688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        50b                             \n"
539788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
539888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
539988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 75 / 25.
540088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
540188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "75:                                         \n"
540288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm1         \n"
540388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,1,4,1,xmm0)
540488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
540588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
540688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
540788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
540888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)
540988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
541088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        75b                             \n"
541188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
541288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
541388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 100 / 0 - Copy row unchanged.
541488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
541588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "100:                                        \n"
541688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm0         \n"
541788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
541888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)
541988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
542088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        100b                            \n"
542188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
542288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "99:                                         \n"
542388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(dst_ptr),    // %0
542488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_ptr),    // %1
542588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_width),  // %2
542688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(source_y_fraction)  // %3
542788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride))  // %4
542888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
542988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
543088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
543188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
543288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
543388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm5"
543488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
543588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
543688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
543788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_INTERPOLATEROW_SSSE3
543888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
543988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_INTERPOLATEROW_SSE2
544088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Bilinear filter 16x2 -> 16x1
544188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid InterpolateRow_SSE2(uint8* dst_ptr, const uint8* src_ptr,
544288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                         ptrdiff_t src_stride, int dst_width,
544388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                         int source_y_fraction) {
544488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
544588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%0                           \n"
544688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shr       %3                              \n"
544788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x0,%3                         \n"
544888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        100f                            \n"
544988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x20,%3                        \n"
545088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        75f                             \n"
545188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x40,%3                        \n"
545288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        50f                             \n"
545388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x60,%3                        \n"
545488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        25f                             \n"
545588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
545688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm0                       \n"
545788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "neg       %3                              \n"
545888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x80,%3                        \n"
545988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm5                       \n"
546088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm5                   \n"
546188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm5,%%xmm5                   \n"
546288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
546388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
546488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
546588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // General purpose row blend.
546688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
546788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
546888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm0         \n"
546988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,1,4,1,xmm2)           //  movdqa    (%1,%4,1),%%xmm2
547088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
547188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm3                   \n"
547288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm4,%%xmm2                   \n"
547388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm4,%%xmm3                   \n"
547488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm4,%%xmm0                   \n"
547588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm4,%%xmm1                   \n"
547688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm0,%%xmm2                   \n"
547788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm1,%%xmm3                   \n"
547888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm2,%%xmm2                   \n"
547988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm3,%%xmm3                   \n"
548088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhw    %%xmm5,%%xmm2                   \n"
548188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhw    %%xmm5,%%xmm3                   \n"
548288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm2,%%xmm0                   \n"
548388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm3,%%xmm1                   \n"
548488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
548588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
548688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
548788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)           //  movdqa    %%xmm0,(%1,%0,1)
548888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
548988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
549088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
549188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
549288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 25 / 75.
549388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
549488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "25:                                         \n"
549588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm0         \n"
549688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,1,4,1,xmm1)           //  movdqa    (%1,%4,1),%%xmm1
549788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
549888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
549988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
550088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
550188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)           //  movdqa    %%xmm0,(%1,%0,1)
550288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
550388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        25b                             \n"
550488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
550588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
550688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 50 / 50.
550788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
550888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "50:                                         \n"
550988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm0         \n"
551088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,1,4,1,xmm1)           //  movdqa    (%1,%4,1),%%xmm1
551188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
551288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
551388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
551488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)           //  movdqa    %%xmm0,(%1,%0,1)
551588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
551688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        50b                             \n"
551788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
551888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
551988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 75 / 25.
552088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
552188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "75:                                         \n"
552288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm1         \n"
552388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqa,0x00,1,4,1,xmm0)           //  movdqa    (%1,%4,1),%%xmm0
552488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
552588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
552688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
552788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
552888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)           //  movdqa    %%xmm0,(%1,%0,1)
552988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
553088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        75b                             \n"
553188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
553288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
553388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 100 / 0 - Copy row unchanged.
553488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
553588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "100:                                        \n"
553688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(1) ",%%xmm0         \n"
553788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
553888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,1,0,1)           //  movdqa    %%xmm0,(%1,%0,1)
553988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
554088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        100b                            \n"
554188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
554288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "99:                                         \n"
554388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(dst_ptr),    // %0
554488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_ptr),    // %1
554588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_width),  // %2
554688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(source_y_fraction)  // %3
554788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride))  // %4
554888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
554988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
555088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
555188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
555288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
555388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
555488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
555588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
555688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
555788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_INTERPOLATEROW_SSE2
555888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
555988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_INTERPOLATEROW_SSSE3
556088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Bilinear filter 16x2 -> 16x1
556188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid InterpolateRow_Unaligned_SSSE3(uint8* dst_ptr, const uint8* src_ptr,
556288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                    ptrdiff_t src_stride, int dst_width,
556388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                    int source_y_fraction) {
556488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
556588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%0                           \n"
556688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shr       %3                              \n"
556788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x0,%3                         \n"
556888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        100f                            \n"
556988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x20,%3                        \n"
557088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        75f                             \n"
557188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x40,%3                        \n"
557288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        50f                             \n"
557388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x60,%3                        \n"
557488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        25f                             \n"
557588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
557688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm0                       \n"
557788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "neg       %3                              \n"
557888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x80,%3                        \n"
557988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm5                       \n"
558088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm5                   \n"
558188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm5,%%xmm5                   \n"
558288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
558388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
558488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // General purpose row blend.
558588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
558688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
558788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm0         \n"
558888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,1,4,1,xmm2)
558988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0,%%xmm1                   \n"
559088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm0                   \n"
559188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm2,%%xmm1                   \n"
559288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm5,%%xmm0                   \n"
559388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm5,%%xmm1                   \n"
559488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm0                     \n"
559588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrlw     $0x7,%%xmm1                     \n"
559688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
559788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
559888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
559988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)
560088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
560188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
560288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
560388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
560488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 25 / 75.
560588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
560688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "25:                                         \n"
560788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm0         \n"
560888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,1,4,1,xmm1)
560988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
561088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
561188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
561288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
561388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)
561488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
561588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        25b                             \n"
561688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
561788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
561888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 50 / 50.
561988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
562088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "50:                                         \n"
562188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm0         \n"
562288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,1,4,1,xmm1)
562388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
562488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
562588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
562688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)
562788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
562888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        50b                             \n"
562988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
563088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
563188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 75 / 25.
563288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
563388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "75:                                         \n"
563488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm1         \n"
563588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,1,4,1,xmm0)
563688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
563788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
563888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
563988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
564088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)
564188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
564288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        75b                             \n"
564388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
564488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
564588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 100 / 0 - Copy row unchanged.
564688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
564788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "100:                                        \n"
564888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm0         \n"
564988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
565088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)
565188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
565288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        100b                            \n"
565388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
565488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "99:                                         \n"
565588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(dst_ptr),    // %0
565688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_ptr),    // %1
565788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_width),  // %2
565888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(source_y_fraction)  // %3
565988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride))  // %4
566088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
566188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
566288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
566388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
566488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
566588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm5"
566688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
566788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
566888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
566988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif   // HAS_INTERPOLATEROW_SSSE3
567088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
567188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_INTERPOLATEROW_SSE2
567288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Bilinear filter 16x2 -> 16x1
567388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid InterpolateRow_Unaligned_SSE2(uint8* dst_ptr, const uint8* src_ptr,
567488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                   ptrdiff_t src_stride, int dst_width,
567588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                   int source_y_fraction) {
567688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
567788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%0                           \n"
567888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "shr       %3                              \n"
567988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x0,%3                         \n"
568088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        100f                            \n"
568188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x20,%3                        \n"
568288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        75f                             \n"
568388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x40,%3                        \n"
568488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        50f                             \n"
568588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x60,%3                        \n"
568688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        25f                             \n"
568788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
568888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm0                       \n"
568988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "neg       %3                              \n"
569088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       $0x80,%3                        \n"
569188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm5                       \n"
569288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm5                   \n"
569388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm5,%%xmm5                   \n"
569488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
569588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm4,%%xmm4                   \n"
569688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
569788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // General purpose row blend.
569888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
569988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
570088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm0         \n"
570188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,1,4,1,xmm2)           //  movdqu    (%1,%4,1),%%xmm2
570288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0,%%xmm1                   \n"
570388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm2,%%xmm3                   \n"
570488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm4,%%xmm2                   \n"
570588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm4,%%xmm3                   \n"
570688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm4,%%xmm0                   \n"
570788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm4,%%xmm1                   \n"
570888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm0,%%xmm2                   \n"
570988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psubw     %%xmm1,%%xmm3                   \n"
571088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm2,%%xmm2                   \n"
571188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm3,%%xmm3                   \n"
571288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhw    %%xmm5,%%xmm2                   \n"
571388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmulhw    %%xmm5,%%xmm3                   \n"
571488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm2,%%xmm0                   \n"
571588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "paddw     %%xmm3,%%xmm1                   \n"
571688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
571788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
571888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
571988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)           //  movdqu    %%xmm0,(%1,%0,1)
572088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
572188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
572288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
572388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
572488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 25 / 75.
572588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
572688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "25:                                         \n"
572788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm0         \n"
572888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,1,4,1,xmm1)           //  movdqu    (%1,%4,1),%%xmm1
572988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
573088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
573188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
573288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
573388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)           //  movdqu    %%xmm0,(%1,%0,1)
573488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
573588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        25b                             \n"
573688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
573788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
573888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 50 / 50.
573988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
574088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "50:                                         \n"
574188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm0         \n"
574288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,1,4,1,xmm1)           //  movdqu    (%1,%4,1),%%xmm1
574388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
574488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
574588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
574688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)           //  movdqu    %%xmm0,(%1,%0,1)
574788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
574888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        50b                             \n"
574988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
575088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
575188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 75 / 25.
575288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
575388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "75:                                         \n"
575488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm1         \n"
575588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movdqu,0x00,1,4,1,xmm0)           //  movdqu    (%1,%4,1),%%xmm0
575688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
575788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pavgb     %%xmm1,%%xmm0                   \n"
575888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
575988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
576088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)           //  movdqu    %%xmm0,(%1,%0,1)
576188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
576288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        75b                             \n"
576388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
576488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
576588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // Blend 100 / 0 - Copy row unchanged.
576688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
576788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "100:                                        \n"
576888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(1) ",%%xmm0         \n"
576988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
577088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqu,xmm0,0x00,1,0,1)           //  movdqu    %%xmm0,(%1,%0,1)
577188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
577288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        100b                            \n"
577388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
577488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "99:                                         \n"
577588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(dst_ptr),    // %0
577688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_ptr),    // %1
577788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_width),  // %2
577888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(source_y_fraction)  // %3
577988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_stride))  // %4
578088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
578188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
578288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
578388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
578488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
578588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5"
578688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
578788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
578888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
578988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_INTERPOLATEROW_SSE2
579088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
579188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_HALFROW_SSE2
579288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid HalfRow_SSE2(const uint8* src_uv, int src_uv_stride,
579388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                  uint8* dst_uv, int pix) {
579488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
579588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %0,%1                           \n"
579688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
579788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
579888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
579988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(pavgb,0x00,0,3,1,xmm0)            //  pavgb     (%0,%3),%%xmm0
580088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
580188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPMEM(movdqa,xmm0,0x00,0,1,1)           //  movdqa    %%xmm0,(%0,%1)
580288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
580388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
580488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_uv),  // %0
580588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_uv),  // %1
580688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)      // %2
580788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"((intptr_t)(src_uv_stride))  // %3
580888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
580988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
581088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      , "xmm0"
581188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
581288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
581388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
581488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_HALFROW_SSE2
581588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
581688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBTOBAYERROW_SSSE3
581788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToBayerRow_SSSE3(const uint8* src_argb, uint8* dst_bayer,
581888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          uint32 selector, int pix) {
581988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
582088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // NaCL caveat - assumes movd is from GPR
582188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %3,%%xmm5                       \n"
582288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm5,%%xmm5              \n"
582388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
582488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
582588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
582688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
582788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
582888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm0                   \n"
582988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm1                   \n"
583088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckldq %%xmm1,%%xmm0                   \n"
583188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
583288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
583388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
583488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
583588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
583688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_bayer), // %1
583788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
583888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "g"(selector)    // %3
583988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
584088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
584188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
584288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
584388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
584488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
584588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBTOBAYERROW_SSSE3
584688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
584788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBTOBAYERGGROW_SSE2
584888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBToBayerGGRow_SSE2(const uint8* src_argb, uint8* dst_bayer,
584988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                           uint32 selector, int pix) {
585088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
585188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm5,%%xmm5                   \n"
585288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x18,%%xmm5                    \n"
585388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
585488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
585588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
585688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
585788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
585888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x8,%%xmm0                     \n"
585988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psrld     $0x8,%%xmm1                     \n"
586088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm0                   \n"
586188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm5,%%xmm1                   \n"
586288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packssdw  %%xmm1,%%xmm0                   \n"
586388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
586488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
586588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
586688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
586788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
586888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
586988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_bayer), // %1
587088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
587188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  :
587288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
587388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
587488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
587588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
587688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
587788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
587888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBTOBAYERGGROW_SSE2
587988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
588088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBSHUFFLEROW_SSSE3
588188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// For BGRAToARGB, ABGRToARGB, RGBAToARGB, and ARGBToRGBA.
588288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBShuffleRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
588388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                          const uint8* shuffler, int pix) {
588488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
588588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(3) ",%%xmm5         \n"
588688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
588788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
588888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(0) ",%%xmm0         \n"
588988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
589088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
589188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm0                   \n"
589288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm1                   \n"
589388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
589488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0," MEMACCESS(1) "         \n"
589588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1," MEMACCESS2(0x10,1) "   \n"
589688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
589788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
589888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
589988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
590088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
590188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(shuffler)    // %3
590288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
590388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
590488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
590588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
590688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
590788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
590888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
590988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBShuffleRow_Unaligned_SSSE3(const uint8* src_argb, uint8* dst_argb,
591088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                    const uint8* shuffler, int pix) {
591188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
591288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    " MEMACCESS(3) ",%%xmm5         \n"
591388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
591488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
591588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
591688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS2(0x10,0) ",%%xmm1   \n"
591788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,0) ",%0           \n"
591888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm0                   \n"
591988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufb    %%xmm5,%%xmm1                   \n"
592088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x8,%2                         \n"
592188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
592288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,1) "   \n"
592388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,1) ",%1           \n"
592488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
592588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
592688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
592788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
592888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(shuffler)    // %3
592988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
593088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
593188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
593288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
593388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
593488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
593588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBSHUFFLEROW_SSSE3
593688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
593788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBSHUFFLEROW_AVX2
593888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// For BGRAToARGB, ABGRToARGB, RGBAToARGB, and ARGBToRGBA.
593988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBShuffleRow_AVX2(const uint8* src_argb, uint8* dst_argb,
594088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                         const uint8* shuffler, int pix) {
594188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
594288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vbroadcastf128 " MEMACCESS(3) ",%%ymm5    \n"
594388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
594488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
594588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   " MEMACCESS(0) ",%%ymm0         \n"
594688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   " MEMACCESS2(0x20,0) ",%%ymm1   \n"
594788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,0) ",%0           \n"
594888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpshufb   %%ymm5,%%ymm0,%%ymm0            \n"
594988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpshufb   %%ymm5,%%ymm1,%%ymm1            \n"
595088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%2                        \n"
595188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   %%ymm0," MEMACCESS(1) "         \n"
595288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovdqu   %%ymm1," MEMACCESS2(0x20,1) "   \n"
595388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x40,1) ",%1           \n"
595488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
595588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
595688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
595788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)        // %2
595888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(shuffler)    // %3
595988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
596088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
596188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
596288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
596388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
596488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
596588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBSHUFFLEROW_AVX2
596688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
596788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBSHUFFLEROW_SSE2
596888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// For BGRAToARGB, ABGRToARGB, RGBAToARGB, and ARGBToRGBA.
596988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBShuffleRow_SSE2(const uint8* src_argb, uint8* dst_argb,
597088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                         const uint8* shuffler, int pix) {
597188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  uintptr_t pixel_temp = 0u;
597288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
597388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm5,%%xmm5                   \n"
597488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       " MEMACCESS(4) ",%k2            \n"
597588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x3000102,%k2                  \n"
597688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        3012f                           \n"
597788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x10203,%k2                    \n"
597888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        123f                            \n"
597988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x30201,%k2                    \n"
598088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        321f                            \n"
598188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cmp       $0x2010003,%k2                  \n"
598288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "je        2103f                           \n"
598388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
598488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
598588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
598688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS(4) ",%2             \n"
598788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,0,2,1,2) "             \n"  //  movzb     (%0,%2,1),%2
598888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b2," MEMACCESS(1) "            \n"
598988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x1,4) ",%2        \n"
599088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,0,2,1,2) "             \n"  //  movzb     (%0,%2,1),%2
599188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b2," MEMACCESS2(0x1,1) "       \n"
599288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
599388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x2,4) ",%2        \n"
599488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,0,2,1,2) "             \n"  //  movzb     (%0,%2,1),%2
599588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b2," MEMACCESS2(0x2,1) "       \n"
599688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x3,4) ",%2        \n"
599788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,0,2,1,2) "             \n"  //  movzb     (%0,%2,1),%2
599888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b2," MEMACCESS2(0x3,1) "       \n"
599988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,0) ",%0            \n"
600088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,1) ",%1            \n"
600188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x1,%3                         \n"
600288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
600388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
600488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
600588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
600688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "123:                                        \n"
600788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
600888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
600988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
601088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
601188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm5,%%xmm1                   \n"
601288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0x1b,%%xmm0,%%xmm0             \n"
601388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x1b,%%xmm0,%%xmm0             \n"
601488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0x1b,%%xmm1,%%xmm1             \n"
601588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x1b,%%xmm1,%%xmm1             \n"
601688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
601788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
601888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
601988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
602088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        123b                            \n"
602188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
602288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
602388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
602488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "321:                                        \n"
602588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
602688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
602788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
602888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
602988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm5,%%xmm1                   \n"
603088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0x39,%%xmm0,%%xmm0             \n"
603188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x39,%%xmm0,%%xmm0             \n"
603288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0x39,%%xmm1,%%xmm1             \n"
603388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x39,%%xmm1,%%xmm1             \n"
603488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
603588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
603688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
603788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
603888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        321b                            \n"
603988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
604088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
604188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
604288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "2103:                                       \n"
604388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
604488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
604588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
604688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
604788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm5,%%xmm1                   \n"
604888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0x93,%%xmm0,%%xmm0             \n"
604988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x93,%%xmm0,%%xmm0             \n"
605088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0x93,%%xmm1,%%xmm1             \n"
605188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0x93,%%xmm1,%%xmm1             \n"
605288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
605388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
605488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
605588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
605688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        2103b                           \n"
605788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jmp       99f                             \n"
605888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
605988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
606088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "3012:                                       \n"
606188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0         \n"
606288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0           \n"
606388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
606488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm5,%%xmm0                   \n"
606588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm5,%%xmm1                   \n"
606688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0xc6,%%xmm0,%%xmm0             \n"
606788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0xc6,%%xmm0,%%xmm0             \n"
606888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufhw   $0xc6,%%xmm1,%%xmm1             \n"
606988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshuflw   $0xc6,%%xmm1,%%xmm1             \n"
607088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm1,%%xmm0                   \n"
607188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%3                         \n"
607288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(1) "         \n"
607388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,1) ",%1           \n"
607488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        3012b                           \n"
607588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
607688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "99:                                         \n"
607788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),    // %0
607888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),    // %1
607988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+d"(pixel_temp),  // %2
608088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(pix)         // %3
608188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(shuffler)      // %4
608288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
608388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
608488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
608588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
608688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
608788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm5"
608888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
608988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
609088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
609188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBSHUFFLEROW_SSE2
609288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
609388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_I422TOYUY2ROW_SSE2
609488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid I422ToYUY2Row_SSE2(const uint8* src_y,
609588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        const uint8* src_u,
609688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        const uint8* src_v,
609788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        uint8* dst_frame, int width) {
609888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org asm volatile (
609988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       %1,%2                             \n"
610088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
610188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                            \n"
610288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(1) ",%%xmm2           \n"
610388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x00,1,2,1,xmm3)               //  movq    (%1,%2,1),%%xmm3
610488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1              \n"
610588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm3,%%xmm2                     \n"
610688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0           \n"
610788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0             \n"
610888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                     \n"
610988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm2,%%xmm0                     \n"
611088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm2,%%xmm1                     \n"
611188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm0," MEMACCESS(3) "           \n"
611288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS2(0x10,3) "     \n"
611388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,3) ",%3             \n"
611488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%4                          \n"
611588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg         1b                               \n"
611688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    : "+r"(src_y),  // %0
611788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+r"(src_u),  // %1
611888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+r"(src_v),  // %2
611988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+r"(dst_frame),  // %3
612088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+rm"(width)  // %4
612188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    :
612288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    : "memory", "cc"
612388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
612488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
612588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
612688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
612788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3"
612888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
612988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
613088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
613188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_I422TOYUY2ROW_SSE2
613288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
613388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_I422TOUYVYROW_SSE2
613488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid I422ToUYVYRow_SSE2(const uint8* src_y,
613588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        const uint8* src_u,
613688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        const uint8* src_v,
613788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                        uint8* dst_frame, int width) {
613888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org asm volatile (
613988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub        %1,%2                            \n"
614088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
614188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                            \n"
614288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(1) ",%%xmm2           \n"
614388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPREG(movq,0x00,1,2,1,xmm3)               //  movq    (%1,%2,1),%%xmm3
614488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1              \n"
614588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm3,%%xmm2                     \n"
614688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(0) ",%%xmm0           \n"
614788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm2,%%xmm1                     \n"
614888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,0) ",%0             \n"
614988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm0,%%xmm1                     \n"
615088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhbw %%xmm0,%%xmm2                     \n"
615188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm1," MEMACCESS(3) "           \n"
615288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    %%xmm2," MEMACCESS2(0x10,3) "     \n"
615388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x20,3) ",%3             \n"
615488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x10,%4                          \n"
615588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg         1b                               \n"
615688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    : "+r"(src_y),  // %0
615788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+r"(src_u),  // %1
615888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+r"(src_v),  // %2
615988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+r"(dst_frame),  // %3
616088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org      "+rm"(width)  // %4
616188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    :
616288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    : "memory", "cc"
616388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__native_client__) && defined(__x86_64__)
616488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "r14"
616588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
616688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
616788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3"
616888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
616988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
617088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
617188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_I422TOUYVYROW_SSE2
617288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
617388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBPOLYNOMIALROW_SSE2
617488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBPolynomialRow_SSE2(const uint8* src_argb,
617588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                            uint8* dst_argb, const float* poly,
617688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                            int width) {
617788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
617888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm3,%%xmm3                   \n"
617988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
618088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 2 pixel loop.
618188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
618288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
618388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      " MEMACCESS(0) ",%%xmm0         \n"
618488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,0) ",%0            \n"
618588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklbw %%xmm3,%%xmm0                   \n"
618688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm4                   \n"
618788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm3,%%xmm0                   \n"
618888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpckhwd %%xmm3,%%xmm4                   \n"
618988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm0,%%xmm0                   \n"
619088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvtdq2ps  %%xmm4,%%xmm4                   \n"
619188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm0,%%xmm1                   \n"
619288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm4,%%xmm5                   \n"
619388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     " MEMACCESS2(0x10,3) ",%%xmm0   \n"
619488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     " MEMACCESS2(0x10,3) ",%%xmm4   \n"
619588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     " MEMACCESS(3) ",%%xmm0         \n"
619688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     " MEMACCESS(3) ",%%xmm4         \n"
619788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm1,%%xmm2                   \n"
619888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqa    %%xmm5,%%xmm6                   \n"
619988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm1,%%xmm2                   \n"
620088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm5,%%xmm6                   \n"
620188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm2,%%xmm1                   \n"
620288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     %%xmm6,%%xmm5                   \n"
620388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     " MEMACCESS2(0x20,3) ",%%xmm2   \n"
620488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     " MEMACCESS2(0x20,3) ",%%xmm6   \n"
620588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     " MEMACCESS2(0x30,3) ",%%xmm1   \n"
620688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mulps     " MEMACCESS2(0x30,3) ",%%xmm5   \n"
620788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm2,%%xmm0                   \n"
620888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm6,%%xmm4                   \n"
620988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm1,%%xmm0                   \n"
621088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "addps     %%xmm5,%%xmm4                   \n"
621188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvttps2dq %%xmm0,%%xmm0                   \n"
621288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "cvttps2dq %%xmm4,%%xmm4                   \n"
621388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm4,%%xmm0                   \n"
621488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "packuswb  %%xmm0,%%xmm0                   \n"
621588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x2,%2                         \n"
621688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movq      %%xmm0," MEMACCESS(1) "         \n"
621788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x8,1) ",%1            \n"
621888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
621988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
622088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
622188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)      // %2
622288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(poly)        // %3
622388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
622488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
622588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6"
622688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
622788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
622888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
622988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBPOLYNOMIALROW_SSE2
623088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
623188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBPOLYNOMIALROW_AVX2
623288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBPolynomialRow_AVX2(const uint8* src_argb,
623388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                            uint8* dst_argb, const float* poly,
623488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                            int width) {
623588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
623688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vbroadcastf128 " MEMACCESS(3) ",%%ymm4     \n"
623788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vbroadcastf128 " MEMACCESS2(0x10,3) ",%%ymm5 \n"
623888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vbroadcastf128 " MEMACCESS2(0x20,3) ",%%ymm6 \n"
623988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vbroadcastf128 " MEMACCESS2(0x30,3) ",%%ymm7 \n"
624088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
624188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 2 pixel loop.
624288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
624388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
624488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpmovzxbd   " MEMACCESS(0) ",%%ymm0       \n"  // 2 ARGB pixels
624588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea         " MEMLEA(0x8,0) ",%0          \n"
624688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vcvtdq2ps   %%ymm0,%%ymm0                 \n"  // X 8 floats
624788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmulps      %%ymm0,%%ymm0,%%ymm2          \n"  // X * X
624888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmulps      %%ymm7,%%ymm0,%%ymm3          \n"  // C3 * X
624988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vfmadd132ps %%ymm5,%%ymm4,%%ymm0          \n"  // result = C0 + C1 * X
625088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vfmadd231ps %%ymm6,%%ymm2,%%ymm0          \n"  // result += C2 * X * X
625188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vfmadd231ps %%ymm3,%%ymm2,%%ymm0          \n"  // result += C3 * X * X * X
625288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vcvttps2dq  %%ymm0,%%ymm0                 \n"
625388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpackusdw   %%ymm0,%%ymm0,%%ymm0          \n"
625488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpermq      $0xd8,%%ymm0,%%ymm0           \n"
625588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vpackuswb   %%xmm0,%%xmm0,%%xmm0          \n"
625688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub         $0x2,%2                       \n"
625788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vmovq       %%xmm0," MEMACCESS(1) "       \n"
625888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea         " MEMLEA(0x8,1) ",%1          \n"
625988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg          1b                            \n"
626088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "vzeroupper                                \n"
626188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(src_argb),  // %0
626288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),  // %1
626388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)      // %2
626488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(poly)        // %3
626588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
626688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
626788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// TODO(fbarchard): declare ymm usage when applicable.
626888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7"
626988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
627088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
627188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
627288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBPOLYNOMIALROW_AVX2
627388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
627488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBCOLORTABLEROW_X86
627588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Tranform ARGB pixels with color table.
627688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb,
627788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                           int width) {
627888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  uintptr_t pixel_temp = 0u;
627988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
628088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 1 pixel loop.
628188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
628288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
628388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS(0) ",%1             \n"
628488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,0) ",%0            \n"
628588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,3,1,4,1) "             \n"  // movzb (%3,%1,4),%1
628688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b1," MEMACCESS2(-0x4,0) "      \n"
628788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(-0x3,0) ",%1       \n"
628888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x01,3,1,4,1) "             \n"  // movzb 0x1(%3,%1,4),%1
628988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b1," MEMACCESS2(-0x3,0) "      \n"
629088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(-0x2,0) ",%1       \n"
629188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x02,3,1,4,1) "             \n"  // movzb 0x2(%3,%1,4),%1
629288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b1," MEMACCESS2(-0x2,0) "      \n"
629388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(-0x1,0) ",%1       \n"
629488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x03,3,1,4,1) "             \n"  // movzb 0x3(%3,%1,4),%1
629588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b1," MEMACCESS2(-0x1,0) "      \n"
629688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "dec       %2                              \n"
629788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
629888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(dst_argb),   // %0
629988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+d"(pixel_temp), // %1
630088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)       // %2
630188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(table_argb)   // %3
630288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc");
630388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
630488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBCOLORTABLEROW_X86
630588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
630688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_RGBCOLORTABLEROW_X86
630788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Tranform RGB pixels with color table.
630888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid RGBColorTableRow_X86(uint8* dst_argb, const uint8* table_argb, int width) {
630988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  uintptr_t pixel_temp = 0u;
631088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
631188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 1 pixel loop.
631288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
631388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
631488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS(0) ",%1             \n"
631588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x4,0) ",%0            \n"
631688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,3,1,4,1) "             \n"  // movzb (%3,%1,4),%1
631788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b1," MEMACCESS2(-0x4,0) "      \n"
631888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(-0x3,0) ",%1       \n"
631988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x01,3,1,4,1) "             \n"  // movzb 0x1(%3,%1,4),%1
632088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b1," MEMACCESS2(-0x3,0) "      \n"
632188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(-0x2,0) ",%1       \n"
632288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x02,3,1,4,1) "             \n"  // movzb 0x2(%3,%1,4),%1
632388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b1," MEMACCESS2(-0x2,0) "      \n"
632488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "dec       %2                              \n"
632588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
632688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+r"(dst_argb),   // %0
632788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+d"(pixel_temp), // %1
632888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(width)       // %2
632988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(table_argb)   // %3
633088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc");
633188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
633288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_RGBCOLORTABLEROW_X86
633388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
633488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef HAS_ARGBLUMACOLORTABLEROW_SSSE3
633588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org// Tranform RGB pixels with luma table.
633688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.orgvoid ARGBLumaColorTableRow_SSSE3(const uint8* src_argb, uint8* dst_argb,
633788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 int width,
633888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org                                 const uint8* luma, uint32 lumacoeff) {
633988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  uintptr_t pixel_temp = 0u;
634088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  uintptr_t table_temp = 0u;
634188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  asm volatile (
634288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %6,%%xmm3                       \n"
634388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x0,%%xmm3,%%xmm3              \n"
634488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pcmpeqb   %%xmm4,%%xmm4                   \n"
634588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "psllw     $0x8,%%xmm4                     \n"
634688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pxor      %%xmm5,%%xmm5                   \n"
634788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
634888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    // 4 pixel loop.
634988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    LABELALIGN
635088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  "1:                                          \n"
635188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movdqu    " MEMACCESS(2) ",%%xmm0         \n"
635288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pmaddubsw %%xmm3,%%xmm0                   \n"
635388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "phaddw    %%xmm0,%%xmm0                   \n"
635488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pand      %%xmm4,%%xmm0                   \n"
635588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "punpcklwd %%xmm5,%%xmm0                   \n"
635688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k1                      \n"  // 32 bit offset
635788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       %5,%1                           \n"
635888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x39,%%xmm0,%%xmm0             \n"
635988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
636088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS(2) ",%0             \n"
636188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
636288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS(3) "            \n"
636388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x1,2) ",%0        \n"
636488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
636588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x1,3) "       \n"
636688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x2,2) ",%0        \n"
636788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
636888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x2,3) "       \n"
636988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x3,2) ",%0        \n"
637088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x3,3) "       \n"
637188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
637288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k1                      \n"  // 32 bit offset
637388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       %5,%1                           \n"
637488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x39,%%xmm0,%%xmm0             \n"
637588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
637688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x4,2) ",%0        \n"
637788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
637888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x4,3) "       \n"
637988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    BUNDLEALIGN
638088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x5,2) ",%0        \n"
638188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
638288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x5,3) "       \n"
638388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x6,2) ",%0        \n"
638488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
638588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x6,3) "       \n"
638688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x7,2) ",%0        \n"
638788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x7,3) "       \n"
638888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
638988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k1                      \n"  // 32 bit offset
639088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       %5,%1                           \n"
639188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "pshufd    $0x39,%%xmm0,%%xmm0             \n"
639288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
639388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x8,2) ",%0        \n"
639488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
639588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x8,3) "       \n"
639688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0x9,2) ",%0        \n"
639788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
639888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0x9,3) "       \n"
639988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0xa,2) ",%0        \n"
640088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
640188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0xa,3) "       \n"
640288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0xb,2) ",%0        \n"
640388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0xb,3) "       \n"
640488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
640588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movd      %%xmm0,%k1                      \n"  // 32 bit offset
640688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "add       %5,%1                           \n"
640788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
640888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0xc,2) ",%0        \n"
640988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
641088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0xc,3) "       \n"
641188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0xd,2) ",%0        \n"
641288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
641388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0xd,3) "       \n"
641488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0xe,2) ",%0        \n"
641588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    MEMOPARG(movzb,0x00,1,0,1,0) "             \n"  // movzb     (%1,%0,1),%0
641688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0xe,3) "       \n"
641788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "movzb     " MEMACCESS2(0xf,2) ",%0        \n"
641888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "mov       %b0," MEMACCESS2(0xf,3) "       \n"
641988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "sub       $0x4,%4                         \n"
642088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,2) ",%2           \n"
642188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "lea       " MEMLEA(0x10,3) ",%3           \n"
642288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "jg        1b                              \n"
642388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "+d"(pixel_temp),  // %0
642488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+a"(table_temp),  // %1
642588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(src_argb),    // %2
642688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+r"(dst_argb),    // %3
642788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "+rm"(width)       // %4
642888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "r"(luma),         // %5
642988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    "rm"(lumacoeff)    // %6
643088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  : "memory", "cc"
643188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#if defined(__SSE2__)
643288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org    , "xmm0", "xmm3", "xmm4", "xmm5"
643388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
643488b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org  );
643588b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}
643688b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // HAS_ARGBLUMACOLORTABLEROW_SSSE3
643788b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
643888b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif  // defined(__x86_64__) || defined(__i386__)
643988b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org
644088b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#ifdef __cplusplus
644188b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}  // extern "C"
644288b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org}  // namespace libyuv
644388b47b29cc274dd19cddc37c1ce1834d97df282efgalligan@chromium.org#endif
6444