| @/***************************************************************************** |
| @* |
| @* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore |
| @* |
| @* 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. |
| @* |
| @*****************************************************************************/ |
| @/** |
| @ ******************************************************************************* |
| @ * ,:file |
| @ * ihevc_mem_fns_neon.s |
| @ * |
| @ * ,:brief |
| @ * Contains function definitions for memory manipulation |
| @ * |
| @ * ,:author |
| @ * Naveen SR |
| @ * |
| @ * ,:par List of Functions: |
| @ * - ihevc_memcpy() |
| @ * - ihevc_memset_mul_8() |
| @ * - ihevc_memset_16bit_mul_8() |
| @ * |
| @ * ,: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 ihevc_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 ihevc_memcpy_mul_8_a9q |
| .type ihevc_memcpy_mul_8_a9q, %function |
| |
| ihevc_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 |
| MOV PC,LR |
| |
| |
| |
| @******************************************************************************* |
| @*/ |
| @void ihevc_memcpy(UWORD8 *pu1_dst, |
| @ UWORD8 *pu1_src, |
| @ UWORD8 num_bytes) |
| @**************Variables Vs Registers************************* |
| @ r0 => *pu1_dst |
| @ r1 => *pu1_src |
| @ r2 => num_bytes |
| |
| |
| |
| .global ihevc_memcpy_a9q |
| .type ihevc_memcpy_a9q, %function |
| |
| ihevc_memcpy_a9q: |
| SUBS r2,#8 |
| BLT ARM_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 |
| |
| ARM_MEMCPY: |
| ADD r2,#8 |
| |
| LOOP_ARM_MEMCPY: |
| LDRB r3,[r1],#1 |
| STRB r3,[r0],#1 |
| SUBS r2,#1 |
| BNE LOOP_ARM_MEMCPY |
| BX LR |
| |
| |
| |
| |
| @void ihevc_memset_mul_8(UWORD8 *pu1_dst, |
| @ UWORD8 value, |
| @ UWORD8 num_bytes) |
| @**************Variables Vs Registers************************* |
| @ r0 => *pu1_dst |
| @ r1 => value |
| @ r2 => num_bytes |
| |
| .text |
| .p2align 2 |
| |
| |
| |
| .global ihevc_memset_mul_8_a9q |
| .type ihevc_memset_mul_8_a9q, %function |
| |
| ihevc_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 ihevc_memset(UWORD8 *pu1_dst, |
| @ UWORD8 value, |
| @ UWORD8 num_bytes) |
| @**************Variables Vs Registers************************* |
| @ r0 => *pu1_dst |
| @ r1 => value |
| @ r2 => num_bytes |
| |
| |
| |
| .global ihevc_memset_a9q |
| .type ihevc_memset_a9q, %function |
| |
| ihevc_memset_a9q: |
| SUBS r2,#8 |
| BLT ARM_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 |
| |
| ARM_MEMSET: |
| ADD r2,#8 |
| |
| LOOP_ARM_MEMSET: |
| STRB r1,[r0],#1 |
| SUBS r2,#1 |
| BNE LOOP_ARM_MEMSET |
| BX LR |
| |
| |
| |
| |
| @void ihevc_memset_16bit_mul_8(UWORD16 *pu2_dst, |
| @ UWORD16 value, |
| @ UWORD8 num_words) |
| @**************Variables Vs Registers************************* |
| @ r0 => *pu2_dst |
| @ r1 => value |
| @ r2 => num_words |
| |
| .text |
| .p2align 2 |
| |
| |
| |
| .global ihevc_memset_16bit_mul_8_a9q |
| .type ihevc_memset_16bit_mul_8_a9q, %function |
| |
| ihevc_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 ihevc_memset_16bit(UWORD16 *pu2_dst, |
| @ UWORD16 value, |
| @ UWORD8 num_words) |
| @**************Variables Vs Registers************************* |
| @ r0 => *pu2_dst |
| @ r1 => value |
| @ r2 => num_words |
| |
| |
| |
| .global ihevc_memset_16bit_a9q |
| .type ihevc_memset_16bit_a9q, %function |
| |
| ihevc_memset_16bit_a9q: |
| SUBS r2,#8 |
| BLT ARM_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 |
| |
| ARM_MEMSET_16BIT: |
| ADD r2,#8 |
| |
| LOOP_ARM_MEMSET_16BIT: |
| STRH r1,[r0],#2 |
| SUBS r2,#1 |
| BNE LOOP_ARM_MEMSET_16BIT |
| BX LR |
| |
| |
| |
| |
| .section .note.GNU-stack,"",%progbits |
| |