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 : impeg2_mem_func.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.text 44*a97c2a1fSXin Li.p2align 2 45*a97c2a1fSXin Li 46*a97c2a1fSXin Li 47*a97c2a1fSXin Li@/* 48*a97c2a1fSXin Li@// ---------------------------------------------------------------------------- 49*a97c2a1fSXin Li@// Struct/Union Types and Define 50*a97c2a1fSXin Li@// ---------------------------------------------------------------------------- 51*a97c2a1fSXin Li@*/ 52*a97c2a1fSXin Li 53*a97c2a1fSXin Li 54*a97c2a1fSXin Li@/* 55*a97c2a1fSXin Li@// ---------------------------------------------------------------------------- 56*a97c2a1fSXin Li@// Static Global Data section variables 57*a97c2a1fSXin Li@// ---------------------------------------------------------------------------- 58*a97c2a1fSXin Li@*/ 59*a97c2a1fSXin Li@// -------------------------- NONE -------------------------------------------- 60*a97c2a1fSXin Li 61*a97c2a1fSXin Li 62*a97c2a1fSXin Li@/* 63*a97c2a1fSXin Li@// ---------------------------------------------------------------------------- 64*a97c2a1fSXin Li@// Static Prototype Functions 65*a97c2a1fSXin Li@// ---------------------------------------------------------------------------- 66*a97c2a1fSXin Li@*/ 67*a97c2a1fSXin Li@// -------------------------- NONE -------------------------------------------- 68*a97c2a1fSXin Li 69*a97c2a1fSXin Li@/* 70*a97c2a1fSXin Li@// ---------------------------------------------------------------------------- 71*a97c2a1fSXin Li@// Exported functions 72*a97c2a1fSXin Li@// ---------------------------------------------------------------------------- 73*a97c2a1fSXin Li@*/ 74*a97c2a1fSXin Li 75*a97c2a1fSXin Li@/* 76*a97c2a1fSXin Li@//--------------------------------------------------------------------------- 77*a97c2a1fSXin Li@// Function Name : impeg2_memset_8bit_8x8_block_a9q() 78*a97c2a1fSXin Li@// 79*a97c2a1fSXin Li@// Detail Description : This routine intialises the Block matrix buffer contents to a 80*a97c2a1fSXin Li@// particular Value. This function also assumes the buffer size 81*a97c2a1fSXin Li@// to be set is 64 Bytes fixed. It also assumes that blk matrix 82*a97c2a1fSXin Li@// used is 64 bit aligned. 83*a97c2a1fSXin Li@// 84*a97c2a1fSXin Li@// Inputs : r0: pi2_blk_mat : Block Pointer 85*a97c2a1fSXin Li@// r1: u2_val : Value with which the block is initialized 86*a97c2a1fSXin Li@// r2: u4_dst_width: Destination Width 87*a97c2a1fSXin Li@// 88*a97c2a1fSXin Li@// Registers Used : q0 89*a97c2a1fSXin Li@// 90*a97c2a1fSXin Li@// Stack Usage : 4 bytes 91*a97c2a1fSXin Li@// 92*a97c2a1fSXin Li@// Outputs : Block Matrix Initialized to given value 93*a97c2a1fSXin Li@// 94*a97c2a1fSXin Li@// Return Data : None 95*a97c2a1fSXin Li@// 96*a97c2a1fSXin Li@// Programming Note : None 97*a97c2a1fSXin Li@//----------------------------------------------------------------------------- 98*a97c2a1fSXin Li@*/ 99*a97c2a1fSXin Li .global impeg2_memset_8bit_8x8_block_a9q 100*a97c2a1fSXin Liimpeg2_memset_8bit_8x8_block_a9q: 101*a97c2a1fSXin Li str lr, [sp, #-4]! 102*a97c2a1fSXin Li 103*a97c2a1fSXin Li vdup.8 d0, r1 @//r1 is the 8-bit value to be set into 104*a97c2a1fSXin Li 105*a97c2a1fSXin Li vst1.8 {d0}, [r0], r2 @//Store the row 1 106*a97c2a1fSXin Li vst1.8 {d0}, [r0], r2 @//Store the row 2 107*a97c2a1fSXin Li vst1.8 {d0}, [r0], r2 @//Store the row 3 108*a97c2a1fSXin Li vst1.8 {d0}, [r0], r2 @//Store the row 4 109*a97c2a1fSXin Li vst1.8 {d0}, [r0], r2 @//Store the row 5 110*a97c2a1fSXin Li vst1.8 {d0}, [r0], r2 @//Store the row 6 111*a97c2a1fSXin Li vst1.8 {d0}, [r0], r2 @//Store the row 7 112*a97c2a1fSXin Li vst1.8 {d0}, [r0], r2 @//Store the row 8 113*a97c2a1fSXin Li 114*a97c2a1fSXin Li ldr pc, [sp], #4 115*a97c2a1fSXin Li 116*a97c2a1fSXin Li 117*a97c2a1fSXin Li 118*a97c2a1fSXin Li 119*a97c2a1fSXin Li 120*a97c2a1fSXin Li 121*a97c2a1fSXin Li 122*a97c2a1fSXin Li@/* 123*a97c2a1fSXin Li@//--------------------------------------------------------------------------- 124*a97c2a1fSXin Li@// Function Name : impeg2_memset0_16bit_8x8_linear_block_a9q() 125*a97c2a1fSXin Li@// 126*a97c2a1fSXin Li@// Detail Description : memsets 128 byte long linear buf to 0 127*a97c2a1fSXin Li@// 128*a97c2a1fSXin Li@// Inputs : r0 - Buffer 129*a97c2a1fSXin Li@// Registers Used : q0 130*a97c2a1fSXin Li 131*a97c2a1fSXin Li@// 132*a97c2a1fSXin Li@// Stack Usage : 4 bytes 133*a97c2a1fSXin Li@// 134*a97c2a1fSXin Li@// Outputs : None 135*a97c2a1fSXin Li@// 136*a97c2a1fSXin Li@// Return Data : None 137*a97c2a1fSXin Li@// 138*a97c2a1fSXin Li@// Programming Note : <program limitation> 139*a97c2a1fSXin Li@//----------------------------------------------------------------------------- 140*a97c2a1fSXin Li@*/ 141*a97c2a1fSXin Li 142*a97c2a1fSXin Li 143*a97c2a1fSXin Li 144*a97c2a1fSXin Li .global impeg2_memset0_16bit_8x8_linear_block_a9q 145*a97c2a1fSXin Li 146*a97c2a1fSXin Li 147*a97c2a1fSXin Liimpeg2_memset0_16bit_8x8_linear_block_a9q: 148*a97c2a1fSXin Li 149*a97c2a1fSXin Li stmfd sp!, {r14} 150*a97c2a1fSXin Li 151*a97c2a1fSXin Li vmov.i16 q0, #0 152*a97c2a1fSXin Li 153*a97c2a1fSXin Li@Y data 154*a97c2a1fSXin Li 155*a97c2a1fSXin Li vst1.16 {d0, d1} , [r0]! @row1 156*a97c2a1fSXin Li 157*a97c2a1fSXin Li vst1.16 {d0, d1} , [r0]! @row2 158*a97c2a1fSXin Li 159*a97c2a1fSXin Li vst1.16 {d0, d1} , [r0]! @row3 160*a97c2a1fSXin Li 161*a97c2a1fSXin Li vst1.16 {d0, d1} , [r0]! @row4 162*a97c2a1fSXin Li 163*a97c2a1fSXin Li vst1.16 {d0, d1} , [r0]! @row5 164*a97c2a1fSXin Li 165*a97c2a1fSXin Li vst1.16 {d0, d1} , [r0]! @row6 166*a97c2a1fSXin Li 167*a97c2a1fSXin Li vst1.16 {d0, d1} , [r0]! @row7 168*a97c2a1fSXin Li 169*a97c2a1fSXin Li vst1.16 {d0, d1} , [r0]! @row8 170*a97c2a1fSXin Li 171*a97c2a1fSXin Li 172*a97c2a1fSXin Li 173*a97c2a1fSXin Li ldmfd sp!, {pc} 174*a97c2a1fSXin Li 175*a97c2a1fSXin Li 176*a97c2a1fSXin Li 177*a97c2a1fSXin Li 178