1*a97c2a1fSXin Li@/****************************************************************************** 2*a97c2a1fSXin Li@ * 3*a97c2a1fSXin Li@ * Copyright (C) 2015 The Android Open Source Project 4*a97c2a1fSXin Li@ * 5*a97c2a1fSXin Li@ * Licensed under the Apache License, Version 2.0 (the "License"); 6*a97c2a1fSXin Li@ * you may not use this file except in compliance with the License. 7*a97c2a1fSXin Li@ * You may obtain a copy of the License at: 8*a97c2a1fSXin Li@ * 9*a97c2a1fSXin Li@ * http://www.apache.org/licenses/LICENSE-2.0 10*a97c2a1fSXin Li@ * 11*a97c2a1fSXin Li@ * Unless required by applicable law or agreed to in writing, software 12*a97c2a1fSXin Li@ * distributed under the License is distributed on an "AS IS" BASIS, 13*a97c2a1fSXin Li@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*a97c2a1fSXin Li@ * See the License for the specific language governing permissions and 15*a97c2a1fSXin Li@ * limitations under the License. 16*a97c2a1fSXin Li@ * 17*a97c2a1fSXin Li@ ***************************************************************************** 18*a97c2a1fSXin Li@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*a97c2a1fSXin Li@*/ 20*a97c2a1fSXin Li 21*a97c2a1fSXin Li 22*a97c2a1fSXin Li@****************************************************************************** 23*a97c2a1fSXin Li@* 24*a97c2a1fSXin Li@* 25*a97c2a1fSXin Li@* @brief 26*a97c2a1fSXin Li@* This file contains definitions of routines for SAD caclulation 27*a97c2a1fSXin Li@* 28*a97c2a1fSXin Li@* @author 29*a97c2a1fSXin Li@* Ittiam 30*a97c2a1fSXin Li@* 31*a97c2a1fSXin Li@* @par List of Functions: 32*a97c2a1fSXin Li@* - icv_sad_8x4_a9() 33*a97c2a1fSXin Li@* 34*a97c2a1fSXin Li@* @remarks 35*a97c2a1fSXin Li@* None 36*a97c2a1fSXin Li@* 37*a97c2a1fSXin Li@******************************************************************************* 38*a97c2a1fSXin Li 39*a97c2a1fSXin Li 40*a97c2a1fSXin Li@****************************************************************************** 41*a97c2a1fSXin Li@* 42*a97c2a1fSXin Li@* @brief computes distortion (SAD) between 2 8x4 blocks 43*a97c2a1fSXin Li@* 44*a97c2a1fSXin Li@* 45*a97c2a1fSXin Li@* @par Description 46*a97c2a1fSXin Li@* This functions computes SAD between 2 8x4 blocks. 47*a97c2a1fSXin Li@* 48*a97c2a1fSXin Li@* @param[in] pu1_src 49*a97c2a1fSXin Li@* UWORD8 pointer to the source 50*a97c2a1fSXin Li@* 51*a97c2a1fSXin Li@* @param[out] pu1_ref 52*a97c2a1fSXin Li@* UWORD8 pointer to the reference buffer 53*a97c2a1fSXin Li@* 54*a97c2a1fSXin Li@* @param[in] src_strd 55*a97c2a1fSXin Li@* integer source stride 56*a97c2a1fSXin Li@* 57*a97c2a1fSXin Li@* @param[in] ref_strd 58*a97c2a1fSXin Li@* integer reference stride 59*a97c2a1fSXin Li@* 60*a97c2a1fSXin Li@* @param[in] wd 61*a97c2a1fSXin Li@* Width (assumed to be 8) 62*a97c2a1fSXin Li@* 63*a97c2a1fSXin Li@* @param[in] ht 64*a97c2a1fSXin Li@* Height (assumed to be 4) 65*a97c2a1fSXin Li@* 66*a97c2a1fSXin Li@* @returns 67*a97c2a1fSXin Li@* SAD value in r0 68*a97c2a1fSXin Li@* 69*a97c2a1fSXin Li@* @remarks 70*a97c2a1fSXin Li@* 71*a97c2a1fSXin Li@****************************************************************************** 72*a97c2a1fSXin Li 73*a97c2a1fSXin Li .global icv_sad_8x4_a9 74*a97c2a1fSXin Li 75*a97c2a1fSXin Liicv_sad_8x4_a9: 76*a97c2a1fSXin Li 77*a97c2a1fSXin Li push {lr} 78*a97c2a1fSXin Li 79*a97c2a1fSXin Li vld1.8 d4, [r0], r2 80*a97c2a1fSXin Li vld1.8 d5, [r1], r3 81*a97c2a1fSXin Li 82*a97c2a1fSXin Li vld1.8 d6, [r0], r2 83*a97c2a1fSXin Li vabdl.u8 q0, d5, d4 84*a97c2a1fSXin Li 85*a97c2a1fSXin Li vld1.8 d7, [r1], r3 86*a97c2a1fSXin Li vabal.u8 q0, d7, d6 87*a97c2a1fSXin Li 88*a97c2a1fSXin Li vld1.8 d4, [r0], r2 89*a97c2a1fSXin Li vld1.8 d5, [r1], r3 90*a97c2a1fSXin Li 91*a97c2a1fSXin Li vld1.8 d6, [r0], r2 92*a97c2a1fSXin Li vabal.u8 q0, d5, d4 93*a97c2a1fSXin Li 94*a97c2a1fSXin Li vld1.8 d7, [r1], r3 95*a97c2a1fSXin Li vabal.u8 q0, d7, d6 96*a97c2a1fSXin Li 97*a97c2a1fSXin Li vadd.i16 d0, d1, d0 98*a97c2a1fSXin Li vpaddl.u16 d0, d0 99*a97c2a1fSXin Li vpaddl.u32 d0, d0 100*a97c2a1fSXin Li 101*a97c2a1fSXin Li vmov.32 r0, d0[0] 102*a97c2a1fSXin Li 103*a97c2a1fSXin Li pop {pc} 104