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