blob: 097070e8ccf2e552781e7b3c361e527f0613849a [file] [log] [blame]
@/******************************************************************************
@ *
@ * Copyright (C) 2015 The Android Open Source Project
@ *
@ * Licensed under the Apache License, Version 2.0 (the "License");
@ * you may not use this file except in compliance with the License.
@ * You may obtain a copy of the License at:
@ *
@ * http://www.apache.org/licenses/LICENSE-2.0
@ *
@ * Unless required by applicable law or agreed to in writing, software
@ * distributed under the License is distributed on an "AS IS" BASIS,
@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ * See the License for the specific language governing permissions and
@ * limitations under the License.
@ *
@ *****************************************************************************
@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
@*/
@******************************************************************************
@*
@*
@* @brief
@* This file contains definitions of routines for SAD caclulation
@*
@* @author
@* Ittiam
@*
@* @par List of Functions:
@* - icv_sad_8x4_a9()
@*
@* @remarks
@* None
@*
@*******************************************************************************
@******************************************************************************
@*
@* @brief computes distortion (SAD) between 2 8x4 blocks
@*
@*
@* @par Description
@* This functions computes SAD between 2 8x4 blocks.
@*
@* @param[in] pu1_src
@* UWORD8 pointer to the source
@*
@* @param[out] pu1_ref
@* UWORD8 pointer to the reference buffer
@*
@* @param[in] src_strd
@* integer source stride
@*
@* @param[in] ref_strd
@* integer reference stride
@*
@* @param[in] wd
@* Width (assumed to be 8)
@*
@* @param[in] ht
@* Height (assumed to be 4)
@*
@* @returns
@* SAD value in r0
@*
@* @remarks
@*
@******************************************************************************
.global icv_sad_8x4_a9
icv_sad_8x4_a9:
push {lr}
vld1.8 d4, [r0], r2
vld1.8 d5, [r1], r3
vld1.8 d6, [r0], r2
vabdl.u8 q0, d5, d4
vld1.8 d7, [r1], r3
vabal.u8 q0, d7, d6
vld1.8 d4, [r0], r2
vld1.8 d5, [r1], r3
vld1.8 d6, [r0], r2
vabal.u8 q0, d5, d4
vld1.8 d7, [r1], r3
vabal.u8 q0, d7, d6
vadd.i16 d0, d1, d0
vpaddl.u16 d0, d0
vpaddl.u32 d0, d0
vmov.32 r0, d0[0]
pop {pc}