Index: source/libvpx/vpx_scale/win32/scaleopt.c |
diff --git a/source/libvpx/vpx_scale/win32/scaleopt.c b/source/libvpx/vpx_scale/win32/scaleopt.c |
deleted file mode 100644 |
index 4336ecea35dd8f337302bfa824fdb51a5f141896..0000000000000000000000000000000000000000 |
--- a/source/libvpx/vpx_scale/win32/scaleopt.c |
+++ /dev/null |
@@ -1,525 +0,0 @@ |
-/* |
- * Copyright (c) 2010 The WebM project authors. All Rights Reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
- |
-/**************************************************************************** |
-* |
-* Module Title : scaleopt.cpp |
-* |
-* Description : Optimized scaling functions |
-* |
-****************************************************************************/ |
-#include "pragmas.h" |
- |
-/**************************************************************************** |
-* Module Statics |
-****************************************************************************/ |
-__declspec(align(16)) const static unsigned short round_values[] = { 128, 128, 128, 128 }; |
- |
-#include "vpx_scale/vpx_scale.h" |
-#include "vpx_mem/vpx_mem.h" |
- |
-__declspec(align(16)) const static unsigned short const54_2[] = { 0, 64, 128, 192 }; |
-__declspec(align(16)) const static unsigned short const54_1[] = {256, 192, 128, 64 }; |
- |
- |
-/**************************************************************************** |
- * |
- * ROUTINE : horizontal_line_5_4_scale_mmx |
- * |
- * INPUTS : const unsigned char *source : Pointer to source data. |
- * unsigned int source_width : Stride of source. |
- * unsigned char *dest : Pointer to destination data. |
- * unsigned int dest_width : Stride of destination (NOT USED). |
- * |
- * OUTPUTS : None. |
- * |
- * RETURNS : void |
- * |
- * FUNCTION : Copies horizontal line of pixels from source to |
- * destination scaling up by 4 to 5. |
- * |
- * SPECIAL NOTES : None. |
- * |
- ****************************************************************************/ |
-static |
-void horizontal_line_5_4_scale_mmx |
-( |
- const unsigned char *source, |
- unsigned int source_width, |
- unsigned char *dest, |
- unsigned int dest_width |
-) { |
- /* |
- unsigned i; |
- unsigned int a, b, c, d, e; |
- unsigned char *des = dest; |
- const unsigned char *src = source; |
- |
- (void) dest_width; |
- |
- for ( i=0; i<source_width; i+=5 ) |
- { |
- a = src[0]; |
- b = src[1]; |
- c = src[2]; |
- d = src[3]; |
- e = src[4]; |
- |
- des[0] = a; |
- des[1] = ((b*192 + c* 64 + 128)>>8); |
- des[2] = ((c*128 + d*128 + 128)>>8); |
- des[3] = ((d* 64 + e*192 + 128)>>8); |
- |
- src += 5; |
- des += 4; |
- } |
- */ |
- (void) dest_width; |
- |
- __asm { |
- |
- mov esi, source; |
- mov edi, dest; |
- |
- mov ecx, source_width; |
- movq mm5, const54_1; |
- |
- pxor mm7, mm7; |
- movq mm6, const54_2; |
- |
- movq mm4, round_values; |
- lea edx, [esi+ecx]; |
- horizontal_line_5_4_loop: |
- |
- movq mm0, QWORD PTR [esi]; |
- 00 01 02 03 04 05 06 07 |
- movq mm1, mm0; |
- 00 01 02 03 04 05 06 07 |
- |
- psrlq mm0, 8; |
- 01 02 03 04 05 06 07 xx |
- punpcklbw mm1, mm7; |
- xx 00 xx 01 xx 02 xx 03 |
- |
- punpcklbw mm0, mm7; |
- xx 01 xx 02 xx 03 xx 04 |
- pmullw mm1, mm5 |
- |
- pmullw mm0, mm6 |
- add esi, 5 |
- |
- add edi, 4 |
- paddw mm1, mm0 |
- |
- paddw mm1, mm4 |
- psrlw mm1, 8 |
- |
- cmp esi, edx |
- packuswb mm1, mm7 |
- |
- movd DWORD PTR [edi-4], mm1 |
- |
- jl horizontal_line_5_4_loop |
- |
- } |
- |
-} |
-__declspec(align(16)) const static unsigned short one_fourths[] = { 64, 64, 64, 64 }; |
-__declspec(align(16)) const static unsigned short two_fourths[] = { 128, 128, 128, 128 }; |
-__declspec(align(16)) const static unsigned short three_fourths[] = { 192, 192, 192, 192 }; |
- |
-static |
-void vertical_band_5_4_scale_mmx(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) { |
- |
- __asm { |
- push ebx |
- |
- mov esi, source // Get the source and destination pointer |
- mov ecx, src_pitch // Get the pitch size |
- |
- mov edi, dest // tow lines below |
- pxor mm7, mm7 // clear out mm7 |
- |
- mov edx, dest_pitch // Loop counter |
- mov ebx, dest_width |
- |
- vs_5_4_loop: |
- |
- movd mm0, DWORD ptr [esi] // src[0]; |
- movd mm1, DWORD ptr [esi+ecx] // src[1]; |
- |
- movd mm2, DWORD ptr [esi+ecx*2] |
- lea eax, [esi+ecx*2] // |
- |
- punpcklbw mm1, mm7 |
- punpcklbw mm2, mm7 |
- |
- movq mm3, mm2 |
- pmullw mm1, three_fourths |
- |
- pmullw mm2, one_fourths |
- movd mm4, [eax+ecx] |
- |
- pmullw mm3, two_fourths |
- punpcklbw mm4, mm7 |
- |
- movq mm5, mm4 |
- pmullw mm4, two_fourths |
- |
- paddw mm1, mm2 |
- movd mm6, [eax+ecx*2] |
- |
- pmullw mm5, one_fourths |
- paddw mm1, round_values; |
- |
- paddw mm3, mm4 |
- psrlw mm1, 8 |
- |
- punpcklbw mm6, mm7 |
- paddw mm3, round_values |
- |
- pmullw mm6, three_fourths |
- psrlw mm3, 8 |
- |
- packuswb mm1, mm7 |
- packuswb mm3, mm7 |
- |
- movd DWORD PTR [edi], mm0 |
- movd DWORD PTR [edi+edx], mm1 |
- |
- |
- paddw mm5, mm6 |
- movd DWORD PTR [edi+edx*2], mm3 |
- |
- lea eax, [edi+edx*2] |
- paddw mm5, round_values |
- |
- psrlw mm5, 8 |
- add edi, 4 |
- |
- packuswb mm5, mm7 |
- movd DWORD PTR [eax+edx], mm5 |
- |
- add esi, 4 |
- sub ebx, 4 |
- |
- jg vs_5_4_loop |
- |
- pop ebx |
- } |
-} |
- |
- |
-__declspec(align(16)) const static unsigned short const53_1[] = { 0, 85, 171, 0 }; |
-__declspec(align(16)) const static unsigned short const53_2[] = {256, 171, 85, 0 }; |
- |
- |
-static |
-void horizontal_line_5_3_scale_mmx |
-( |
- const unsigned char *source, |
- unsigned int source_width, |
- unsigned char *dest, |
- unsigned int dest_width |
-) { |
- |
- (void) dest_width; |
- __asm { |
- |
- mov esi, source; |
- mov edi, dest; |
- |
- mov ecx, source_width; |
- movq mm5, const53_1; |
- |
- pxor mm7, mm7; |
- movq mm6, const53_2; |
- |
- movq mm4, round_values; |
- lea edx, [esi+ecx-5]; |
- horizontal_line_5_3_loop: |
- |
- movq mm0, QWORD PTR [esi]; |
- 00 01 02 03 04 05 06 07 |
- movq mm1, mm0; |
- 00 01 02 03 04 05 06 07 |
- |
- psllw mm0, 8; |
- xx 00 xx 02 xx 04 xx 06 |
- psrlw mm1, 8; |
- 01 xx 03 xx 05 xx 07 xx |
- |
- psrlw mm0, 8; |
- 00 xx 02 xx 04 xx 06 xx |
- psllq mm1, 16; |
- xx xx 01 xx 03 xx 05 xx |
- |
- pmullw mm0, mm6 |
- |
- pmullw mm1, mm5 |
- add esi, 5 |
- |
- add edi, 3 |
- paddw mm1, mm0 |
- |
- paddw mm1, mm4 |
- psrlw mm1, 8 |
- |
- cmp esi, edx |
- packuswb mm1, mm7 |
- |
- movd DWORD PTR [edi-3], mm1 |
- jl horizontal_line_5_3_loop |
- |
-// exit condition |
- movq mm0, QWORD PTR [esi]; |
- 00 01 02 03 04 05 06 07 |
- movq mm1, mm0; |
- 00 01 02 03 04 05 06 07 |
- |
- psllw mm0, 8; |
- xx 00 xx 02 xx 04 xx 06 |
- psrlw mm1, 8; |
- 01 xx 03 xx 05 xx 07 xx |
- |
- psrlw mm0, 8; |
- 00 xx 02 xx 04 xx 06 xx |
- psllq mm1, 16; |
- xx xx 01 xx 03 xx 05 xx |
- |
- pmullw mm0, mm6 |
- |
- pmullw mm1, mm5 |
- paddw mm1, mm0 |
- |
- paddw mm1, mm4 |
- psrlw mm1, 8 |
- |
- packuswb mm1, mm7 |
- movd eax, mm1 |
- |
- mov edx, eax |
- shr edx, 16 |
- |
- mov WORD PTR[edi], ax |
- mov BYTE PTR[edi+2], dl |
- |
- } |
- |
-} |
- |
-__declspec(align(16)) const static unsigned short one_thirds[] = { 85, 85, 85, 85 }; |
-__declspec(align(16)) const static unsigned short two_thirds[] = { 171, 171, 171, 171 }; |
- |
-static |
-void vertical_band_5_3_scale_mmx(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) { |
- |
- __asm { |
- push ebx |
- |
- mov esi, source // Get the source and destination pointer |
- mov ecx, src_pitch // Get the pitch size |
- |
- mov edi, dest // tow lines below |
- pxor mm7, mm7 // clear out mm7 |
- |
- mov edx, dest_pitch // Loop counter |
- movq mm5, one_thirds |
- |
- movq mm6, two_thirds |
- mov ebx, dest_width; |
- |
- vs_5_3_loop: |
- |
- movd mm0, DWORD ptr [esi] // src[0]; |
- movd mm1, DWORD ptr [esi+ecx] // src[1]; |
- |
- movd mm2, DWORD ptr [esi+ecx*2] |
- lea eax, [esi+ecx*2] // |
- |
- punpcklbw mm1, mm7 |
- punpcklbw mm2, mm7 |
- |
- pmullw mm1, mm5 |
- pmullw mm2, mm6 |
- |
- movd mm3, DWORD ptr [eax+ecx] |
- movd mm4, DWORD ptr [eax+ecx*2] |
- |
- punpcklbw mm3, mm7 |
- punpcklbw mm4, mm7 |
- |
- pmullw mm3, mm6 |
- pmullw mm4, mm5 |
- |
- |
- movd DWORD PTR [edi], mm0 |
- paddw mm1, mm2 |
- |
- paddw mm1, round_values |
- psrlw mm1, 8 |
- |
- packuswb mm1, mm7 |
- paddw mm3, mm4 |
- |
- paddw mm3, round_values |
- movd DWORD PTR [edi+edx], mm1 |
- |
- psrlw mm3, 8 |
- packuswb mm3, mm7 |
- |
- movd DWORD PTR [edi+edx*2], mm3 |
- |
- |
- add edi, 4 |
- add esi, 4 |
- |
- sub ebx, 4 |
- jg vs_5_3_loop |
- |
- pop ebx |
- } |
-} |
- |
- |
- |
- |
-/**************************************************************************** |
- * |
- * ROUTINE : horizontal_line_2_1_scale |
- * |
- * INPUTS : const unsigned char *source : |
- * unsigned int source_width : |
- * unsigned char *dest : |
- * unsigned int dest_width : |
- * |
- * OUTPUTS : None. |
- * |
- * RETURNS : void |
- * |
- * FUNCTION : 1 to 2 up-scaling of a horizontal line of pixels. |
- * |
- * SPECIAL NOTES : None. |
- * |
- ****************************************************************************/ |
-static |
-void horizontal_line_2_1_scale_mmx |
-( |
- const unsigned char *source, |
- unsigned int source_width, |
- unsigned char *dest, |
- unsigned int dest_width |
-) { |
- (void) dest_width; |
- (void) source_width; |
- __asm { |
- mov esi, source |
- mov edi, dest |
- |
- pxor mm7, mm7 |
- mov ecx, dest_width |
- |
- xor edx, edx |
- hs_2_1_loop: |
- |
- movq mm0, [esi+edx*2] |
- psllw mm0, 8 |
- |
- psrlw mm0, 8 |
- packuswb mm0, mm7 |
- |
- movd DWORD Ptr [edi+edx], mm0; |
- add edx, 4 |
- |
- cmp edx, ecx |
- jl hs_2_1_loop |
- |
- } |
-} |
- |
- |
- |
-static |
-void vertical_band_2_1_scale_mmx(unsigned char *source, unsigned int src_pitch, unsigned char *dest, unsigned int dest_pitch, unsigned int dest_width) { |
- (void) dest_pitch; |
- (void) src_pitch; |
- vpx_memcpy(dest, source, dest_width); |
-} |
- |
- |
-__declspec(align(16)) const static unsigned short three_sixteenths[] = { 48, 48, 48, 48 }; |
-__declspec(align(16)) const static unsigned short ten_sixteenths[] = { 160, 160, 160, 160 }; |
- |
-static |
-void 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) { |
- |
- (void) dest_pitch; |
- __asm { |
- mov esi, source |
- mov edi, dest |
- |
- mov eax, src_pitch |
- mov edx, dest_width |
- |
- pxor mm7, mm7 |
- sub esi, eax // back one line |
- |
- |
- lea ecx, [esi+edx]; |
- movq mm6, round_values; |
- |
- movq mm5, three_sixteenths; |
- movq mm4, ten_sixteenths; |
- |
- vs_2_1_i_loop: |
- movd mm0, [esi] // |
- movd mm1, [esi+eax] // |
- |
- movd mm2, [esi+eax*2] // |
- punpcklbw mm0, mm7 |
- |
- pmullw mm0, mm5 |
- punpcklbw mm1, mm7 |
- |
- pmullw mm1, mm4 |
- punpcklbw mm2, mm7 |
- |
- pmullw mm2, mm5 |
- paddw mm0, round_values |
- |
- paddw mm1, mm2 |
- paddw mm0, mm1 |
- |
- psrlw mm0, 8 |
- packuswb mm0, mm7 |
- |
- movd DWORD PTR [edi], mm0 |
- add esi, 4 |
- |
- add edi, 4; |
- cmp esi, ecx |
- jl vs_2_1_i_loop |
- |
- } |
-} |
- |
- |
- |
-void |
-register_mmxscalers(void) { |
- vp8_vertical_band_5_4_scale = vertical_band_5_4_scale_mmx; |
- vp8_vertical_band_5_3_scale = vertical_band_5_3_scale_mmx; |
- vp8_vertical_band_2_1_scale = vertical_band_2_1_scale_mmx; |
- vp8_vertical_band_2_1_scale_i = vertical_band_2_1_scale_i_mmx; |
- vp8_horizontal_line_2_1_scale = horizontal_line_2_1_scale_mmx; |
- vp8_horizontal_line_5_3_scale = horizontal_line_5_3_scale_mmx; |
- vp8_horizontal_line_5_4_scale = horizontal_line_5_4_scale_mmx; |
-} |