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