Home | History | Annotate | Download | only in armv8
      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
     99 impeg2_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 
    150 impeg2_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