@/******************************************************************************
@ *
@ * Copyright (C) 2015 The Android Open Source Project
@ *
@ * Licensed under the Apache License, Version 2.0 (the "License");
@ * you may not use this file except in compliance with the License.
@ * You may obtain a copy of the License at:
@ *
@ * http://www.apache.org/licenses/LICENSE-2.0
@ *
@ * Unless required by applicable law or agreed to in writing, software
@ * distributed under the License is distributed on an "AS IS" BASIS,
@ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@ * See the License for the specific language governing permissions and
@ * limitations under the License.
@ *
@ *****************************************************************************
@ * Originally developed and contributed by Ittiam Systems Pvt. Ltd, Bangalore
@*/
@**
@ *******************************************************************************
@ * @file
@ *  ih264_mem_fns_neon.s
@ *
@ * @brief
@ *  Contains function definitions for memory manipulation
@ *
@ * @author
@ *  Naveen SR
@ *
@ * @par List of Functions:
@ *  - ih264_memcpy_mul_8_a9q()
@ *  - ih264_memcpy_a9q()
@ *  - ih264_memset_mul_8_a9q()
@ *  - ih264_memset_a9q()
@ *  - ih264_memset_16bit_mul_8_a9q()
@ *  - ih264_memset_a9q()
@ *
@ * @remarks
@ *  None
@ *
@ *******************************************************************************
@*

@**
@*******************************************************************************
@*
@* @brief
@*   memcpy of a 1d array
@*
@* @par Description:
@*   Does memcpy of 8bit data from source to destination for 8,16 or 32 number of bytes
@*
@* @param[in] pu1_dst
@*  UWORD8 pointer to the destination
@*
@* @param[in] pu1_src
@*  UWORD8 pointer to the source
@*
@* @param[in] num_bytes
@*  number of bytes to copy
@* @returns
@*
@* @remarks
@*  None
@*
@*******************************************************************************
@*
@void ih264_memcpy_mul_8(UWORD8 *pu1_dst,
@                    UWORD8 *pu1_src,
@                   UWORD8 num_bytes)
@**************Variables Vs Registers*************************
@   r0 => *pu1_dst
@   r1 => *pu1_src
@   r2 => num_bytes

.text
.p2align 2


    .global ih264_memcpy_mul_8_a9q

ih264_memcpy_mul_8_a9q:

loop_neon_memcpy_mul_8:
    @ Memcpy 8 bytes
    vld1.8        d0, [r1]!
    vst1.8        d0, [r0]!

    subs          r2, r2, #8
    bne           loop_neon_memcpy_mul_8
    bx            lr



@*******************************************************************************
@*
@void ih264_memcpy(UWORD8 *pu1_dst,
@                  UWORD8 *pu1_src,
@                  UWORD8 num_bytes)
@**************Variables Vs Registers*************************
@   r0 => *pu1_dst
@   r1 => *pu1_src
@   r2 => num_bytes



    .global ih264_memcpy_a9q

ih264_memcpy_a9q:
    subs          r2, #8
    blt           memcpy
loop_neon_memcpy:
    @ Memcpy 8 bytes
    vld1.8        d0, [r1]!
    vst1.8        d0, [r0]!

    subs          r2, #8
    bge           loop_neon_memcpy
    cmp           r2, #-8
    bxeq          lr

memcpy:
    add           r2, #8

loop_memcpy:
    ldrb          r3, [r1], #1
    strb          r3, [r0], #1
    subs          r2, #1
    bne           loop_memcpy
    bx            lr




@void ih264_memset_mul_8(UWORD8 *pu1_dst,
@                       UWORD8 value,
@                       UWORD8 num_bytes)
@**************Variables Vs Registers*************************
@   r0 => *pu1_dst
@   r1 => value
@   r2 => num_bytes





    .global ih264_memset_mul_8_a9q

ih264_memset_mul_8_a9q:

@ Assumptions: numbytes is either 8, 16 or 32
    vdup.8        d0, r1
loop_memset_mul_8:
    @ Memset 8 bytes
    vst1.8        d0, [r0]!

    subs          r2, r2, #8
    bne           loop_memset_mul_8

    bx            lr




@void ih264_memset(UWORD8 *pu1_dst,
@                       UWORD8 value,
@                       UWORD8 num_bytes)
@**************Variables Vs Registers*************************
@   r0 => *pu1_dst
@   r1 => value
@   r2 => num_bytes



    .global ih264_memset_a9q

ih264_memset_a9q:
    subs          r2, #8
    blt           memset
    vdup.8        d0, r1
loop_neon_memset:
    @ Memcpy 8 bytes
    vst1.8        d0, [r0]!

    subs          r2, #8
    bge           loop_neon_memset
    cmp           r2, #-8
    bxeq          lr

memset:
    add           r2, #8

loop_memset:
    strb          r1, [r0], #1
    subs          r2, #1
    bne           loop_memset
    bx            lr




@void ih264_memset_16bit_mul_8(UWORD16 *pu2_dst,
@                                   UWORD16 value,
@                                   UWORD8 num_words)
@**************Variables Vs Registers*************************
@   r0 => *pu2_dst
@   r1 => value
@   r2 => num_words





    .global ih264_memset_16bit_mul_8_a9q

ih264_memset_16bit_mul_8_a9q:

@ Assumptions: num_words is either 8, 16 or 32

    @ Memset 8 words
    vdup.16       d0, r1
loop_memset_16bit_mul_8:
    vst1.16       d0, [r0]!
    vst1.16       d0, [r0]!

    subs          r2, r2, #8
    bne           loop_memset_16bit_mul_8

    bx            lr




@void ih264_memset_16bit(UWORD16 *pu2_dst,
@                       UWORD16 value,
@                       UWORD8 num_words)
@**************Variables Vs Registers*************************
@   r0 => *pu2_dst
@   r1 => value
@   r2 => num_words



    .global ih264_memset_16bit_a9q

ih264_memset_16bit_a9q:
    subs          r2, #8
    blt           memset_16bit
    vdup.16       d0, r1
loop_neon_memset_16bit:
    @ Memset 8 words
    vst1.16       d0, [r0]!
    vst1.16       d0, [r0]!

    subs          r2, #8
    bge           loop_neon_memset_16bit
    cmp           r2, #-8
    bxeq          lr

memset_16bit:
    add           r2, #8

loop_memset_16bit:
    strh          r1, [r0], #2
    subs          r2, #1
    bne           loop_memset_16bit
    bx            lr




