summaryrefslogtreecommitdiffstats
path: root/common/arm/ihevc_intra_pred_chroma_mode_18_34.s
diff options
context:
space:
mode:
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.s190
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
+
+
+
+
+
+