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
7 months ago
|
//******************************************************************************
|
||
|
//*
|
||
|
//* 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
|