omxVCM4P10_PredictIntraChroma_8x8_s.S revision 22e06318d04074d1a7c90caa173857abdcfd153e
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    .align 4
13
14armVCM4P10_pIndexTable8x8:
15    .word  OMX_VC_CHROMA_DC-(P0+8),    OMX_VC_CHROMA_HOR-(P0+8)
16    .word  OMX_VC_CHROMA_VERT-(P0+8),  OMX_VC_CHROMA_PLANE-(P0+8)
17
18armVCM4P10_MultiplierTableChroma8x8:
19    .hword   3, 2, 1,4
20    .hword  -3,-2,-1,0
21    .hword   1, 2, 3,4
22
23    .global omxVCM4P10_PredictIntraChroma_8x8
24    .func   omxVCM4P10_PredictIntraChroma_8x8
25omxVCM4P10_PredictIntraChroma_8x8:
26    PUSH     {r4-r10,lr}
27    VPUSH    {d8-d15}
28    ADR      r8, armVCM4P10_pIndexTable8x8
29    LDR      r6,[sp,#0x68]
30    LDR      r4,[sp,#0x60]
31    LDR      r5,[sp,#0x64]
32    LDR      r7,[sp,#0x6c]
33    LDR      r8,[r8,r6,LSL #2]
34P0: ADD      pc,r8
35
36OMX_VC_CHROMA_DC:
37    TST      r7,#2
38    BEQ      L0xe8
39    ADD      r9,r0,r4
40    ADD      r10,r4,r4
41    VLD1.8   {d1[0]},[r0],r10
42    VLD1.8   {d1[1]},[r9],r10
43    VLD1.8   {d1[2]},[r0],r10
44    VLD1.8   {d1[3]},[r9],r10
45    VLD1.8   {d1[4]},[r0],r10
46    VLD1.8   {d1[5]},[r9],r10
47    VLD1.8   {d1[6]},[r0],r10
48    VLD1.8   {d1[7]},[r9]
49    TST      r7,#1
50    BEQ      L0xcc
51    VLD1.8   {d0},[r1]
52    MOV      r0,#0
53    VPADDL.U8 d2,d0
54    VPADDL.U16 d3,d2
55    VPADDL.U8 d2,d1
56    VPADDL.U16 d1,d2
57    VADD.I32 d2,d3,d1
58    VRSHR.U32 d2,d2,#3
59    VRSHR.U32 d3,d3,#2
60    VRSHR.U32 d1,d1,#2
61    VMOV.I8  d5,#0xc
62    VMOV.I8  d6,#0x4
63    VSHL.I64 d5,d5,#32
64    VSHR.U64 d6,d6,#32
65    VADD.I8  d6,d6,d5
66    VTBL.8   d0,{d2-d3},d5
67    VTBL.8   d4,{d1-d2},d6
68L0x9c:
69    ADD      r9,r3,r5
70    ADD      r10,r5,r5
71    VST1.8   {d0},[r3],r10
72    VST1.8   {d0},[r9],r10
73    VST1.8   {d0},[r3],r10
74    VST1.8   {d0},[r9],r10
75    VST1.8   {d4},[r3],r10
76    VST1.8   {d4},[r9],r10
77    VST1.8   {d4},[r3],r10
78    VST1.8   {d4},[r9]
79    VPOP     {d8-d15}
80    POP      {r4-r10,pc}
81L0xcc:
82    MOV      r0,#0
83    VPADDL.U8 d2,d1
84    VPADDL.U16 d1,d2
85    VRSHR.U32 d1,d1,#2
86    VDUP.8   d0,d1[0]
87    VDUP.8   d4,d1[4]
88    B        L0x9c
89L0xe8:
90    TST      r7,#1
91    BEQ      L0x114
92    VLD1.8   {d0},[r1]
93    MOV      r0,#0
94    VPADDL.U8 d2,d0
95    VPADDL.U16 d3,d2
96    VRSHR.U32 d3,d3,#2
97    VMOV.I8  d5,#0x4
98    VSHL.I64 d5,d5,#32
99    VTBL.8   d0,{d3},d5
100    B        L0x11c
101L0x114:
102    VMOV.I8  d0,#0x80
103    MOV      r0,#0
104L0x11c:
105    ADD      r9,r3,r5
106    ADD      r10,r5,r5
107    VST1.8   {d0},[r3],r10
108    VST1.8   {d0},[r9],r10
109    VST1.8   {d0},[r3],r10
110    VST1.8   {d0},[r9],r10
111    VST1.8   {d0},[r3],r10
112    VST1.8   {d0},[r9],r10
113    VST1.8   {d0},[r3],r10
114    VST1.8   {d0},[r9]
115    VPOP     {d8-d15}
116    POP      {r4-r10,pc}
117OMX_VC_CHROMA_VERT:
118    VLD1.8   {d0},[r1]
119    MOV      r0,#0
120    B        L0x11c
121OMX_VC_CHROMA_HOR:
122    ADD      r9,r0,r4
123    ADD      r10,r4,r4
124    VLD1.8   {d0[]},[r0],r10
125    VLD1.8   {d1[]},[r9],r10
126    VLD1.8   {d2[]},[r0],r10
127    VLD1.8   {d3[]},[r9],r10
128    VLD1.8   {d4[]},[r0],r10
129    VLD1.8   {d5[]},[r9],r10
130    VLD1.8   {d6[]},[r0],r10
131    VLD1.8   {d7[]},[r9]
132    B        L0x28c
133OMX_VC_CHROMA_PLANE:
134    ADD      r9,r0,r4
135    ADD      r10,r4,r4
136    VLD1.8   {d0},[r1]
137    VLD1.8   {d2[0]},[r2]
138    VLD1.8   {d1[0]},[r0],r10
139    VLD1.8   {d1[1]},[r9],r10
140    VLD1.8   {d1[2]},[r0],r10
141    VLD1.8   {d1[3]},[r9],r10
142    VLD1.8   {d1[4]},[r0],r10
143    VLD1.8   {d1[5]},[r9],r10
144    VLD1.8   {d1[6]},[r0],r10
145    VLD1.8   {d1[7]},[r9]
146    VREV64.8 d3,d0
147    VSUBL.U8 q3,d3,d2
148    VSHR.U64 d3,d3,#8
149    VSUBL.U8 q2,d3,d0
150    VREV64.8 d3,d1
151    VSUBL.U8 q7,d3,d2
152    VSHR.U64 d3,d3,#8
153    VSUBL.U8 q6,d3,d1
154    ADR      r2, armVCM4P10_MultiplierTableChroma8x8
155    VSHL.I64 d4,d4,#16
156    VEXT.8   d9,d4,d6,#2
157    VLD1.16  {d10},[r2]!
158    VSHL.I64 d12,d12,#16
159    VEXT.8   d16,d12,d14,#2
160    VMUL.I16 d11,d9,d10
161    VMUL.I16 d3,d16,d10
162    VPADD.I16 d3,d11,d3
163    VPADDL.S16 d3,d3
164    VSHL.I32 d2,d3,#4
165    VADD.I32 d3,d3,d2
166    VLD1.16  {d10,d11},[r2]
167    VRSHR.S32 d3,d3,#5
168    VADDL.U8 q0,d0,d1
169    VDUP.16  q0,d1[3]
170    VSHL.I16 q0,q0,#4
171    VDUP.16  q2,d3[0]
172    VDUP.16  q3,d3[2]
173    VMUL.I16 q2,q2,q5
174    VMUL.I16 q3,q3,q5
175    VADD.I16 q2,q2,q0
176    VDUP.16  q0,d6[0]
177    VDUP.16  q1,d6[1]
178    VDUP.16  q4,d6[2]
179    VDUP.16  q5,d6[3]
180    VDUP.16  q6,d7[0]
181    VDUP.16  q7,d7[1]
182    VDUP.16  q8,d7[2]
183    VDUP.16  q9,d7[3]
184    VADD.I16 q0,q2,q0
185    VADD.I16 q1,q2,q1
186    VADD.I16 q4,q2,q4
187    VADD.I16 q5,q2,q5
188    VADD.I16 q6,q2,q6
189    VADD.I16 q7,q2,q7
190    VADD.I16 q8,q2,q8
191    VADD.I16 q9,q2,q9
192    VQRSHRUN.S16 d0,q0,#5
193    VQRSHRUN.S16 d1,q1,#5
194    VQRSHRUN.S16 d2,q4,#5
195    VQRSHRUN.S16 d3,q5,#5
196    VQRSHRUN.S16 d4,q6,#5
197    VQRSHRUN.S16 d5,q7,#5
198    VQRSHRUN.S16 d6,q8,#5
199    VQRSHRUN.S16 d7,q9,#5
200L0x28c:
201    ADD      r9,r3,r5
202    ADD      r10,r5,r5
203    VST1.8   {d0},[r3],r10
204    VST1.8   {d1},[r9],r10
205    VST1.8   {d2},[r3],r10
206    VST1.8   {d3},[r9],r10
207    VST1.8   {d4},[r3],r10
208    VST1.8   {d5},[r9],r10
209    VST1.8   {d6},[r3],r10
210    VST1.8   {d7},[r9]
211    MOV      r0,#0
212    VPOP     {d8-d15}
213    POP      {r4-r10,pc}
214    .endfunc
215
216    .end
217
218