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