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