1/*
2 * (c) Copyright 2007-2008 ARM Limited. All Rights Reserved.
3 *
4 */
5
6    .eabi_attribute 24, 1
7    .eabi_attribute 25, 1
8
9    .arm
10    .fpu neon
11    .text
12
13    .global omxVCM4P10_FilterDeblockingLuma_VerEdge_I
14    .func   omxVCM4P10_FilterDeblockingLuma_VerEdge_I
15omxVCM4P10_FilterDeblockingLuma_VerEdge_I:
16    PUSH     {r4-r12,lr}
17    VPUSH    {d8-d15}
18    ADD      r7,r2,#1
19    ADD      r8,r3,#1
20    VLD1.8   {d0[]},[r2]
21    SUB      r0,r0,#4
22    VLD1.8   {d2[]},[r3]
23    LDR      r4,[sp,#0x6c]
24    LDR      r5,[sp,#0x68]
25    MOV      r6,#0
26    VMOV.I8  d14,#0
27    VMOV.I8  d15,#0x1
28    MOV      r9,#0x11000000
29    ADD      r11,r1,r1
30L0x38:
31    LDRH     r12,[r4],#4
32    CMP      r12,#0
33    BEQ      L0x160
34    ADD      r10,r0,r1
35    VLD1.8   {d7},[r0],r11
36    VLD1.8   {d8},[r10],r11
37    VLD1.8   {d5},[r0],r11
38    VZIP.8   d7,d8
39    VLD1.8   {d10},[r10],r11
40    VLD1.8   {d6},[r0],r11
41    VZIP.8   d5,d10
42    VLD1.8   {d9},[r10],r11
43    VLD1.8   {d4},[r0],r11
44    VLD1.8   {d11},[r10],r11
45    VZIP.8   d6,d9
46    VZIP.16  d8,d10
47    VZIP.8   d4,d11
48    SUB      r0,r0,r1,LSL #3
49    VZIP.16  d7,d5
50    VZIP.16  d9,d11
51    VZIP.16  d6,d4
52    VTRN.32  d8,d9
53    VTRN.32  d5,d4
54    VTRN.32  d10,d11
55    VTRN.32  d7,d6
56    VABD.U8  d13,d4,d8
57    VABD.U8  d12,d5,d4
58    VABD.U8  d18,d9,d8
59    VABD.U8  d19,d6,d4
60    TST      r12,#0xff
61    VCGT.U8  d16,d0,d13
62    VMAX.U8  d12,d18,d12
63    VABD.U8  d17,d10,d8
64    VMOVEQ.32 d16[0],r6
65    TST      r12,#0xff00
66    VCGT.U8  d19,d2,d19
67    VCGT.U8  d12,d2,d12
68    VMOVEQ.32 d16[1],r6
69    VCGT.U8  d17,d2,d17
70    VAND     d16,d16,d12
71    TST      r12,#4
72    VAND     d12,d16,d17
73    VAND     d17,d16,d19
74    BNE      L0x17c
75    BL       armVCM4P10_DeblockingLumabSLT4_unsafe
76    VZIP.8   d7,d6
77    VZIP.8   d30,d29
78    VZIP.8   d24,d25
79    VZIP.8   d10,d11
80    VZIP.16  d7,d30
81    ADD      r10,r0,r1
82    VZIP.16  d24,d10
83    VZIP.16  d25,d11
84    VZIP.16  d6,d29
85    VTRN.32  d7,d24
86    VTRN.32  d30,d10
87    VTRN.32  d6,d25
88    VTRN.32  d29,d11
89    VST1.8   {d7},[r0],r11
90    VST1.8   {d24},[r10],r11
91    VST1.8   {d30},[r0],r11
92    VST1.8   {d10},[r10],r11
93    VST1.8   {d6},[r0],r11
94    VST1.8   {d25},[r10],r11
95    ADDS     r9,r9,r9
96    VST1.8   {d29},[r0],r11
97    ADD      r5,r5,#2
98    VST1.8   {d11},[r10],r1
99    SUB      r0,r0,r1,LSL #3
100    VLD1.8   {d0[]},[r7]
101    ADD      r0,r0,#4
102    VLD1.8   {d2[]},[r8]
103    BCC      L0x38
104    B        L0x1f0
105L0x160:
106    ADD      r0,r0,#4
107    ADDS     r9,r9,r9
108    VLD1.8   {d0[]},[r7]
109    ADD      r5,r5,#4
110    VLD1.8   {d2[]},[r8]
111    BCC      L0x38
112    B        L0x1f0
113L0x17c:
114    BL       armVCM4P10_DeblockingLumabSGE4_unsafe
115    VZIP.8   d7,d31
116    VZIP.8   d30,d29
117    VZIP.8   d24,d25
118    VZIP.8   d28,d11
119    VZIP.16  d7,d30
120    ADD      r10,r0,r1
121    VZIP.16  d24,d28
122    VZIP.16  d25,d11
123    VZIP.16  d31,d29
124    VTRN.32  d7,d24
125    VTRN.32  d30,d28
126    VTRN.32  d31,d25
127    VTRN.32  d29,d11
128    VST1.8   {d7},[r0],r11
129    VST1.8   {d24},[r10],r11
130    VST1.8   {d30},[r0],r11
131    VST1.8   {d28},[r10],r11
132    VST1.8   {d31},[r0],r11
133    VST1.8   {d25},[r10],r11
134    ADDS     r9,r9,r9
135    VST1.8   {d29},[r0],r11
136    ADD      r5,r5,#4
137    VST1.8   {d11},[r10],r11
138    SUB      r0,r0,r1,LSL #3
139    VLD1.8   {d0[]},[r7]
140    ADD      r0,r0,#4
141    VLD1.8   {d2[]},[r8]
142    BCC      L0x38
143L0x1f0:
144    SUB      r4,r4,#0xe
145    SUB      r5,r5,#0xe
146    SUB      r0,r0,#0x10
147    VLD1.8   {d0[]},[r2]
148    ADD      r0,r0,r1,LSL #3
149    VLD1.8   {d2[]},[r3]
150    BNE      L0x38
151    MOV      r0,#0
152    VPOP     {d8-d15}
153    POP      {r4-r12,pc}
154    .endfunc
155
156    .end
157
158