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