xref: /aosp_15_r20/external/libmpeg2/common/armv8/impeg2_mem_func.s (revision a97c2a1f0a796dc32bed80d3353c69c5fc07c750)
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