1@/*****************************************************************************
2@*
3@* Copyright (C) 2012 Ittiam Systems Pvt Ltd, Bangalore
4@*
5@* Licensed under the Apache License, Version 2.0 (the "License");
6@* you may not use this file except in compliance with the License.
7@* You may obtain a copy of the License at:
8@*
9@* http://www.apache.org/licenses/LICENSE-2.0
10@*
11@* Unless required by applicable law or agreed to in writing, software
12@* distributed under the License is distributed on an "AS IS" BASIS,
13@* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14@* See the License for the specific language governing permissions and
15@* limitations under the License.
16@*
17@*****************************************************************************/
18@/*******************************************************************************
19@* @file
20@*  ihevc_deblk_luma_horz.s
21@*
22@* @brief
23@*  contains function definitions for inter prediction  interpolation.
24@* functions are coded using neon  intrinsics and can be compiled using
25
26@* rvct
27@*
28@* @author
29@*  anand s
30@*
31@* @par list of functions:
32@*
33@*
34@* @remarks
35@*  none
36@*
37@*******************************************************************************/
38
39.equ    qp_offset_u_offset,     40
40.equ    qp_offset_v_offset,     44
41.equ    tc_offset_div2_offset,  48
42.equ    filter_p_offset,        52
43.equ    filter_q_offset,        56
44
45.text
46.align 4
47
48
49
50
51.extern gai4_ihevc_qp_table
52.extern gai4_ihevc_tc_table
53.globl ihevc_deblk_chroma_horz_a9q
54
55gai4_ihevc_qp_table_addr:
56.long gai4_ihevc_qp_table - ulbl1 - 8
57
58gai4_ihevc_tc_table_addr:
59.long gai4_ihevc_tc_table - ulbl2 - 8
60
61.type ihevc_deblk_chroma_horz_a9q, %function
62
63ihevc_deblk_chroma_horz_a9q:
64    push        {r4-r12,lr}
65    sub         r12,r0,r1
66    vld1.8      {d0},[r0]
67    sub         r5,r12,r1
68    add         r6,r0,r1
69    add         r1,r2,r3
70    vmovl.u8    q0,d0
71    ldr         r10,[sp,#qp_offset_u_offset]
72    vld1.8      {d2},[r12]
73    add         r2,r1,#1
74    ldr         r4,[sp,#tc_offset_div2_offset]
75    vld1.8      {d4},[r5]
76    ldr         r8,[sp,#filter_p_offset]
77    vld1.8      {d16},[r6]
78    ldr         r9,[sp,#filter_q_offset]
79    adds        r1,r10,r2,asr #1
80    vmovl.u8    q1,d2
81    ldr         r7,[sp,#qp_offset_v_offset]
82    ldr         r3,gai4_ihevc_qp_table_addr
83ulbl1:
84    add         r3, r3, pc
85    bmi         l1.3312
86    cmp         r1,#0x39
87    ldrle       r1,[r3,r1,lsl #2]
88    subgt       r1,r1,#6
89l1.3312:
90    adds        r2,r7,r2,asr #1
91    vmovl.u8    q2,d4
92    bmi         l1.3332
93    cmp         r2,#0x39
94    ldrle       r2,[r3,r2,lsl #2]
95    subgt       r2,r2,#6
96l1.3332:
97    add         r1,r1,r4,lsl #1
98    vsub.i16    q3,q0,q1
99    add         r3,r1,#2
100    cmp         r3,#0x35
101    movgt       r1,#0x35
102    vshl.i16    q3,q3,#2
103    vmovl.u8    q8,d16
104    bgt         l1.3368
105    adds        r3,r1,#2
106    addpl       r1,r1,#2
107    movmi       r1,#0
108l1.3368:
109    ldr         r3,gai4_ihevc_tc_table_addr
110ulbl2:
111    add         r3, r3, pc
112    vadd.i16    q2,q3,q2
113    add         r2,r2,r4,lsl #1
114    vsub.i16    q3,q2,q8
115    add         r4,r2,#2
116    ldr         r1,[r3,r1,lsl #2]
117    cmp         r4,#0x35
118    movgt       r2,#0x35
119    bgt         l1.3412
120    adds        r4,r2,#2
121    addpl       r2,r2,#2
122    movmi       r2,#0
123l1.3412:
124
125
126    ldr         r2,[r3,r2,lsl #2]
127    cmp         r8,#0
128    vdup.16     q8,r2
129    vdup.16     q2,r1
130    rsb         r1,r1,#0
131    vrshr.s16   q3,q3,#3
132    vdup.16     q9,r1
133    rsb         r1,r2,#0
134    vzip.16     q2,q8
135    vdup.16     q10,r1
136
137    vzip.16     q9,q10
138
139    vmin.s16    q8,q3,q2
140    vmax.s16    q2,q9,q8
141    vadd.i16    q1,q1,q2
142    vsub.i16    q0,q0,q2
143    vqmovun.s16 d2,q1
144    vqmovun.s16 d0,q0
145    beq         l1.3528
146    vst1.8      {d2},[r12]
147l1.3528:
148    cmp         r9,#0
149    beq         l1.3540
150    vst1.8      {d0},[r0]
151l1.3540:
152    pop         {r4-r12,pc}
153
154
155