1cabdff1aSopenharmony_ci;***************************************************************************** 2cabdff1aSopenharmony_ci;* Copyright 2016 Anton Khirnov 3cabdff1aSopenharmony_ci;* 4cabdff1aSopenharmony_ci;* This file is part of FFmpeg. 5cabdff1aSopenharmony_ci;* 6cabdff1aSopenharmony_ci;* FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci;* modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci;* License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci;* version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci;* 11cabdff1aSopenharmony_ci;* FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci;* but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci;* Lesser General Public License for more details. 15cabdff1aSopenharmony_ci;* 16cabdff1aSopenharmony_ci;* You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci;* License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci;****************************************************************************** 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci%include "libavutil/x86/x86util.asm" 22cabdff1aSopenharmony_ci 23cabdff1aSopenharmony_ciSECTION .text 24cabdff1aSopenharmony_ci 25cabdff1aSopenharmony_ciINIT_XMM sse4 26cabdff1aSopenharmony_cicglobal image_copy_plane_uc_from, 6, 7, 4, dst, dst_linesize, src, src_linesize, bw, height, rowpos 27cabdff1aSopenharmony_ci add dstq, bwq 28cabdff1aSopenharmony_ci add srcq, bwq 29cabdff1aSopenharmony_ci neg bwq 30cabdff1aSopenharmony_ci 31cabdff1aSopenharmony_ci.row_start: 32cabdff1aSopenharmony_ci mov rowposq, bwq 33cabdff1aSopenharmony_ci 34cabdff1aSopenharmony_ci.loop: 35cabdff1aSopenharmony_ci movntdqa m0, [srcq + rowposq + 0 * mmsize] 36cabdff1aSopenharmony_ci movntdqa m1, [srcq + rowposq + 1 * mmsize] 37cabdff1aSopenharmony_ci movntdqa m2, [srcq + rowposq + 2 * mmsize] 38cabdff1aSopenharmony_ci movntdqa m3, [srcq + rowposq + 3 * mmsize] 39cabdff1aSopenharmony_ci 40cabdff1aSopenharmony_ci mova [dstq + rowposq + 0 * mmsize], m0 41cabdff1aSopenharmony_ci mova [dstq + rowposq + 1 * mmsize], m1 42cabdff1aSopenharmony_ci mova [dstq + rowposq + 2 * mmsize], m2 43cabdff1aSopenharmony_ci mova [dstq + rowposq + 3 * mmsize], m3 44cabdff1aSopenharmony_ci 45cabdff1aSopenharmony_ci add rowposq, 4 * mmsize 46cabdff1aSopenharmony_ci jnz .loop 47cabdff1aSopenharmony_ci 48cabdff1aSopenharmony_ci add srcq, src_linesizeq 49cabdff1aSopenharmony_ci add dstq, dst_linesizeq 50cabdff1aSopenharmony_ci dec heightd 51cabdff1aSopenharmony_ci jnz .row_start 52cabdff1aSopenharmony_ci 53cabdff1aSopenharmony_ci RET 54