1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * Loongson SIMD optimized h264dsp 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * Copyright (c) 2015 Loongson Technology Corporation Limited 5cabdff1aSopenharmony_ci * Copyright (c) 2015 Zhou Xiaoyong <zhouxiaoyong@loongson.cn> 6cabdff1aSopenharmony_ci * Zhang Shuangshuang <zhangshuangshuang@ict.ac.cn> 7cabdff1aSopenharmony_ci * Heiher <r@hev.cc> 8cabdff1aSopenharmony_ci * 9cabdff1aSopenharmony_ci * This file is part of FFmpeg. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 12cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 13cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 14cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 17cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 18cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19cabdff1aSopenharmony_ci * Lesser General Public License for more details. 20cabdff1aSopenharmony_ci * 21cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 22cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 23cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 24cabdff1aSopenharmony_ci */ 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci#include "libavcodec/bit_depth_template.c" 27cabdff1aSopenharmony_ci#include "h264dsp_mips.h" 28cabdff1aSopenharmony_ci#include "libavutil/mips/mmiutils.h" 29cabdff1aSopenharmony_ci#include "libavutil/mem_internal.h" 30cabdff1aSopenharmony_ci 31cabdff1aSopenharmony_civoid ff_h264_add_pixels4_8_mmi(uint8_t *dst, int16_t *src, int stride) 32cabdff1aSopenharmony_ci{ 33cabdff1aSopenharmony_ci double ftmp[9]; 34cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 35cabdff1aSopenharmony_ci 36cabdff1aSopenharmony_ci __asm__ volatile ( 37cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 38cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[src], 0x00) 39cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[src], 0x08) 40cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[src], 0x10) 41cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], %[src], 0x18) 42cabdff1aSopenharmony_ci /* memset(src, 0, 32); */ 43cabdff1aSopenharmony_ci MMI_SQC1(%[ftmp0], %[ftmp0], %[src], 0x00) 44cabdff1aSopenharmony_ci MMI_SQC1(%[ftmp0], %[ftmp0], %[src], 0x10) 45cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp5], %[dst0], 0x00) 46cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp6], %[dst1], 0x00) 47cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp7], %[dst2], 0x00) 48cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp8], %[dst3], 0x00) 49cabdff1aSopenharmony_ci "punpcklbh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 50cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 51cabdff1aSopenharmony_ci "punpcklbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 52cabdff1aSopenharmony_ci "punpcklbh %[ftmp8], %[ftmp8], %[ftmp0] \n\t" 53cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 54cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 55cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 56cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp8] \n\t" 57cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 58cabdff1aSopenharmony_ci "packushb %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 59cabdff1aSopenharmony_ci "packushb %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 60cabdff1aSopenharmony_ci "packushb %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 61cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp1], %[dst0], 0x00) 62cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp2], %[dst1], 0x00) 63cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp3], %[dst2], 0x00) 64cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp4], %[dst3], 0x00) 65cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 66cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 67cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 68cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 69cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 70cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]) 71cabdff1aSopenharmony_ci : [dst0]"r"(dst), [dst1]"r"(dst+stride), 72cabdff1aSopenharmony_ci [dst2]"r"(dst+2*stride), [dst3]"r"(dst+3*stride), 73cabdff1aSopenharmony_ci [src]"r"(src) 74cabdff1aSopenharmony_ci : "memory" 75cabdff1aSopenharmony_ci ); 76cabdff1aSopenharmony_ci 77cabdff1aSopenharmony_ci} 78cabdff1aSopenharmony_ci 79cabdff1aSopenharmony_civoid ff_h264_idct_add_8_mmi(uint8_t *dst, int16_t *block, int stride) 80cabdff1aSopenharmony_ci{ 81cabdff1aSopenharmony_ci double ftmp[12]; 82cabdff1aSopenharmony_ci uint64_t tmp[1]; 83cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 84cabdff1aSopenharmony_ci DECLARE_VAR_ADDRT; 85cabdff1aSopenharmony_ci 86cabdff1aSopenharmony_ci __asm__ volatile ( 87cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[block], 0x00) 88cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[block], 0x08) 89cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[block], 0x10) 90cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[block], 0x18) 91cabdff1aSopenharmony_ci /* memset(block, 0, 32) */ 92cabdff1aSopenharmony_ci "pxor %[ftmp4], %[ftmp4], %[ftmp4] \n\t" 93cabdff1aSopenharmony_ci MMI_SQC1(%[ftmp4], %[ftmp4], %[block], 0x00) 94cabdff1aSopenharmony_ci MMI_SQC1(%[ftmp4], %[ftmp4], %[block], 0x10) 95cabdff1aSopenharmony_ci "dli %[tmp0], 0x01 \n\t" 96cabdff1aSopenharmony_ci "mtc1 %[tmp0], %[ftmp8] \n\t" 97cabdff1aSopenharmony_ci "dli %[tmp0], 0x06 \n\t" 98cabdff1aSopenharmony_ci "mtc1 %[tmp0], %[ftmp9] \n\t" 99cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp1], %[ftmp8] \n\t" 100cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp3], %[ftmp8] \n\t" 101cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp3] \n\t" 102cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp1] \n\t" 103cabdff1aSopenharmony_ci "paddh %[ftmp10], %[ftmp2], %[ftmp0] \n\t" 104cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 105cabdff1aSopenharmony_ci "paddh %[ftmp11], %[ftmp5], %[ftmp10] \n\t" 106cabdff1aSopenharmony_ci "psubh %[ftmp2], %[ftmp10], %[ftmp5] \n\t" 107cabdff1aSopenharmony_ci "paddh %[ftmp10], %[ftmp4], %[ftmp0] \n\t" 108cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 109cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp11], %[ftmp10] \n\t" 110cabdff1aSopenharmony_ci "punpcklhw %[ftmp5], %[ftmp11], %[ftmp10] \n\t" 111cabdff1aSopenharmony_ci "punpckhhw %[ftmp4], %[ftmp0], %[ftmp2] \n\t" 112cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 113cabdff1aSopenharmony_ci "punpckhwd %[ftmp2], %[ftmp5], %[ftmp0] \n\t" 114cabdff1aSopenharmony_ci "punpcklwd %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 115cabdff1aSopenharmony_ci "punpcklwd %[ftmp10], %[ftmp1], %[ftmp4] \n\t" 116cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp1], %[ftmp4] \n\t" 117cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ff_pw_32] \n\t" 118cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp2], %[ftmp8] \n\t" 119cabdff1aSopenharmony_ci "psrah %[ftmp3], %[ftmp0], %[ftmp8] \n\t" 120cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 121cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 122cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp10], %[ftmp5] \n\t" 123cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp10] \n\t" 124cabdff1aSopenharmony_ci "paddh %[ftmp10], %[ftmp3], %[ftmp1] \n\t" 125cabdff1aSopenharmony_ci "psubh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 126cabdff1aSopenharmony_ci "paddh %[ftmp11], %[ftmp4], %[ftmp5] \n\t" 127cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp4] \n\t" 128cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp2], %[dst], 0x00) 129cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00) 130cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 131cabdff1aSopenharmony_ci "psrah %[ftmp3], %[ftmp10], %[ftmp9] \n\t" 132cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp11], %[ftmp9] \n\t" 133cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 134cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 135cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 136cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 137cabdff1aSopenharmony_ci "packushb %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 138cabdff1aSopenharmony_ci "packushb %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 139cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp2], %[dst], 0x00) 140cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) 141cabdff1aSopenharmony_ci PTR_ADDU "%[dst], %[dst], %[stride] \n\t" 142cabdff1aSopenharmony_ci PTR_ADDU "%[dst], %[dst], %[stride] \n\t" 143cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp2], %[dst], 0x00) 144cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp5], %[ftmp9] \n\t" 145cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00) 146cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp9] \n\t" 147cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 148cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 149cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 150cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 151cabdff1aSopenharmony_ci "packushb %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 152cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp2], %[dst], 0x00) 153cabdff1aSopenharmony_ci "packushb %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 154cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) 155cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 156cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 157cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 158cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 159cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), 160cabdff1aSopenharmony_ci [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), 161cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 162cabdff1aSopenharmony_ci RESTRICT_ASM_ADDRT 163cabdff1aSopenharmony_ci [tmp0]"=&r"(tmp[0]) 164cabdff1aSopenharmony_ci : [dst]"r"(dst), [block]"r"(block), 165cabdff1aSopenharmony_ci [stride]"r"((mips_reg)stride), [ff_pw_32]"f"(ff_pw_32.f) 166cabdff1aSopenharmony_ci : "memory" 167cabdff1aSopenharmony_ci ); 168cabdff1aSopenharmony_ci 169cabdff1aSopenharmony_ci} 170cabdff1aSopenharmony_ci 171cabdff1aSopenharmony_civoid ff_h264_idct8_add_8_mmi(uint8_t *dst, int16_t *block, int stride) 172cabdff1aSopenharmony_ci{ 173cabdff1aSopenharmony_ci double ftmp[16]; 174cabdff1aSopenharmony_ci uint64_t tmp[7]; 175cabdff1aSopenharmony_ci mips_reg addr[1]; 176cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 177cabdff1aSopenharmony_ci DECLARE_VAR_ADDRT; 178cabdff1aSopenharmony_ci 179cabdff1aSopenharmony_ci __asm__ volatile ( 180cabdff1aSopenharmony_ci "lhu %[tmp0], 0x00(%[block]) \n\t" 181cabdff1aSopenharmony_ci PTR_ADDI "$sp, $sp, -0x20 \n\t" 182cabdff1aSopenharmony_ci PTR_ADDIU "%[tmp0], %[tmp0], 0x20 \n\t" 183cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[block], 0x10) 184cabdff1aSopenharmony_ci "sh %[tmp0], 0x00(%[block]) \n\t" 185cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[block], 0x20) 186cabdff1aSopenharmony_ci "dli %[tmp0], 0x01 \n\t" 187cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[block], 0x30) 188cabdff1aSopenharmony_ci "mtc1 %[tmp0], %[ftmp8] \n\t" 189cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp5], %[block], 0x50) 190cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp6], %[block], 0x60) 191cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp7], %[block], 0x70) 192cabdff1aSopenharmony_ci "mov.d %[ftmp0], %[ftmp1] \n\t" 193cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp8] \n\t" 194cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp5], %[ftmp8] \n\t" 195cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 196cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 197cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 198cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp7] \n\t" 199cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 200cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 201cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp3] \n\t" 202cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp3] \n\t" 203cabdff1aSopenharmony_ci "psrah %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 204cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 205cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 206cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 207cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp3] \n\t" 208cabdff1aSopenharmony_ci "dli %[tmp0], 0x02 \n\t" 209cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 210cabdff1aSopenharmony_ci "mtc1 %[tmp0], %[ftmp9] \n\t" 211cabdff1aSopenharmony_ci "mov.d %[ftmp7], %[ftmp1] \n\t" 212cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp9] \n\t" 213cabdff1aSopenharmony_ci "psrah %[ftmp3], %[ftmp4], %[ftmp9] \n\t" 214cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 215cabdff1aSopenharmony_ci "psrah %[ftmp0], %[ftmp0], %[ftmp9] \n\t" 216cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 217cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp5], %[ftmp9] \n\t" 218cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 219cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 220cabdff1aSopenharmony_ci "mov.d %[ftmp5], %[ftmp6] \n\t" 221cabdff1aSopenharmony_ci "psrah %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 222cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp2], %[ftmp8] \n\t" 223cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp2] \n\t" 224cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 225cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[block], 0x00) 226cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp5], %[block], 0x40) 227cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp2] \n\t" 228cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp2] \n\t" 229cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 230cabdff1aSopenharmony_ci "psubh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 231cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 232cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp2] \n\t" 233cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 234cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp2] \n\t" 235cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 236cabdff1aSopenharmony_ci "psubh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 237cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 238cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 239cabdff1aSopenharmony_ci "psubh %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 240cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp4] \n\t" 241cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 242cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 243cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp2] \n\t" 244cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 245cabdff1aSopenharmony_ci "psubh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 246cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 247cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], %[block], 0x00) 248cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp1] \n\t" 249cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp7], %[ftmp0] \n\t" 250cabdff1aSopenharmony_ci "punpcklhw %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 251cabdff1aSopenharmony_ci "punpckhhw %[ftmp0], %[ftmp3], %[ftmp1] \n\t" 252cabdff1aSopenharmony_ci "punpcklhw %[ftmp3], %[ftmp3], %[ftmp1] \n\t" 253cabdff1aSopenharmony_ci "punpckhwd %[ftmp1], %[ftmp7], %[ftmp3] \n\t" 254cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 255cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp6], %[ftmp0] \n\t" 256cabdff1aSopenharmony_ci "punpcklwd %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 257cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[block], 0x00) 258cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp7], $sp, 0x00) 259cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], $sp, 0x10) 260cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp6] \n\t" 261cabdff1aSopenharmony_ci "dmfc1 %[tmp3], %[ftmp3] \n\t" 262cabdff1aSopenharmony_ci "punpckhhw %[ftmp3], %[ftmp5], %[ftmp2] \n\t" 263cabdff1aSopenharmony_ci "punpcklhw %[ftmp5], %[ftmp5], %[ftmp2] \n\t" 264cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp4], %[ftmp0] \n\t" 265cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 266cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp5], %[ftmp4] \n\t" 267cabdff1aSopenharmony_ci "punpcklwd %[ftmp5], %[ftmp5], %[ftmp4] \n\t" 268cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp3], %[ftmp2] \n\t" 269cabdff1aSopenharmony_ci "punpcklwd %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 270cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], $sp, 0x08) 271cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp0], $sp, 0x18) 272cabdff1aSopenharmony_ci "dmfc1 %[tmp2], %[ftmp3] \n\t" 273cabdff1aSopenharmony_ci "dmfc1 %[tmp4], %[ftmp4] \n\t" 274cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[block], 0x18) 275cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp6], %[block], 0x28) 276cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[block], 0x38) 277cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[block], 0x58) 278cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[block], 0x68) 279cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], %[block], 0x78) 280cabdff1aSopenharmony_ci "mov.d %[ftmp7], %[ftmp1] \n\t" 281cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp0], %[ftmp8] \n\t" 282cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp8] \n\t" 283cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 284cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 285cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp4] \n\t" 286cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 287cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 288cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 289cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 290cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 291cabdff1aSopenharmony_ci "psrah %[ftmp2], %[ftmp2], %[ftmp8] \n\t" 292cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 293cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 294cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp4], %[ftmp8] \n\t" 295cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 296cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 297cabdff1aSopenharmony_ci "mov.d %[ftmp4], %[ftmp1] \n\t" 298cabdff1aSopenharmony_ci "psrah %[ftmp2], %[ftmp5], %[ftmp9] \n\t" 299cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp9] \n\t" 300cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 301cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp7], %[ftmp9] \n\t" 302cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 303cabdff1aSopenharmony_ci "psrah %[ftmp0], %[ftmp0], %[ftmp9] \n\t" 304cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 305cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 306cabdff1aSopenharmony_ci "mov.d %[ftmp0], %[ftmp3] \n\t" 307cabdff1aSopenharmony_ci "psrah %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 308cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp6], %[ftmp8] \n\t" 309cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp6] \n\t" 310cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 311cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp6], %[block], 0x08) 312cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[block], 0x48) 313cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp6] \n\t" 314cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 315cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 316cabdff1aSopenharmony_ci "psubh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 317cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 318cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 319cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp3] \n\t" 320cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 321cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp3] \n\t" 322cabdff1aSopenharmony_ci "psubh %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 323cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 324cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 325cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" 326cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 327cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 328cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 329cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 330cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 331cabdff1aSopenharmony_ci "psubh %[ftmp6], %[ftmp6], %[ftmp2] \n\t" 332cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 333cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[block], 0x08) 334cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 335cabdff1aSopenharmony_ci "punpckhhw %[ftmp3], %[ftmp4], %[ftmp7] \n\t" 336cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp7] \n\t" 337cabdff1aSopenharmony_ci "punpckhhw %[ftmp7], %[ftmp2], %[ftmp1] \n\t" 338cabdff1aSopenharmony_ci "punpcklhw %[ftmp2], %[ftmp2], %[ftmp1] \n\t" 339cabdff1aSopenharmony_ci "punpckhwd %[ftmp1], %[ftmp4], %[ftmp2] \n\t" 340cabdff1aSopenharmony_ci "punpcklwd %[ftmp4], %[ftmp4], %[ftmp2] \n\t" 341cabdff1aSopenharmony_ci "punpckhwd %[ftmp2], %[ftmp3], %[ftmp7] \n\t" 342cabdff1aSopenharmony_ci "punpcklwd %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 343cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp7], %[block], 0x08) 344cabdff1aSopenharmony_ci "dmfc1 %[tmp5], %[ftmp4] \n\t" 345cabdff1aSopenharmony_ci "mov.d %[ftmp10], %[ftmp1] \n\t" 346cabdff1aSopenharmony_ci "mov.d %[ftmp12], %[ftmp3] \n\t" 347cabdff1aSopenharmony_ci "mov.d %[ftmp14], %[ftmp2] \n\t" 348cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp0], %[ftmp6] \n\t" 349cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp6] \n\t" 350cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp5], %[ftmp7] \n\t" 351cabdff1aSopenharmony_ci "punpcklhw %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 352cabdff1aSopenharmony_ci "punpckhwd %[ftmp7], %[ftmp0], %[ftmp5] \n\t" 353cabdff1aSopenharmony_ci "punpcklwd %[ftmp0], %[ftmp0], %[ftmp5] \n\t" 354cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp2], %[ftmp6] \n\t" 355cabdff1aSopenharmony_ci "punpcklwd %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 356cabdff1aSopenharmony_ci "dmfc1 %[tmp6], %[ftmp0] \n\t" 357cabdff1aSopenharmony_ci "mov.d %[ftmp11], %[ftmp7] \n\t" 358cabdff1aSopenharmony_ci "mov.d %[ftmp13], %[ftmp2] \n\t" 359cabdff1aSopenharmony_ci "mov.d %[ftmp15], %[ftmp5] \n\t" 360cabdff1aSopenharmony_ci PTR_ADDIU "%[addr0], %[dst], 0x04 \n\t" 361cabdff1aSopenharmony_ci "mov.d %[ftmp7], %[ftmp10] \n\t" 362cabdff1aSopenharmony_ci "dmtc1 %[tmp3], %[ftmp6] \n\t" 363cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], $sp, 0x10) 364cabdff1aSopenharmony_ci "dmtc1 %[tmp1], %[ftmp3] \n\t" 365cabdff1aSopenharmony_ci "mov.d %[ftmp4], %[ftmp1] \n\t" 366cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp8] \n\t" 367cabdff1aSopenharmony_ci "psrah %[ftmp0], %[ftmp7], %[ftmp8] \n\t" 368cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" 369cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 370cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 371cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp14] \n\t" 372cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 373cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 374cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 375cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 376cabdff1aSopenharmony_ci "psrah %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 377cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp14] \n\t" 378cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp14] \n\t" 379cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp14], %[ftmp8] \n\t" 380cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 381cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 382cabdff1aSopenharmony_ci "mov.d %[ftmp5], %[ftmp1] \n\t" 383cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp9] \n\t" 384cabdff1aSopenharmony_ci "psrah %[ftmp6], %[ftmp0], %[ftmp9] \n\t" 385cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 386cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp4] \n\t" 387cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp4], %[ftmp9] \n\t" 388cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp7], %[ftmp9] \n\t" 389cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 390cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 391cabdff1aSopenharmony_ci "mov.d %[ftmp7], %[ftmp12] \n\t" 392cabdff1aSopenharmony_ci "psrah %[ftmp2], %[ftmp12], %[ftmp8] \n\t" 393cabdff1aSopenharmony_ci "psrah %[ftmp0], %[ftmp3], %[ftmp8] \n\t" 394cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 395cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 396cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], $sp, 0x00) 397cabdff1aSopenharmony_ci "dmtc1 %[tmp5], %[ftmp7] \n\t" 398cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 399cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 400cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 401cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 402cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 403cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp3] \n\t" 404cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 405cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 406cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp2] \n\t" 407cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 408cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp2] \n\t" 409cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 410cabdff1aSopenharmony_ci "psubh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 411cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 412cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 413cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 414cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 415cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 416cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp6] \n\t" 417cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 418cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], $sp, 0x00) 419cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" 420cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp0], $sp, 0x10) 421cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp2] \n\t" 422cabdff1aSopenharmony_ci "pxor %[ftmp2], %[ftmp2], %[ftmp2] \n\t" 423cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x00) 424cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x08) 425cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x10) 426cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x18) 427cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x20) 428cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x28) 429cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x30) 430cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x38) 431cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x40) 432cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x48) 433cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x50) 434cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x58) 435cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x60) 436cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x68) 437cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x70) 438cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block], 0x78) 439cabdff1aSopenharmony_ci "dli %[tmp3], 0x06 \n\t" 440cabdff1aSopenharmony_ci "mtc1 %[tmp3], %[ftmp10] \n\t" 441cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp3], %[dst], 0x00) 442cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00) 443cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp5], %[ftmp10] \n\t" 444cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp4], %[ftmp10] \n\t" 445cabdff1aSopenharmony_ci "punpcklbh %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 446cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 447cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" 448cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 449cabdff1aSopenharmony_ci "packushb %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 450cabdff1aSopenharmony_ci "packushb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 451cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp3], %[dst], 0x00) 452cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) 453cabdff1aSopenharmony_ci PTR_ADDU "%[dst], %[dst], %[stride] \n\t" 454cabdff1aSopenharmony_ci PTR_ADDU "%[dst], %[dst], %[stride] \n\t" 455cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp3], %[dst], 0x00) 456cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00) 457cabdff1aSopenharmony_ci "psrah %[ftmp6], %[ftmp6], %[ftmp10] \n\t" 458cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp10] \n\t" 459cabdff1aSopenharmony_ci "punpcklbh %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 460cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 461cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp6] \n\t" 462cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 463cabdff1aSopenharmony_ci "packushb %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 464cabdff1aSopenharmony_ci "packushb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 465cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp3], %[dst], 0x00) 466cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) 467cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp5], $sp, 0x00) 468cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], $sp, 0x10) 469cabdff1aSopenharmony_ci "dmtc1 %[tmp1], %[ftmp6] \n\t" 470cabdff1aSopenharmony_ci PTR_ADDU "%[dst], %[dst], %[stride] \n\t" 471cabdff1aSopenharmony_ci PTR_ADDU "%[dst], %[dst], %[stride] \n\t" 472cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp3], %[dst], 0x00) 473cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00) 474cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 475cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp5], %[ftmp10] \n\t" 476cabdff1aSopenharmony_ci "punpcklbh %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 477cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 478cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 479cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp5] \n\t" 480cabdff1aSopenharmony_ci "packushb %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 481cabdff1aSopenharmony_ci "packushb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 482cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp3], %[dst], 0x00) 483cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) 484cabdff1aSopenharmony_ci PTR_ADDU "%[dst], %[dst], %[stride] \n\t" 485cabdff1aSopenharmony_ci PTR_ADDU "%[dst], %[dst], %[stride] \n\t" 486cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp3], %[dst], 0x00) 487cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp0], %[dst], %[stride], 0x00) 488cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp4], %[ftmp10] \n\t" 489cabdff1aSopenharmony_ci "psrah %[ftmp6], %[ftmp6], %[ftmp10] \n\t" 490cabdff1aSopenharmony_ci "punpcklbh %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 491cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 492cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" 493cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp6] \n\t" 494cabdff1aSopenharmony_ci "packushb %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 495cabdff1aSopenharmony_ci "packushb %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 496cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp3], %[dst], 0x00) 497cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp0], %[dst], %[stride], 0x00) 498cabdff1aSopenharmony_ci "dmtc1 %[tmp4], %[ftmp1] \n\t" 499cabdff1aSopenharmony_ci "dmtc1 %[tmp2], %[ftmp6] \n\t" 500cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], $sp, 0x18) 501cabdff1aSopenharmony_ci "mov.d %[ftmp5], %[ftmp4] \n\t" 502cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp4], %[ftmp8] \n\t" 503cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp11], %[ftmp8] \n\t" 504cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp11] \n\t" 505cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 506cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp15] \n\t" 507cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp11] \n\t" 508cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 509cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp1] \n\t" 510cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp1] \n\t" 511cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp11], %[ftmp1] \n\t" 512cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp8] \n\t" 513cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp15] \n\t" 514cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp15] \n\t" 515cabdff1aSopenharmony_ci "psrah %[ftmp2], %[ftmp15], %[ftmp8] \n\t" 516cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp1] \n\t" 517cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 518cabdff1aSopenharmony_ci "mov.d %[ftmp2], %[ftmp4] \n\t" 519cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp4], %[ftmp9] \n\t" 520cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp7], %[ftmp9] \n\t" 521cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp3] \n\t" 522cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 523cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp5], %[ftmp9] \n\t" 524cabdff1aSopenharmony_ci "psrah %[ftmp3], %[ftmp3], %[ftmp9] \n\t" 525cabdff1aSopenharmony_ci "psubh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 526cabdff1aSopenharmony_ci "psubh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 527cabdff1aSopenharmony_ci "mov.d %[ftmp3], %[ftmp13] \n\t" 528cabdff1aSopenharmony_ci "psrah %[ftmp0], %[ftmp13], %[ftmp8] \n\t" 529cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp6], %[ftmp8] \n\t" 530cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp6] \n\t" 531cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 532cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp6], $sp, 0x08) 533cabdff1aSopenharmony_ci "dmtc1 %[tmp6], %[ftmp3] \n\t" 534cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp6] \n\t" 535cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 536cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp3] \n\t" 537cabdff1aSopenharmony_ci "psubh %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 538cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 539cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 540cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 541cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 542cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 543cabdff1aSopenharmony_ci "psubh %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 544cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 545cabdff1aSopenharmony_ci "paddh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 546cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 547cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 548cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 549cabdff1aSopenharmony_ci "psubh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 550cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 551cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp3] \n\t" 552cabdff1aSopenharmony_ci "psubh %[ftmp6], %[ftmp6], %[ftmp1] \n\t" 553cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 554cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], $sp, 0x08) 555cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp4] \n\t" 556cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp7], $sp, 0x18) 557cabdff1aSopenharmony_ci "dmfc1 %[tmp2], %[ftmp0] \n\t" 558cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 559cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp6], %[addr0], 0x00) 560cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00) 561cabdff1aSopenharmony_ci "psrah %[ftmp2], %[ftmp2], %[ftmp10] \n\t" 562cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp5], %[ftmp10] \n\t" 563cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 564cabdff1aSopenharmony_ci "punpcklbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 565cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp2] \n\t" 566cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 567cabdff1aSopenharmony_ci "packushb %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 568cabdff1aSopenharmony_ci "packushb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 569cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp6], %[addr0], 0x00) 570cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00) 571cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[addr0], %[stride] \n\t" 572cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[addr0], %[stride] \n\t" 573cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp6], %[addr0], 0x00) 574cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00) 575cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp10] \n\t" 576cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp4], %[ftmp10] \n\t" 577cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 578cabdff1aSopenharmony_ci "punpcklbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 579cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp1] \n\t" 580cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 581cabdff1aSopenharmony_ci "packushb %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 582cabdff1aSopenharmony_ci "packushb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 583cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp6], %[addr0], 0x00) 584cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00) 585cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], $sp, 0x08) 586cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp5], $sp, 0x18) 587cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[addr0], %[stride] \n\t" 588cabdff1aSopenharmony_ci "dmtc1 %[tmp2], %[ftmp1] \n\t" 589cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[addr0], %[stride] \n\t" 590cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp6], %[addr0], 0x00) 591cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00) 592cabdff1aSopenharmony_ci "psrah %[ftmp3], %[ftmp3], %[ftmp10] \n\t" 593cabdff1aSopenharmony_ci "psrah %[ftmp2], %[ftmp2], %[ftmp10] \n\t" 594cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 595cabdff1aSopenharmony_ci "punpcklbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 596cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 597cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 598cabdff1aSopenharmony_ci "packushb %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 599cabdff1aSopenharmony_ci "packushb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 600cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp6], %[addr0], 0x00) 601cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00) 602cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[addr0], %[stride] \n\t" 603cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[addr0], %[stride] \n\t" 604cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp6], %[addr0], 0x00) 605cabdff1aSopenharmony_ci MMI_LWXC1(%[ftmp7], %[addr0], %[stride], 0x00) 606cabdff1aSopenharmony_ci "psrah %[ftmp5], %[ftmp5], %[ftmp10] \n\t" 607cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp10] \n\t" 608cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 609cabdff1aSopenharmony_ci "punpcklbh %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 610cabdff1aSopenharmony_ci "paddh %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 611cabdff1aSopenharmony_ci "paddh %[ftmp7], %[ftmp7], %[ftmp1] \n\t" 612cabdff1aSopenharmony_ci "packushb %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 613cabdff1aSopenharmony_ci "packushb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 614cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp6], %[addr0], 0x00) 615cabdff1aSopenharmony_ci MMI_SWXC1(%[ftmp7], %[addr0], %[stride], 0x00) 616cabdff1aSopenharmony_ci PTR_ADDIU "$sp, $sp, 0x20 \n\t" 617cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 618cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 619cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 620cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 621cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), 622cabdff1aSopenharmony_ci [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), 623cabdff1aSopenharmony_ci [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), 624cabdff1aSopenharmony_ci [ftmp14]"=&f"(ftmp[14]), [ftmp15]"=&f"(ftmp[15]), 625cabdff1aSopenharmony_ci [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), 626cabdff1aSopenharmony_ci [tmp2]"=&r"(tmp[2]), [tmp3]"=&r"(tmp[3]), 627cabdff1aSopenharmony_ci [tmp4]"=&r"(tmp[4]), [tmp5]"=&r"(tmp[5]), 628cabdff1aSopenharmony_ci [tmp6]"=&r"(tmp[6]), 629cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 630cabdff1aSopenharmony_ci RESTRICT_ASM_ADDRT 631cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]) 632cabdff1aSopenharmony_ci : [dst]"r"(dst), [block]"r"(block), 633cabdff1aSopenharmony_ci [stride]"r"((mips_reg)stride) 634cabdff1aSopenharmony_ci : "memory" 635cabdff1aSopenharmony_ci ); 636cabdff1aSopenharmony_ci 637cabdff1aSopenharmony_ci} 638cabdff1aSopenharmony_ci 639cabdff1aSopenharmony_civoid ff_h264_idct_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride) 640cabdff1aSopenharmony_ci{ 641cabdff1aSopenharmony_ci int dc = (block[0] + 32) >> 6; 642cabdff1aSopenharmony_ci double ftmp[6]; 643cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 644cabdff1aSopenharmony_ci 645cabdff1aSopenharmony_ci block[0] = 0; 646cabdff1aSopenharmony_ci 647cabdff1aSopenharmony_ci __asm__ volatile ( 648cabdff1aSopenharmony_ci "mtc1 %[dc], %[ftmp5] \n\t" 649cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 650cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 651cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp1], %[dst0], 0x00) 652cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp2], %[dst1], 0x00) 653cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp3], %[dst2], 0x00) 654cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp4], %[dst3], 0x00) 655cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 656cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 657cabdff1aSopenharmony_ci "punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 658cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 659cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 660cabdff1aSopenharmony_ci "paddsh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 661cabdff1aSopenharmony_ci "paddsh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" 662cabdff1aSopenharmony_ci "paddsh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 663cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 664cabdff1aSopenharmony_ci "packushb %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 665cabdff1aSopenharmony_ci "packushb %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 666cabdff1aSopenharmony_ci "packushb %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 667cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp1], %[dst0], 0x00) 668cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp2], %[dst1], 0x00) 669cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp3], %[dst2], 0x00) 670cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp4], %[dst3], 0x00) 671cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 672cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 673cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), 674cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 675cabdff1aSopenharmony_ci [ftmp5]"=&f"(ftmp[5]) 676cabdff1aSopenharmony_ci : [dst0]"r"(dst), [dst1]"r"(dst+stride), 677cabdff1aSopenharmony_ci [dst2]"r"(dst+2*stride), [dst3]"r"(dst+3*stride), 678cabdff1aSopenharmony_ci [dc]"r"(dc) 679cabdff1aSopenharmony_ci : "memory" 680cabdff1aSopenharmony_ci ); 681cabdff1aSopenharmony_ci} 682cabdff1aSopenharmony_ci 683cabdff1aSopenharmony_civoid ff_h264_idct8_dc_add_8_mmi(uint8_t *dst, int16_t *block, int stride) 684cabdff1aSopenharmony_ci{ 685cabdff1aSopenharmony_ci int dc = (block[0] + 32) >> 6; 686cabdff1aSopenharmony_ci double ftmp[10]; 687cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 688cabdff1aSopenharmony_ci 689cabdff1aSopenharmony_ci block[0] = 0; 690cabdff1aSopenharmony_ci 691cabdff1aSopenharmony_ci __asm__ volatile ( 692cabdff1aSopenharmony_ci "mtc1 %[dc], %[ftmp5] \n\t" 693cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 694cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 695cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[dst0], 0x00) 696cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[dst1], 0x00) 697cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[dst2], 0x00) 698cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], %[dst3], 0x00) 699cabdff1aSopenharmony_ci "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t" 700cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 701cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t" 702cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 703cabdff1aSopenharmony_ci "punpckhbh %[ftmp8], %[ftmp3], %[ftmp0] \n\t" 704cabdff1aSopenharmony_ci "punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 705cabdff1aSopenharmony_ci "punpckhbh %[ftmp9], %[ftmp4], %[ftmp0] \n\t" 706cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 707cabdff1aSopenharmony_ci "paddsh %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 708cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 709cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 710cabdff1aSopenharmony_ci "paddsh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 711cabdff1aSopenharmony_ci "paddsh %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 712cabdff1aSopenharmony_ci "paddsh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" 713cabdff1aSopenharmony_ci "paddsh %[ftmp9], %[ftmp9], %[ftmp5] \n\t" 714cabdff1aSopenharmony_ci "paddsh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 715cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 716cabdff1aSopenharmony_ci "packushb %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 717cabdff1aSopenharmony_ci "packushb %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 718cabdff1aSopenharmony_ci "packushb %[ftmp4], %[ftmp4], %[ftmp9] \n\t" 719cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[dst0], 0x00) 720cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[dst1], 0x00) 721cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[dst2], 0x00) 722cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp4], %[dst3], 0x00) 723cabdff1aSopenharmony_ci 724cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[dst4], 0x00) 725cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[dst5], 0x00) 726cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[dst6], 0x00) 727cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], %[dst7], 0x00) 728cabdff1aSopenharmony_ci "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t" 729cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 730cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t" 731cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 732cabdff1aSopenharmony_ci "punpckhbh %[ftmp8], %[ftmp3], %[ftmp0] \n\t" 733cabdff1aSopenharmony_ci "punpcklbh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 734cabdff1aSopenharmony_ci "punpckhbh %[ftmp9], %[ftmp4], %[ftmp0] \n\t" 735cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 736cabdff1aSopenharmony_ci "paddsh %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 737cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 738cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 739cabdff1aSopenharmony_ci "paddsh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 740cabdff1aSopenharmony_ci "paddsh %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 741cabdff1aSopenharmony_ci "paddsh %[ftmp3], %[ftmp3], %[ftmp5] \n\t" 742cabdff1aSopenharmony_ci "paddsh %[ftmp9], %[ftmp9], %[ftmp5] \n\t" 743cabdff1aSopenharmony_ci "paddsh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 744cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 745cabdff1aSopenharmony_ci "packushb %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 746cabdff1aSopenharmony_ci "packushb %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 747cabdff1aSopenharmony_ci "packushb %[ftmp4], %[ftmp4], %[ftmp9] \n\t" 748cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[dst4], 0x00) 749cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[dst5], 0x00) 750cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[dst6], 0x00) 751cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp4], %[dst7], 0x00) 752cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 753cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 754cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 755cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 756cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), 757cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 758cabdff1aSopenharmony_ci [ftmp9]"=&f"(ftmp[9]) 759cabdff1aSopenharmony_ci : [dst0]"r"(dst), [dst1]"r"(dst+stride), 760cabdff1aSopenharmony_ci [dst2]"r"(dst+2*stride), [dst3]"r"(dst+3*stride), 761cabdff1aSopenharmony_ci [dst4]"r"(dst+4*stride), [dst5]"r"(dst+5*stride), 762cabdff1aSopenharmony_ci [dst6]"r"(dst+6*stride), [dst7]"r"(dst+7*stride), 763cabdff1aSopenharmony_ci [dc]"r"(dc) 764cabdff1aSopenharmony_ci : "memory" 765cabdff1aSopenharmony_ci ); 766cabdff1aSopenharmony_ci} 767cabdff1aSopenharmony_ci 768cabdff1aSopenharmony_civoid ff_h264_idct_add16_8_mmi(uint8_t *dst, const int *block_offset, 769cabdff1aSopenharmony_ci int16_t *block, int stride, 770cabdff1aSopenharmony_ci const uint8_t nnzc[5 * 8]) 771cabdff1aSopenharmony_ci{ 772cabdff1aSopenharmony_ci int i; 773cabdff1aSopenharmony_ci for(i=0; i<16; i++){ 774cabdff1aSopenharmony_ci int nnz = nnzc[ scan8[i] ]; 775cabdff1aSopenharmony_ci if(nnz){ 776cabdff1aSopenharmony_ci if(nnz==1 && ((int16_t*)block)[i*16]) 777cabdff1aSopenharmony_ci ff_h264_idct_dc_add_8_mmi(dst + block_offset[i], block + i*16, 778cabdff1aSopenharmony_ci stride); 779cabdff1aSopenharmony_ci else 780cabdff1aSopenharmony_ci ff_h264_idct_add_8_mmi(dst + block_offset[i], block + i*16, 781cabdff1aSopenharmony_ci stride); 782cabdff1aSopenharmony_ci } 783cabdff1aSopenharmony_ci } 784cabdff1aSopenharmony_ci} 785cabdff1aSopenharmony_ci 786cabdff1aSopenharmony_civoid ff_h264_idct_add16intra_8_mmi(uint8_t *dst, const int *block_offset, 787cabdff1aSopenharmony_ci int16_t *block, int stride, const uint8_t nnzc[5 * 8]) 788cabdff1aSopenharmony_ci{ 789cabdff1aSopenharmony_ci int i; 790cabdff1aSopenharmony_ci for(i=0; i<16; i++){ 791cabdff1aSopenharmony_ci if(nnzc[ scan8[i] ]) 792cabdff1aSopenharmony_ci ff_h264_idct_add_8_mmi(dst + block_offset[i], block + i*16, stride); 793cabdff1aSopenharmony_ci else if(((int16_t*)block)[i*16]) 794cabdff1aSopenharmony_ci ff_h264_idct_dc_add_8_mmi(dst + block_offset[i], block + i*16, 795cabdff1aSopenharmony_ci stride); 796cabdff1aSopenharmony_ci } 797cabdff1aSopenharmony_ci} 798cabdff1aSopenharmony_ci 799cabdff1aSopenharmony_civoid ff_h264_idct8_add4_8_mmi(uint8_t *dst, const int *block_offset, 800cabdff1aSopenharmony_ci int16_t *block, int stride, const uint8_t nnzc[5 * 8]) 801cabdff1aSopenharmony_ci{ 802cabdff1aSopenharmony_ci int i; 803cabdff1aSopenharmony_ci for(i=0; i<16; i+=4){ 804cabdff1aSopenharmony_ci int nnz = nnzc[ scan8[i] ]; 805cabdff1aSopenharmony_ci if(nnz){ 806cabdff1aSopenharmony_ci if(nnz==1 && ((int16_t*)block)[i*16]) 807cabdff1aSopenharmony_ci ff_h264_idct8_dc_add_8_mmi(dst + block_offset[i], 808cabdff1aSopenharmony_ci block + i*16, stride); 809cabdff1aSopenharmony_ci else 810cabdff1aSopenharmony_ci ff_h264_idct8_add_8_mmi(dst + block_offset[i], block + i*16, 811cabdff1aSopenharmony_ci stride); 812cabdff1aSopenharmony_ci } 813cabdff1aSopenharmony_ci } 814cabdff1aSopenharmony_ci} 815cabdff1aSopenharmony_ci 816cabdff1aSopenharmony_civoid ff_h264_idct_add8_8_mmi(uint8_t **dest, const int *block_offset, 817cabdff1aSopenharmony_ci int16_t *block, int stride, const uint8_t nnzc[15*8]) 818cabdff1aSopenharmony_ci{ 819cabdff1aSopenharmony_ci int i, j; 820cabdff1aSopenharmony_ci for(j=1; j<3; j++){ 821cabdff1aSopenharmony_ci for(i=j*16; i<j*16+4; i++){ 822cabdff1aSopenharmony_ci if(nnzc[ scan8[i] ]) 823cabdff1aSopenharmony_ci ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i], 824cabdff1aSopenharmony_ci block + i*16, stride); 825cabdff1aSopenharmony_ci else if(((int16_t*)block)[i*16]) 826cabdff1aSopenharmony_ci ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i], 827cabdff1aSopenharmony_ci block + i*16, stride); 828cabdff1aSopenharmony_ci } 829cabdff1aSopenharmony_ci } 830cabdff1aSopenharmony_ci} 831cabdff1aSopenharmony_ci 832cabdff1aSopenharmony_civoid ff_h264_idct_add8_422_8_mmi(uint8_t **dest, const int *block_offset, 833cabdff1aSopenharmony_ci int16_t *block, int stride, const uint8_t nnzc[15*8]) 834cabdff1aSopenharmony_ci{ 835cabdff1aSopenharmony_ci int i, j; 836cabdff1aSopenharmony_ci 837cabdff1aSopenharmony_ci for(j=1; j<3; j++){ 838cabdff1aSopenharmony_ci for(i=j*16; i<j*16+4; i++){ 839cabdff1aSopenharmony_ci if(nnzc[ scan8[i] ]) 840cabdff1aSopenharmony_ci ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i], 841cabdff1aSopenharmony_ci block + i*16, stride); 842cabdff1aSopenharmony_ci else if(((int16_t*)block)[i*16]) 843cabdff1aSopenharmony_ci ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i], 844cabdff1aSopenharmony_ci block + i*16, stride); 845cabdff1aSopenharmony_ci } 846cabdff1aSopenharmony_ci } 847cabdff1aSopenharmony_ci 848cabdff1aSopenharmony_ci for(j=1; j<3; j++){ 849cabdff1aSopenharmony_ci for(i=j*16+4; i<j*16+8; i++){ 850cabdff1aSopenharmony_ci if(nnzc[ scan8[i+4] ]) 851cabdff1aSopenharmony_ci ff_h264_idct_add_8_mmi(dest[j-1] + block_offset[i+4], 852cabdff1aSopenharmony_ci block + i*16, stride); 853cabdff1aSopenharmony_ci else if(((int16_t*)block)[i*16]) 854cabdff1aSopenharmony_ci ff_h264_idct_dc_add_8_mmi(dest[j-1] + block_offset[i+4], 855cabdff1aSopenharmony_ci block + i*16, stride); 856cabdff1aSopenharmony_ci } 857cabdff1aSopenharmony_ci } 858cabdff1aSopenharmony_ci} 859cabdff1aSopenharmony_ci 860cabdff1aSopenharmony_civoid ff_h264_luma_dc_dequant_idct_8_mmi(int16_t *output, int16_t *input, 861cabdff1aSopenharmony_ci int qmul) 862cabdff1aSopenharmony_ci{ 863cabdff1aSopenharmony_ci double ftmp[10]; 864cabdff1aSopenharmony_ci uint64_t tmp[2]; 865cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 866cabdff1aSopenharmony_ci 867cabdff1aSopenharmony_ci __asm__ volatile ( 868cabdff1aSopenharmony_ci ".set noreorder \n\t" 869cabdff1aSopenharmony_ci "dli %[tmp0], 0x08 \n\t" 870cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[input], 0x18) 871cabdff1aSopenharmony_ci "mtc1 %[tmp0], %[ftmp8] \n\t" 872cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[input], 0x10) 873cabdff1aSopenharmony_ci "dli %[tmp0], 0x20 \n\t" 874cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[input], 0x08) 875cabdff1aSopenharmony_ci "mtc1 %[tmp0], %[ftmp9] \n\t" 876cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[input], 0x00) 877cabdff1aSopenharmony_ci "mov.d %[ftmp4], %[ftmp3] \n\t" 878cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp2] \n\t" 879cabdff1aSopenharmony_ci "psubh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 880cabdff1aSopenharmony_ci "mov.d %[ftmp4], %[ftmp1] \n\t" 881cabdff1aSopenharmony_ci "paddh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 882cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 883cabdff1aSopenharmony_ci "mov.d %[ftmp4], %[ftmp3] \n\t" 884cabdff1aSopenharmony_ci "paddh %[ftmp3], %[ftmp3], %[ftmp1] \n\t" 885cabdff1aSopenharmony_ci "psubh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" 886cabdff1aSopenharmony_ci "mov.d %[ftmp4], %[ftmp2] \n\t" 887cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 888cabdff1aSopenharmony_ci "psubh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 889cabdff1aSopenharmony_ci "mov.d %[ftmp4], %[ftmp3] \n\t" 890cabdff1aSopenharmony_ci "punpcklhw %[ftmp3], %[ftmp3], %[ftmp1] \n\t" 891cabdff1aSopenharmony_ci "punpckhhw %[ftmp4], %[ftmp4], %[ftmp1] \n\t" 892cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp0], %[ftmp2] \n\t" 893cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 894cabdff1aSopenharmony_ci "punpckhwd %[ftmp2], %[ftmp3], %[ftmp0] \n\t" 895cabdff1aSopenharmony_ci "punpcklwd %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 896cabdff1aSopenharmony_ci "mov.d %[ftmp0], %[ftmp4] \n\t" 897cabdff1aSopenharmony_ci "punpcklwd %[ftmp4], %[ftmp4], %[ftmp1] \n\t" 898cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 899cabdff1aSopenharmony_ci "mov.d %[ftmp1], %[ftmp0] \n\t" 900cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 901cabdff1aSopenharmony_ci "psubh %[ftmp4], %[ftmp4], %[ftmp1] \n\t" 902cabdff1aSopenharmony_ci "mov.d %[ftmp1], %[ftmp2] \n\t" 903cabdff1aSopenharmony_ci "paddh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 904cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp1] \n\t" 905cabdff1aSopenharmony_ci "mov.d %[ftmp1], %[ftmp0] \n\t" 906cabdff1aSopenharmony_ci "paddh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 907cabdff1aSopenharmony_ci "psubh %[ftmp2], %[ftmp2], %[ftmp1] \n\t" 908cabdff1aSopenharmony_ci "mov.d %[ftmp1], %[ftmp4] \n\t" 909cabdff1aSopenharmony_ci "daddi %[tmp0], %[qmul], -0x7fff \n\t" 910cabdff1aSopenharmony_ci "paddh %[ftmp4], %[ftmp4], %[ftmp3] \n\t" 911cabdff1aSopenharmony_ci "bgtz %[tmp0], 1f \n\t" 912cabdff1aSopenharmony_ci "psubh %[ftmp3], %[ftmp3], %[ftmp1] \n\t" 913cabdff1aSopenharmony_ci "ori %[tmp0], $0, 0x80 \n\t" 914cabdff1aSopenharmony_ci "dsll %[tmp0], %[tmp0], 0x10 \n\t" 915cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp0], %[ff_pw_1] \n\t" 916cabdff1aSopenharmony_ci "daddu %[qmul], %[qmul], %[tmp0] \n\t" 917cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ff_pw_1] \n\t" 918cabdff1aSopenharmony_ci "punpckhhw %[ftmp5], %[ftmp2], %[ff_pw_1] \n\t" 919cabdff1aSopenharmony_ci "punpcklhw %[ftmp2], %[ftmp2], %[ff_pw_1] \n\t" 920cabdff1aSopenharmony_ci "mtc1 %[qmul], %[ftmp7] \n\t" 921cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 922cabdff1aSopenharmony_ci "pmaddhw %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 923cabdff1aSopenharmony_ci "pmaddhw %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 924cabdff1aSopenharmony_ci "pmaddhw %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 925cabdff1aSopenharmony_ci "pmaddhw %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 926cabdff1aSopenharmony_ci "psraw %[ftmp0], %[ftmp0], %[ftmp8] \n\t" 927cabdff1aSopenharmony_ci "psraw %[ftmp2], %[ftmp2], %[ftmp8] \n\t" 928cabdff1aSopenharmony_ci "psraw %[ftmp1], %[ftmp1], %[ftmp8] \n\t" 929cabdff1aSopenharmony_ci "psraw %[ftmp5], %[ftmp5], %[ftmp8] \n\t" 930cabdff1aSopenharmony_ci "packsswh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 931cabdff1aSopenharmony_ci "packsswh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 932cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp0] \n\t" 933cabdff1aSopenharmony_ci "ssrld %[ftmp0], %[ftmp0], %[ftmp9] \n\t" 934cabdff1aSopenharmony_ci "mfc1 %[input], %[ftmp0] \n\t" 935cabdff1aSopenharmony_ci "sh %[tmp1], 0x00(%[output]) \n\t" 936cabdff1aSopenharmony_ci "sh %[input], 0x80(%[output]) \n\t" 937cabdff1aSopenharmony_ci "dsrl %[tmp1], %[tmp1], 0x10 \n\t" 938cabdff1aSopenharmony_ci PTR_SRL "%[input], %[input], 0x10 \n\t" 939cabdff1aSopenharmony_ci "sh %[tmp1], 0x20(%[output]) \n\t" 940cabdff1aSopenharmony_ci "sh %[input], 0xa0(%[output]) \n\t" 941cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp2] \n\t" 942cabdff1aSopenharmony_ci "ssrld %[ftmp2], %[ftmp2], %[ftmp9] \n\t" 943cabdff1aSopenharmony_ci "mfc1 %[input], %[ftmp2] \n\t" 944cabdff1aSopenharmony_ci "sh %[tmp1], 0x40(%[output]) \n\t" 945cabdff1aSopenharmony_ci "sh %[input], 0xc0(%[output]) \n\t" 946cabdff1aSopenharmony_ci "dsrl %[tmp1], %[tmp1], 0x10 \n\t" 947cabdff1aSopenharmony_ci PTR_SRL "%[input], %[input], 0x10 \n\t" 948cabdff1aSopenharmony_ci "sh %[tmp1], 0x60(%[output]) \n\t" 949cabdff1aSopenharmony_ci "sh %[input], 0xe0(%[output]) \n\t" 950cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp3], %[ff_pw_1] \n\t" 951cabdff1aSopenharmony_ci "punpcklhw %[ftmp3], %[ftmp3], %[ff_pw_1] \n\t" 952cabdff1aSopenharmony_ci "punpckhhw %[ftmp5], %[ftmp4], %[ff_pw_1] \n\t" 953cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ff_pw_1] \n\t" 954cabdff1aSopenharmony_ci "mtc1 %[qmul], %[ftmp7] \n\t" 955cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 956cabdff1aSopenharmony_ci "pmaddhw %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 957cabdff1aSopenharmony_ci "pmaddhw %[ftmp4], %[ftmp4], %[ftmp7] \n\t" 958cabdff1aSopenharmony_ci "pmaddhw %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 959cabdff1aSopenharmony_ci "pmaddhw %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 960cabdff1aSopenharmony_ci "psraw %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 961cabdff1aSopenharmony_ci "psraw %[ftmp4], %[ftmp4], %[ftmp8] \n\t" 962cabdff1aSopenharmony_ci "psraw %[ftmp1], %[ftmp1], %[ftmp8] \n\t" 963cabdff1aSopenharmony_ci "psraw %[ftmp5], %[ftmp5], %[ftmp8] \n\t" 964cabdff1aSopenharmony_ci "packsswh %[ftmp3], %[ftmp3], %[ftmp1] \n\t" 965cabdff1aSopenharmony_ci "packsswh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 966cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp3] \n\t" 967cabdff1aSopenharmony_ci "ssrld %[ftmp3], %[ftmp3], %[ftmp9] \n\t" 968cabdff1aSopenharmony_ci "mfc1 %[input], %[ftmp3] \n\t" 969cabdff1aSopenharmony_ci "sh %[tmp1], 0x100(%[output]) \n\t" 970cabdff1aSopenharmony_ci "sh %[input], 0x180(%[output]) \n\t" 971cabdff1aSopenharmony_ci "dsrl %[tmp1], %[tmp1], 0x10 \n\t" 972cabdff1aSopenharmony_ci PTR_SRL "%[input], %[input], 0x10 \n\t" 973cabdff1aSopenharmony_ci "sh %[tmp1], 0x120(%[output]) \n\t" 974cabdff1aSopenharmony_ci "sh %[input], 0x1a0(%[output]) \n\t" 975cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp4] \n\t" 976cabdff1aSopenharmony_ci "ssrld %[ftmp4], %[ftmp4], %[ftmp9] \n\t" 977cabdff1aSopenharmony_ci "mfc1 %[input], %[ftmp4] \n\t" 978cabdff1aSopenharmony_ci "sh %[tmp1], 0x140(%[output]) \n\t" 979cabdff1aSopenharmony_ci "sh %[input], 0x1c0(%[output]) \n\t" 980cabdff1aSopenharmony_ci "dsrl %[tmp1], %[tmp1], 0x10 \n\t" 981cabdff1aSopenharmony_ci PTR_SRL "%[input], %[input], 0x10 \n\t" 982cabdff1aSopenharmony_ci "sh %[tmp1], 0x160(%[output]) \n\t" 983cabdff1aSopenharmony_ci "j 2f \n\t" 984cabdff1aSopenharmony_ci "sh %[input], 0x1e0(%[output]) \n\t" 985cabdff1aSopenharmony_ci "1: \n\t" 986cabdff1aSopenharmony_ci "ori %[tmp0], $0, 0x1f \n\t" 987cabdff1aSopenharmony_ci#if HAVE_LOONGSON3 988cabdff1aSopenharmony_ci "clz %[tmp1], %[qmul] \n\t" 989cabdff1aSopenharmony_ci#elif HAVE_LOONGSON2 990cabdff1aSopenharmony_ci#endif 991cabdff1aSopenharmony_ci "ori %[input], $0, 0x07 \n\t" 992cabdff1aSopenharmony_ci "dsubu %[tmp1], %[tmp0], %[tmp1] \n\t" 993cabdff1aSopenharmony_ci "ori %[tmp0], $0, 0x80 \n\t" 994cabdff1aSopenharmony_ci "dsll %[tmp0], %[tmp0], 0x10 \n\t" 995cabdff1aSopenharmony_ci "daddu %[qmul], %[qmul], %[tmp0] \n\t" 996cabdff1aSopenharmony_ci "dsubu %[tmp0], %[tmp1], %[input] \n\t" 997cabdff1aSopenharmony_ci "movn %[tmp1], %[input], %[tmp0] \n\t" 998cabdff1aSopenharmony_ci PTR_ADDIU "%[input], %[input], 0x01 \n\t" 999cabdff1aSopenharmony_ci "andi %[tmp0], %[tmp1], 0xff \n\t" 1000cabdff1aSopenharmony_ci "srlv %[qmul], %[qmul], %[tmp0] \n\t" 1001cabdff1aSopenharmony_ci PTR_SUBU "%[input], %[input], %[tmp1] \n\t" 1002cabdff1aSopenharmony_ci "mtc1 %[input], %[ftmp6] \n\t" 1003cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp0], %[ff_pw_1] \n\t" 1004cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ff_pw_1] \n\t" 1005cabdff1aSopenharmony_ci "punpckhhw %[ftmp5], %[ftmp2], %[ff_pw_1] \n\t" 1006cabdff1aSopenharmony_ci "punpcklhw %[ftmp2], %[ftmp2], %[ff_pw_1] \n\t" 1007cabdff1aSopenharmony_ci "mtc1 %[qmul], %[ftmp7] \n\t" 1008cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 1009cabdff1aSopenharmony_ci "pmaddhw %[ftmp0], %[ftmp0], %[ftmp7] \n\t" 1010cabdff1aSopenharmony_ci "pmaddhw %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 1011cabdff1aSopenharmony_ci "pmaddhw %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 1012cabdff1aSopenharmony_ci "pmaddhw %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1013cabdff1aSopenharmony_ci "psraw %[ftmp0], %[ftmp0], %[ftmp6] \n\t" 1014cabdff1aSopenharmony_ci "psraw %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 1015cabdff1aSopenharmony_ci "psraw %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 1016cabdff1aSopenharmony_ci "psraw %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1017cabdff1aSopenharmony_ci "packsswh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 1018cabdff1aSopenharmony_ci "packsswh %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 1019cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp0] \n\t" 1020cabdff1aSopenharmony_ci "ssrld %[ftmp0], %[ftmp0], %[ftmp9] \n\t" 1021cabdff1aSopenharmony_ci "sh %[tmp1], 0x00(%[output]) \n\t" 1022cabdff1aSopenharmony_ci "mfc1 %[input], %[ftmp0] \n\t" 1023cabdff1aSopenharmony_ci "dsrl %[tmp1], %[tmp1], 0x10 \n\t" 1024cabdff1aSopenharmony_ci "sh %[input], 0x80(%[output]) \n\t" 1025cabdff1aSopenharmony_ci "sh %[tmp1], 0x20(%[output]) \n\t" 1026cabdff1aSopenharmony_ci PTR_SRL "%[input], %[input], 0x10 \n\t" 1027cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp2] \n\t" 1028cabdff1aSopenharmony_ci "sh %[input], 0xa0(%[output]) \n\t" 1029cabdff1aSopenharmony_ci "ssrld %[ftmp2], %[ftmp2], %[ftmp9] \n\t" 1030cabdff1aSopenharmony_ci "sh %[tmp1], 0x40(%[output]) \n\t" 1031cabdff1aSopenharmony_ci "mfc1 %[input], %[ftmp2] \n\t" 1032cabdff1aSopenharmony_ci "dsrl %[tmp1], %[tmp1], 0x10 \n\t" 1033cabdff1aSopenharmony_ci "sh %[input], 0xc0(%[output]) \n\t" 1034cabdff1aSopenharmony_ci "sh %[tmp1], 0x60(%[output]) \n\t" 1035cabdff1aSopenharmony_ci PTR_SRL "%[input], %[input], 0x10 \n\t" 1036cabdff1aSopenharmony_ci "sh %[input], 0xe0(%[output]) \n\t" 1037cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp3], %[ff_pw_1] \n\t" 1038cabdff1aSopenharmony_ci "punpcklhw %[ftmp3], %[ftmp3], %[ff_pw_1] \n\t" 1039cabdff1aSopenharmony_ci "punpckhhw %[ftmp5], %[ftmp4], %[ff_pw_1] \n\t" 1040cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ff_pw_1] \n\t" 1041cabdff1aSopenharmony_ci "mtc1 %[qmul], %[ftmp7] \n\t" 1042cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 1043cabdff1aSopenharmony_ci "pmaddhw %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 1044cabdff1aSopenharmony_ci "pmaddhw %[ftmp4], %[ftmp4], %[ftmp7] \n\t" 1045cabdff1aSopenharmony_ci "pmaddhw %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 1046cabdff1aSopenharmony_ci "pmaddhw %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1047cabdff1aSopenharmony_ci "psraw %[ftmp3], %[ftmp3], %[ftmp6] \n\t" 1048cabdff1aSopenharmony_ci "psraw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 1049cabdff1aSopenharmony_ci "psraw %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 1050cabdff1aSopenharmony_ci "psraw %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1051cabdff1aSopenharmony_ci "packsswh %[ftmp3], %[ftmp3], %[ftmp1] \n\t" 1052cabdff1aSopenharmony_ci "packsswh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1053cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp3] \n\t" 1054cabdff1aSopenharmony_ci "ssrld %[ftmp3], %[ftmp3], %[ftmp9] \n\t" 1055cabdff1aSopenharmony_ci "mfc1 %[input], %[ftmp3] \n\t" 1056cabdff1aSopenharmony_ci "sh %[tmp1], 0x100(%[output]) \n\t" 1057cabdff1aSopenharmony_ci "sh %[input], 0x180(%[output]) \n\t" 1058cabdff1aSopenharmony_ci "dsrl %[tmp1], %[tmp1], 0x10 \n\t" 1059cabdff1aSopenharmony_ci PTR_SRL "%[input], %[input], 0x10 \n\t" 1060cabdff1aSopenharmony_ci "sh %[tmp1], 0x120(%[output]) \n\t" 1061cabdff1aSopenharmony_ci "sh %[input], 0x1a0(%[output]) \n\t" 1062cabdff1aSopenharmony_ci "dmfc1 %[tmp1], %[ftmp4] \n\t" 1063cabdff1aSopenharmony_ci "ssrld %[ftmp4], %[ftmp4], %[ftmp9] \n\t" 1064cabdff1aSopenharmony_ci "mfc1 %[input], %[ftmp4] \n\t" 1065cabdff1aSopenharmony_ci "sh %[tmp1], 0x140(%[output]) \n\t" 1066cabdff1aSopenharmony_ci "sh %[input], 0x1c0(%[output]) \n\t" 1067cabdff1aSopenharmony_ci "dsrl %[tmp1], %[tmp1], 0x10 \n\t" 1068cabdff1aSopenharmony_ci PTR_SRL "%[input], %[input], 0x10 \n\t" 1069cabdff1aSopenharmony_ci "sh %[tmp1], 0x160(%[output]) \n\t" 1070cabdff1aSopenharmony_ci "sh %[input], 0x1e0(%[output]) \n\t" 1071cabdff1aSopenharmony_ci "2: \n\t" 1072cabdff1aSopenharmony_ci ".set reorder \n\t" 1073cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1074cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1075cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1076cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 1077cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), 1078cabdff1aSopenharmony_ci [tmp0]"=&r"(tmp[0]), [tmp1]"=&r"(tmp[1]), 1079cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1080cabdff1aSopenharmony_ci [output]"+&r"(output), [input]"+&r"(input), 1081cabdff1aSopenharmony_ci [qmul]"+&r"(qmul) 1082cabdff1aSopenharmony_ci : [ff_pw_1]"f"(ff_pw_1.f) 1083cabdff1aSopenharmony_ci : "memory" 1084cabdff1aSopenharmony_ci ); 1085cabdff1aSopenharmony_ci} 1086cabdff1aSopenharmony_ci 1087cabdff1aSopenharmony_civoid ff_h264_chroma422_dc_dequant_idct_8_mmi(int16_t *block, int qmul) 1088cabdff1aSopenharmony_ci{ 1089cabdff1aSopenharmony_ci int temp[8]; 1090cabdff1aSopenharmony_ci int t[8]; 1091cabdff1aSopenharmony_ci 1092cabdff1aSopenharmony_ci temp[0] = block[0] + block[16]; 1093cabdff1aSopenharmony_ci temp[1] = block[0] - block[16]; 1094cabdff1aSopenharmony_ci temp[2] = block[32] + block[48]; 1095cabdff1aSopenharmony_ci temp[3] = block[32] - block[48]; 1096cabdff1aSopenharmony_ci temp[4] = block[64] + block[80]; 1097cabdff1aSopenharmony_ci temp[5] = block[64] - block[80]; 1098cabdff1aSopenharmony_ci temp[6] = block[96] + block[112]; 1099cabdff1aSopenharmony_ci temp[7] = block[96] - block[112]; 1100cabdff1aSopenharmony_ci 1101cabdff1aSopenharmony_ci t[0] = temp[0] + temp[4] + temp[2] + temp[6]; 1102cabdff1aSopenharmony_ci t[1] = temp[0] - temp[4] + temp[2] - temp[6]; 1103cabdff1aSopenharmony_ci t[2] = temp[0] - temp[4] - temp[2] + temp[6]; 1104cabdff1aSopenharmony_ci t[3] = temp[0] + temp[4] - temp[2] - temp[6]; 1105cabdff1aSopenharmony_ci t[4] = temp[1] + temp[5] + temp[3] + temp[7]; 1106cabdff1aSopenharmony_ci t[5] = temp[1] - temp[5] + temp[3] - temp[7]; 1107cabdff1aSopenharmony_ci t[6] = temp[1] - temp[5] - temp[3] + temp[7]; 1108cabdff1aSopenharmony_ci t[7] = temp[1] + temp[5] - temp[3] - temp[7]; 1109cabdff1aSopenharmony_ci 1110cabdff1aSopenharmony_ci block[ 0]= (t[0]*qmul + 128) >> 8; 1111cabdff1aSopenharmony_ci block[ 32]= (t[1]*qmul + 128) >> 8; 1112cabdff1aSopenharmony_ci block[ 64]= (t[2]*qmul + 128) >> 8; 1113cabdff1aSopenharmony_ci block[ 96]= (t[3]*qmul + 128) >> 8; 1114cabdff1aSopenharmony_ci block[ 16]= (t[4]*qmul + 128) >> 8; 1115cabdff1aSopenharmony_ci block[ 48]= (t[5]*qmul + 128) >> 8; 1116cabdff1aSopenharmony_ci block[ 80]= (t[6]*qmul + 128) >> 8; 1117cabdff1aSopenharmony_ci block[112]= (t[7]*qmul + 128) >> 8; 1118cabdff1aSopenharmony_ci} 1119cabdff1aSopenharmony_ci 1120cabdff1aSopenharmony_civoid ff_h264_chroma_dc_dequant_idct_8_mmi(int16_t *block, int qmul) 1121cabdff1aSopenharmony_ci{ 1122cabdff1aSopenharmony_ci int a,b,c,d; 1123cabdff1aSopenharmony_ci 1124cabdff1aSopenharmony_ci d = block[0] - block[16]; 1125cabdff1aSopenharmony_ci a = block[0] + block[16]; 1126cabdff1aSopenharmony_ci b = block[32] - block[48]; 1127cabdff1aSopenharmony_ci c = block[32] + block[48]; 1128cabdff1aSopenharmony_ci block[0] = ((a+c)*qmul) >> 7; 1129cabdff1aSopenharmony_ci block[16]= ((d+b)*qmul) >> 7; 1130cabdff1aSopenharmony_ci block[32]= ((a-c)*qmul) >> 7; 1131cabdff1aSopenharmony_ci block[48]= ((d-b)*qmul) >> 7; 1132cabdff1aSopenharmony_ci} 1133cabdff1aSopenharmony_ci 1134cabdff1aSopenharmony_civoid ff_h264_weight_pixels16_8_mmi(uint8_t *block, ptrdiff_t stride, int height, 1135cabdff1aSopenharmony_ci int log2_denom, int weight, int offset) 1136cabdff1aSopenharmony_ci{ 1137cabdff1aSopenharmony_ci int y; 1138cabdff1aSopenharmony_ci double ftmp[8]; 1139cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 1140cabdff1aSopenharmony_ci 1141cabdff1aSopenharmony_ci offset <<= log2_denom; 1142cabdff1aSopenharmony_ci 1143cabdff1aSopenharmony_ci if (log2_denom) 1144cabdff1aSopenharmony_ci offset += 1 << (log2_denom - 1); 1145cabdff1aSopenharmony_ci 1146cabdff1aSopenharmony_ci for (y=0; y<height; y++, block+=stride) { 1147cabdff1aSopenharmony_ci __asm__ volatile ( 1148cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1149cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[block0], 0x00) 1150cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[block1], 0x00) 1151cabdff1aSopenharmony_ci "mtc1 %[weight], %[ftmp3] \n\t" 1152cabdff1aSopenharmony_ci "mtc1 %[offset], %[ftmp4] \n\t" 1153cabdff1aSopenharmony_ci "mtc1 %[log2_denom], %[ftmp5] \n\t" 1154cabdff1aSopenharmony_ci "pshufh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 1155cabdff1aSopenharmony_ci "pshufh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 1156cabdff1aSopenharmony_ci "punpckhbh %[ftmp6], %[ftmp1], %[ftmp0] \n\t" 1157cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp2], %[ftmp0] \n\t" 1158cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1159cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 1160cabdff1aSopenharmony_ci "pmullh %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 1161cabdff1aSopenharmony_ci "pmullh %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 1162cabdff1aSopenharmony_ci "pmullh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 1163cabdff1aSopenharmony_ci "pmullh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 1164cabdff1aSopenharmony_ci "paddsh %[ftmp6], %[ftmp6], %[ftmp4] \n\t" 1165cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 1166cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp4] \n\t" 1167cabdff1aSopenharmony_ci "paddsh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 1168cabdff1aSopenharmony_ci "psrah %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 1169cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 1170cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 1171cabdff1aSopenharmony_ci "psrah %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 1172cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 1173cabdff1aSopenharmony_ci "packushb %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 1174cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[block0], 0x00) 1175cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[block1], 0x00) 1176cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1177cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1178cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1179cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), 1180cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1181cabdff1aSopenharmony_ci [ftmp7]"=&f"(ftmp[7]) 1182cabdff1aSopenharmony_ci : [block0]"r"(block), [block1]"r"(block+8), 1183cabdff1aSopenharmony_ci [weight]"r"(weight), [offset]"r"(offset), 1184cabdff1aSopenharmony_ci [log2_denom]"r"(log2_denom) 1185cabdff1aSopenharmony_ci : "memory" 1186cabdff1aSopenharmony_ci ); 1187cabdff1aSopenharmony_ci } 1188cabdff1aSopenharmony_ci} 1189cabdff1aSopenharmony_ci 1190cabdff1aSopenharmony_civoid ff_h264_biweight_pixels16_8_mmi(uint8_t *dst, uint8_t *src, 1191cabdff1aSopenharmony_ci ptrdiff_t stride, int height, int log2_denom, int weightd, int weights, 1192cabdff1aSopenharmony_ci int offset) 1193cabdff1aSopenharmony_ci{ 1194cabdff1aSopenharmony_ci int y; 1195cabdff1aSopenharmony_ci double ftmp[9]; 1196cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 1197cabdff1aSopenharmony_ci 1198cabdff1aSopenharmony_ci offset = ((offset + 1) | 1) << log2_denom; 1199cabdff1aSopenharmony_ci 1200cabdff1aSopenharmony_ci for (y=0; y<height; y++, dst+=stride, src+=stride) { 1201cabdff1aSopenharmony_ci __asm__ volatile ( 1202cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1203cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[src0], 0x00) 1204cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[dst0], 0x00) 1205cabdff1aSopenharmony_ci "mtc1 %[weights], %[ftmp3] \n\t" 1206cabdff1aSopenharmony_ci "mtc1 %[weightd], %[ftmp4] \n\t" 1207cabdff1aSopenharmony_ci "mtc1 %[offset], %[ftmp5] \n\t" 1208cabdff1aSopenharmony_ci "mtc1 %[log2_denom], %[ftmp6] \n\t" 1209cabdff1aSopenharmony_ci "pshufh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 1210cabdff1aSopenharmony_ci "pshufh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 1211cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 1212cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp1], %[ftmp0] \n\t" 1213cabdff1aSopenharmony_ci "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t" 1214cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1215cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 1216cabdff1aSopenharmony_ci "pmullh %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 1217cabdff1aSopenharmony_ci "pmullh %[ftmp8], %[ftmp8], %[ftmp4] \n\t" 1218cabdff1aSopenharmony_ci "pmullh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 1219cabdff1aSopenharmony_ci "pmullh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 1220cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 1221cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 1222cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1223cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 1224cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 1225cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 1226cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 1227cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[dst0], 0x00) 1228cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[src1], 0x00) 1229cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[dst1], 0x00) 1230cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp1], %[ftmp0] \n\t" 1231cabdff1aSopenharmony_ci "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t" 1232cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1233cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 1234cabdff1aSopenharmony_ci "pmullh %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 1235cabdff1aSopenharmony_ci "pmullh %[ftmp8], %[ftmp8], %[ftmp4] \n\t" 1236cabdff1aSopenharmony_ci "pmullh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 1237cabdff1aSopenharmony_ci "pmullh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 1238cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 1239cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 1240cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1241cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 1242cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 1243cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 1244cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 1245cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[dst1], 0x00) 1246cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1247cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1248cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1249cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 1250cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1251cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]) 1252cabdff1aSopenharmony_ci : [dst0]"r"(dst), [dst1]"r"(dst+8), 1253cabdff1aSopenharmony_ci [src0]"r"(src), [src1]"r"(src+8), 1254cabdff1aSopenharmony_ci [weights]"r"(weights), [weightd]"r"(weightd), 1255cabdff1aSopenharmony_ci [offset]"r"(offset), [log2_denom]"r"(log2_denom+1) 1256cabdff1aSopenharmony_ci : "memory" 1257cabdff1aSopenharmony_ci ); 1258cabdff1aSopenharmony_ci } 1259cabdff1aSopenharmony_ci} 1260cabdff1aSopenharmony_ci 1261cabdff1aSopenharmony_civoid ff_h264_weight_pixels8_8_mmi(uint8_t *block, ptrdiff_t stride, int height, 1262cabdff1aSopenharmony_ci int log2_denom, int weight, int offset) 1263cabdff1aSopenharmony_ci{ 1264cabdff1aSopenharmony_ci int y; 1265cabdff1aSopenharmony_ci double ftmp[6]; 1266cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 1267cabdff1aSopenharmony_ci 1268cabdff1aSopenharmony_ci offset <<= log2_denom; 1269cabdff1aSopenharmony_ci 1270cabdff1aSopenharmony_ci if (log2_denom) 1271cabdff1aSopenharmony_ci offset += 1 << (log2_denom - 1); 1272cabdff1aSopenharmony_ci 1273cabdff1aSopenharmony_ci for (y=0; y<height; y++, block+=stride) { 1274cabdff1aSopenharmony_ci __asm__ volatile ( 1275cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1276cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[block], 0x00) 1277cabdff1aSopenharmony_ci "mtc1 %[weight], %[ftmp2] \n\t" 1278cabdff1aSopenharmony_ci "mtc1 %[offset], %[ftmp3] \n\t" 1279cabdff1aSopenharmony_ci "mtc1 %[log2_denom], %[ftmp5] \n\t" 1280cabdff1aSopenharmony_ci "pshufh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 1281cabdff1aSopenharmony_ci "pshufh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 1282cabdff1aSopenharmony_ci "punpckhbh %[ftmp4], %[ftmp1], %[ftmp0] \n\t" 1283cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1284cabdff1aSopenharmony_ci "pmullh %[ftmp4], %[ftmp4], %[ftmp2] \n\t" 1285cabdff1aSopenharmony_ci "pmullh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 1286cabdff1aSopenharmony_ci "paddsh %[ftmp4], %[ftmp4], %[ftmp3] \n\t" 1287cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 1288cabdff1aSopenharmony_ci "psrah %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1289cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 1290cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp4] \n\t" 1291cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[block], 0x00) 1292cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1293cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1294cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), 1295cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1296cabdff1aSopenharmony_ci [ftmp5]"=&f"(ftmp[5]) 1297cabdff1aSopenharmony_ci : [block]"r"(block), [weight]"r"(weight), 1298cabdff1aSopenharmony_ci [offset]"r"(offset), [log2_denom]"r"(log2_denom) 1299cabdff1aSopenharmony_ci : "memory" 1300cabdff1aSopenharmony_ci ); 1301cabdff1aSopenharmony_ci } 1302cabdff1aSopenharmony_ci} 1303cabdff1aSopenharmony_ci 1304cabdff1aSopenharmony_civoid ff_h264_biweight_pixels8_8_mmi(uint8_t *dst, uint8_t *src, 1305cabdff1aSopenharmony_ci ptrdiff_t stride, int height, int log2_denom, int weightd, int weights, 1306cabdff1aSopenharmony_ci int offset) 1307cabdff1aSopenharmony_ci{ 1308cabdff1aSopenharmony_ci int y; 1309cabdff1aSopenharmony_ci double ftmp[9]; 1310cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 1311cabdff1aSopenharmony_ci 1312cabdff1aSopenharmony_ci offset = ((offset + 1) | 1) << log2_denom; 1313cabdff1aSopenharmony_ci 1314cabdff1aSopenharmony_ci for (y=0; y<height; y++, dst+=stride, src+=stride) { 1315cabdff1aSopenharmony_ci __asm__ volatile ( 1316cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1317cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[src], 0x00) 1318cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[dst], 0x00) 1319cabdff1aSopenharmony_ci "mtc1 %[weights], %[ftmp3] \n\t" 1320cabdff1aSopenharmony_ci "mtc1 %[weightd], %[ftmp4] \n\t" 1321cabdff1aSopenharmony_ci "mtc1 %[offset], %[ftmp5] \n\t" 1322cabdff1aSopenharmony_ci "mtc1 %[log2_denom], %[ftmp6] \n\t" 1323cabdff1aSopenharmony_ci "pshufh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 1324cabdff1aSopenharmony_ci "pshufh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 1325cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 1326cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp1], %[ftmp0] \n\t" 1327cabdff1aSopenharmony_ci "punpckhbh %[ftmp8], %[ftmp2], %[ftmp0] \n\t" 1328cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1329cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 1330cabdff1aSopenharmony_ci "pmullh %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 1331cabdff1aSopenharmony_ci "pmullh %[ftmp8], %[ftmp8], %[ftmp4] \n\t" 1332cabdff1aSopenharmony_ci "pmullh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 1333cabdff1aSopenharmony_ci "pmullh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 1334cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 1335cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 1336cabdff1aSopenharmony_ci "paddsh %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1337cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 1338cabdff1aSopenharmony_ci "psrah %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 1339cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 1340cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 1341cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[dst], 0x00) 1342cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1343cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1344cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1345cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 1346cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1347cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]) 1348cabdff1aSopenharmony_ci : [dst]"r"(dst), [src]"r"(src), 1349cabdff1aSopenharmony_ci [weights]"r"(weights), [weightd]"r"(weightd), 1350cabdff1aSopenharmony_ci [offset]"r"(offset), [log2_denom]"r"(log2_denom+1) 1351cabdff1aSopenharmony_ci : "memory" 1352cabdff1aSopenharmony_ci ); 1353cabdff1aSopenharmony_ci } 1354cabdff1aSopenharmony_ci} 1355cabdff1aSopenharmony_ci 1356cabdff1aSopenharmony_civoid ff_h264_weight_pixels4_8_mmi(uint8_t *block, ptrdiff_t stride, int height, 1357cabdff1aSopenharmony_ci int log2_denom, int weight, int offset) 1358cabdff1aSopenharmony_ci{ 1359cabdff1aSopenharmony_ci int y; 1360cabdff1aSopenharmony_ci double ftmp[5]; 1361cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 1362cabdff1aSopenharmony_ci 1363cabdff1aSopenharmony_ci offset <<= log2_denom; 1364cabdff1aSopenharmony_ci 1365cabdff1aSopenharmony_ci if (log2_denom) 1366cabdff1aSopenharmony_ci offset += 1 << (log2_denom - 1); 1367cabdff1aSopenharmony_ci 1368cabdff1aSopenharmony_ci for (y=0; y<height; y++, block+=stride) { 1369cabdff1aSopenharmony_ci __asm__ volatile ( 1370cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1371cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp1], %[block], 0x00) 1372cabdff1aSopenharmony_ci "mtc1 %[weight], %[ftmp2] \n\t" 1373cabdff1aSopenharmony_ci "mtc1 %[offset], %[ftmp3] \n\t" 1374cabdff1aSopenharmony_ci "mtc1 %[log2_denom], %[ftmp4] \n\t" 1375cabdff1aSopenharmony_ci "pshufh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 1376cabdff1aSopenharmony_ci "pshufh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 1377cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1378cabdff1aSopenharmony_ci "pmullh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 1379cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 1380cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp4] \n\t" 1381cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1382cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp1], %[block], 0x00) 1383cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1384cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1385cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 1386cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]) 1387cabdff1aSopenharmony_ci : [block]"r"(block), [weight]"r"(weight), 1388cabdff1aSopenharmony_ci [offset]"r"(offset), [log2_denom]"r"(log2_denom) 1389cabdff1aSopenharmony_ci : "memory" 1390cabdff1aSopenharmony_ci ); 1391cabdff1aSopenharmony_ci } 1392cabdff1aSopenharmony_ci} 1393cabdff1aSopenharmony_ci 1394cabdff1aSopenharmony_civoid ff_h264_biweight_pixels4_8_mmi(uint8_t *dst, uint8_t *src, 1395cabdff1aSopenharmony_ci ptrdiff_t stride, int height, int log2_denom, int weightd, int weights, 1396cabdff1aSopenharmony_ci int offset) 1397cabdff1aSopenharmony_ci{ 1398cabdff1aSopenharmony_ci int y; 1399cabdff1aSopenharmony_ci double ftmp[7]; 1400cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 1401cabdff1aSopenharmony_ci 1402cabdff1aSopenharmony_ci offset = ((offset + 1) | 1) << log2_denom; 1403cabdff1aSopenharmony_ci 1404cabdff1aSopenharmony_ci for (y=0; y<height; y++, dst+=stride, src+=stride) { 1405cabdff1aSopenharmony_ci __asm__ volatile ( 1406cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1407cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp1], %[src], 0x00) 1408cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp2], %[dst], 0x00) 1409cabdff1aSopenharmony_ci "mtc1 %[weight], %[ftmp3] \n\t" 1410cabdff1aSopenharmony_ci "mtc1 %[weightd], %[ftmp4] \n\t" 1411cabdff1aSopenharmony_ci "mtc1 %[offset], %[ftmp5] \n\t" 1412cabdff1aSopenharmony_ci "mtc1 %[log2_denom], %[ftmp6] \n\t" 1413cabdff1aSopenharmony_ci "pshufh %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 1414cabdff1aSopenharmony_ci "pshufh %[ftmp4], %[ftmp4], %[ftmp0] \n\t" 1415cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 1416cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1417cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 1418cabdff1aSopenharmony_ci "pmullh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 1419cabdff1aSopenharmony_ci "pmullh %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 1420cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 1421cabdff1aSopenharmony_ci "paddsh %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 1422cabdff1aSopenharmony_ci "psrah %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 1423cabdff1aSopenharmony_ci "packushb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 1424cabdff1aSopenharmony_ci MMI_SWC1(%[ftmp1], %[dst], 0x00) 1425cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1426cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1427cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1428cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 1429cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]) 1430cabdff1aSopenharmony_ci : [dst]"r"(dst), [src]"r"(src), 1431cabdff1aSopenharmony_ci [weight]"r"(weights), [weightd]"r"(weightd), 1432cabdff1aSopenharmony_ci [offset]"r"(offset), [log2_denom]"r"(log2_denom+1) 1433cabdff1aSopenharmony_ci : "memory" 1434cabdff1aSopenharmony_ci ); 1435cabdff1aSopenharmony_ci } 1436cabdff1aSopenharmony_ci} 1437cabdff1aSopenharmony_ci 1438cabdff1aSopenharmony_civoid ff_deblock_v8_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, 1439cabdff1aSopenharmony_ci int8_t *tc0) 1440cabdff1aSopenharmony_ci{ 1441cabdff1aSopenharmony_ci double ftmp[12]; 1442cabdff1aSopenharmony_ci mips_reg addr[2]; 1443cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 1444cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 1445cabdff1aSopenharmony_ci DECLARE_VAR_ADDRT; 1446cabdff1aSopenharmony_ci 1447cabdff1aSopenharmony_ci __asm__ volatile ( 1448cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[stride], %[stride] \n\t" 1449cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1450cabdff1aSopenharmony_ci PTR_ADDU "%[addr1], %[stride], %[addr0] \n\t" 1451cabdff1aSopenharmony_ci "addi %[alpha], %[alpha], -0x01 \n\t" 1452cabdff1aSopenharmony_ci PTR_SUBU "%[addr1], $0, %[addr1] \n\t" 1453cabdff1aSopenharmony_ci "addi %[beta], %[beta], -0x01 \n\t" 1454cabdff1aSopenharmony_ci PTR_ADDU "%[addr1], %[addr1], %[pix] \n\t" 1455cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[pix], 0x00) 1456cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp1], %[addr1], %[stride], 0x00) 1457cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp2], %[addr1], %[addr0], 0x00) 1458cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00) 1459cabdff1aSopenharmony_ci "mtc1 %[alpha], %[ftmp5] \n\t" 1460cabdff1aSopenharmony_ci "mtc1 %[beta], %[ftmp6] \n\t" 1461cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 1462cabdff1aSopenharmony_ci "pshufh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 1463cabdff1aSopenharmony_ci "packushb %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 1464cabdff1aSopenharmony_ci "packushb %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 1465cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp2] \n\t" 1466cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp2], %[ftmp3] \n\t" 1467cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1468cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp2], %[ftmp1] \n\t" 1469cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1470cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp1], %[ftmp2] \n\t" 1471cabdff1aSopenharmony_ci "por %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1472cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp4] \n\t" 1473cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1474cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1475cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp4], %[ftmp3] \n\t" 1476cabdff1aSopenharmony_ci "por %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1477cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1478cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1479cabdff1aSopenharmony_ci "pcmpeqb %[ftmp8], %[ftmp8], %[ftmp0] \n\t" 1480cabdff1aSopenharmony_ci "pcmpeqb %[ftmp4], %[ftmp4], %[ftmp4] \n\t" 1481cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp5], %[tc0], 0x00) 1482cabdff1aSopenharmony_ci "punpcklbh %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 1483cabdff1aSopenharmony_ci "punpcklbh %[ftmp9], %[ftmp5], %[ftmp5] \n\t" 1484cabdff1aSopenharmony_ci "pcmpgtb %[ftmp5], %[ftmp9], %[ftmp4] \n\t" 1485cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], %[addr1], 0x00) 1486cabdff1aSopenharmony_ci "pand %[ftmp10], %[ftmp5], %[ftmp8] \n\t" 1487cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp4], %[ftmp2] \n\t" 1488cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp2], %[ftmp4] \n\t" 1489cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp8], %[ftmp6] \n\t" 1490cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 1491cabdff1aSopenharmony_ci "pcmpeqb %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1492cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 1493cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp10], %[ftmp9] \n\t" 1494cabdff1aSopenharmony_ci "psubb %[ftmp8], %[ftmp5], %[ftmp7] \n\t" 1495cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 1496cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp2], %[ftmp3] \n\t" 1497cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp11], %[addr1], 0x00) 1498cabdff1aSopenharmony_ci "pavgb %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1499cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp5], %[ftmp11] \n\t" 1500cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp5], %[ff_pb_1] \n\t" 1501cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1502cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp1], %[ftmp7] \n\t" 1503cabdff1aSopenharmony_ci "paddusb %[ftmp7], %[ftmp7], %[ftmp1] \n\t" 1504cabdff1aSopenharmony_ci "pmaxub %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1505cabdff1aSopenharmony_ci "pminub %[ftmp4], %[ftmp4], %[ftmp7] \n\t" 1506cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp4], %[addr1], %[stride], 0x00) 1507cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp5], %[pix], %[addr0], 0x00) 1508cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp5], %[ftmp3] \n\t" 1509cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp5] \n\t" 1510cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 1511cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 1512cabdff1aSopenharmony_ci "pcmpeqb %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 1513cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 1514cabdff1aSopenharmony_ci "psubb %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1515cabdff1aSopenharmony_ci "pand %[ftmp6], %[ftmp9], %[ftmp7] \n\t" 1516cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00) 1517cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp2], %[ftmp3] \n\t" 1518cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp11], %[pix], %[addr0], 0x00) 1519cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1520cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp11] \n\t" 1521cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ff_pb_1] \n\t" 1522cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1523cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp4], %[ftmp6] \n\t" 1524cabdff1aSopenharmony_ci "paddusb %[ftmp6], %[ftmp6], %[ftmp4] \n\t" 1525cabdff1aSopenharmony_ci "pmaxub %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1526cabdff1aSopenharmony_ci "pminub %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1527cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp5], %[pix], %[stride], 0x00) 1528cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp2], %[ftmp3] \n\t" 1529cabdff1aSopenharmony_ci "pcmpeqb %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 1530cabdff1aSopenharmony_ci "pand %[ftmp6], %[ftmp6], %[ff_pb_1] \n\t" 1531cabdff1aSopenharmony_ci "pxor %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1532cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp5], %[ftmp2] \n\t" 1533cabdff1aSopenharmony_ci "pavgb %[ftmp4], %[ftmp4], %[ftmp1] \n\t" 1534cabdff1aSopenharmony_ci "pavgb %[ftmp4], %[ftmp4], %[ff_pb_3] \n\t" 1535cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp5], %[ftmp3] \n\t" 1536cabdff1aSopenharmony_ci "pavgb %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 1537cabdff1aSopenharmony_ci "paddusb %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1538cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ff_pb_A1], %[ftmp4] \n\t" 1539cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp4], %[ff_pb_A1] \n\t" 1540cabdff1aSopenharmony_ci "pminub %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1541cabdff1aSopenharmony_ci "pminub %[ftmp4], %[ftmp4], %[ftmp8] \n\t" 1542cabdff1aSopenharmony_ci "psubusb %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 1543cabdff1aSopenharmony_ci "psubusb %[ftmp3], %[ftmp3], %[ftmp4] \n\t" 1544cabdff1aSopenharmony_ci "paddusb %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 1545cabdff1aSopenharmony_ci "paddusb %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 1546cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp2], %[addr1], %[addr0], 0x00) 1547cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[pix], 0x00) 1548cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1549cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1550cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1551cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 1552cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), 1553cabdff1aSopenharmony_ci [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), 1554cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 1555cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1556cabdff1aSopenharmony_ci RESTRICT_ASM_ADDRT 1557cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]), [addr1]"=&r"(addr[1]) 1558cabdff1aSopenharmony_ci : [pix]"r"(pix), [stride]"r"((mips_reg)stride), 1559cabdff1aSopenharmony_ci [alpha]"r"((mips_reg)alpha), [beta]"r"((mips_reg)beta), 1560cabdff1aSopenharmony_ci [tc0]"r"(tc0), [ff_pb_1]"f"(ff_pb_1.f), 1561cabdff1aSopenharmony_ci [ff_pb_3]"f"(ff_pb_3.f), [ff_pb_A1]"f"(ff_pb_A1.f) 1562cabdff1aSopenharmony_ci : "memory" 1563cabdff1aSopenharmony_ci ); 1564cabdff1aSopenharmony_ci} 1565cabdff1aSopenharmony_ci 1566cabdff1aSopenharmony_cistatic void deblock_v8_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, 1567cabdff1aSopenharmony_ci int beta) 1568cabdff1aSopenharmony_ci{ 1569cabdff1aSopenharmony_ci DECLARE_ALIGNED(8, const uint64_t, stack[0x0a]); 1570cabdff1aSopenharmony_ci double ftmp[16]; 1571cabdff1aSopenharmony_ci uint64_t tmp[1]; 1572cabdff1aSopenharmony_ci mips_reg addr[3]; 1573cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 1574cabdff1aSopenharmony_ci DECLARE_VAR_ADDRT; 1575cabdff1aSopenharmony_ci 1576cabdff1aSopenharmony_ci __asm__ volatile ( 1577cabdff1aSopenharmony_ci "ori %[tmp0], $0, 0x01 \n\t" 1578cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1579cabdff1aSopenharmony_ci "mtc1 %[tmp0], %[ftmp9] \n\t" 1580cabdff1aSopenharmony_ci PTR_SLL "%[addr0], %[stride], 0x02 \n\t" 1581cabdff1aSopenharmony_ci PTR_ADDU "%[addr2], %[stride], %[stride] \n\t" 1582cabdff1aSopenharmony_ci PTR_ADDIU "%[alpha], %[alpha], -0x01 \n\t" 1583cabdff1aSopenharmony_ci "sslld %[ftmp11], %[ftmp9], %[ftmp9] \n\t" 1584cabdff1aSopenharmony_ci "bltz %[alpha], 1f \n\t" 1585cabdff1aSopenharmony_ci PTR_ADDU "%[addr1], %[addr2], %[stride] \n\t" 1586cabdff1aSopenharmony_ci PTR_ADDIU "%[beta], %[beta], -0x01 \n\t" 1587cabdff1aSopenharmony_ci "bltz %[beta], 1f \n\t" 1588cabdff1aSopenharmony_ci PTR_SUBU "%[addr0], $0, %[addr0] \n\t" 1589cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[addr0], %[pix] \n\t" 1590cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[pix], 0x00) 1591cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp1], %[addr0], %[addr2], 0x00) 1592cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp2], %[addr0], %[addr1], 0x00) 1593cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00) 1594cabdff1aSopenharmony_ci "mtc1 %[alpha], %[ftmp5] \n\t" 1595cabdff1aSopenharmony_ci "mtc1 %[beta], %[ftmp6] \n\t" 1596cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 1597cabdff1aSopenharmony_ci "pshufh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 1598cabdff1aSopenharmony_ci "packushb %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 1599cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp2] \n\t" 1600cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp2], %[ftmp3] \n\t" 1601cabdff1aSopenharmony_ci "packushb %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 1602cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1603cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[stack], 0x10) 1604cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1605cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp2], %[ftmp1] \n\t" 1606cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp1], %[ftmp2] \n\t" 1607cabdff1aSopenharmony_ci "por %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1608cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1609cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1610cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp4] \n\t" 1611cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp4], %[ftmp3] \n\t" 1612cabdff1aSopenharmony_ci "por %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1613cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1614cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1615cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 1616cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp5], %[stack], 0x10) 1617cabdff1aSopenharmony_ci "pcmpeqb %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1618cabdff1aSopenharmony_ci "ldc1 %[ftmp10], %[ff_pb_1] \n\t" 1619cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp8], %[stack], 0x20) 1620cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 1621cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp3], %[ftmp2] \n\t" 1622cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp5], %[ftmp10] \n\t" 1623cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp2], %[ftmp3] \n\t" 1624cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1625cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 1626cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp15], %[stack], 0x20) 1627cabdff1aSopenharmony_ci "pcmpeqb %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1628cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp15] \n\t" 1629cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp15], %[addr0], %[stride], 0x00) 1630cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp15], %[ftmp2] \n\t" 1631cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp2], %[ftmp15] \n\t" 1632cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp8], %[ftmp6] \n\t" 1633cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1634cabdff1aSopenharmony_ci "pcmpeqb %[ftmp5], %[ftmp5], %[ftmp8] \n\t" 1635cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1636cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp14], %[pix], %[addr2], 0x00) 1637cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[stack], 0x30) 1638cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp14], %[ftmp3] \n\t" 1639cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp3], %[ftmp14] \n\t" 1640cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp8], %[ftmp6] \n\t" 1641cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1642cabdff1aSopenharmony_ci "pcmpeqb %[ftmp5], %[ftmp5], %[ftmp8] \n\t" 1643cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1644cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[stack], 0x40) 1645cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp15], %[ftmp1] \n\t" 1646cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp2], %[ftmp3] \n\t" 1647cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1648cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], %[stack], 0x10) 1649cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp15], %[ftmp1] \n\t" 1650cabdff1aSopenharmony_ci "paddb %[ftmp8], %[ftmp2], %[ftmp3] \n\t" 1651cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1652cabdff1aSopenharmony_ci "mov.d %[ftmp8], %[ftmp7] \n\t" 1653cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp7], %[stack], 0x00) 1654cabdff1aSopenharmony_ci "psrlh %[ftmp7], %[ftmp7], %[ftmp9] \n\t" 1655cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 1656cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 1657cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 1658cabdff1aSopenharmony_ci "psubb %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1659cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp15], %[ftmp4] \n\t" 1660cabdff1aSopenharmony_ci "psubb %[ftmp7], %[ftmp15], %[ftmp4] \n\t" 1661cabdff1aSopenharmony_ci "paddb %[ftmp8], %[ftmp8], %[ftmp8] \n\t" 1662cabdff1aSopenharmony_ci "psubb %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1663cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 1664cabdff1aSopenharmony_ci "psubb %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 1665cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp13], %[stack], 0x10) 1666cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp6], %[ftmp1] \n\t" 1667cabdff1aSopenharmony_ci "psrlh %[ftmp8], %[ftmp8], %[ftmp11] \n\t" 1668cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp6], %[ftmp13] \n\t" 1669cabdff1aSopenharmony_ci "pavgb %[ftmp8], %[ftmp8], %[ftmp0] \n\t" 1670cabdff1aSopenharmony_ci "pxor %[ftmp8], %[ftmp8], %[ftmp6] \n\t" 1671cabdff1aSopenharmony_ci "pand %[ftmp8], %[ftmp8], %[ftmp10] \n\t" 1672cabdff1aSopenharmony_ci "psubb %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 1673cabdff1aSopenharmony_ci "pxor %[ftmp8], %[ftmp2], %[ftmp4] \n\t" 1674cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp2], %[ftmp4] \n\t" 1675cabdff1aSopenharmony_ci "pand %[ftmp8], %[ftmp8], %[ftmp10] \n\t" 1676cabdff1aSopenharmony_ci "psubb %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1677cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp13], %[stack], 0x30) 1678cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp7], %[ftmp1] \n\t" 1679cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp12], %[stack], 0x20) 1680cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 1681cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 1682cabdff1aSopenharmony_ci "pand %[ftmp6], %[ftmp6], %[ftmp13] \n\t" 1683cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp12] \n\t" 1684cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 1685cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp2] \n\t" 1686cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp6], %[addr0], %[addr1], 0x00) 1687cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp6], %[addr0], 0x00) 1688cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp15], %[ftmp6] \n\t" 1689cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp6], %[ftmp15] \n\t" 1690cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp12], %[stack], 0x00) 1691cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 1692cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 1693cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp7], %[ftmp12] \n\t" 1694cabdff1aSopenharmony_ci "psrlh %[ftmp7], %[ftmp7], %[ftmp11] \n\t" 1695cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 1696cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 1697cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 1698cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp12], %[stack], 0x30) 1699cabdff1aSopenharmony_ci "psubb %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 1700cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp5], %[ftmp1] \n\t" 1701cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp15] \n\t" 1702cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp5], %[ftmp12] \n\t" 1703cabdff1aSopenharmony_ci "pand %[ftmp6], %[ftmp6], %[ftmp12] \n\t" 1704cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp5], %[ftmp1] \n\t" 1705cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp15] \n\t" 1706cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp5], %[addr0], %[addr2], 0x00) 1707cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp6], %[addr0], %[stride], 0x00) 1708cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp14], %[ftmp4] \n\t" 1709cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp3], %[ftmp2] \n\t" 1710cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1711cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], %[stack], 0x10) 1712cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp14], %[ftmp4] \n\t" 1713cabdff1aSopenharmony_ci "paddb %[ftmp8], %[ftmp3], %[ftmp2] \n\t" 1714cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1715cabdff1aSopenharmony_ci "mov.d %[ftmp8], %[ftmp7] \n\t" 1716cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp7], %[stack], 0x00) 1717cabdff1aSopenharmony_ci "psrlh %[ftmp7], %[ftmp7], %[ftmp9] \n\t" 1718cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 1719cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp5] \n\t" 1720cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 1721cabdff1aSopenharmony_ci "psubb %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1722cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp14], %[ftmp1] \n\t" 1723cabdff1aSopenharmony_ci "paddb %[ftmp8], %[ftmp8], %[ftmp8] \n\t" 1724cabdff1aSopenharmony_ci "psubb %[ftmp7], %[ftmp14], %[ftmp1] \n\t" 1725cabdff1aSopenharmony_ci "psubb %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1726cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 1727cabdff1aSopenharmony_ci "psubb %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 1728cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp12], %[stack], 0x10) 1729cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp6], %[ftmp4] \n\t" 1730cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp6], %[ftmp12] \n\t" 1731cabdff1aSopenharmony_ci "psrlh %[ftmp8], %[ftmp8], %[ftmp11] \n\t" 1732cabdff1aSopenharmony_ci "pavgb %[ftmp8], %[ftmp8], %[ftmp0] \n\t" 1733cabdff1aSopenharmony_ci "pxor %[ftmp8], %[ftmp8], %[ftmp6] \n\t" 1734cabdff1aSopenharmony_ci "pand %[ftmp8], %[ftmp8], %[ftmp10] \n\t" 1735cabdff1aSopenharmony_ci "psubb %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 1736cabdff1aSopenharmony_ci "pxor %[ftmp8], %[ftmp3], %[ftmp1] \n\t" 1737cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp3], %[ftmp1] \n\t" 1738cabdff1aSopenharmony_ci "pand %[ftmp8], %[ftmp8], %[ftmp10] \n\t" 1739cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp12], %[stack], 0x40) 1740cabdff1aSopenharmony_ci "psubb %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1741cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp13], %[stack], 0x20) 1742cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 1743cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 1744cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 1745cabdff1aSopenharmony_ci "pand %[ftmp6], %[ftmp6], %[ftmp12] \n\t" 1746cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp13] \n\t" 1747cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 1748cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 1749cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], %[pix], 0x00) 1750cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp6], %[pix], %[addr1], 0x00) 1751cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp14], %[ftmp6] \n\t" 1752cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp6], %[ftmp14] \n\t" 1753cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp12], %[stack], 0x00) 1754cabdff1aSopenharmony_ci "pavgb %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 1755cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 1756cabdff1aSopenharmony_ci "paddb %[ftmp7], %[ftmp7], %[ftmp12] \n\t" 1757cabdff1aSopenharmony_ci "psrlh %[ftmp7], %[ftmp7], %[ftmp11] \n\t" 1758cabdff1aSopenharmony_ci "pavgb %[ftmp7], %[ftmp7], %[ftmp0] \n\t" 1759cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 1760cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp10] \n\t" 1761cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp12], %[stack], 0x40) 1762cabdff1aSopenharmony_ci "psubb %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 1763cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp5], %[ftmp4] \n\t" 1764cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp14] \n\t" 1765cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp5], %[ftmp12] \n\t" 1766cabdff1aSopenharmony_ci "pand %[ftmp6], %[ftmp6], %[ftmp12] \n\t" 1767cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp5], %[ftmp4] \n\t" 1768cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp14] \n\t" 1769cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp5], %[pix], %[stride], 0x00) 1770cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp6], %[pix], %[addr2], 0x00) 1771cabdff1aSopenharmony_ci "1: \n\t" 1772cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1773cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1774cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1775cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 1776cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), 1777cabdff1aSopenharmony_ci [ftmp10]"=&f"(ftmp[10]), [ftmp11]"=&f"(ftmp[11]), 1778cabdff1aSopenharmony_ci [ftmp12]"=&f"(ftmp[12]), [ftmp13]"=&f"(ftmp[13]), 1779cabdff1aSopenharmony_ci [ftmp14]"=&f"(ftmp[14]), [ftmp15]"=&f"(ftmp[15]), 1780cabdff1aSopenharmony_ci [tmp0]"=&r"(tmp[0]), 1781cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1782cabdff1aSopenharmony_ci RESTRICT_ASM_ADDRT 1783cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]), [addr1]"=&r"(addr[1]), 1784cabdff1aSopenharmony_ci [addr2]"=&r"(addr[2]), 1785cabdff1aSopenharmony_ci [alpha]"+&r"(alpha), [beta]"+&r"(beta) 1786cabdff1aSopenharmony_ci : [pix]"r"(pix), [stride]"r"((mips_reg)stride), 1787cabdff1aSopenharmony_ci [stack]"r"(stack), [ff_pb_1]"m"(ff_pb_1) 1788cabdff1aSopenharmony_ci : "memory" 1789cabdff1aSopenharmony_ci ); 1790cabdff1aSopenharmony_ci} 1791cabdff1aSopenharmony_ci 1792cabdff1aSopenharmony_civoid ff_deblock_v_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, 1793cabdff1aSopenharmony_ci int beta, int8_t *tc0) 1794cabdff1aSopenharmony_ci{ 1795cabdff1aSopenharmony_ci double ftmp[9]; 1796cabdff1aSopenharmony_ci mips_reg addr[1]; 1797cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 1798cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 1799cabdff1aSopenharmony_ci DECLARE_VAR_ADDRT; 1800cabdff1aSopenharmony_ci 1801cabdff1aSopenharmony_ci __asm__ volatile ( 1802cabdff1aSopenharmony_ci "addi %[alpha], %[alpha], -0x01 \n\t" 1803cabdff1aSopenharmony_ci "addi %[beta], %[beta], -0x01 \n\t" 1804cabdff1aSopenharmony_ci "or %[addr0], $0, %[pix] \n\t" 1805cabdff1aSopenharmony_ci PTR_SUBU "%[addr0], %[addr0], %[stride] \n\t" 1806cabdff1aSopenharmony_ci PTR_SUBU "%[addr0], %[addr0], %[stride] \n\t" 1807cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[addr0], 0x00) 1808cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp2], %[addr0], %[stride], 0x00) 1809cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[pix], 0x00) 1810cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00) 1811cabdff1aSopenharmony_ci 1812cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1813cabdff1aSopenharmony_ci "mtc1 %[alpha], %[ftmp5] \n\t" 1814cabdff1aSopenharmony_ci "mtc1 %[beta], %[ftmp6] \n\t" 1815cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 1816cabdff1aSopenharmony_ci "pshufh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 1817cabdff1aSopenharmony_ci "packushb %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 1818cabdff1aSopenharmony_ci "packushb %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 1819cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp2] \n\t" 1820cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp2], %[ftmp3] \n\t" 1821cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1822cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1823cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp2], %[ftmp1] \n\t" 1824cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp1], %[ftmp2] \n\t" 1825cabdff1aSopenharmony_ci "por %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1826cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1827cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1828cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp4] \n\t" 1829cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp4], %[ftmp3] \n\t" 1830cabdff1aSopenharmony_ci "por %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1831cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1832cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1833cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 1834cabdff1aSopenharmony_ci "pcmpeqb %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1835cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp7], %[tc0], 0x00) 1836cabdff1aSopenharmony_ci "punpcklbh %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 1837cabdff1aSopenharmony_ci "pand %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1838cabdff1aSopenharmony_ci "pcmpeqb %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 1839cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp2], %[ftmp3] \n\t" 1840cabdff1aSopenharmony_ci "pxor %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1841cabdff1aSopenharmony_ci "pand %[ftmp6], %[ftmp6], %[ff_pb_1] \n\t" 1842cabdff1aSopenharmony_ci "pavgb %[ftmp4], %[ftmp4], %[ftmp1] \n\t" 1843cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp5], %[ftmp2] \n\t" 1844cabdff1aSopenharmony_ci "pavgb %[ftmp4], %[ftmp4], %[ff_pb_3] \n\t" 1845cabdff1aSopenharmony_ci "pavgb %[ftmp5], %[ftmp5], %[ftmp3] \n\t" 1846cabdff1aSopenharmony_ci "pavgb %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 1847cabdff1aSopenharmony_ci "paddusb %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1848cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ff_pb_A1], %[ftmp4] \n\t" 1849cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp4], %[ff_pb_A1] \n\t" 1850cabdff1aSopenharmony_ci "pminub %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 1851cabdff1aSopenharmony_ci "pminub %[ftmp4], %[ftmp4], %[ftmp8] \n\t" 1852cabdff1aSopenharmony_ci "psubusb %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 1853cabdff1aSopenharmony_ci "psubusb %[ftmp3], %[ftmp3], %[ftmp4] \n\t" 1854cabdff1aSopenharmony_ci "paddusb %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 1855cabdff1aSopenharmony_ci "paddusb %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 1856cabdff1aSopenharmony_ci 1857cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp2], %[addr0], %[stride], 0x00) 1858cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[pix], 0x00) 1859cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1860cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1861cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1862cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 1863cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), 1864cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 1865cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1866cabdff1aSopenharmony_ci RESTRICT_ASM_ADDRT 1867cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]) 1868cabdff1aSopenharmony_ci : [pix]"r"(pix), [stride]"r"((mips_reg)stride), 1869cabdff1aSopenharmony_ci [alpha]"r"(alpha), [beta]"r"(beta), 1870cabdff1aSopenharmony_ci [tc0]"r"(tc0), [ff_pb_1]"f"(ff_pb_1.f), 1871cabdff1aSopenharmony_ci [ff_pb_3]"f"(ff_pb_3.f), [ff_pb_A1]"f"(ff_pb_A1.f) 1872cabdff1aSopenharmony_ci : "memory" 1873cabdff1aSopenharmony_ci ); 1874cabdff1aSopenharmony_ci} 1875cabdff1aSopenharmony_ci 1876cabdff1aSopenharmony_civoid ff_deblock_v_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, 1877cabdff1aSopenharmony_ci int beta) 1878cabdff1aSopenharmony_ci{ 1879cabdff1aSopenharmony_ci double ftmp[9]; 1880cabdff1aSopenharmony_ci mips_reg addr[1]; 1881cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 1882cabdff1aSopenharmony_ci DECLARE_VAR_ADDRT; 1883cabdff1aSopenharmony_ci 1884cabdff1aSopenharmony_ci __asm__ volatile ( 1885cabdff1aSopenharmony_ci "addi %[alpha], %[alpha], -0x01 \n\t" 1886cabdff1aSopenharmony_ci "addi %[beta], %[beta], -0x01 \n\t" 1887cabdff1aSopenharmony_ci "or %[addr0], $0, %[pix] \n\t" 1888cabdff1aSopenharmony_ci PTR_SUBU "%[addr0], %[addr0], %[stride] \n\t" 1889cabdff1aSopenharmony_ci PTR_SUBU "%[addr0], %[addr0], %[stride] \n\t" 1890cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[addr0], 0x00) 1891cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp2], %[addr0], %[stride], 0x00) 1892cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[pix], 0x00) 1893cabdff1aSopenharmony_ci MMI_LDXC1(%[ftmp4], %[pix], %[stride], 0x00) 1894cabdff1aSopenharmony_ci 1895cabdff1aSopenharmony_ci "pxor %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 1896cabdff1aSopenharmony_ci "mtc1 %[alpha], %[ftmp5] \n\t" 1897cabdff1aSopenharmony_ci "mtc1 %[beta], %[ftmp6] \n\t" 1898cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp0] \n\t" 1899cabdff1aSopenharmony_ci "pshufh %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 1900cabdff1aSopenharmony_ci "packushb %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 1901cabdff1aSopenharmony_ci "packushb %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 1902cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp2] \n\t" 1903cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp2], %[ftmp3] \n\t" 1904cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1905cabdff1aSopenharmony_ci "psubusb %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1906cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp2], %[ftmp1] \n\t" 1907cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp1], %[ftmp2] \n\t" 1908cabdff1aSopenharmony_ci "por %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1909cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1910cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1911cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp3], %[ftmp4] \n\t" 1912cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp4], %[ftmp3] \n\t" 1913cabdff1aSopenharmony_ci "por %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1914cabdff1aSopenharmony_ci "psubusb %[ftmp5], %[ftmp5], %[ftmp6] \n\t" 1915cabdff1aSopenharmony_ci "por %[ftmp8], %[ftmp8], %[ftmp5] \n\t" 1916cabdff1aSopenharmony_ci "pxor %[ftmp7], %[ftmp7], %[ftmp7] \n\t" 1917cabdff1aSopenharmony_ci "pcmpeqb %[ftmp8], %[ftmp8], %[ftmp7] \n\t" 1918cabdff1aSopenharmony_ci "mov.d %[ftmp6], %[ftmp2] \n\t" 1919cabdff1aSopenharmony_ci "mov.d %[ftmp7], %[ftmp3] \n\t" 1920cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp2], %[ftmp4] \n\t" 1921cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp5], %[ff_pb_1] \n\t" 1922cabdff1aSopenharmony_ci "pavgb %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 1923cabdff1aSopenharmony_ci "psubusb %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 1924cabdff1aSopenharmony_ci "pavgb %[ftmp2], %[ftmp2], %[ftmp1] \n\t" 1925cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp3], %[ftmp1] \n\t" 1926cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp5], %[ff_pb_1] \n\t" 1927cabdff1aSopenharmony_ci "pavgb %[ftmp3], %[ftmp3], %[ftmp1] \n\t" 1928cabdff1aSopenharmony_ci "psubusb %[ftmp3], %[ftmp3], %[ftmp5] \n\t" 1929cabdff1aSopenharmony_ci "pavgb %[ftmp3], %[ftmp3], %[ftmp4] \n\t" 1930cabdff1aSopenharmony_ci "psubb %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 1931cabdff1aSopenharmony_ci "psubb %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 1932cabdff1aSopenharmony_ci "pand %[ftmp2], %[ftmp2], %[ftmp8] \n\t" 1933cabdff1aSopenharmony_ci "pand %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 1934cabdff1aSopenharmony_ci "paddb %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 1935cabdff1aSopenharmony_ci "paddb %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 1936cabdff1aSopenharmony_ci 1937cabdff1aSopenharmony_ci MMI_SDXC1(%[ftmp2], %[addr0], %[stride], 0x00) 1938cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[pix], 0x00) 1939cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 1940cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 1941cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 1942cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 1943cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), 1944cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 1945cabdff1aSopenharmony_ci RESTRICT_ASM_ADDRT 1946cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]) 1947cabdff1aSopenharmony_ci : [pix]"r"(pix), [stride]"r"((mips_reg)stride), 1948cabdff1aSopenharmony_ci [alpha]"r"(alpha), [beta]"r"(beta), 1949cabdff1aSopenharmony_ci [ff_pb_1]"f"(ff_pb_1.f) 1950cabdff1aSopenharmony_ci : "memory" 1951cabdff1aSopenharmony_ci ); 1952cabdff1aSopenharmony_ci} 1953cabdff1aSopenharmony_ci 1954cabdff1aSopenharmony_civoid ff_deblock_h_chroma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, 1955cabdff1aSopenharmony_ci int8_t *tc0) 1956cabdff1aSopenharmony_ci{ 1957cabdff1aSopenharmony_ci double ftmp[11]; 1958cabdff1aSopenharmony_ci mips_reg addr[6]; 1959cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 1960cabdff1aSopenharmony_ci 1961cabdff1aSopenharmony_ci __asm__ volatile ( 1962cabdff1aSopenharmony_ci "addi %[alpha], %[alpha], -0x01 \n\t" 1963cabdff1aSopenharmony_ci "addi %[beta], %[beta], -0x01 \n\t" 1964cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[stride], %[stride] \n\t" 1965cabdff1aSopenharmony_ci PTR_ADDI "%[pix], %[pix], -0x02 \n\t" 1966cabdff1aSopenharmony_ci PTR_ADDU "%[addr1], %[addr0], %[stride] \n\t" 1967cabdff1aSopenharmony_ci PTR_ADDU "%[addr2], %[addr0], %[addr0] \n\t" 1968cabdff1aSopenharmony_ci "or %[addr5], $0, %[pix] \n\t" 1969cabdff1aSopenharmony_ci PTR_ADDU "%[pix], %[pix], %[addr1] \n\t" 1970cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp0], %[addr5], 0x00) 1971cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr5], %[stride] \n\t" 1972cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp2], %[addr3], 0x00) 1973cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr5], %[addr0] \n\t" 1974cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp1], %[addr4], 0x00) 1975cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp3], %[pix], 0x00) 1976cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 1977cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 1978cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[stride] \n\t" 1979cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp0], %[ftmp1] \n\t" 1980cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 1981cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp4], %[addr3], 0x00) 1982cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[pix], %[addr0] \n\t" 1983cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp6], %[addr4], 0x00) 1984cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[addr1] \n\t" 1985cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp5], %[addr3], 0x00) 1986cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[pix], %[addr2] \n\t" 1987cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp7], %[addr4], 0x00) 1988cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 1989cabdff1aSopenharmony_ci "punpcklbh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 1990cabdff1aSopenharmony_ci "mov.d %[ftmp6], %[ftmp4] \n\t" 1991cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 1992cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 1993cabdff1aSopenharmony_ci "punpckhwd %[ftmp1], %[ftmp0], %[ftmp4] \n\t" 1994cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp2], %[ftmp6] \n\t" 1995cabdff1aSopenharmony_ci "punpcklwd %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 1996cabdff1aSopenharmony_ci "punpcklwd %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 1997cabdff1aSopenharmony_ci "mov.d %[ftmp9], %[ftmp0] \n\t" 1998cabdff1aSopenharmony_ci "mov.d %[ftmp10], %[ftmp3] \n\t" 1999cabdff1aSopenharmony_ci 2000cabdff1aSopenharmony_ci "pxor %[ftmp8], %[ftmp8], %[ftmp8] \n\t" 2001cabdff1aSopenharmony_ci "mtc1 %[alpha], %[ftmp4] \n\t" 2002cabdff1aSopenharmony_ci "mtc1 %[beta], %[ftmp5] \n\t" 2003cabdff1aSopenharmony_ci "pshufh %[ftmp4], %[ftmp4], %[ftmp8] \n\t" 2004cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp8] \n\t" 2005cabdff1aSopenharmony_ci "packushb %[ftmp4], %[ftmp4], %[ftmp4] \n\t" 2006cabdff1aSopenharmony_ci "packushb %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 2007cabdff1aSopenharmony_ci "psubusb %[ftmp6], %[ftmp2], %[ftmp1] \n\t" 2008cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp1], %[ftmp2] \n\t" 2009cabdff1aSopenharmony_ci "por %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 2010cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 2011cabdff1aSopenharmony_ci "psubusb %[ftmp6], %[ftmp1], %[ftmp0] \n\t" 2012cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp0], %[ftmp1] \n\t" 2013cabdff1aSopenharmony_ci "por %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2014cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2015cabdff1aSopenharmony_ci "por %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 2016cabdff1aSopenharmony_ci "psubusb %[ftmp6], %[ftmp2], %[ftmp3] \n\t" 2017cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp3], %[ftmp2] \n\t" 2018cabdff1aSopenharmony_ci "por %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2019cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2020cabdff1aSopenharmony_ci "por %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 2021cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 2022cabdff1aSopenharmony_ci "pcmpeqb %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 2023cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp6], %[tc0], 0x00) 2024cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 2025cabdff1aSopenharmony_ci "pand %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 2026cabdff1aSopenharmony_ci "pcmpeqb %[ftmp4], %[ftmp4], %[ftmp4] \n\t" 2027cabdff1aSopenharmony_ci "pxor %[ftmp5], %[ftmp1], %[ftmp2] \n\t" 2028cabdff1aSopenharmony_ci "pxor %[ftmp3], %[ftmp3], %[ftmp4] \n\t" 2029cabdff1aSopenharmony_ci "pand %[ftmp5], %[ftmp5], %[ff_pb_1] \n\t" 2030cabdff1aSopenharmony_ci "pavgb %[ftmp3], %[ftmp3], %[ftmp0] \n\t" 2031cabdff1aSopenharmony_ci "pxor %[ftmp4], %[ftmp4], %[ftmp1] \n\t" 2032cabdff1aSopenharmony_ci "pavgb %[ftmp3], %[ftmp3], %[ff_pb_3] \n\t" 2033cabdff1aSopenharmony_ci "pavgb %[ftmp4], %[ftmp4], %[ftmp2] \n\t" 2034cabdff1aSopenharmony_ci "pavgb %[ftmp3], %[ftmp3], %[ftmp5] \n\t" 2035cabdff1aSopenharmony_ci "paddusb %[ftmp3], %[ftmp3], %[ftmp4] \n\t" 2036cabdff1aSopenharmony_ci "psubusb %[ftmp6], %[ff_pb_A1], %[ftmp3] \n\t" 2037cabdff1aSopenharmony_ci "psubusb %[ftmp3], %[ftmp3], %[ff_pb_A1] \n\t" 2038cabdff1aSopenharmony_ci "pminub %[ftmp6], %[ftmp6], %[ftmp7] \n\t" 2039cabdff1aSopenharmony_ci "pminub %[ftmp3], %[ftmp3], %[ftmp7] \n\t" 2040cabdff1aSopenharmony_ci "psubusb %[ftmp1], %[ftmp1], %[ftmp6] \n\t" 2041cabdff1aSopenharmony_ci "psubusb %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2042cabdff1aSopenharmony_ci "paddusb %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 2043cabdff1aSopenharmony_ci "paddusb %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 2044cabdff1aSopenharmony_ci 2045cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp9], %[ftmp9] \n\t" 2046cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp1], %[ftmp1] \n\t" 2047cabdff1aSopenharmony_ci "punpckhwd %[ftmp6], %[ftmp2], %[ftmp2] \n\t" 2048cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp9], %[ftmp1] \n\t" 2049cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp10] \n\t" 2050cabdff1aSopenharmony_ci "punpcklhw %[ftmp1], %[ftmp0], %[ftmp2] \n\t" 2051cabdff1aSopenharmony_ci "punpckhhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2052cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp1], %[addr5], 0x00) 2053cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr5], %[stride] \n\t" 2054cabdff1aSopenharmony_ci "punpckhwd %[ftmp1], %[ftmp1], %[ftmp1] \n\t" 2055cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp1], %[addr3], 0x00) 2056cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr5], %[addr0] \n\t" 2057cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp0], %[addr4], 0x00) 2058cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 2059cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp10], %[ftmp10] \n\t" 2060cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp0], %[pix], 0x00) 2061cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2062cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 2063cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[stride] \n\t" 2064cabdff1aSopenharmony_ci "punpcklhw %[ftmp5], %[ftmp4], %[ftmp6] \n\t" 2065cabdff1aSopenharmony_ci "punpckhhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2066cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp5], %[addr3], 0x00) 2067cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 2068cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[addr0] \n\t" 2069cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[pix], %[addr1] \n\t" 2070cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp5], %[addr3], 0x00) 2071cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp4], %[addr4], 0x00) 2072cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[addr2] \n\t" 2073cabdff1aSopenharmony_ci "punpckhwd %[ftmp9], %[ftmp4], %[ftmp4] \n\t" 2074cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp9], %[addr3], 0x00) 2075cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 2076cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 2077cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 2078cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 2079cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), 2080cabdff1aSopenharmony_ci [ftmp10]"=&f"(ftmp[10]), 2081cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 2082cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]), [addr1]"=&r"(addr[1]), 2083cabdff1aSopenharmony_ci [addr2]"=&r"(addr[2]), [addr3]"=&r"(addr[3]), 2084cabdff1aSopenharmony_ci [addr4]"=&r"(addr[4]), [addr5]"=&r"(addr[5]), 2085cabdff1aSopenharmony_ci [pix]"+&r"(pix) 2086cabdff1aSopenharmony_ci : [alpha]"r"(alpha), [beta]"r"(beta), 2087cabdff1aSopenharmony_ci [stride]"r"((mips_reg)stride), [tc0]"r"(tc0), 2088cabdff1aSopenharmony_ci [ff_pb_1]"f"(ff_pb_1.f), [ff_pb_3]"f"(ff_pb_3.f), 2089cabdff1aSopenharmony_ci [ff_pb_A1]"f"(ff_pb_A1.f) 2090cabdff1aSopenharmony_ci : "memory" 2091cabdff1aSopenharmony_ci ); 2092cabdff1aSopenharmony_ci} 2093cabdff1aSopenharmony_ci 2094cabdff1aSopenharmony_civoid ff_deblock_h_chroma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, 2095cabdff1aSopenharmony_ci int beta) 2096cabdff1aSopenharmony_ci{ 2097cabdff1aSopenharmony_ci double ftmp[11]; 2098cabdff1aSopenharmony_ci mips_reg addr[6]; 2099cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 2100cabdff1aSopenharmony_ci 2101cabdff1aSopenharmony_ci __asm__ volatile ( 2102cabdff1aSopenharmony_ci "addi %[alpha], %[alpha], -0x01 \n\t" 2103cabdff1aSopenharmony_ci "addi %[beta], %[beta], -0x01 \n\t" 2104cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[stride], %[stride] \n\t" 2105cabdff1aSopenharmony_ci PTR_ADDI "%[pix], %[pix], -0x02 \n\t" 2106cabdff1aSopenharmony_ci PTR_ADDU "%[addr1], %[addr0], %[stride] \n\t" 2107cabdff1aSopenharmony_ci PTR_ADDU "%[addr2], %[addr0], %[addr0] \n\t" 2108cabdff1aSopenharmony_ci "or %[addr5], $0, %[pix] \n\t" 2109cabdff1aSopenharmony_ci PTR_ADDU "%[pix], %[pix], %[addr1] \n\t" 2110cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp0], %[addr5], 0x00) 2111cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr5], %[stride] \n\t" 2112cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp2], %[addr3], 0x00) 2113cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr5], %[addr0] \n\t" 2114cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp1], %[addr4], 0x00) 2115cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp3], %[pix], 0x00) 2116cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2117cabdff1aSopenharmony_ci "punpcklbh %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 2118cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[stride] \n\t" 2119cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp0], %[ftmp1] \n\t" 2120cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2121cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp4], %[addr3], 0x00) 2122cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[pix], %[addr0] \n\t" 2123cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp6], %[addr4], 0x00) 2124cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[addr1] \n\t" 2125cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp5], %[addr3], 0x00) 2126cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[pix], %[addr2] \n\t" 2127cabdff1aSopenharmony_ci MMI_ULWC1(%[ftmp7], %[addr4], 0x00) 2128cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2129cabdff1aSopenharmony_ci "punpcklbh %[ftmp5], %[ftmp5], %[ftmp7] \n\t" 2130cabdff1aSopenharmony_ci "mov.d %[ftmp6], %[ftmp4] \n\t" 2131cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2132cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp6], %[ftmp5] \n\t" 2133cabdff1aSopenharmony_ci "punpckhwd %[ftmp1], %[ftmp0], %[ftmp4] \n\t" 2134cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp2], %[ftmp6] \n\t" 2135cabdff1aSopenharmony_ci "punpcklwd %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 2136cabdff1aSopenharmony_ci "punpcklwd %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 2137cabdff1aSopenharmony_ci 2138cabdff1aSopenharmony_ci "pxor %[ftmp8], %[ftmp8], %[ftmp8] \n\t" 2139cabdff1aSopenharmony_ci "mtc1 %[alpha], %[ftmp4] \n\t" 2140cabdff1aSopenharmony_ci "mtc1 %[beta], %[ftmp5] \n\t" 2141cabdff1aSopenharmony_ci "pshufh %[ftmp4], %[ftmp4], %[ftmp8] \n\t" 2142cabdff1aSopenharmony_ci "pshufh %[ftmp5], %[ftmp5], %[ftmp8] \n\t" 2143cabdff1aSopenharmony_ci "packushb %[ftmp4], %[ftmp4], %[ftmp4] \n\t" 2144cabdff1aSopenharmony_ci "packushb %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 2145cabdff1aSopenharmony_ci "psubusb %[ftmp6], %[ftmp2], %[ftmp1] \n\t" 2146cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp1], %[ftmp2] \n\t" 2147cabdff1aSopenharmony_ci "por %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 2148cabdff1aSopenharmony_ci "psubusb %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 2149cabdff1aSopenharmony_ci "psubusb %[ftmp6], %[ftmp1], %[ftmp0] \n\t" 2150cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp0], %[ftmp1] \n\t" 2151cabdff1aSopenharmony_ci "por %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2152cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2153cabdff1aSopenharmony_ci "por %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 2154cabdff1aSopenharmony_ci "psubusb %[ftmp6], %[ftmp2], %[ftmp3] \n\t" 2155cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp3], %[ftmp2] \n\t" 2156cabdff1aSopenharmony_ci "por %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2157cabdff1aSopenharmony_ci "psubusb %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2158cabdff1aSopenharmony_ci "por %[ftmp7], %[ftmp7], %[ftmp4] \n\t" 2159cabdff1aSopenharmony_ci "pxor %[ftmp6], %[ftmp6], %[ftmp6] \n\t" 2160cabdff1aSopenharmony_ci "pcmpeqb %[ftmp7], %[ftmp7], %[ftmp6] \n\t" 2161cabdff1aSopenharmony_ci "mov.d %[ftmp5], %[ftmp1] \n\t" 2162cabdff1aSopenharmony_ci "mov.d %[ftmp6], %[ftmp2] \n\t" 2163cabdff1aSopenharmony_ci "pxor %[ftmp4], %[ftmp1], %[ftmp3] \n\t" 2164cabdff1aSopenharmony_ci "pand %[ftmp4], %[ftmp4], %[ff_pb_1] \n\t" 2165cabdff1aSopenharmony_ci "pavgb %[ftmp1], %[ftmp1], %[ftmp3] \n\t" 2166cabdff1aSopenharmony_ci "psubusb %[ftmp1], %[ftmp1], %[ftmp4] \n\t" 2167cabdff1aSopenharmony_ci "pavgb %[ftmp1], %[ftmp1], %[ftmp0] \n\t" 2168cabdff1aSopenharmony_ci "pxor %[ftmp4], %[ftmp2], %[ftmp0] \n\t" 2169cabdff1aSopenharmony_ci "pand %[ftmp4], %[ftmp4], %[ff_pb_1] \n\t" 2170cabdff1aSopenharmony_ci "pavgb %[ftmp2], %[ftmp2], %[ftmp0] \n\t" 2171cabdff1aSopenharmony_ci "psubusb %[ftmp2], %[ftmp2], %[ftmp4] \n\t" 2172cabdff1aSopenharmony_ci "pavgb %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2173cabdff1aSopenharmony_ci "psubb %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 2174cabdff1aSopenharmony_ci "psubb %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 2175cabdff1aSopenharmony_ci "pand %[ftmp1], %[ftmp1], %[ftmp7] \n\t" 2176cabdff1aSopenharmony_ci "pand %[ftmp2], %[ftmp2], %[ftmp7] \n\t" 2177cabdff1aSopenharmony_ci "paddb %[ftmp1], %[ftmp1], %[ftmp5] \n\t" 2178cabdff1aSopenharmony_ci "paddb %[ftmp2], %[ftmp2], %[ftmp6] \n\t" 2179cabdff1aSopenharmony_ci 2180cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp0], %[ftmp0] \n\t" 2181cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp1], %[ftmp1] \n\t" 2182cabdff1aSopenharmony_ci "punpckhwd %[ftmp6], %[ftmp2], %[ftmp2] \n\t" 2183cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2184cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2185cabdff1aSopenharmony_ci "punpcklhw %[ftmp1], %[ftmp0], %[ftmp2] \n\t" 2186cabdff1aSopenharmony_ci "punpckhhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2187cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp1], %[addr5], 0x00) 2188cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr5], %[stride] \n\t" 2189cabdff1aSopenharmony_ci "punpckhwd %[ftmp1], %[ftmp1], %[ftmp1] \n\t" 2190cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr5], %[addr0] \n\t" 2191cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp1], %[addr3], 0x00) 2192cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp0], %[addr4], 0x00) 2193cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 2194cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 2195cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp0], %[pix], 0x00) 2196cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2197cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 2198cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[stride] \n\t" 2199cabdff1aSopenharmony_ci "punpcklhw %[ftmp5], %[ftmp4], %[ftmp6] \n\t" 2200cabdff1aSopenharmony_ci "punpckhhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2201cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp5], %[addr3], 0x00) 2202cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 2203cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[addr0] \n\t" 2204cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[pix], %[addr1] \n\t" 2205cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp5], %[addr3], 0x00) 2206cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[pix], %[addr2] \n\t" 2207cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp4], %[addr4], 0x00) 2208cabdff1aSopenharmony_ci "punpckhwd %[ftmp9], %[ftmp4], %[ftmp4] \n\t" 2209cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp9], %[addr3], 0x00) 2210cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 2211cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 2212cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 2213cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 2214cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), [ftmp9]"=&f"(ftmp[9]), 2215cabdff1aSopenharmony_ci [ftmp10]"=&f"(ftmp[10]), 2216cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 2217cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]), [addr1]"=&r"(addr[1]), 2218cabdff1aSopenharmony_ci [addr2]"=&r"(addr[2]), [addr3]"=&r"(addr[3]), 2219cabdff1aSopenharmony_ci [addr4]"=&r"(addr[4]), [addr5]"=&r"(addr[5]), 2220cabdff1aSopenharmony_ci [pix]"+&r"(pix) 2221cabdff1aSopenharmony_ci : [alpha]"r"(alpha), [beta]"r"(beta), 2222cabdff1aSopenharmony_ci [stride]"r"((mips_reg)stride), [ff_pb_1]"f"(ff_pb_1.f) 2223cabdff1aSopenharmony_ci : "memory" 2224cabdff1aSopenharmony_ci ); 2225cabdff1aSopenharmony_ci} 2226cabdff1aSopenharmony_ci 2227cabdff1aSopenharmony_civoid ff_deblock_v_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, 2228cabdff1aSopenharmony_ci int8_t *tc0) 2229cabdff1aSopenharmony_ci{ 2230cabdff1aSopenharmony_ci if ((tc0[0] & tc0[1]) >= 0) 2231cabdff1aSopenharmony_ci ff_deblock_v8_luma_8_mmi(pix + 0, stride, alpha, beta, tc0); 2232cabdff1aSopenharmony_ci if ((tc0[2] & tc0[3]) >= 0) 2233cabdff1aSopenharmony_ci ff_deblock_v8_luma_8_mmi(pix + 8, stride, alpha, beta, tc0 + 2); 2234cabdff1aSopenharmony_ci} 2235cabdff1aSopenharmony_ci 2236cabdff1aSopenharmony_civoid ff_deblock_v_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, 2237cabdff1aSopenharmony_ci int beta) 2238cabdff1aSopenharmony_ci{ 2239cabdff1aSopenharmony_ci deblock_v8_luma_intra_8_mmi(pix + 0, stride, alpha, beta); 2240cabdff1aSopenharmony_ci deblock_v8_luma_intra_8_mmi(pix + 8, stride, alpha, beta); 2241cabdff1aSopenharmony_ci} 2242cabdff1aSopenharmony_ci 2243cabdff1aSopenharmony_civoid ff_deblock_h_luma_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, int beta, 2244cabdff1aSopenharmony_ci int8_t *tc0) 2245cabdff1aSopenharmony_ci{ 2246cabdff1aSopenharmony_ci DECLARE_ALIGNED(8, const uint64_t, stack[0x0d]); 2247cabdff1aSopenharmony_ci double ftmp[9]; 2248cabdff1aSopenharmony_ci mips_reg addr[8]; 2249cabdff1aSopenharmony_ci DECLARE_VAR_LOW32; 2250cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 2251cabdff1aSopenharmony_ci 2252cabdff1aSopenharmony_ci __asm__ volatile ( 2253cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[stride], %[stride] \n\t" 2254cabdff1aSopenharmony_ci PTR_ADDI "%[addr1], %[pix], -0x4 \n\t" 2255cabdff1aSopenharmony_ci PTR_ADDU "%[addr2], %[stride], %[addr0] \n\t" 2256cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp0], %[addr1], 0x00) 2257cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr1], %[stride] \n\t" 2258cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr1], %[addr2] \n\t" 2259cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp1], %[addr3], 0x00) 2260cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[addr0] \n\t" 2261cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp2], %[addr5], 0x00) 2262cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp3], %[addr4], 0x00) 2263cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[stride] \n\t" 2264cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp4], %[addr3], 0x00) 2265cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr0] \n\t" 2266cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp5], %[addr5], 0x00) 2267cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[addr2] \n\t" 2268cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp6], %[addr3], 0x00) 2269cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr0], %[addr0] \n\t" 2270cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp0], %[ftmp1] \n\t" 2271cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2272cabdff1aSopenharmony_ci "punpckhbh %[ftmp1], %[ftmp2], %[ftmp3] \n\t" 2273cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2274cabdff1aSopenharmony_ci "punpckhbh %[ftmp3], %[ftmp4], %[ftmp5] \n\t" 2275cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2276cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[addr6] \n\t" 2277cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[stack], 0x10) 2278cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp8], %[addr3], 0x00) 2279cabdff1aSopenharmony_ci PTR_ADDU "%[addr7], %[addr6], %[addr6] \n\t" 2280cabdff1aSopenharmony_ci "punpckhbh %[ftmp5], %[ftmp6], %[ftmp8] \n\t" 2281cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 2282cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp0], %[ftmp2] \n\t" 2283cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2284cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp4], %[ftmp6] \n\t" 2285cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2286cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp8], %[stack], 0x10) 2287cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 2288cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp0], %[stack], 0x00) 2289cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp7], %[ftmp8] \n\t" 2290cabdff1aSopenharmony_ci "punpcklhw %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 2291cabdff1aSopenharmony_ci "punpckhhw %[ftmp0], %[ftmp3], %[ftmp5] \n\t" 2292cabdff1aSopenharmony_ci "punpcklhw %[ftmp3], %[ftmp3], %[ftmp5] \n\t" 2293cabdff1aSopenharmony_ci "punpcklwd %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 2294cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp7], %[ftmp3] \n\t" 2295cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 2296cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp1], %[ftmp2] \n\t" 2297cabdff1aSopenharmony_ci "punpcklwd %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 2298cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[stack], 0x10) 2299cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[stack], 0x20) 2300cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp7], %[stack], 0x30) 2301cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[stack], 0x40) 2302cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], %[stack], 0x50) 2303cabdff1aSopenharmony_ci PTR_ADDU "%[addr1], %[addr1], %[addr7] \n\t" 2304cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr4], %[addr7] \n\t" 2305cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp0], %[addr1], 0x00) 2306cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr1], %[stride] \n\t" 2307cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp1], %[addr3], 0x00) 2308cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[addr0] \n\t" 2309cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp2], %[addr5], 0x00) 2310cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp3], %[addr4], 0x00) 2311cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[stride] \n\t" 2312cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp4], %[addr3], 0x00) 2313cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr0] \n\t" 2314cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp5], %[addr5], 0x00) 2315cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[addr2] \n\t" 2316cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp6], %[addr3], 0x00) 2317cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp0], %[ftmp1] \n\t" 2318cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2319cabdff1aSopenharmony_ci "punpckhbh %[ftmp1], %[ftmp2], %[ftmp3] \n\t" 2320cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2321cabdff1aSopenharmony_ci "punpckhbh %[ftmp3], %[ftmp4], %[ftmp5] \n\t" 2322cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2323cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[addr6] \n\t" 2324cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[stack], 0x18) 2325cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp8], %[addr3], 0x00) 2326cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp0], %[ftmp2] \n\t" 2327cabdff1aSopenharmony_ci "punpckhbh %[ftmp5], %[ftmp6], %[ftmp8] \n\t" 2328cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 2329cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2330cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp4], %[ftmp6] \n\t" 2331cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2332cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 2333cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp8], %[stack], 0x18) 2334cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp0], %[stack], 0x08) 2335cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp7], %[ftmp8] \n\t" 2336cabdff1aSopenharmony_ci "punpcklhw %[ftmp7], %[ftmp7], %[ftmp8] \n\t" 2337cabdff1aSopenharmony_ci "punpckhhw %[ftmp0], %[ftmp3], %[ftmp5] \n\t" 2338cabdff1aSopenharmony_ci "punpcklhw %[ftmp3], %[ftmp3], %[ftmp5] \n\t" 2339cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp7], %[ftmp3] \n\t" 2340cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp3] \n\t" 2341cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp1], %[ftmp2] \n\t" 2342cabdff1aSopenharmony_ci "punpcklwd %[ftmp1], %[ftmp1], %[ftmp2] \n\t" 2343cabdff1aSopenharmony_ci "punpcklwd %[ftmp6], %[ftmp6], %[ftmp0] \n\t" 2344cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp1], %[stack], 0x18) 2345cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[stack], 0x28) 2346cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp7], %[stack], 0x38) 2347cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[stack], 0x48) 2348cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], %[stack], 0x58) 2349cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 2350cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 2351cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 2352cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 2353cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), 2354cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 2355cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]), [addr1]"=&r"(addr[1]), 2356cabdff1aSopenharmony_ci [addr2]"=&r"(addr[2]), [addr3]"=&r"(addr[3]), 2357cabdff1aSopenharmony_ci [addr4]"=&r"(addr[4]), [addr5]"=&r"(addr[5]), 2358cabdff1aSopenharmony_ci [addr6]"=&r"(addr[6]), [addr7]"=&r"(addr[7]) 2359cabdff1aSopenharmony_ci : [pix]"r"(pix), [stride]"r"((mips_reg)stride), 2360cabdff1aSopenharmony_ci [stack]"r"(stack) 2361cabdff1aSopenharmony_ci : "memory" 2362cabdff1aSopenharmony_ci ); 2363cabdff1aSopenharmony_ci 2364cabdff1aSopenharmony_ci ff_deblock_v_luma_8_mmi((uint8_t *) &stack[6], 0x10, alpha, beta, tc0); 2365cabdff1aSopenharmony_ci 2366cabdff1aSopenharmony_ci __asm__ volatile ( 2367cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[stride], %[stride] \n\t" 2368cabdff1aSopenharmony_ci PTR_ADDI "%[addr1], %[pix], -0x02 \n\t" 2369cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr0], %[addr0] \n\t" 2370cabdff1aSopenharmony_ci PTR_ADDU "%[addr2], %[addr0], %[stride] \n\t" 2371cabdff1aSopenharmony_ci PTR_ADDU "%[addr7], %[addr6], %[addr6] \n\t" 2372cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr1], %[addr2] \n\t" 2373cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[stack], 0x10) 2374cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[stack], 0x20) 2375cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[stack], 0x30) 2376cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[stack], 0x40) 2377cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp0], %[ftmp0] \n\t" 2378cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp1], %[ftmp1] \n\t" 2379cabdff1aSopenharmony_ci "punpckhwd %[ftmp6], %[ftmp2], %[ftmp2] \n\t" 2380cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2381cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2382cabdff1aSopenharmony_ci "punpcklhw %[ftmp1], %[ftmp0], %[ftmp2] \n\t" 2383cabdff1aSopenharmony_ci "punpckhhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2384cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp1], %[addr1], 0x00) 2385cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr1], %[stride] \n\t" 2386cabdff1aSopenharmony_ci "punpckhwd %[ftmp1], %[ftmp1], %[ftmp1] \n\t" 2387cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[addr0] \n\t" 2388cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp1], %[addr3], 0x00) 2389cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp0], %[addr5], 0x00) 2390cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 2391cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 2392cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp0], %[addr4], 0x00) 2393cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2394cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 2395cabdff1aSopenharmony_ci "punpcklhw %[ftmp5], %[ftmp4], %[ftmp6] \n\t" 2396cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[stride] \n\t" 2397cabdff1aSopenharmony_ci "punpckhhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2398cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp5], %[addr3], 0x00) 2399cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[addr0] \n\t" 2400cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 2401cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr2] \n\t" 2402cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp5], %[addr3], 0x00) 2403cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp4], %[addr5], 0x00) 2404cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[addr6] \n\t" 2405cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp4], %[ftmp4] \n\t" 2406cabdff1aSopenharmony_ci PTR_ADDU "%[addr1], %[addr1], %[addr7] \n\t" 2407cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp4], %[addr3], 0x00) 2408cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr4], %[addr7] \n\t" 2409cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[stack], 0x18) 2410cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[stack], 0x28) 2411cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[stack], 0x38) 2412cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[stack], 0x48) 2413cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[stride], %[stride] \n\t" 2414cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp0], %[ftmp0] \n\t" 2415cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr0], %[addr0] \n\t" 2416cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp1], %[ftmp1] \n\t" 2417cabdff1aSopenharmony_ci "punpckhwd %[ftmp6], %[ftmp2], %[ftmp2] \n\t" 2418cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2419cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2420cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr1], %[stride] \n\t" 2421cabdff1aSopenharmony_ci "punpcklhw %[ftmp1], %[ftmp0], %[ftmp2] \n\t" 2422cabdff1aSopenharmony_ci "punpckhhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2423cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp1], %[addr1], 0x00) 2424cabdff1aSopenharmony_ci "punpckhwd %[ftmp1], %[ftmp1], %[ftmp1] \n\t" 2425cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[addr0] \n\t" 2426cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp1], %[addr3], 0x00) 2427cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp0], %[addr5], 0x00) 2428cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp0], %[ftmp0] \n\t" 2429cabdff1aSopenharmony_ci "punpckhwd %[ftmp3], %[ftmp3], %[ftmp3] \n\t" 2430cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp0], %[addr4], 0x00) 2431cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2432cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp3] \n\t" 2433cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[stride] \n\t" 2434cabdff1aSopenharmony_ci "punpcklhw %[ftmp5], %[ftmp4], %[ftmp6] \n\t" 2435cabdff1aSopenharmony_ci "punpckhhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2436cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp5], %[addr3], 0x00) 2437cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[addr0] \n\t" 2438cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp5], %[ftmp5] \n\t" 2439cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr2] \n\t" 2440cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp5], %[addr3], 0x00) 2441cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp4], %[addr5], 0x00) 2442cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr4], %[addr6] \n\t" 2443cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp4], %[ftmp4] \n\t" 2444cabdff1aSopenharmony_ci MMI_USWC1(%[ftmp4], %[addr3], 0x00) 2445cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 2446cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 2447cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 2448cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 2449cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), 2450cabdff1aSopenharmony_ci RESTRICT_ASM_LOW32 2451cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 2452cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]), [addr1]"=&r"(addr[1]), 2453cabdff1aSopenharmony_ci [addr2]"=&r"(addr[2]), [addr3]"=&r"(addr[3]), 2454cabdff1aSopenharmony_ci [addr4]"=&r"(addr[4]), [addr5]"=&r"(addr[5]), 2455cabdff1aSopenharmony_ci [addr6]"=&r"(addr[6]), [addr7]"=&r"(addr[7]) 2456cabdff1aSopenharmony_ci : [pix]"r"(pix), [stride]"r"((mips_reg)stride), 2457cabdff1aSopenharmony_ci [stack]"r"(stack) 2458cabdff1aSopenharmony_ci : "memory" 2459cabdff1aSopenharmony_ci ); 2460cabdff1aSopenharmony_ci} 2461cabdff1aSopenharmony_ci 2462cabdff1aSopenharmony_civoid ff_deblock_h_luma_intra_8_mmi(uint8_t *pix, ptrdiff_t stride, int alpha, 2463cabdff1aSopenharmony_ci int beta) 2464cabdff1aSopenharmony_ci{ 2465cabdff1aSopenharmony_ci DECLARE_ALIGNED(8, const uint64_t, ptmp[0x11]); 2466cabdff1aSopenharmony_ci DECLARE_ALIGNED(8, const uint64_t, pdat[0x04]); 2467cabdff1aSopenharmony_ci double ftmp[9]; 2468cabdff1aSopenharmony_ci mips_reg addr[7]; 2469cabdff1aSopenharmony_ci DECLARE_VAR_ALL64; 2470cabdff1aSopenharmony_ci 2471cabdff1aSopenharmony_ci __asm__ volatile ( 2472cabdff1aSopenharmony_ci PTR_ADDU "%[addr0], %[stride], %[stride] \n\t" 2473cabdff1aSopenharmony_ci PTR_ADDI "%[addr1], %[pix], -0x04 \n\t" 2474cabdff1aSopenharmony_ci PTR_ADDU "%[addr2], %[addr0], %[stride] \n\t" 2475cabdff1aSopenharmony_ci PTR_ADDU "%[addr3], %[addr0], %[addr0] \n\t" 2476cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr1], %[addr2] \n\t" 2477cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[stride] \n\t" 2478cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp0], %[addr1], 0x00) 2479cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr1], %[addr0] \n\t" 2480cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp1], %[addr5], 0x00) 2481cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp2], %[addr6], 0x00) 2482cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[stride] \n\t" 2483cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp3], %[addr4], 0x00) 2484cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr4], %[addr0] \n\t" 2485cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp4], %[addr5], 0x00) 2486cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr2] \n\t" 2487cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp5], %[addr6], 0x00) 2488cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp6], %[addr5], 0x00) 2489cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr3] \n\t" 2490cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp0], %[ftmp1] \n\t" 2491cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2492cabdff1aSopenharmony_ci "punpckhbh %[ftmp1], %[ftmp2], %[ftmp3] \n\t" 2493cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2494cabdff1aSopenharmony_ci "punpckhbh %[ftmp3], %[ftmp4], %[ftmp5] \n\t" 2495cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2496cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp8], %[addr5], 0x00) 2497cabdff1aSopenharmony_ci "punpckhbh %[ftmp5], %[ftmp6], %[ftmp8] \n\t" 2498cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 2499cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[ptmp], 0x00) 2500cabdff1aSopenharmony_ci "punpckhhw %[ftmp3], %[ftmp0], %[ftmp2] \n\t" 2501cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2502cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp4], %[ftmp6] \n\t" 2503cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2504cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp7], %[ftmp1] \n\t" 2505cabdff1aSopenharmony_ci "punpcklhw %[ftmp7], %[ftmp7], %[ftmp1] \n\t" 2506cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[ptmp], 0x20) 2507cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[ptmp], 0x00) 2508cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp2], %[ftmp5] \n\t" 2509cabdff1aSopenharmony_ci "punpcklhw %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 2510cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp0], %[ftmp4] \n\t" 2511cabdff1aSopenharmony_ci "punpcklwd %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 2512cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp7], %[ftmp2] \n\t" 2513cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 2514cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp0], %[ptmp], 0x00) 2515cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[ptmp], 0x10) 2516cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp7], %[ptmp], 0x40) 2517cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp4], %[ptmp], 0x50) 2518cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp8], %[ptmp], 0x20) 2519cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp3], %[ftmp8] \n\t" 2520cabdff1aSopenharmony_ci "punpcklwd %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 2521cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp6], %[ftmp1] \n\t" 2522cabdff1aSopenharmony_ci "punpcklwd %[ftmp6], %[ftmp6], %[ftmp1] \n\t" 2523cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr3], %[addr3] \n\t" 2524cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[ptmp], 0x20) 2525cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp0], %[ptmp], 0x30) 2526cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], %[ptmp], 0x60) 2527cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[ptmp], 0x70) 2528cabdff1aSopenharmony_ci PTR_ADDU "%[addr1], %[addr1], %[addr5] \n\t" 2529cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr4], %[addr5] \n\t" 2530cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[stride] \n\t" 2531cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp0], %[addr1], 0x00) 2532cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr1], %[addr0] \n\t" 2533cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp1], %[addr5], 0x00) 2534cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp2], %[addr6], 0x00) 2535cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[stride] \n\t" 2536cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp3], %[addr4], 0x00) 2537cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr4], %[addr0] \n\t" 2538cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp4], %[addr5], 0x00) 2539cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr2] \n\t" 2540cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp5], %[addr6], 0x00) 2541cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp6], %[addr5], 0x00) 2542cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr3] \n\t" 2543cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp0], %[ftmp1] \n\t" 2544cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2545cabdff1aSopenharmony_ci "punpckhbh %[ftmp1], %[ftmp2], %[ftmp3] \n\t" 2546cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2547cabdff1aSopenharmony_ci "punpckhbh %[ftmp3], %[ftmp4], %[ftmp5] \n\t" 2548cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2549cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp8], %[addr5], 0x00) 2550cabdff1aSopenharmony_ci "punpckhbh %[ftmp5], %[ftmp6], %[ftmp8] \n\t" 2551cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 2552cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[ptmp], 0x08) 2553cabdff1aSopenharmony_ci "punpckhhw %[ftmp3], %[ftmp0], %[ftmp2] \n\t" 2554cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2555cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp4], %[ftmp6] \n\t" 2556cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2557cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp7], %[ftmp1] \n\t" 2558cabdff1aSopenharmony_ci "punpcklhw %[ftmp7], %[ftmp7], %[ftmp1] \n\t" 2559cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp2], %[ptmp], 0x28) 2560cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[ptmp], 0x08) 2561cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp2], %[ftmp5] \n\t" 2562cabdff1aSopenharmony_ci "punpcklhw %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 2563cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp0], %[ftmp4] \n\t" 2564cabdff1aSopenharmony_ci "punpcklwd %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 2565cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp7], %[ftmp2] \n\t" 2566cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 2567cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp0], %[ptmp], 0x08) 2568cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[ptmp], 0x18) 2569cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp7], %[ptmp], 0x48) 2570cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp4], %[ptmp], 0x58) 2571cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp8], %[ptmp], 0x28) 2572cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp3], %[ftmp8] \n\t" 2573cabdff1aSopenharmony_ci "punpcklwd %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 2574cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp6], %[ftmp1] \n\t" 2575cabdff1aSopenharmony_ci "punpcklwd %[ftmp6], %[ftmp6], %[ftmp1] \n\t" 2576cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp3], %[ptmp], 0x28) 2577cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp0], %[ptmp], 0x38) 2578cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp6], %[ptmp], 0x68) 2579cabdff1aSopenharmony_ci MMI_SDC1(%[ftmp5], %[ptmp], 0x78) 2580cabdff1aSopenharmony_ci PTR_S "%[addr1], 0x00(%[pdat]) \n\t" 2581cabdff1aSopenharmony_ci PTR_S "%[addr2], 0x08(%[pdat]) \n\t" 2582cabdff1aSopenharmony_ci PTR_S "%[addr0], 0x10(%[pdat]) \n\t" 2583cabdff1aSopenharmony_ci PTR_S "%[addr3], 0x18(%[pdat]) \n\t" 2584cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 2585cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 2586cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 2587cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 2588cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), 2589cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 2590cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]), [addr1]"=&r"(addr[1]), 2591cabdff1aSopenharmony_ci [addr2]"=&r"(addr[2]), [addr3]"=&r"(addr[3]), 2592cabdff1aSopenharmony_ci [addr4]"=&r"(addr[4]), [addr5]"=&r"(addr[5]), 2593cabdff1aSopenharmony_ci [addr6]"=&r"(addr[6]) 2594cabdff1aSopenharmony_ci : [pix]"r"(pix), [stride]"r"((mips_reg)stride), 2595cabdff1aSopenharmony_ci [ptmp]"r"(ptmp), [pdat]"r"(pdat) 2596cabdff1aSopenharmony_ci : "memory" 2597cabdff1aSopenharmony_ci ); 2598cabdff1aSopenharmony_ci 2599cabdff1aSopenharmony_ci ff_deblock_v_luma_intra_8_mmi((uint8_t *) &ptmp[8], 0x10, alpha, beta); 2600cabdff1aSopenharmony_ci 2601cabdff1aSopenharmony_ci __asm__ volatile ( 2602cabdff1aSopenharmony_ci PTR_L "%[addr1], 0x00(%[pdat]) \n\t" 2603cabdff1aSopenharmony_ci PTR_L "%[addr2], 0x08(%[pdat]) \n\t" 2604cabdff1aSopenharmony_ci PTR_L "%[addr0], 0x10(%[pdat]) \n\t" 2605cabdff1aSopenharmony_ci PTR_L "%[addr3], 0x18(%[pdat]) \n\t" 2606cabdff1aSopenharmony_ci PTR_ADDU "%[addr4], %[addr1], %[addr2] \n\t" 2607cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[ptmp], 0x08) 2608cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[ptmp], 0x18) 2609cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[ptmp], 0x28) 2610cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[ptmp], 0x38) 2611cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], %[ptmp], 0x48) 2612cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp5], %[ptmp], 0x58) 2613cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp6], %[ptmp], 0x68) 2614cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp0], %[ftmp1] \n\t" 2615cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2616cabdff1aSopenharmony_ci "punpckhbh %[ftmp1], %[ftmp2], %[ftmp3] \n\t" 2617cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2618cabdff1aSopenharmony_ci "punpckhbh %[ftmp3], %[ftmp4], %[ftmp5] \n\t" 2619cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2620cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp8], %[ptmp], 0x78) 2621cabdff1aSopenharmony_ci "punpckhbh %[ftmp5], %[ftmp6], %[ftmp8] \n\t" 2622cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 2623cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp3], %[addr1], 0x00) 2624cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[addr0] \n\t" 2625cabdff1aSopenharmony_ci "punpckhhw %[ftmp3], %[ftmp0], %[ftmp2] \n\t" 2626cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2627cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp4], %[ftmp6] \n\t" 2628cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2629cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp7], %[ftmp1] \n\t" 2630cabdff1aSopenharmony_ci "punpcklhw %[ftmp7], %[ftmp7], %[ftmp1] \n\t" 2631cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp2], %[addr5], 0x00) 2632cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp2], %[addr1], 0x00) 2633cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp2], %[ftmp5] \n\t" 2634cabdff1aSopenharmony_ci "punpcklhw %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 2635cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp0], %[ftmp4] \n\t" 2636cabdff1aSopenharmony_ci "punpcklwd %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 2637cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp7], %[ftmp2] \n\t" 2638cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 2639cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[stride] \n\t" 2640cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp0], %[addr1], 0x00) 2641cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr4], %[stride] \n\t" 2642cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp5], %[addr5], 0x00) 2643cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr0] \n\t" 2644cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp7], %[addr6], 0x00) 2645cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr1], %[addr0] \n\t" 2646cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp4], %[addr5], 0x00) 2647cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp8], %[addr6], 0x00) 2648cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[addr0] \n\t" 2649cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp3], %[ftmp8] \n\t" 2650cabdff1aSopenharmony_ci "punpcklwd %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 2651cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp6], %[ftmp1] \n\t" 2652cabdff1aSopenharmony_ci "punpcklwd %[ftmp6], %[ftmp6], %[ftmp1] \n\t" 2653cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp3], %[addr5], 0x00) 2654cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr2] \n\t" 2655cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp0], %[addr4], 0x00) 2656cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr4], %[addr3] \n\t" 2657cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp6], %[addr5], 0x00) 2658cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr3], %[addr3] \n\t" 2659cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp5], %[addr6], 0x00) 2660cabdff1aSopenharmony_ci PTR_SUBU "%[addr1], %[addr1], %[addr5] \n\t" 2661cabdff1aSopenharmony_ci PTR_SUBU "%[addr4], %[addr4], %[addr5] \n\t" 2662cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp0], %[ptmp], 0x00) 2663cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp1], %[ptmp], 0x10) 2664cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp2], %[ptmp], 0x20) 2665cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp3], %[ptmp], 0x30) 2666cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp4], %[ptmp], 0x40) 2667cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp5], %[ptmp], 0x50) 2668cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp6], %[ptmp], 0x60) 2669cabdff1aSopenharmony_ci "punpckhbh %[ftmp7], %[ftmp0], %[ftmp1] \n\t" 2670cabdff1aSopenharmony_ci "punpcklbh %[ftmp0], %[ftmp0], %[ftmp1] \n\t" 2671cabdff1aSopenharmony_ci "punpckhbh %[ftmp1], %[ftmp2], %[ftmp3] \n\t" 2672cabdff1aSopenharmony_ci "punpcklbh %[ftmp2], %[ftmp2], %[ftmp3] \n\t" 2673cabdff1aSopenharmony_ci "punpckhbh %[ftmp3], %[ftmp4], %[ftmp5] \n\t" 2674cabdff1aSopenharmony_ci "punpcklbh %[ftmp4], %[ftmp4], %[ftmp5] \n\t" 2675cabdff1aSopenharmony_ci MMI_LDC1(%[ftmp8], %[ptmp], 0x70) 2676cabdff1aSopenharmony_ci "punpckhbh %[ftmp5], %[ftmp6], %[ftmp8] \n\t" 2677cabdff1aSopenharmony_ci "punpcklbh %[ftmp6], %[ftmp6], %[ftmp8] \n\t" 2678cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp3], %[addr1], 0x00) 2679cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[addr0] \n\t" 2680cabdff1aSopenharmony_ci "punpckhhw %[ftmp3], %[ftmp0], %[ftmp2] \n\t" 2681cabdff1aSopenharmony_ci "punpcklhw %[ftmp0], %[ftmp0], %[ftmp2] \n\t" 2682cabdff1aSopenharmony_ci "punpckhhw %[ftmp2], %[ftmp4], %[ftmp6] \n\t" 2683cabdff1aSopenharmony_ci "punpcklhw %[ftmp4], %[ftmp4], %[ftmp6] \n\t" 2684cabdff1aSopenharmony_ci "punpckhhw %[ftmp6], %[ftmp7], %[ftmp1] \n\t" 2685cabdff1aSopenharmony_ci "punpcklhw %[ftmp7], %[ftmp7], %[ftmp1] \n\t" 2686cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp2], %[addr5], 0x00) 2687cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp2], %[addr1], 0x00) 2688cabdff1aSopenharmony_ci "punpckhhw %[ftmp1], %[ftmp2], %[ftmp5] \n\t" 2689cabdff1aSopenharmony_ci "punpcklhw %[ftmp2], %[ftmp2], %[ftmp5] \n\t" 2690cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp0], %[ftmp4] \n\t" 2691cabdff1aSopenharmony_ci "punpcklwd %[ftmp0], %[ftmp0], %[ftmp4] \n\t" 2692cabdff1aSopenharmony_ci "punpckhwd %[ftmp4], %[ftmp7], %[ftmp2] \n\t" 2693cabdff1aSopenharmony_ci "punpcklwd %[ftmp7], %[ftmp7], %[ftmp2] \n\t" 2694cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[stride] \n\t" 2695cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp0], %[addr1], 0x00) 2696cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr4], %[stride] \n\t" 2697cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp5], %[addr5], 0x00) 2698cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr0] \n\t" 2699cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp7], %[addr6], 0x00) 2700cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr1], %[addr0] \n\t" 2701cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp4], %[addr5], 0x00) 2702cabdff1aSopenharmony_ci MMI_ULDC1(%[ftmp8], %[addr6], 0x00) 2703cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr1], %[addr0] \n\t" 2704cabdff1aSopenharmony_ci "punpckhwd %[ftmp0], %[ftmp3], %[ftmp8] \n\t" 2705cabdff1aSopenharmony_ci "punpcklwd %[ftmp3], %[ftmp3], %[ftmp8] \n\t" 2706cabdff1aSopenharmony_ci "punpckhwd %[ftmp5], %[ftmp6], %[ftmp1] \n\t" 2707cabdff1aSopenharmony_ci "punpcklwd %[ftmp6], %[ftmp6], %[ftmp1] \n\t" 2708cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp3], %[addr5], 0x00) 2709cabdff1aSopenharmony_ci PTR_ADDU "%[addr5], %[addr4], %[addr2] \n\t" 2710cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp0], %[addr4], 0x00) 2711cabdff1aSopenharmony_ci PTR_ADDU "%[addr6], %[addr4], %[addr3] \n\t" 2712cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp6], %[addr5], 0x00) 2713cabdff1aSopenharmony_ci MMI_USDC1(%[ftmp5], %[addr6], 0x00) 2714cabdff1aSopenharmony_ci : [ftmp0]"=&f"(ftmp[0]), [ftmp1]"=&f"(ftmp[1]), 2715cabdff1aSopenharmony_ci [ftmp2]"=&f"(ftmp[2]), [ftmp3]"=&f"(ftmp[3]), 2716cabdff1aSopenharmony_ci [ftmp4]"=&f"(ftmp[4]), [ftmp5]"=&f"(ftmp[5]), 2717cabdff1aSopenharmony_ci [ftmp6]"=&f"(ftmp[6]), [ftmp7]"=&f"(ftmp[7]), 2718cabdff1aSopenharmony_ci [ftmp8]"=&f"(ftmp[8]), 2719cabdff1aSopenharmony_ci RESTRICT_ASM_ALL64 2720cabdff1aSopenharmony_ci [addr0]"=&r"(addr[0]), [addr1]"=&r"(addr[1]), 2721cabdff1aSopenharmony_ci [addr2]"=&r"(addr[2]), [addr3]"=&r"(addr[3]), 2722cabdff1aSopenharmony_ci [addr4]"=&r"(addr[4]), [addr5]"=&r"(addr[5]), 2723cabdff1aSopenharmony_ci [addr6]"=&r"(addr[6]) 2724cabdff1aSopenharmony_ci : [pix]"r"(pix), [stride]"r"((mips_reg)stride), 2725cabdff1aSopenharmony_ci [ptmp]"r"(ptmp), [pdat]"r"(pdat) 2726cabdff1aSopenharmony_ci : "memory" 2727cabdff1aSopenharmony_ci ); 2728cabdff1aSopenharmony_ci} 2729