summaryrefslogtreecommitdiffstats
path: root/common/arm/ihevc_deblk_chroma_vert.s
diff options
context:
space:
mode:
Diffstat (limited to 'common/arm/ihevc_deblk_chroma_vert.s')
-rw-r--r--common/arm/ihevc_deblk_chroma_vert.s163
1 files changed, 163 insertions, 0 deletions
diff --git a/common/arm/ihevc_deblk_chroma_vert.s b/common/arm/ihevc_deblk_chroma_vert.s
new file mode 100644
index 0000000..4cb305f
--- /dev/null
+++ b/common/arm/ihevc_deblk_chroma_vert.s
@@ -0,0 +1,163 @@
+@/*****************************************************************************
+@*
+@* 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_deblk_luma_vert.s
+@*
+@* @brief
+@* contains function definitions for inter prediction interpolation.
+@* functions are coded using neon intrinsics and can be compiled using
+
+@* rvct
+@*
+@* @author
+@* anand s
+@*
+@* @par list of functions:
+@*
+@*
+@* @remarks
+@* none
+@*
+@*******************************************************************************/
+
+.text
+.align 4
+
+
+
+
+
+.extern gai4_ihevc_qp_table
+.extern gai4_ihevc_tc_table
+.globl ihevc_deblk_chroma_vert_a9q
+
+gai4_ihevc_qp_table_addr:
+.long gai4_ihevc_qp_table - ulbl1 - 8
+
+gai4_ihevc_tc_table_addr:
+.long gai4_ihevc_tc_table - ulbl2 - 8
+
+.type ihevc_deblk_chroma_vert_a9q, %function
+
+ihevc_deblk_chroma_vert_a9q:
+ push {r4-r12,lr}
+ sub r8,r0,#4
+ add r2,r2,r3
+ vld1.8 {d5},[r8],r1
+ add r2,r2,#1
+ vld1.8 {d17},[r8],r1
+ ldr r7,[sp,#0x28]
+ vld1.8 {d16},[r8],r1
+ ldr r4,[sp,#0x38]
+ vld1.8 {d4},[r8]
+ ldr r5,[sp,#0x30]
+ vtrn.8 d5,d17
+ adds r3,r7,r2,asr #1
+ vtrn.8 d16,d4
+ ldr r7,gai4_ihevc_qp_table_addr
+ulbl1:
+ add r7,r7,pc
+ ldr r12,[sp,#0x34]
+ ldr r6,[sp,#0x2c]
+ bmi l1.2944
+ cmp r3,#0x39
+ ldrle r3,[r7,r3,lsl #2]
+ subgt r3,r3,#6
+l1.2944:
+ vtrn.16 d5,d16
+ adds r2,r6,r2,asr #1
+ vtrn.16 d17,d4
+ bmi l1.2964
+ cmp r2,#0x39
+ ldrle r2,[r7,r2,lsl #2]
+ subgt r2,r2,#6
+l1.2964:
+ vtrn.32 d5,d17
+ add r3,r3,r5,lsl #1
+ vtrn.32 d16,d4
+ add r6,r3,#2
+ vmovl.u8 q9,d17
+ cmp r6,#0x35
+ movgt r3,#0x35
+ bgt l1.2996
+ adds r6,r3,#2
+ addpl r3,r3,#2
+ movmi r3,#0
+l1.2996:
+ vsubl.u8 q0,d17,d16
+ ldr r6,gai4_ihevc_tc_table_addr
+ulbl2:
+ add r6,r6,pc
+ vshl.i16 q0,q0,#2
+ add r2,r2,r5,lsl #1
+ add r5,r2,#2
+ vaddw.u8 q0,q0,d5
+ cmp r5,#0x35
+ ldr r3,[r6,r3,lsl #2]
+ vsubw.u8 q2,q0,d4
+ movgt r2,#0x35
+ bgt l1.3036
+ adds r5,r2,#2
+ addpl r2,r2,#2
+ movmi r2,#0
+l1.3036:
+
+
+ vrshr.s16 q3,q2,#3
+ vdup.16 d2,r3
+ ldr r2,[r6,r2,lsl #2]
+ rsb r3,r3,#0
+ cmp r12,#0
+ vdup.16 d3,r2
+ rsb r2,r2,#0
+ vdup.16 d30,r3
+ vdup.16 d31,r2
+
+
+ vmin.s16 q2,q3,q1
+ vmax.s16 q1,q15,q2
+
+ vmovl.u8 q3,d16
+
+ vadd.i16 q0,q3,q1
+ vsub.i16 q1,q9,q1
+ vqmovun.s16 d0,q0
+ sub r2,r0,#2
+ vqmovun.s16 d1,q1
+ vtrn.32 d0,d1
+ vtrn.8 d0,d1
+ beq l1.3204
+
+ vst1.16 {d0[0]},[r2],r1
+ vst1.16 {d1[0]},[r2],r1
+ vst1.16 {d0[1]},[r2],r1
+ vst1.16 {d1[1]},[r2]
+l1.3204:
+ cmp r4,#0
+ beq l1.3228
+ vst1.16 {d0[2]},[r0],r1
+ vst1.16 {d1[2]},[r0],r1
+ vst1.16 {d0[3]},[r0],r1
+ vst1.16 {d1[3]},[r0]
+l1.3228:
+ pop {r4-r12,pc}
+
+
+