182 lines
5.7 KiB
ArmAsm
182 lines
5.7 KiB
ArmAsm
//******************************************************************************
|
|
//*
|
|
//* 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
|
|
|
|
|
|
|
|
|