You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
119 lines
3.1 KiB
119 lines
3.1 KiB
//******************************************************************************
|
|
//*
|
|
//* 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 variance caclulation
|
|
//*
|
|
//* @author
|
|
//* Ittiam
|
|
//*
|
|
//* @par List of Functions:
|
|
//* - icv_variance_8x4_av8()
|
|
//*
|
|
//* @remarks
|
|
//* None
|
|
//*
|
|
//*******************************************************************************
|
|
|
|
|
|
//******************************************************************************
|
|
//*
|
|
//* @brief computes variance of a 8x4 block
|
|
//*
|
|
//*
|
|
//* @par Description
|
|
//* This functions computes variance of a 8x4 block
|
|
//*
|
|
//* @param[in] pu1_src
|
|
//* UWORD8 pointer to the source
|
|
//*
|
|
//* @param[in] src_strd
|
|
//* integer source stride
|
|
//*
|
|
//* @param[in] wd
|
|
//* Width (assumed to be 8)
|
|
//*
|
|
//* @param[in] ht
|
|
//* Height (assumed to be 4)
|
|
//*
|
|
//* @returns
|
|
//* variance value in x0
|
|
//*
|
|
//* @remarks
|
|
//*
|
|
//******************************************************************************
|
|
|
|
.global icv_variance_8x4_av8
|
|
|
|
icv_variance_8x4_av8:
|
|
|
|
// Load 8x4 source
|
|
ld1 {v0.8b}, [x0], x1
|
|
ld1 {v1.8b}, [x0], x1
|
|
ld1 {v2.8b}, [x0], x1
|
|
ld1 {v3.8b}, [x0], x1
|
|
|
|
// Calculate Sum(values)
|
|
uaddl v4.8h, v0.8b, v1.8b
|
|
uaddl v6.8h, v2.8b, v3.8b
|
|
add v4.8h, v4.8h, v6.8h
|
|
|
|
addp v4.8h, v4.8h, v4.8h
|
|
addp v4.4h, v4.4h, v4.4h
|
|
addp v4.4h, v4.4h, v4.4h
|
|
|
|
// Calculate SumOfSquares
|
|
umull v20.8h, v0.8b, v0.8b
|
|
umull v22.8h, v1.8b, v1.8b
|
|
umull v24.8h, v2.8b, v2.8b
|
|
umull v26.8h, v3.8b, v3.8b
|
|
|
|
uaddl v21.4s, v20.4h, v22.4h
|
|
uaddl v25.4s, v24.4h, v26.4h
|
|
uaddl2 v20.4s, v20.8h, v22.8h
|
|
uaddl2 v24.4s, v24.8h, v26.8h
|
|
|
|
add v20.4s, v20.4s, v21.4s
|
|
add v22.4s, v24.4s, v25.4s
|
|
add v20.4s, v20.4s, v22.4s
|
|
addp v20.4s, v20.4s, v20.4s
|
|
addp v20.2s, v20.2s, v20.2s
|
|
|
|
// Sum(values)
|
|
smov x0, v4.h[0]
|
|
|
|
// SumOfSquares
|
|
smov x1, v20.s[0]
|
|
|
|
// SquareOfSums
|
|
mul x3, x0, x0
|
|
|
|
// SumOfSquares * 8 * 4 - SquareOfSums
|
|
sub x1, x3, x1, LSL #5
|
|
neg x0, x1
|
|
|
|
// Divide by 32 * 32
|
|
|
|
ASR x0, x0, #10
|
|
ret
|