blob: f0bb59092baae6fcd4cd43325ba1c25286f9d718 [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
//*/
///*
////----------------------------------------------------------------------------
//// File Name : mot_comp_neon.s
////
//// Description : This file has motion compensation related
//// interpolation functions on Neon + CortexA-8 platform
////
//// Reference Document :
////
//// Revision History :
//// Date Author Detail Description
//// ------------ ---------------- ----------------------------------
//// 18 jun 2010 S Hamsalekha Created
////
////-------------------------------------------------------------------------
//*/
///*
//// ----------------------------------------------------------------------------
//// Include Files
//// ----------------------------------------------------------------------------
//*/
// PRESERVE8
.text
.include "impeg2_neon_macros.s"
///*
//// ----------------------------------------------------------------------------
//// Struct/Union Types and Define
//// ----------------------------------------------------------------------------
//*/
///*
//// ----------------------------------------------------------------------------
//// Static Global Data section variables
//// ----------------------------------------------------------------------------
//*/
//// -------------------------- NONE --------------------------------------------
///*
//// ----------------------------------------------------------------------------
//// Static Prototype Functions
//// ----------------------------------------------------------------------------
//*/
//// -------------------------- NONE --------------------------------------------
///*
//// ----------------------------------------------------------------------------
//// Exported functions
//// ----------------------------------------------------------------------------
//*/
///*
////---------------------------------------------------------------------------
//// Function Name : impeg2_memset_8bit_8x8_block_av8()
////
//// Detail Description : This routine intialises the Block matrix buffer contents to a
//// particular Value. This function also assumes the buffer size
//// to be set is 64 Bytes fixed. It also assumes that blk matrix
//// used is 64 bit aligned.
////
//// Inputs : pi2_blk_mat : Block Pointer
//// u2_val : Value with which the block is initialized
////
//// Registers Used : v0
////
//// Stack Usage : 64 bytes
////
//// Outputs : Block Matrix Iniliazed to given value
////
//// Return Data : None
////
//// Programming Note : This implementation assumes that blk matrix buffer
//// is 128 bit aligned
////-----------------------------------------------------------------------------
//*/
.global impeg2_memset_8bit_8x8_block_av8
impeg2_memset_8bit_8x8_block_av8:
push_v_regs
// ADD x3,x0,#WIDTH_X_SIZE @//x3 is another copy address offsetted
dup v0.8b, w1 ////x1 is the 8-bit value to be set into
st1 {v0.8b}, [x0], x2 ////Store the row 1
st1 {v0.8b}, [x0], x2 ////Store the row 2
st1 {v0.8b}, [x0], x2 ////Store the row 3
st1 {v0.8b}, [x0], x2 ////Store the row 4
st1 {v0.8b}, [x0], x2 ////Store the row 5
st1 {v0.8b}, [x0], x2 ////Store the row 6
st1 {v0.8b}, [x0], x2 ////Store the row 7
st1 {v0.8b}, [x0], x2 ////Store the row 8
pop_v_regs
ret
///*
////---------------------------------------------------------------------------
//// Function Name : impeg2_memset0_16bit_8x8_linear_block_av8()
////
//// Detail Description : memsets resudual buf to 0
////
//// Inputs : x0 - pointer to y
//// x1 - pointer to u
//// x2 - pointer to v
//// Registers Used : v0
////
//// Stack Usage : 64 bytes
////
//// Outputs : The Motion Compensated Block
////
//// Return Data : None
////
//// Programming Note : <program limitation>
////-----------------------------------------------------------------------------
//*/
.global impeg2_memset0_16bit_8x8_linear_block_av8
impeg2_memset0_16bit_8x8_linear_block_av8:
push_v_regs
movi v0.8h, #0
//Y data
st1 {v0.8h} , [x0], #16 //row1
st1 {v0.8h} , [x0], #16 //row2
st1 {v0.8h} , [x0], #16 //row3
st1 {v0.8h} , [x0], #16 //row4
st1 {v0.8h} , [x0], #16 //row5
st1 {v0.8h} , [x0], #16 //row6
st1 {v0.8h} , [x0], #16 //row7
st1 {v0.8h} , [x0], #16 //row8
pop_v_regs
ret