armVCM4P10_Interpolate_Chroma_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
12    .text
13    .align 4
14
15armVCM4P10_WidthBranchTableMVIsNotZero:
16    .word   WidthIs2MVIsNotZero-(P0+8), WidthIs2MVIsNotZero-(P0+8)
17    .word   WidthIs4MVIsNotZero-(P0+8), WidthIs4MVIsNotZero-(P0+8)
18    .word   WidthIs8MVIsNotZero-(P0+8)
19
20armVCM4P10_WidthBranchTableMVIsZero:
21    .word   WidthIs2MVIsZero-(P0+8), WidthIs2MVIsZero-(P0+8)
22    .word   WidthIs4MVIsZero-(P0+8), WidthIs4MVIsZero-(P0+8)
23    .word   WidthIs8MVIsZero-(P0+8)
24
25    .global armVCM4P10_Interpolate_Chroma
26    .func   armVCM4P10_Interpolate_Chroma
27armVCM4P10_Interpolate_Chroma:
28    PUSH     {r4-r12,lr}
29    VPUSH    {d8-d15}
30    LDRD     r6,r7,[sp,#0x70]
31    LDRD     r4,r5,[sp,#0x68]
32    RSB      r8,r6,#8
33    RSB      r9,r7,#8
34    CMN      r6,r7
35    MOV      r10,#1
36    ADREQ    r11, armVCM4P10_WidthBranchTableMVIsZero
37    SUB      lr,r1,r10
38    ADRNE    r11, armVCM4P10_WidthBranchTableMVIsNotZero
39    VLD1.8   {d0},[r0],r10
40    SMULBB   r12,r8,r9
41    SMULBB   r9,r6,r9
42    VLD1.8   {d1},[r0],lr
43    SMULBB   r8,r8,r7
44    SMULBB   r6,r6,r7
45    VDUP.8   d12,r12
46    VDUP.8   d13,r9
47    VDUP.8   d14,r8
48    VDUP.8   d15,r6
49    LDR      r11,[r11, r4, lsl #1]
50P0: ADD      pc,r11
51
52WidthIs8MVIsNotZero:
53    VLD1.8   {d2},[r0],r10
54    VMULL.U8 q2,d0,d12
55    VLD1.8   {d3},[r0],lr
56    VMULL.U8 q3,d2,d12
57    VLD1.8   {d16},[r0],r10
58    VMLAL.U8 q2,d1,d13
59    VLD1.8   {d17},[r0],lr
60    VMULL.U8 q11,d16,d12
61    VMLAL.U8 q3,d3,d13
62    VLD1.8   {d18},[r0],r10
63    VMLAL.U8 q2,d2,d14
64    VMLAL.U8 q11,d17,d13
65    VMULL.U8 q12,d18,d12
66    VLD1.8   {d19},[r0],lr
67    VMLAL.U8 q3,d16,d14
68    VLD1.8   {d0},[r0],r10
69    VMLAL.U8 q12,d19,d13
70    VMLAL.U8 q11,d18,d14
71    VMLAL.U8 q2,d3,d15
72    VLD1.8   {d1},[r0],lr
73    VMLAL.U8 q12,d0,d14
74    VMLAL.U8 q3,d17,d15
75    VMLAL.U8 q11,d19,d15
76    SUBS     r5,r5,#4
77    VMLAL.U8 q12,d1,d15
78    VQRSHRN.U16 d8,q2,#6
79    VQRSHRN.U16 d9,q3,#6
80    VQRSHRN.U16 d20,q11,#6
81    VST1.64  {d8},[r2],r3
82    VQRSHRN.U16 d21,q12,#6
83    VST1.64  {d9},[r2],r3
84    VST1.64  {d20},[r2],r3
85    VST1.64  {d21},[r2],r3
86    BGT      WidthIs8MVIsNotZero
87    MOV      r0,#0
88    VPOP     {d8-d15}
89    POP      {r4-r12,pc}
90
91WidthIs4MVIsNotZero:
92    VLD1.8   {d2},[r0],r10
93    VMULL.U8 q2,d0,d12
94    VMULL.U8 q3,d2,d12
95    VLD1.8   {d3},[r0],lr
96    VMLAL.U8 q2,d1,d13
97    VMLAL.U8 q3,d3,d13
98    VLD1.8   {d0},[r0],r10
99    VMLAL.U8 q2,d2,d14
100    VMLAL.U8 q3,d0,d14
101    VLD1.8   {d1},[r0],lr
102    SUBS     r5,r5,#2
103    VMLAL.U8 q3,d1,d15
104    VMLAL.U8 q2,d3,d15
105    VQRSHRN.U16 d9,q3,#6
106    VQRSHRN.U16 d8,q2,#6
107    VST1.32  {d8[0]},[r2],r3
108    VST1.32  {d9[0]},[r2],r3
109    BGT      WidthIs4MVIsNotZero
110    MOV      r0,#0
111    VPOP     {d8-d15}
112    POP      {r4-r12,pc}
113
114WidthIs2MVIsNotZero:
115    VLD1.8   {d2},[r0],r10
116    VMULL.U8 q2,d0,d12
117    VMULL.U8 q3,d2,d12
118    VLD1.8   {d3},[r0],lr
119    VMLAL.U8 q2,d1,d13
120    VMLAL.U8 q3,d3,d13
121    VLD1.8   {d0},[r0],r10
122    VMLAL.U8 q2,d2,d14
123    VMLAL.U8 q3,d0,d14
124    VLD1.8   {d1},[r0],lr
125    SUBS     r5,r5,#2
126    VMLAL.U8 q3,d1,d15
127    VMLAL.U8 q2,d3,d15
128    VQRSHRN.U16 d9,q3,#6
129    VQRSHRN.U16 d8,q2,#6
130    VST1.16  {d8[0]},[r2],r3
131    VST1.16  {d9[0]},[r2],r3
132    BGT      WidthIs2MVIsNotZero
133    MOV      r0,#0
134    VPOP     {d8-d15}
135    POP      {r4-r12,pc}
136
137WidthIs8MVIsZero:
138    SUB      r0,r0,r1
139WidthIs8LoopMVIsZero:
140    VLD1.8   {d0},[r0],r1
141    SUBS     r5,r5,#2
142    VLD1.8   {d1},[r0],r1
143    VST1.64  {d0},[r2],r3
144    VST1.64  {d1},[r2],r3
145    BGT      WidthIs8LoopMVIsZero
146    MOV      r0,#0
147    VPOP     {d8-d15}
148    POP      {r4-r12,pc}
149
150WidthIs4MVIsZero:
151    VLD1.8   {d1},[r0],r1
152    SUBS     r5,r5,#2
153    VST1.32  {d0[0]},[r2],r3
154    VLD1.8   {d0},[r0],r1
155    VST1.32  {d1[0]},[r2],r3
156    BGT      WidthIs4MVIsZero
157    MOV      r0,#0
158    VPOP     {d8-d15}
159    POP      {r4-r12,pc}
160
161WidthIs2MVIsZero:
162    VLD1.8   {d1},[r0],r1
163    SUBS     r5,r5,#2
164    VST1.16  {d0[0]},[r2],r3
165    VLD1.8   {d0},[r0],r1
166    VST1.16  {d1[0]},[r2],r3
167    BGT      WidthIs2MVIsZero
168    MOV      r0,#0
169    VPOP     {d8-d15}
170    POP      {r4-r12,pc}
171    .endfunc
172
173    .end
174
175