10d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar///*****************************************************************************
20d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
30d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
40d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
50d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* Licensed under the Apache License, Version 2.0 (the "License");
60d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* you may not use this file except in compliance with the License.
70d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* You may obtain a copy of the License at:
80d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
90d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* http://www.apache.org/licenses/LICENSE-2.0
100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* Unless required by applicable law or agreed to in writing, software
120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* distributed under the License is distributed on an "AS IS" BASIS,
130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* See the License for the specific language governing permissions and
150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* limitations under the License.
160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*****************************************************************************/
180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar///**
190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *******************************************************************************
200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// * ,:file
210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *  ihevc_mem_fns_neon.s
220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *
230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// * ,:brief
240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *  Contains function definitions for memory manipulation
250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *
260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// * ,:author
270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *     Naveen SR
280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *
290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// * ,:par List of Functions:
300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *  - ihevc_memcpy()
310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *  - ihevc_memset_mul_8()
320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *  - ihevc_memset_16bit_mul_8()
330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *
340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// * ,:remarks
350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *  None
360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *
370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// *******************************************************************************
380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*/
390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar///**
410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*******************************************************************************
420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:brief
440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*   memcpy of a 1d array
450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:par Description:
470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*   Does memcpy of 8bit data from source to destination for 8,16 or 32 number of bytes
480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:param[in] pu1_dst
500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  UWORD8 pointer to the destination
510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:param[in] pu1_src
530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  UWORD8 pointer to the source
540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:param[in] num_bytes
560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  number of bytes to copy
570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:returns
580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//* ,:remarks
600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*  None
610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*
620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*******************************************************************************
630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*/
640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//void ihevc_memcpy_mul_8(UWORD8 *pu1_dst,
650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                      UWORD8 *pu1_src,
660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                      UWORD8 num_bytes)
670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//**************Variables Vs Registers*************************
680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x0 => *pu1_dst
690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x1 => *pu1_src
700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x2 => num_bytes
710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.text
730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.p2align 2
740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    .global ihevc_memcpy_mul_8_av8
770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.type ihevc_memcpy_mul_8_av8, %function
780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarihevc_memcpy_mul_8_av8:
800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_NEON_MEMCPY_MUL_8:
820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // Memcpy 8 bytes
830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v0.8b},[x1],#8
840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v0.8b},[x0],#8
850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         LOOP_NEON_MEMCPY_MUL_8
880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ret
890d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*******************************************************************************
930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//*/
940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//void ihevc_memcpy(UWORD8 *pu1_dst,
950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                  UWORD8 *pu1_src,
960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                  UWORD8 num_bytes)
970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//**************Variables Vs Registers*************************
980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x0 => *pu1_dst
990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x1 => *pu1_src
1000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x2 => num_bytes
1010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    .global ihevc_memcpy_av8
1050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.type ihevc_memcpy_av8, %function
1060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarihevc_memcpy_av8:
1080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
1090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLT         ARM_MEMCPY
1100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_NEON_MEMCPY:
1110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // Memcpy 8 bytes
1120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LD1         {v0.8b},[x1],#8
1130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v0.8b},[x0],#8
1140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
1160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BGE         LOOP_NEON_MEMCPY
117d91eedb8cdcdd3d4f23379517752d48fa5791604Bernhard Rosenkränzer    CMN         x2,#8
1180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BEQ         MEMCPY_RETURN
1190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarARM_MEMCPY:
1210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x2,x2,#8
1220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_ARM_MEMCPY:
1240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    LDRB        w3,[x1],#1
1250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w3,[x0],#1
1260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#1
1270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         LOOP_ARM_MEMCPY
1280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarMEMCPY_RETURN:
1290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ret
1300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//void ihevc_memset_mul_8(UWORD8 *pu1_dst,
1350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                       UWORD8 value,
1360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                       UWORD8 num_bytes)
1370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//**************Variables Vs Registers*************************
1380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x0 => *pu1_dst
1390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x1 => value
1400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x2 => num_bytes
1410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.text
1430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.p2align 2
1440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    .global ihevc_memset_mul_8_av8
1480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.type ihevc_memset_mul_8_av8, %function
1490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarihevc_memset_mul_8_av8:
1510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// Assumptions: numbytes is either 8, 16 or 32
1530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dup         v0.8b,w1
1540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_MEMSET_MUL_8:
1550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // Memset 8 bytes
1560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v0.8b},[x0],#8
1570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
1590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         LOOP_MEMSET_MUL_8
1600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ret
1620d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//void ihevc_memset(UWORD8 *pu1_dst,
1670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                       UWORD8 value,
1680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                       UWORD8 num_bytes)
1690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//**************Variables Vs Registers*************************
1700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x0 => *pu1_dst
1710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x1 => value
1720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x2 => num_bytes
1730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    .global ihevc_memset_av8
1770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.type ihevc_memset_av8, %function
1780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarihevc_memset_av8:
1800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
1810d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLT         ARM_MEMSET
1820d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dup         v0.8b,w1
1830d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_NEON_MEMSET:
1840d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // Memcpy 8 bytes
1850d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v0.8b},[x0],#8
1860d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1870d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
1880d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BGE         LOOP_NEON_MEMSET
189d91eedb8cdcdd3d4f23379517752d48fa5791604Bernhard Rosenkränzer    CMN         x2,#8
1900d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BEQ         MEMSET_RETURN
1910d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1920d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarARM_MEMSET:
1930d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x2,x2,#8
1940d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
1950d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_ARM_MEMSET:
1960d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRB        w1,[x0],#1
1970d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#1
1980d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         LOOP_ARM_MEMSET
1990d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2000d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarMEMSET_RETURN:
2010d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ret
2020d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2030d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2040d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2050d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2060d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//void ihevc_memset_16bit_mul_8(UWORD16 *pu2_dst,
2070d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                                      UWORD16 value,
2080d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                                      UWORD8 num_words)
2090d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//**************Variables Vs Registers*************************
2100d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x0 => *pu2_dst
2110d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x1 => value
2120d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x2 => num_words
2130d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2140d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.text
2150d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.p2align 2
2160d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2170d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2180d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2190d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    .global ihevc_memset_16bit_mul_8_av8
2200d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.type ihevc_memset_16bit_mul_8_av8, %function
2210d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2220d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarihevc_memset_16bit_mul_8_av8:
2230d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2240d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar// Assumptions: num_words is either 8, 16 or 32
2250d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2260d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // Memset 8 words
2270d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dup         v0.8h,w1
2280d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_MEMSET_16BIT_MUL_8:
2290d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v0.8h},[x0],#16
2300d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2310d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
2320d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         LOOP_MEMSET_16BIT_MUL_8
2330d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2340d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ret
2350d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2360d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2370d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2380d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2390d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//void ihevc_memset_16bit(UWORD16 *pu2_dst,
2400d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                       UWORD16 value,
2410d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//                       UWORD8 num_words)
2420d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//**************Variables Vs Registers*************************
2430d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x0 => *pu2_dst
2440d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x1 => value
2450d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar//    x2 => num_words
2460d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2470d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2480d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2490d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    .global ihevc_memset_16bit_av8
2500d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar.type ihevc_memset_16bit_av8, %function
2510d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2520d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakarihevc_memset_16bit_av8:
2530d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
2540d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BLT         ARM_MEMSET_16BIT
2550d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    dup         v0.8h,w1
2560d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_NEON_MEMSET_16BIT:
2570d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    // Memset 8 words
2580d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ST1         {v0.8h},[x0],#16
2590d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2600d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#8
2610d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BGE         LOOP_NEON_MEMSET_16BIT
262d91eedb8cdcdd3d4f23379517752d48fa5791604Bernhard Rosenkränzer    CMN         x2,#8
2630d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BEQ         MEMSET_16BIT_RETURN
2640d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2650d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarARM_MEMSET_16BIT:
2660d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ADD         x2,x2,#8
2670d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2680d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarLOOP_ARM_MEMSET_16BIT:
2690d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    STRH        w1,[x0],#2
2700d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    SUBS        x2,x2,#1
2710d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    BNE         LOOP_ARM_MEMSET_16BIT
2720d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2730d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish MahendrakarMEMSET_16BIT_RETURN:
2740d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    ret
2750d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2760d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2770d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2780d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
2790d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar    .section .note.GNU-stack,"",%progbits
2800d8951cef4b1a1dbf4ff5ba3e8796cf1d4503098Harish Mahendrakar
281