xref: /aosp_15_r20/external/libmpeg2/common/arm/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            : 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