• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 variance caclulation
27@*
28@* @author
29@*  Ittiam
30@*
31@* @par List of Functions:
32@*  - icv_variance_8x4_a9()
33@*
34@* @remarks
35@*  None
36@*
37@*******************************************************************************
38
39
40@******************************************************************************
41@*
42@*  @brief computes variance of a 8x4  block
43@*
44@*
45@*  @par   Description
46@*   This functions computes variance of a 8x4  block
47@*
48@* @param[in] pu1_src
49@*  UWORD8 pointer to the source
50@*
51@* @param[in] src_strd
52@*  integer source stride
53@*
54@* @param[in] wd
55@*  Width (assumed to be 8)
56@*
57@* @param[in] ht
58@*  Height (assumed to be 4)
59@*
60@* @returns
61@*  variance value in r0
62@*
63@* @remarks
64@*
65@******************************************************************************
66
67    .global icv_variance_8x4_a9
68
69icv_variance_8x4_a9:
70
71    push        {lr}
72
73    @ Load 8x4 source
74    vld1.8      d0,     [r0],   r1
75    vld1.8      d1,     [r0],   r1
76    vld1.8      d2,     [r0],   r1
77    vld1.8      d3,     [r0],   r1
78
79    @ Calculate Sum(values)
80    vaddl.u8    q2,     d0,     d1
81    vaddl.u8    q3,     d2,     d3
82    vadd.u16    q2,     q2,     q3
83
84    vadd.u16    d4,     d4,     d5
85    vpadd.u16   d4,     d4,     d4
86    vpadd.u16   d4,     d4,     d4
87
88    @ Calculate SumOfSquares
89    vmull.u8    q10,    d0,     d0
90    vmull.u8    q11,    d1,     d1
91    vmull.u8    q12,    d2,     d2
92    vmull.u8    q13,    d3,     d3
93
94    vaddl.u16   q10,    d20,    d21
95    vaddl.u16   q11,    d22,    d23
96    vaddl.u16   q12,    d24,    d25
97    vaddl.u16   q13,    d26,    d27
98
99    vadd.u32    q10,    q10,    q11
100    vadd.u32    q11,    q12,    q13
101    vadd.u32    q10,    q10,    q11
102    vadd.u32    d20,    d20,    d21
103    vpadd.u32   d20,    d20,    d20
104
105    @ Sum(values)
106    vmov.u16     r0,    d4[0]
107
108    @ SumOfSquares
109    vmov.u32     r1,    d20[0]
110
111    @ SquareOfSums
112    mul         r3,     r0,     r0
113
114    @ SumOfSquares * 8 * 4 - SquareOfSums
115    rsb         r0,     r3,     r1,     LSL #5
116
117    @ Divide by 32 * 32
118
119    mov         r0,     r0,     ASR #10
120    pop         {pc}
121