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