Imported Debian version 2.4.3~trusty1
[deb_ffmpeg.git] / ffmpeg / libavcodec / arm / vp8_armv6.S
CommitLineData
2ba45a60
DM
1/*
2 * Copyright (C) 2010 Mans Rullgard
3 *
4 * This file is part of FFmpeg.
5 *
6 * FFmpeg is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
10 *
11 * FFmpeg is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
15 *
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with FFmpeg; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#include "libavutil/arm/asm.S"
22
23.macro rac_get_prob h, bs, buf, cw, pr, t0, t1
24 adds \bs, \bs, \t0
25 lsl \cw, \cw, \t0
26 lsl \t0, \h, \t0
27 rsb \h, \pr, #256
28 it cs
29 ldrhcs \t1, [\buf], #2
30 smlabb \h, \t0, \pr, \h
31T itttt cs
32 rev16cs \t1, \t1
33A orrcs \cw, \cw, \t1, lsl \bs
34T lslcs \t1, \t1, \bs
35T orrcs \cw, \cw, \t1
36 subcs \bs, \bs, #16
37 lsr \h, \h, #8
38 cmp \cw, \h, lsl #16
39 itt ge
40 subge \cw, \cw, \h, lsl #16
41 subge \h, \t0, \h
42.endm
43
44.macro rac_get_128 h, bs, buf, cw, t0, t1
45 adds \bs, \bs, \t0
46 lsl \cw, \cw, \t0
47 lsl \t0, \h, \t0
48 it cs
49 ldrhcs \t1, [\buf], #2
50 mov \h, #128
51 it cs
52 rev16cs \t1, \t1
53 add \h, \h, \t0, lsl #7
54A orrcs \cw, \cw, \t1, lsl \bs
55T ittt cs
56T lslcs \t1, \t1, \bs
57T orrcs \cw, \cw, \t1
58 subcs \bs, \bs, #16
59 lsr \h, \h, #8
60 cmp \cw, \h, lsl #16
61 itt ge
62 subge \cw, \cw, \h, lsl #16
63 subge \h, \t0, \h
64.endm
65
66function ff_decode_block_coeffs_armv6, export=1
67 push {r0,r1,r4-r11,lr}
68 movrelx lr, X(ff_vp56_norm_shift)
69 ldrd r4, r5, [sp, #44] @ token_prob, qmul
70 cmp r3, #0
71 ldr r11, [r5]
72 ldm r0, {r5-r7} @ high, bits, buf
73 it ne
74 pkhtbne r11, r11, r11, asr #16
75 ldr r8, [r0, #16] @ code_word
760:
77 ldrb r9, [lr, r5]
78 add r3, r3, #1
79 ldrb r0, [r4, #1]
80 rac_get_prob r5, r6, r7, r8, r0, r9, r10
81 blt 2f
82
83 ldrb r9, [lr, r5]
84 ldrb r0, [r4, #2]
85 rac_get_prob r5, r6, r7, r8, r0, r9, r10
86 ldrb r9, [lr, r5]
87 bge 3f
88
89 add r4, r3, r3, lsl #5
90 sxth r12, r11
91 add r4, r4, r2
92 adds r6, r6, r9
93 add r4, r4, #11
94 lsl r8, r8, r9
95 it cs
96 ldrhcs r10, [r7], #2
97 lsl r9, r5, r9
98 mov r5, #128
99 it cs
100 rev16cs r10, r10
101 add r5, r5, r9, lsl #7
102T ittt cs
103T lslcs r10, r10, r6
104T orrcs r8, r8, r10
105A orrcs r8, r8, r10, lsl r6
106 subcs r6, r6, #16
107 lsr r5, r5, #8
108 cmp r8, r5, lsl #16
109 movrel r10, zigzag_scan-1
110 itt ge
111 subge r8, r8, r5, lsl #16
112 subge r5, r9, r5
113 ldrb r10, [r10, r3]
114 it ge
115 rsbge r12, r12, #0
116 cmp r3, #16
117 strh r12, [r1, r10]
118 bge 6f
1195:
120 ldrb r9, [lr, r5]
121 ldrb r0, [r4]
122 rac_get_prob r5, r6, r7, r8, r0, r9, r10
123 pkhtb r11, r11, r11, asr #16
124 bge 0b
125
1266:
127 ldr r0, [sp]
128 ldr r9, [r0, #12]
129 cmp r7, r9
130 it hi
131 movhi r7, r9
132 stm r0, {r5-r7} @ high, bits, buf
133 str r8, [r0, #16] @ code_word
134
135 add sp, sp, #8
136 mov r0, r3
137 pop {r4-r11,pc}
1382:
139 add r4, r3, r3, lsl #5
140 cmp r3, #16
141 add r4, r4, r2
142 pkhtb r11, r11, r11, asr #16
143 bne 0b
144 b 6b
1453:
146 ldrb r0, [r4, #3]
147 rac_get_prob r5, r6, r7, r8, r0, r9, r10
148 ldrb r9, [lr, r5]
149 bge 1f
150
151 mov r12, #2
152 ldrb r0, [r4, #4]
153 rac_get_prob r5, r6, r7, r8, r0, r9, r10
154 it ge
155 addge r12, #1
156 ldrb r9, [lr, r5]
157 blt 4f
158 ldrb r0, [r4, #5]
159 rac_get_prob r5, r6, r7, r8, r0, r9, r10
160 it ge
161 addge r12, #1
162 ldrb r9, [lr, r5]
163 b 4f
1641:
165 ldrb r0, [r4, #6]
166 rac_get_prob r5, r6, r7, r8, r0, r9, r10
167 ldrb r9, [lr, r5]
168 bge 3f
169
170 ldrb r0, [r4, #7]
171 rac_get_prob r5, r6, r7, r8, r0, r9, r10
172 ldrb r9, [lr, r5]
173 bge 2f
174
175 mov r12, #5
176 mov r0, #159
177 rac_get_prob r5, r6, r7, r8, r0, r9, r10
178 it ge
179 addge r12, r12, #1
180 ldrb r9, [lr, r5]
181 b 4f
1822:
183 mov r12, #7
184 mov r0, #165
185 rac_get_prob r5, r6, r7, r8, r0, r9, r10
186 it ge
187 addge r12, r12, #2
188 ldrb r9, [lr, r5]
189 mov r0, #145
190 rac_get_prob r5, r6, r7, r8, r0, r9, r10
191 it ge
192 addge r12, r12, #1
193 ldrb r9, [lr, r5]
194 b 4f
1953:
196 ldrb r0, [r4, #8]
197 rac_get_prob r5, r6, r7, r8, r0, r9, r10
198 it ge
199 addge r4, r4, #1
200 ldrb r9, [lr, r5]
201 ite ge
202 movge r12, #2
203 movlt r12, #0
204 ldrb r0, [r4, #9]
205 rac_get_prob r5, r6, r7, r8, r0, r9, r10
206 mov r9, #8
207 it ge
208 addge r12, r12, #1
209 movrelx r4, X(ff_vp8_dct_cat_prob), r1
210 lsl r9, r9, r12
211 ldr r4, [r4, r12, lsl #2]
212 add r12, r9, #3
213 mov r1, #0
214 ldrb r0, [r4], #1
2151:
216 ldrb r9, [lr, r5]
217 lsl r1, r1, #1
218 rac_get_prob r5, r6, r7, r8, r0, r9, r10
219 ldrb r0, [r4], #1
220 it ge
221 addge r1, r1, #1
222 cmp r0, #0
223 bne 1b
224 ldrb r9, [lr, r5]
225 add r12, r12, r1
226 ldr r1, [sp, #4]
2274:
228 add r4, r3, r3, lsl #5
229 add r4, r4, r2
230 add r4, r4, #22
231 rac_get_128 r5, r6, r7, r8, r9, r10
232 it ge
233 rsbge r12, r12, #0
234 smulbb r12, r12, r11
235 movrel r9, zigzag_scan-1
236 ldrb r9, [r9, r3]
237 cmp r3, #16
238 strh r12, [r1, r9]
239 bge 6b
240 b 5b
241endfunc
242
243const zigzag_scan
244 .byte 0, 2, 8, 16
245 .byte 10, 4, 6, 12
246 .byte 18, 24, 26, 20
247 .byte 14, 22, 28, 30
248endconst