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            : mot_comp_neon.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//              PRESERVE8
44.text
45.include "impeg2_neon_macros.s"
46///*
47//// ----------------------------------------------------------------------------
48//// Struct/Union Types and Define
49//// ----------------------------------------------------------------------------
50//*/
51
52
53///*
54//// ----------------------------------------------------------------------------
55//// Static Global Data section variables
56//// ----------------------------------------------------------------------------
57//*/
58//// -------------------------- NONE --------------------------------------------
59
60
61///*
62//// ----------------------------------------------------------------------------
63//// Static Prototype Functions
64//// ----------------------------------------------------------------------------
65//*/
66//// -------------------------- NONE --------------------------------------------
67
68///*
69//// ----------------------------------------------------------------------------
70//// Exported functions
71//// ----------------------------------------------------------------------------
72//*/
73
74///*
75////---------------------------------------------------------------------------
76//// Function Name      : impeg2_memset_8bit_8x8_block_av8()
77////
78//// Detail Description : This routine intialises the Block matrix buffer contents to a
79////                      particular Value. This function also assumes the buffer size
80////                         to be set is 64 Bytes fixed. It also assumes that blk matrix
81////                         used is 64 bit aligned.
82////
83//// Inputs             : pi2_blk_mat : Block Pointer
84////                         u2_val      : Value with which the block is initialized
85////
86//// Registers Used     : v0
87////
88//// Stack Usage        : 64 bytes
89////
90//// Outputs            : Block Matrix Iniliazed to given value
91////
92//// Return Data        : None
93////
94//// Programming Note   : This implementation assumes that blk matrix buffer
95////                         is 128 bit aligned
96////-----------------------------------------------------------------------------
97//*/
98.global impeg2_memset_8bit_8x8_block_av8
99impeg2_memset_8bit_8x8_block_av8:
100    push_v_regs
101
102//        ADD            x3,x0,#WIDTH_X_SIZE            @//x3 is another copy address offsetted
103
104    dup             v0.8b, w1           ////x1 is the 8-bit value to be set into
105
106    st1             {v0.8b}, [x0], x2   ////Store the row 1
107    st1             {v0.8b}, [x0], x2   ////Store the row 2
108    st1             {v0.8b}, [x0], x2   ////Store the row 3
109    st1             {v0.8b}, [x0], x2   ////Store the row 4
110    st1             {v0.8b}, [x0], x2   ////Store the row 5
111    st1             {v0.8b}, [x0], x2   ////Store the row 6
112    st1             {v0.8b}, [x0], x2   ////Store the row 7
113    st1             {v0.8b}, [x0], x2   ////Store the row 8
114
115    pop_v_regs
116    ret
117
118
119
120
121
122
123///*
124////---------------------------------------------------------------------------
125//// Function Name      :   impeg2_memset0_16bit_8x8_linear_block_av8()
126////
127//// Detail Description : memsets resudual buf to 0
128////
129//// Inputs             : x0 - pointer to y
130////                      x1 - pointer to u
131////                      x2 - pointer to v
132//// Registers Used     : v0
133
134////
135//// Stack Usage        : 64 bytes
136////
137//// Outputs            : The Motion Compensated Block
138////
139//// Return Data        : None
140////
141//// Programming Note   : <program limitation>
142////-----------------------------------------------------------------------------
143//*/
144
145
146
147.global impeg2_memset0_16bit_8x8_linear_block_av8
148
149
150impeg2_memset0_16bit_8x8_linear_block_av8:
151
152    push_v_regs
153
154    movi            v0.8h, #0
155
156    //Y data
157
158    st1             {v0.8h} , [x0], #16 //row1
159
160    st1             {v0.8h} , [x0], #16 //row2
161
162    st1             {v0.8h} , [x0], #16 //row3
163
164    st1             {v0.8h} , [x0], #16 //row4
165
166    st1             {v0.8h} , [x0], #16 //row5
167
168    st1             {v0.8h} , [x0], #16 //row6
169
170    st1             {v0.8h} , [x0], #16 //row7
171
172    st1             {v0.8h} , [x0], #16 //row8
173
174
175
176    pop_v_regs
177    ret
178
179
180
181
182