| @/***************************************************************************** |
| @* |
| @* 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_horz.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_horz_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_horz_a9q, %function |
| |
| ihevc_deblk_chroma_horz_a9q: |
| push {r4-r12,lr} |
| sub r12,r0,r1 |
| vld1.8 {d0},[r0] |
| sub r5,r12,r1 |
| add r6,r0,r1 |
| add r1,r2,r3 |
| vmovl.u8 q0,d0 |
| ldr r10,[sp,#0x28] |
| vld1.8 {d2},[r12] |
| add r2,r1,#1 |
| ldr r4,[sp,#0x30] |
| vld1.8 {d4},[r5] |
| ldr r8,[sp,#0x34] |
| vld1.8 {d16},[r6] |
| ldr r9,[sp,#0x38] |
| adds r1,r10,r2,asr #1 |
| vmovl.u8 q1,d2 |
| ldr r7,[sp,#0x2c] |
| ldr r3,gai4_ihevc_qp_table_addr |
| ulbl1: |
| add r3, r3, pc |
| bmi l1.3312 |
| cmp r1,#0x39 |
| ldrle r1,[r3,r1,lsl #2] |
| subgt r1,r1,#6 |
| l1.3312: |
| adds r2,r7,r2,asr #1 |
| vmovl.u8 q2,d4 |
| bmi l1.3332 |
| cmp r2,#0x39 |
| ldrle r2,[r3,r2,lsl #2] |
| subgt r2,r2,#6 |
| l1.3332: |
| add r1,r1,r4,lsl #1 |
| vsub.i16 q3,q0,q1 |
| add r3,r1,#2 |
| cmp r3,#0x35 |
| movgt r1,#0x35 |
| vshl.i16 q3,q3,#2 |
| vmovl.u8 q8,d16 |
| bgt l1.3368 |
| adds r3,r1,#2 |
| addpl r1,r1,#2 |
| movmi r1,#0 |
| l1.3368: |
| ldr r3,gai4_ihevc_tc_table_addr |
| ulbl2: |
| add r3, r3, pc |
| vadd.i16 q2,q3,q2 |
| add r2,r2,r4,lsl #1 |
| vsub.i16 q3,q2,q8 |
| add r4,r2,#2 |
| ldr r1,[r3,r1,lsl #2] |
| cmp r4,#0x35 |
| movgt r2,#0x35 |
| bgt l1.3412 |
| adds r4,r2,#2 |
| addpl r2,r2,#2 |
| movmi r2,#0 |
| l1.3412: |
| |
| |
| ldr r2,[r3,r2,lsl #2] |
| cmp r8,#0 |
| vdup.16 q8,r2 |
| vdup.16 q2,r1 |
| rsb r1,r1,#0 |
| vrshr.s16 q3,q3,#3 |
| vdup.16 q9,r1 |
| rsb r1,r2,#0 |
| vzip.16 q2,q8 |
| vdup.16 q10,r1 |
| |
| vzip.16 q9,q10 |
| |
| vmin.s16 q8,q3,q2 |
| vmax.s16 q2,q9,q8 |
| vadd.i16 q1,q1,q2 |
| vsub.i16 q0,q0,q2 |
| vqmovun.s16 d2,q1 |
| vqmovun.s16 d0,q0 |
| beq l1.3528 |
| vst1.8 {d2},[r12] |
| l1.3528: |
| cmp r9,#0 |
| beq l1.3540 |
| vst1.8 {d0},[r0] |
| l1.3540: |
| pop {r4-r12,pc} |
| |
| |