diff options
Diffstat (limited to 'common/arm/ihevc_intra_pred_chroma_mode_18_34.s')
-rw-r--r-- | common/arm/ihevc_intra_pred_chroma_mode_18_34.s | 190 |
1 files changed, 190 insertions, 0 deletions
diff --git a/common/arm/ihevc_intra_pred_chroma_mode_18_34.s b/common/arm/ihevc_intra_pred_chroma_mode_18_34.s new file mode 100644 index 0000000..b0dd1fa --- /dev/null +++ b/common/arm/ihevc_intra_pred_chroma_mode_18_34.s @@ -0,0 +1,190 @@ +@/***************************************************************************** +@* +@* 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_intra_pred_luma_mode_18_34_neon.s +@* +@* @brief +@* contains function definitions for intra prediction dc filtering. +@* functions are coded using neon intrinsics and can be compiled using + +@* rvct +@* +@* @author +@* yogeswaran rs +@* +@* @par list of functions: +@* +@* +@* @remarks +@* none +@* +@******************************************************************************* +@*/ +@/** +@******************************************************************************* +@* +@* @brief +@* luma intraprediction filter for dc input +@* +@* @par description: +@* +@* @param[in] pu1_ref +@* uword8 pointer to the source +@* +@* @param[out] pu1_dst +@* uword8 pointer to the destination +@* +@* @param[in] src_strd +@* integer source stride +@* +@* @param[in] dst_strd +@* integer destination stride +@* +@* @param[in] pi1_coeff +@* word8 pointer to the planar coefficients +@* +@* @param[in] nt +@* size of tranform block +@* +@* @param[in] mode +@* type of filtering +@* +@* @returns +@* +@* @remarks +@* none +@* +@******************************************************************************* +@*/ + +@void ihevc_intra_pred_chroma_mode_18_34(uword8 *pu1_ref, +@ word32 src_strd, +@ uword8 *pu1_dst, +@ word32 dst_strd, +@ word32 nt, +@ word32 mode) +@ +@**************variables vs registers***************************************** +@r0 => *pu1_ref +@r1 => src_strd +@r2 => *pu1_dst +@r3 => dst_strd + +@stack contents from #40 +@ nt +@ mode +@ pi1_coeff + +.text +.align 4 + + + + +.globl ihevc_intra_pred_chroma_mode_18_34_a9q + +.type ihevc_intra_pred_chroma_mode_18_34_a9q, %function + +ihevc_intra_pred_chroma_mode_18_34_a9q: + + stmfd sp!, {r4-r12, r14} @stack stores the values of the arguments + + + ldr r4,[sp,#40] + ldr r5,[sp,#44] + + cmp r4,#4 + beq mode2_4 + + mov r12,r4 + mov r11,r4 + add r0,r0,r4,lsl #2 + + cmp r5,#0x22 + mov r10,r2 + + add r0,r0,#4 + + subne r0,r0,#4 + moveq r6,#2 + movne r6,#-2 + mov r8,r0 + + +kernel: + + + vld1.8 {d0,d1},[r8],r6 + vst1.8 {d0,d1},[r10],r3 + vld1.8 {d2,d3},[r8],r6 + vst1.8 {d2,d3},[r10],r3 + vld1.8 {d4,d5},[r8],r6 + vst1.8 {d4,d5},[r10],r3 + vld1.8 {d6,d7},[r8],r6 + vst1.8 {d6,d7},[r10],r3 + vld1.8 {d8,d9},[r8],r6 + vst1.8 {d8,d9},[r10],r3 + vld1.8 {d10,d11},[r8],r6 + vst1.8 {d10,d11},[r10],r3 + vld1.8 {d12,d13},[r8],r6 + vst1.8 {d12,d13},[r10],r3 + vld1.8 {d14,d15},[r8],r6 + vst1.8 {d14,d15},[r10],r3 + + subs r12,r12,#8 + bne kernel + + cmp r11,#16 + add r8,r0,#16 + add r10,r2,#16 + sub r11,#16 + mov r12,#16 + beq kernel + b end_func + +mode2_4: + + add r0,r0,#20 + cmp r5,#0x22 + subne r0,r0,#4 + + moveq r8,#2 + movne r8,#-2 + + vld1.8 {d0},[r0],r8 + vst1.32 {d0},[r2],r3 + + vld1.8 {d0},[r0],r8 + vst1.32 {d0},[r2],r3 + + vld1.8 {d0},[r0],r8 + vst1.32 {d0},[r2],r3 + + vld1.8 {d0},[r0],r8 + vst1.32 {d0},[r2],r3 + +end_func: + ldmfd sp!,{r4-r12,r15} @reload the registers from sp + + + + + + |