diff options
Diffstat (limited to 'common/arm/ihevc_deblk_chroma_vert.s')
-rw-r--r-- | common/arm/ihevc_deblk_chroma_vert.s | 163 |
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} + + + |