1474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/* 2474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 4474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * Use of this source code is governed by a BSD-style license 5474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * that can be found in the LICENSE file in the root of the source 6474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * tree. An additional intellectual property rights grant can be found 7474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * in the file PATENTS. All contributing project authors may 8474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * be found in the AUTHORS file in the root of the source tree. 9474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org */ 10474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 11474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 12474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/**************************************************************************** 13474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org* 14474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org* Module Title : scaleopt.cpp 15474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org* 16474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org* Description : Optimized scaling functions 17474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org* 18474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org****************************************************************************/ 19474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org#include "pragmas.h" 20474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 21474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/**************************************************************************** 226fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org* Module Statics 236fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org****************************************************************************/ 246fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org__declspec(align(16)) const static unsigned short round_values[] = { 128, 128, 128, 128 }; 25474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 26d348b8d765c019ee7250075d663a83db00c65c08tomfinegan@chromium.org#include "vpx_scale/vpx_scale.h" 276fefe538d859300e7febe78271828198c10f1b52fgalligan@chromium.org#include "vpx_mem/vpx_mem.h" 28474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 29474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short const54_2[] = { 0, 64, 128, 192 }; 30474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short const54_1[] = {256, 192, 128, 64 }; 31474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 32474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 33474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/**************************************************************************** 34474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 35474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * ROUTINE : horizontal_line_5_4_scale_mmx 36474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 37474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * INPUTS : const unsigned char *source : Pointer to source data. 38474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * unsigned int source_width : Stride of source. 39474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * unsigned char *dest : Pointer to destination data. 40474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * unsigned int dest_width : Stride of destination (NOT USED). 41474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 42474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * OUTPUTS : None. 43474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 44474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * RETURNS : void 45474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 46474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * FUNCTION : Copies horizontal line of pixels from source to 47474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * destination scaling up by 4 to 5. 48474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 49474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * SPECIAL NOTES : None. 50474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 51474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ****************************************************************************/ 52474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic 53474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid horizontal_line_5_4_scale_mmx 54474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org( 55ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org const unsigned char *source, 56ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int source_width, 57ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *dest, 58ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int dest_width 59ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) { 60ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org /* 61ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned i; 62ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int a, b, c, d, e; 63ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *des = dest; 64ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org const unsigned char *src = source; 65474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 66ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org (void) dest_width; 67474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 68ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org for ( i=0; i<source_width; i+=5 ) 69ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org { 70ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org a = src[0]; 71ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org b = src[1]; 72ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org c = src[2]; 73ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org d = src[3]; 74ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org e = src[4]; 75474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 76ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org des[0] = a; 77ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org des[1] = ((b*192 + c* 64 + 128)>>8); 78ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org des[2] = ((c*128 + d*128 + 128)>>8); 79ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org des[3] = ((d* 64 + e*192 + 128)>>8); 80474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 81ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org src += 5; 82ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org des += 4; 83ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 84ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org */ 85ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org (void) dest_width; 86474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 87ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm { 88474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 89ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov esi, source; 90ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edi, dest; 91474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 92ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov ecx, source_width; 93ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm5, const54_1; 94474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 95ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pxor mm7, mm7; 96ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm6, const54_2; 97474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 98ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm4, round_values; 99ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org lea edx, [esi+ecx]; 100ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org horizontal_line_5_4_loop: 101474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 102ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm0, QWORD PTR [esi]; 103ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 00 01 02 03 04 05 06 07 104ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm1, mm0; 105ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 00 01 02 03 04 05 06 07 106474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 107ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlq mm0, 8; 108ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 01 02 03 04 05 06 07 xx 109ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm1, mm7; 110ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org xx 00 xx 01 xx 02 xx 03 111474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 112ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm0, mm7; 113ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org xx 01 xx 02 xx 03 xx 04 114ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm1, mm5 115474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 116ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm0, mm6 117ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add esi, 5 118474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 119ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add edi, 4 120ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm0 121474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 122ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm4 123ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm1, 8 124474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 125ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org cmp esi, edx 126ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm1, mm7 127474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 128ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi-4], mm1 129474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 130ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org jl horizontal_line_5_4_loop 131474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 132ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 133474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 134474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 135474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short one_fourths[] = { 64, 64, 64, 64 }; 136474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short two_fourths[] = { 128, 128, 128, 128 }; 137474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short three_fourths[] = { 192, 192, 192, 192 }; 138474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 139474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic 140ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vertical_band_5_4_scale_mmx(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) { 141474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 142ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm { 143ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org push ebx 144474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 145ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov esi, source // Get the source and destination pointer 146ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov ecx, src_pitch // Get the pitch size 147474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 148ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edi, dest // tow lines below 149ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pxor mm7, mm7 // clear out mm7 150474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 151ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edx, dest_pitch // Loop counter 152ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov ebx, dest_width 153474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 154ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vs_5_4_loop: 155474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 156ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm0, DWORD ptr [esi] // src[0]; 157ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm1, DWORD ptr [esi+ecx] // src[1]; 158474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 159ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm2, DWORD ptr [esi+ecx*2] 160ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org lea eax, [esi+ecx*2] // 161474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 162ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm1, mm7 163ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm2, mm7 164474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 165ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm3, mm2 166ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm1, three_fourths 167474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 168ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm2, one_fourths 169ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm4, [eax+ecx] 170474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 171ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm3, two_fourths 172ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm4, mm7 173474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 174ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm5, mm4 175ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm4, two_fourths 176474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 177ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm2 178ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm6, [eax+ecx*2] 179474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 180ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm5, one_fourths 181ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, round_values; 182474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 183ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm3, mm4 184ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm1, 8 185474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 186ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm6, mm7 187ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm3, round_values 188474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 189ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm6, three_fourths 190ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm3, 8 191474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 192ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm1, mm7 193ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm3, mm7 194474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 195ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi], mm0 196ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi+edx], mm1 197474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 198474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 199ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm5, mm6 200ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi+edx*2], mm3 201474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 202ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org lea eax, [edi+edx*2] 203ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm5, round_values 204474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 205ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm5, 8 206ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add edi, 4 207474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 208ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm5, mm7 209ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [eax+edx], mm5 210474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 211ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add esi, 4 212ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org sub ebx, 4 213474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 214ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org jg vs_5_4_loop 215474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 216ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pop ebx 217ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 218474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 219474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 220474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 221474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short const53_1[] = { 0, 85, 171, 0 }; 222474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short const53_2[] = {256, 171, 85, 0 }; 223474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 224474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 225474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic 226474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid horizontal_line_5_3_scale_mmx 227474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org( 228ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org const unsigned char *source, 229ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int source_width, 230ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *dest, 231ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int dest_width 232ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) { 233474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 234ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org (void) dest_width; 235ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm { 236474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 237ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov esi, source; 238ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edi, dest; 239474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 240ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov ecx, source_width; 241ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm5, const53_1; 242474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 243ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pxor mm7, mm7; 244ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm6, const53_2; 245474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 246ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm4, round_values; 247ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org lea edx, [esi+ecx-5]; 248ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org horizontal_line_5_3_loop: 249474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 250ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm0, QWORD PTR [esi]; 251ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 00 01 02 03 04 05 06 07 252ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm1, mm0; 253ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 00 01 02 03 04 05 06 07 254474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 255ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psllw mm0, 8; 256ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org xx 00 xx 02 xx 04 xx 06 257ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm1, 8; 258ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 01 xx 03 xx 05 xx 07 xx 259474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 260ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm0, 8; 261ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 00 xx 02 xx 04 xx 06 xx 262ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psllq mm1, 16; 263ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org xx xx 01 xx 03 xx 05 xx 264474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 265ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm0, mm6 266474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 267ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm1, mm5 268ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add esi, 5 269474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 270ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add edi, 3 271ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm0 272474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 273ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm4 274ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm1, 8 275474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 276ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org cmp esi, edx 277ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm1, mm7 278474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 279ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi-3], mm1 280ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org jl horizontal_line_5_3_loop 281474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 282ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org// exit condition 283ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm0, QWORD PTR [esi]; 284ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 00 01 02 03 04 05 06 07 285ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm1, mm0; 286ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 00 01 02 03 04 05 06 07 287474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 288ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psllw mm0, 8; 289ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org xx 00 xx 02 xx 04 xx 06 290ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm1, 8; 291ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 01 xx 03 xx 05 xx 07 xx 292474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 293ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm0, 8; 294ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 00 xx 02 xx 04 xx 06 xx 295ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psllq mm1, 16; 296ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org xx xx 01 xx 03 xx 05 xx 297474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 298ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm0, mm6 299474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 300ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm1, mm5 301ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm0 302474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 303ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm4 304ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm1, 8 305474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 306ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm1, mm7 307ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd eax, mm1 308474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 309ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edx, eax 310ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org shr edx, 16 311474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 312ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov WORD PTR[edi], ax 313ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov BYTE PTR[edi+2], dl 314474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 315ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 316474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 317474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 318474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 319474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short one_thirds[] = { 85, 85, 85, 85 }; 320474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short two_thirds[] = { 171, 171, 171, 171 }; 321474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 322474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic 323ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vertical_band_5_3_scale_mmx(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) { 324474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 325ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm { 326ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org push ebx 327474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 328ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov esi, source // Get the source and destination pointer 329ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov ecx, src_pitch // Get the pitch size 330474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 331ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edi, dest // tow lines below 332ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pxor mm7, mm7 // clear out mm7 333474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 334ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edx, dest_pitch // Loop counter 335ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm5, one_thirds 336474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 337ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm6, two_thirds 338ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov ebx, dest_width; 339474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 340ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vs_5_3_loop: 341474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 342ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm0, DWORD ptr [esi] // src[0]; 343ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm1, DWORD ptr [esi+ecx] // src[1]; 344474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 345ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm2, DWORD ptr [esi+ecx*2] 346ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org lea eax, [esi+ecx*2] // 347474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 348ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm1, mm7 349ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm2, mm7 350474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 351ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm1, mm5 352ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm2, mm6 353474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 354ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm3, DWORD ptr [eax+ecx] 355ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm4, DWORD ptr [eax+ecx*2] 356474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 357ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm3, mm7 358ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm4, mm7 359474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 360ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm3, mm6 361ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm4, mm5 362474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 363474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 364ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi], mm0 365ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm2 366474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 367ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, round_values 368ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm1, 8 369474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 370ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm1, mm7 371ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm3, mm4 372474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 373ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm3, round_values 374ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi+edx], mm1 375474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 376ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm3, 8 377ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm3, mm7 378474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 379ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi+edx*2], mm3 380474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 381474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 382ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add edi, 4 383ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add esi, 4 384474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 385ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org sub ebx, 4 386ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org jg vs_5_3_loop 387474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 388ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pop ebx 389ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 390474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 391474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 392474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 393474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 394474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 395474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org/**************************************************************************** 396474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 397474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * ROUTINE : horizontal_line_2_1_scale 398474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 399474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * INPUTS : const unsigned char *source : 400474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * unsigned int source_width : 401474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * unsigned char *dest : 402474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * unsigned int dest_width : 403474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 404474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * OUTPUTS : None. 405474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 406474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * RETURNS : void 407474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 408474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * FUNCTION : 1 to 2 up-scaling of a horizontal line of pixels. 409474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 410474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * SPECIAL NOTES : None. 411474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org * 412474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org ****************************************************************************/ 413474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic 414474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid horizontal_line_2_1_scale_mmx 415474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org( 416ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org const unsigned char *source, 417ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int source_width, 418ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned char *dest, 419ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org unsigned int dest_width 420ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org) { 421ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org (void) dest_width; 422ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org (void) source_width; 423ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm { 424ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov esi, source 425ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edi, dest 426ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 427ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pxor mm7, mm7 428ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov ecx, dest_width 429ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 430ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org xor edx, edx 431ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org hs_2_1_loop: 432ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 433ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm0, [esi+edx*2] 434ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psllw mm0, 8 435ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 436ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm0, 8 437ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm0, mm7 438ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 439ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD Ptr [edi+edx], mm0; 440ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add edx, 4 441ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 442ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org cmp edx, ecx 443ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org jl hs_2_1_loop 444ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org 445ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 446474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 447474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 448474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 449474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 450474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic 451ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vertical_band_2_1_scale_mmx(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) { 452ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org (void) dest_pitch; 453ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org (void) src_pitch; 454ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vpx_memcpy(dest, source, dest_width); 455474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 456474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 457474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 458474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short three_sixteenths[] = { 48, 48, 48, 48 }; 459474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org__declspec(align(16)) const static unsigned short ten_sixteenths[] = { 160, 160, 160, 160 }; 460474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 461474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgstatic 462ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgvoid vertical_band_2_1_scale_i_mmx(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) { 463474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 464ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org (void) dest_pitch; 465ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org __asm { 466ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov esi, source 467ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edi, dest 468474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 469ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov eax, src_pitch 470ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org mov edx, dest_width 471474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 472ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pxor mm7, mm7 473ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org sub esi, eax // back one line 474474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 475474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 476ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org lea ecx, [esi+edx]; 477ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm6, round_values; 478474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 479ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm5, three_sixteenths; 480ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movq mm4, ten_sixteenths; 481474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 482ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vs_2_1_i_loop: 483ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm0, [esi] // 484ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm1, [esi+eax] // 485474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 486ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd mm2, [esi+eax*2] // 487ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm0, mm7 488474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 489ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm0, mm5 490ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm1, mm7 491474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 492ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm1, mm4 493ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org punpcklbw mm2, mm7 494474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 495ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org pmullw mm2, mm5 496ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm0, round_values 497474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 498ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm1, mm2 499ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org paddw mm0, mm1 500474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 501ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org psrlw mm0, 8 502ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org packuswb mm0, mm7 503474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 504ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org movd DWORD PTR [edi], mm0 505ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add esi, 4 506474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 507ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org add edi, 4; 508ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org cmp esi, ecx 509ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org jl vs_2_1_i_loop 510474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 511ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org } 512474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 513474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 514474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 515474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org 516474eb7536515fb785e925cc9375d22817c416851hclam@chromium.orgvoid 517ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.orgregister_mmxscalers(void) { 518ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_vertical_band_5_4_scale = vertical_band_5_4_scale_mmx; 519ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_vertical_band_5_3_scale = vertical_band_5_3_scale_mmx; 520ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_vertical_band_2_1_scale = vertical_band_2_1_scale_mmx; 521ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_vertical_band_2_1_scale_i = vertical_band_2_1_scale_i_mmx; 522ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_horizontal_line_2_1_scale = horizontal_line_2_1_scale_mmx; 523ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_horizontal_line_5_3_scale = horizontal_line_5_3_scale_mmx; 524ed759d81a39febed3a8a395386639d54307504aagrunell@chromium.org vp8_horizontal_line_5_4_scale = horizontal_line_5_4_scale_mmx; 525474eb7536515fb785e925cc9375d22817c416851hclam@chromium.org} 526