Index: media/base/simd/linear_scale_yuv_to_rgb_mmx_x64.asm |
diff --git a/media/base/simd/linear_scale_yuv_to_rgb_mmx_x64.asm b/media/base/simd/linear_scale_yuv_to_rgb_mmx_x64.asm |
deleted file mode 100644 |
index 969a1fde940a5b7249b11cd5eb6bea61a9be01fb..0000000000000000000000000000000000000000 |
--- a/media/base/simd/linear_scale_yuv_to_rgb_mmx_x64.asm |
+++ /dev/null |
@@ -1,152 +0,0 @@ |
-; Copyright (c) 2011 The Chromium Authors. All rights reserved. |
-; Use of this source code is governed by a BSD-style license that can be |
-; found in the LICENSE file. |
- |
-%include "media/base/simd/media_export.asm" |
-%include "third_party/x86inc/x86inc.asm" |
- |
-; |
-; This file uses MMX instructions. |
-; |
- SECTION_TEXT |
- CPU MMX |
- |
-;void LinearScaleYUVToRGB32Row_MMX_X64(const uint8_t* y_buf, |
-; const uint8_t* u_buf, |
-; const uint8_t* v_buf, |
-; uint8_t* rgb_buf, |
-; ptrdiff_t width, |
-; ptrdiff_t source_dx); |
-%define SYMBOL LinearScaleYUVToRGB32Row_MMX_X64 |
- EXPORT SYMBOL |
- align function_align |
- |
-mangle(SYMBOL): |
- %assign stack_offset 0 |
- |
-; Parameters are in the following order: |
-; 1. Y plane |
-; 2. U plane |
-; 3. V plane |
-; 4. ARGB frame |
-; 5. Width |
-; 6. Source dx |
-; 7. Conversion lookup table |
- |
-PROLOGUE 7, 7, 3, Y, U, V, ARGB, WIDTH, SOURCE_DX, R1 |
- |
-%define TABLEq r10 |
-%define Xq r11 |
-%define INDEXq r12 |
-%define COMPRd r13d |
-%define COMPRq r13 |
-%define FRACTIONq r14 |
-%define COMPL R1 |
-%define COMPLq R1q |
-%define COMPLd R1d |
- |
- PUSH TABLEq |
- PUSH Xq |
- PUSH INDEXq |
- PUSH COMPRq |
- PUSH FRACTIONq |
- |
-%macro EPILOGUE 0 |
- POP FRACTIONq |
- POP COMPRq |
- POP INDEXq |
- POP Xq |
- POP TABLEq |
-%endmacro |
- |
- mov TABLEq, R1q |
- |
- imul WIDTHq, SOURCE_DXq ; source_width = width * source_dx |
- xor Xq, Xq ; x = 0 |
- cmp SOURCE_DXq, 0x20000 |
- jl .lscaleend |
- mov Xq, 0x8000 ; x = 0.5 for 1/2 or less |
- jmp .lscaleend |
- |
-.lscaleloop: |
- ; Interpolate U |
- mov INDEXq, Xq |
- sar INDEXq, 0x11 |
- movzx COMPLd, BYTE [Uq + INDEXq] |
- movzx COMPRd, BYTE [Uq + INDEXq + 1] |
- mov FRACTIONq, Xq |
- and FRACTIONq, 0x1fffe |
- imul COMPRq, FRACTIONq |
- xor FRACTIONq, 0x1fffe |
- imul COMPLq, FRACTIONq |
- add COMPLq, COMPRq |
- shr COMPLq, 17 |
- movq mm0, [TABLEq + 2048 + 8 * COMPLq] |
- |
- ; Interpolate V |
- movzx COMPLd, BYTE [Vq + INDEXq] |
- movzx COMPRd, BYTE [Vq + INDEXq + 1] |
- ; Trick here to imul COMPL first then COMPR. |
- ; Saves two instruction. :) |
- imul COMPLq, FRACTIONq |
- xor FRACTIONq, 0x1fffe |
- imul COMPRq, FRACTIONq |
- add COMPLq, COMPRq |
- shr COMPLq, 17 |
- paddsw mm0, [TABLEq + 4096 + 8 * COMPLq] |
- |
- ; Interpolate first Y1. |
- lea INDEXq, [Xq + SOURCE_DXq] ; INDEXq now points to next pixel. |
- ; Xq points to current pixel. |
- mov FRACTIONq, Xq |
- sar Xq, 0x10 |
- movzx COMPLd, BYTE [Yq + Xq] |
- movzx COMPRd, BYTE [Yq + Xq + 1] |
- and FRACTIONq, 0xffff |
- imul COMPRq, FRACTIONq |
- xor FRACTIONq, 0xffff |
- imul COMPLq, FRACTIONq |
- add COMPLq, COMPRq |
- shr COMPLq, 16 |
- movq mm1, [TABLEq + 8 * COMPLq] |
- |
- ; Interpolate Y2 if available. |
- cmp INDEXq, WIDTHq |
- jge .lscalelastpixel |
- |
- lea Xq, [INDEXq + SOURCE_DXq] ; Xq points to next pixel. |
- ; INDEXq points to current pixel. |
- mov FRACTIONq, INDEXq |
- sar INDEXq, 0x10 |
- movzx COMPLd, BYTE [Yq + INDEXq] |
- movzx COMPRd, BYTE [Yq + INDEXq + 1] |
- and FRACTIONq, 0xffff |
- imul COMPRq, FRACTIONq |
- xor FRACTIONq, 0xffff |
- imul COMPLq, FRACTIONq |
- add COMPLq, COMPRq |
- shr COMPLq, 16 |
- movq mm2, [TABLEq + 8 * COMPLq] |
- |
- paddsw mm1, mm0 |
- paddsw mm2, mm0 |
- psraw mm1, 0x6 |
- psraw mm2, 0x6 |
- packuswb mm1, mm2 |
- movntq [ARGBq], mm1 |
- add ARGBq, 0x8 |
- |
-.lscaleend: |
- cmp Xq, WIDTHq |
- jl .lscaleloop |
- jmp .epilogue |
- |
-.lscalelastpixel: |
- paddsw mm1, mm0 |
- psraw mm1, 6 |
- packuswb mm1, mm1 |
- movd [ARGBq], mm1 |
- |
-.epilogue |
- EPILOGUE |
- RET |