1*a97c2a1fSXin Li//****************************************************************************** 2*a97c2a1fSXin Li//* 3*a97c2a1fSXin Li//* Copyright (C) 2015 The Android Open Source Project 4*a97c2a1fSXin Li//* 5*a97c2a1fSXin Li//* Licensed under the Apache License, Version 2.0 (the "License"); 6*a97c2a1fSXin Li//* you may not use this file except in compliance with the License. 7*a97c2a1fSXin Li//* You may obtain a copy of the License at: 8*a97c2a1fSXin Li//* 9*a97c2a1fSXin Li//* http://www.apache.org/licenses/LICENSE-2.0 10*a97c2a1fSXin Li//* 11*a97c2a1fSXin Li//* Unless required by applicable law or agreed to in writing, software 12*a97c2a1fSXin Li//* distributed under the License is distributed on an "AS IS" BASIS, 13*a97c2a1fSXin Li//* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14*a97c2a1fSXin Li//* See the License for the specific language governing permissions and 15*a97c2a1fSXin Li//* limitations under the License. 16*a97c2a1fSXin Li//* 17*a97c2a1fSXin Li//***************************************************************************** 18*a97c2a1fSXin Li//* Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore 19*a97c2a1fSXin Li//*/ 20*a97c2a1fSXin Li 21*a97c2a1fSXin Li///* 22*a97c2a1fSXin Li////---------------------------------------------------------------------------- 23*a97c2a1fSXin Li//// File Name : mot_comp_neon.s 24*a97c2a1fSXin Li//// 25*a97c2a1fSXin Li//// Description : This file has motion compensation related 26*a97c2a1fSXin Li//// interpolation functions on Neon + CortexA-8 platform 27*a97c2a1fSXin Li//// 28*a97c2a1fSXin Li//// Reference Document : 29*a97c2a1fSXin Li//// 30*a97c2a1fSXin Li//// Revision History : 31*a97c2a1fSXin Li//// Date Author Detail Description 32*a97c2a1fSXin Li//// ------------ ---------------- ---------------------------------- 33*a97c2a1fSXin Li//// 18 jun 2010 S Hamsalekha Created 34*a97c2a1fSXin Li//// 35*a97c2a1fSXin Li////------------------------------------------------------------------------- 36*a97c2a1fSXin Li//*/ 37*a97c2a1fSXin Li 38*a97c2a1fSXin Li///* 39*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 40*a97c2a1fSXin Li//// Include Files 41*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 42*a97c2a1fSXin Li//*/ 43*a97c2a1fSXin Li// PRESERVE8 44*a97c2a1fSXin Li.text 45*a97c2a1fSXin Li.include "impeg2_neon_macros.s" 46*a97c2a1fSXin Li///* 47*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 48*a97c2a1fSXin Li//// Struct/Union Types and Define 49*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 50*a97c2a1fSXin Li//*/ 51*a97c2a1fSXin Li 52*a97c2a1fSXin Li 53*a97c2a1fSXin Li///* 54*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 55*a97c2a1fSXin Li//// Static Global Data section variables 56*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 57*a97c2a1fSXin Li//*/ 58*a97c2a1fSXin Li//// -------------------------- NONE -------------------------------------------- 59*a97c2a1fSXin Li 60*a97c2a1fSXin Li 61*a97c2a1fSXin Li///* 62*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 63*a97c2a1fSXin Li//// Static Prototype Functions 64*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 65*a97c2a1fSXin Li//*/ 66*a97c2a1fSXin Li//// -------------------------- NONE -------------------------------------------- 67*a97c2a1fSXin Li 68*a97c2a1fSXin Li///* 69*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 70*a97c2a1fSXin Li//// Exported functions 71*a97c2a1fSXin Li//// ---------------------------------------------------------------------------- 72*a97c2a1fSXin Li//*/ 73*a97c2a1fSXin Li 74*a97c2a1fSXin Li///* 75*a97c2a1fSXin Li////--------------------------------------------------------------------------- 76*a97c2a1fSXin Li//// Function Name : impeg2_memset_8bit_8x8_block_av8() 77*a97c2a1fSXin Li//// 78*a97c2a1fSXin Li//// Detail Description : This routine intialises the Block matrix buffer contents to a 79*a97c2a1fSXin Li//// particular Value. This function also assumes the buffer size 80*a97c2a1fSXin Li//// to be set is 64 Bytes fixed. It also assumes that blk matrix 81*a97c2a1fSXin Li//// used is 64 bit aligned. 82*a97c2a1fSXin Li//// 83*a97c2a1fSXin Li//// Inputs : pi2_blk_mat : Block Pointer 84*a97c2a1fSXin Li//// u2_val : Value with which the block is initialized 85*a97c2a1fSXin Li//// 86*a97c2a1fSXin Li//// Registers Used : v0 87*a97c2a1fSXin Li//// 88*a97c2a1fSXin Li//// Stack Usage : 64 bytes 89*a97c2a1fSXin Li//// 90*a97c2a1fSXin Li//// Outputs : Block Matrix Iniliazed to given value 91*a97c2a1fSXin Li//// 92*a97c2a1fSXin Li//// Return Data : None 93*a97c2a1fSXin Li//// 94*a97c2a1fSXin Li//// Programming Note : This implementation assumes that blk matrix buffer 95*a97c2a1fSXin Li//// is 128 bit aligned 96*a97c2a1fSXin Li////----------------------------------------------------------------------------- 97*a97c2a1fSXin Li//*/ 98*a97c2a1fSXin Li.global impeg2_memset_8bit_8x8_block_av8 99*a97c2a1fSXin Liimpeg2_memset_8bit_8x8_block_av8: 100*a97c2a1fSXin Li push_v_regs 101*a97c2a1fSXin Li 102*a97c2a1fSXin Li// ADD x3,x0,#WIDTH_X_SIZE @//x3 is another copy address offsetted 103*a97c2a1fSXin Li 104*a97c2a1fSXin Li dup v0.8b, w1 ////x1 is the 8-bit value to be set into 105*a97c2a1fSXin Li 106*a97c2a1fSXin Li st1 {v0.8b}, [x0], x2 ////Store the row 1 107*a97c2a1fSXin Li st1 {v0.8b}, [x0], x2 ////Store the row 2 108*a97c2a1fSXin Li st1 {v0.8b}, [x0], x2 ////Store the row 3 109*a97c2a1fSXin Li st1 {v0.8b}, [x0], x2 ////Store the row 4 110*a97c2a1fSXin Li st1 {v0.8b}, [x0], x2 ////Store the row 5 111*a97c2a1fSXin Li st1 {v0.8b}, [x0], x2 ////Store the row 6 112*a97c2a1fSXin Li st1 {v0.8b}, [x0], x2 ////Store the row 7 113*a97c2a1fSXin Li st1 {v0.8b}, [x0], x2 ////Store the row 8 114*a97c2a1fSXin Li 115*a97c2a1fSXin Li pop_v_regs 116*a97c2a1fSXin Li ret 117*a97c2a1fSXin Li 118*a97c2a1fSXin Li 119*a97c2a1fSXin Li 120*a97c2a1fSXin Li 121*a97c2a1fSXin Li 122*a97c2a1fSXin Li 123*a97c2a1fSXin Li///* 124*a97c2a1fSXin Li////--------------------------------------------------------------------------- 125*a97c2a1fSXin Li//// Function Name : impeg2_memset0_16bit_8x8_linear_block_av8() 126*a97c2a1fSXin Li//// 127*a97c2a1fSXin Li//// Detail Description : memsets resudual buf to 0 128*a97c2a1fSXin Li//// 129*a97c2a1fSXin Li//// Inputs : x0 - pointer to y 130*a97c2a1fSXin Li//// x1 - pointer to u 131*a97c2a1fSXin Li//// x2 - pointer to v 132*a97c2a1fSXin Li//// Registers Used : v0 133*a97c2a1fSXin Li 134*a97c2a1fSXin Li//// 135*a97c2a1fSXin Li//// Stack Usage : 64 bytes 136*a97c2a1fSXin Li//// 137*a97c2a1fSXin Li//// Outputs : The Motion Compensated Block 138*a97c2a1fSXin Li//// 139*a97c2a1fSXin Li//// Return Data : None 140*a97c2a1fSXin Li//// 141*a97c2a1fSXin Li//// Programming Note : <program limitation> 142*a97c2a1fSXin Li////----------------------------------------------------------------------------- 143*a97c2a1fSXin Li//*/ 144*a97c2a1fSXin Li 145*a97c2a1fSXin Li 146*a97c2a1fSXin Li 147*a97c2a1fSXin Li.global impeg2_memset0_16bit_8x8_linear_block_av8 148*a97c2a1fSXin Li 149*a97c2a1fSXin Li 150*a97c2a1fSXin Liimpeg2_memset0_16bit_8x8_linear_block_av8: 151*a97c2a1fSXin Li 152*a97c2a1fSXin Li push_v_regs 153*a97c2a1fSXin Li 154*a97c2a1fSXin Li movi v0.8h, #0 155*a97c2a1fSXin Li 156*a97c2a1fSXin Li //Y data 157*a97c2a1fSXin Li 158*a97c2a1fSXin Li st1 {v0.8h} , [x0], #16 //row1 159*a97c2a1fSXin Li 160*a97c2a1fSXin Li st1 {v0.8h} , [x0], #16 //row2 161*a97c2a1fSXin Li 162*a97c2a1fSXin Li st1 {v0.8h} , [x0], #16 //row3 163*a97c2a1fSXin Li 164*a97c2a1fSXin Li st1 {v0.8h} , [x0], #16 //row4 165*a97c2a1fSXin Li 166*a97c2a1fSXin Li st1 {v0.8h} , [x0], #16 //row5 167*a97c2a1fSXin Li 168*a97c2a1fSXin Li st1 {v0.8h} , [x0], #16 //row6 169*a97c2a1fSXin Li 170*a97c2a1fSXin Li st1 {v0.8h} , [x0], #16 //row7 171*a97c2a1fSXin Li 172*a97c2a1fSXin Li st1 {v0.8h} , [x0], #16 //row8 173*a97c2a1fSXin Li 174*a97c2a1fSXin Li 175*a97c2a1fSXin Li 176*a97c2a1fSXin Li pop_v_regs 177*a97c2a1fSXin Li ret 178*a97c2a1fSXin Li 179*a97c2a1fSXin Li 180*a97c2a1fSXin Li 181*a97c2a1fSXin Li 182