xref: /OK3568_Linux_fs/kernel/sound/soc/rockchip/vad_preprocess_thumb.S (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun/* SPDX-License-Identifier: GPL-2.0 */
2*4882a593Smuzhiyun/*
3*4882a593Smuzhiyun * Rockchip VAD Preprocess
4*4882a593Smuzhiyun *
5*4882a593Smuzhiyun * Copyright (C) 2018 Fuzhou Rockchip Electronics Co., Ltd
6*4882a593Smuzhiyun *
7*4882a593Smuzhiyun */
8*4882a593Smuzhiyun
9*4882a593Smuzhiyun	.syntax unified
10*4882a593Smuzhiyun	.arch armv7-a
11*4882a593Smuzhiyun	.fpu softvfp
12*4882a593Smuzhiyun	.eabi_attribute 20, 1
13*4882a593Smuzhiyun	.eabi_attribute 21, 1
14*4882a593Smuzhiyun	.eabi_attribute 23, 3
15*4882a593Smuzhiyun	.eabi_attribute 24, 1
16*4882a593Smuzhiyun	.eabi_attribute 25, 1
17*4882a593Smuzhiyun	.eabi_attribute 26, 2
18*4882a593Smuzhiyun	.eabi_attribute 30, 4
19*4882a593Smuzhiyun	.eabi_attribute 34, 1
20*4882a593Smuzhiyun	.eabi_attribute 18, 4
21*4882a593Smuzhiyun	.thumb
22*4882a593Smuzhiyun	.file	"vad_preprocess_thumb.S"
23*4882a593Smuzhiyun	.text
24*4882a593Smuzhiyun	.align	1
25*4882a593Smuzhiyun	.global	vad_preprocess_init
26*4882a593Smuzhiyun	.thumb
27*4882a593Smuzhiyun	.thumb_func
28*4882a593Smuzhiyun	.type	vad_preprocess_init, %function
29*4882a593Smuzhiyunvad_preprocess_init:
30*4882a593Smuzhiyun	.fnstart
31*4882a593Smuzhiyun	@ args = 0, pretend = 0, frame = 0
32*4882a593Smuzhiyun	@ frame_needed = 0, uses_anonymous_args = 0
33*4882a593Smuzhiyun	@ link register save eliminated.
34*4882a593Smuzhiyun	ldr	r2, .L4
35*4882a593Smuzhiyun	ldr	r3, [r0, #8]
36*4882a593Smuzhiyun	strh	r3, [r2]	@ movhi
37*4882a593Smuzhiyun	ldr	r3, [r0, #4]
38*4882a593Smuzhiyun	strh	r3, [r2, #2]	@ movhi
39*4882a593Smuzhiyun	ldr	r3, [r0, #12]
40*4882a593Smuzhiyun	strh	r3, [r2, #4]	@ movhi
41*4882a593Smuzhiyun	ldr	r3, [r0]
42*4882a593Smuzhiyun	strh	r3, [r2, #6]	@ movhi
43*4882a593Smuzhiyun	ldr	r3, [r0, #16]
44*4882a593Smuzhiyun	tst	r3, #512
45*4882a593Smuzhiyun	ubfx	r3, r3, #0, #9
46*4882a593Smuzhiyun	itte	ne
47*4882a593Smuzhiyun	eorne	r3, r3, #65280
48*4882a593Smuzhiyun	eorne	r3, r3, #255
49*4882a593Smuzhiyun	uxtheq	r3, r3
50*4882a593Smuzhiyun	strh	r3, [r2, #8]	@ movhi
51*4882a593Smuzhiyun	bx	lr
52*4882a593Smuzhiyun.L5:
53*4882a593Smuzhiyun	.align	2
54*4882a593Smuzhiyun.L4:
55*4882a593Smuzhiyun	.word	.LANCHOR0
56*4882a593Smuzhiyun	.fnend
57*4882a593Smuzhiyun	.size	vad_preprocess_init, .-vad_preprocess_init
58*4882a593Smuzhiyun	.align	1
59*4882a593Smuzhiyun	.global	vad_preprocess
60*4882a593Smuzhiyun	.thumb
61*4882a593Smuzhiyun	.thumb_func
62*4882a593Smuzhiyun	.type	vad_preprocess, %function
63*4882a593Smuzhiyunvad_preprocess:
64*4882a593Smuzhiyun	.fnstart
65*4882a593Smuzhiyun	@ args = 0, pretend = 0, frame = 0
66*4882a593Smuzhiyun	@ frame_needed = 0, uses_anonymous_args = 0
67*4882a593Smuzhiyun	ldr	r3, .L29
68*4882a593Smuzhiyun	movw	r2, #34839
69*4882a593Smuzhiyun	push	{r4, r5, r6, r7, r8, r9, lr}
70*4882a593Smuzhiyun	.save {r4, r5, r6, r7, r8, r9, lr}
71*4882a593Smuzhiyun	movw	r1, #15349
72*4882a593Smuzhiyun	ldrsh	r5, [r3, #8]
73*4882a593Smuzhiyun	muls	r0, r5, r0
74*4882a593Smuzhiyun	ldrh	r7, [r3, #10]
75*4882a593Smuzhiyun	it	mi
76*4882a593Smuzhiyun	addmi	r0, r0, #31
77*4882a593Smuzhiyun	ldrh	r4, [r3, #12]
78*4882a593Smuzhiyun	asrs	r0, r0, #5
79*4882a593Smuzhiyun	ldrh	r6, [r3, #14]
80*4882a593Smuzhiyun	smulbb	r2, r7, r2
81*4882a593Smuzhiyun	mla	r2, r1, r0, r2
82*4882a593Smuzhiyun	smlabb	r2, r4, r1, r2
83*4882a593Smuzhiyun	movw	r1, #34904
84*4882a593Smuzhiyun	smulbb	r1, r6, r1
85*4882a593Smuzhiyun	ldrsh	r4, [r3, #16]
86*4882a593Smuzhiyun	subs	r1, r2, r1
87*4882a593Smuzhiyun	movw	r2, #14379
88*4882a593Smuzhiyun	mls	r4, r4, r2, r1
89*4882a593Smuzhiyun	cmp	r4, #1
90*4882a593Smuzhiyun	asr	r5, r4, #31
91*4882a593Smuzhiyun	sbcs	r2, r5, #0
92*4882a593Smuzhiyun	blt	.L8
93*4882a593Smuzhiyun	adds	r4, r4, #8192
94*4882a593Smuzhiyun	adc	r5, r5, #0
95*4882a593Smuzhiyun	b	.L10
96*4882a593Smuzhiyun.L8:
97*4882a593Smuzhiyun	subs	r4, r4, #8192
98*4882a593Smuzhiyun	adc	r5, r5, #-1
99*4882a593Smuzhiyun	cmp	r4, #0
100*4882a593Smuzhiyun	sbcs	r2, r5, #0
101*4882a593Smuzhiyun	bge	.L10
102*4882a593Smuzhiyun	movw	r8, #16383
103*4882a593Smuzhiyun	mov	r9, #0
104*4882a593Smuzhiyun	adds	r4, r4, r8
105*4882a593Smuzhiyun	adc	r5, r5, r9
106*4882a593Smuzhiyun.L10:
107*4882a593Smuzhiyun	lsrs	r1, r4, #14
108*4882a593Smuzhiyun	ldrh	r4, [r3, #18]
109*4882a593Smuzhiyun	orr	r1, r1, r5, lsl #18
110*4882a593Smuzhiyun	ldr	r2, .L29+4
111*4882a593Smuzhiyun	adds	r4, r4, #1
112*4882a593Smuzhiyun	strh	r0, [r3, #10]	@ movhi
113*4882a593Smuzhiyun	uxth	r1, r1
114*4882a593Smuzhiyun	strh	r1, [r3, #14]	@ movhi
115*4882a593Smuzhiyun	uxth	r4, r4
116*4882a593Smuzhiyun	strh	r4, [r3, #18]	@ movhi
117*4882a593Smuzhiyun	sxth	r1, r1
118*4882a593Smuzhiyun	ldr	r0, [r3, #20]
119*4882a593Smuzhiyun	sxth	r4, r4
120*4882a593Smuzhiyun	cmp	r1, #0
121*4882a593Smuzhiyun	and	r2, r2, r4
122*4882a593Smuzhiyun	it	lt
123*4882a593Smuzhiyun	rsblt	r1, r1, #0
124*4882a593Smuzhiyun	cmp	r2, #0
125*4882a593Smuzhiyun	add	r0, r0, r1
126*4882a593Smuzhiyun	it	lt
127*4882a593Smuzhiyun	addlt	r2, r2, #-1
128*4882a593Smuzhiyun	strh	r7, [r3, #12]	@ movhi
129*4882a593Smuzhiyun	it	lt
130*4882a593Smuzhiyun	ornlt	r2, r2, #255
131*4882a593Smuzhiyun	strh	r6, [r3, #16]	@ movhi
132*4882a593Smuzhiyun	it	lt
133*4882a593Smuzhiyun	addlt	r2, r2, #1
134*4882a593Smuzhiyun	str	r0, [r3, #20]
135*4882a593Smuzhiyun	cmp	r2, #0
136*4882a593Smuzhiyun	bne	.L11
137*4882a593Smuzhiyun	ldr	r4, [r3, #24]
138*4882a593Smuzhiyun	ldr	r2, .L29
139*4882a593Smuzhiyun	cmp	r4, #99
140*4882a593Smuzhiyun	bgt	.L13
141*4882a593Smuzhiyun	adds	r5, r0, #128
142*4882a593Smuzhiyun	add	r2, r2, r4, lsl #1
143*4882a593Smuzhiyun	it	mi
144*4882a593Smuzhiyun	addwmi	r5, r0, #383
145*4882a593Smuzhiyun	asrs	r5, r5, #8
146*4882a593Smuzhiyun	strh	r5, [r2, #28]	@ movhi
147*4882a593Smuzhiyun	b	.L15
148*4882a593Smuzhiyun.L13:
149*4882a593Smuzhiyun	add	r5, r2, #28
150*4882a593Smuzhiyun	adds	r2, r2, #226
151*4882a593Smuzhiyun.L16:
152*4882a593Smuzhiyun	ldrh	r6, [r5, #2]
153*4882a593Smuzhiyun	strh	r6, [r5], #2	@ movhi
154*4882a593Smuzhiyun	cmp	r5, r2
155*4882a593Smuzhiyun	bne	.L16
156*4882a593Smuzhiyun	adds	r2, r0, #128
157*4882a593Smuzhiyun	it	mi
158*4882a593Smuzhiyun	addwmi	r2, r0, #383
159*4882a593Smuzhiyun	ldr	r0, .L29
160*4882a593Smuzhiyun	asrs	r2, r2, #8
161*4882a593Smuzhiyun	strh	r2, [r0, #226]	@ movhi
162*4882a593Smuzhiyun.L15:
163*4882a593Smuzhiyun	cmp	r4, #99
164*4882a593Smuzhiyun	ldrh	r2, [r3, #28]
165*4882a593Smuzhiyun	mov	r0, #1
166*4882a593Smuzhiyun	bgt	.L18
167*4882a593Smuzhiyun	ldr	r5, .L29+8
168*4882a593Smuzhiyun.L19:
169*4882a593Smuzhiyun	cmp	r0, r4
170*4882a593Smuzhiyun	bge	.L21
171*4882a593Smuzhiyun	ldrsh	r6, [r5, r0, lsl #1]
172*4882a593Smuzhiyun	sxth	r2, r2
173*4882a593Smuzhiyun	adds	r0, r0, #1
174*4882a593Smuzhiyun	cmp	r2, r6
175*4882a593Smuzhiyun	it	ge
176*4882a593Smuzhiyun	movge	r2, r6
177*4882a593Smuzhiyun	uxth	r2, r2
178*4882a593Smuzhiyun	b	.L19
179*4882a593Smuzhiyun.L18:
180*4882a593Smuzhiyun	ldr	r6, .L29+8
181*4882a593Smuzhiyun.L22:
182*4882a593Smuzhiyun	ldrsh	r5, [r6, r0, lsl #1]
183*4882a593Smuzhiyun	sxth	r2, r2
184*4882a593Smuzhiyun	adds	r0, r0, #1
185*4882a593Smuzhiyun	cmp	r2, r5
186*4882a593Smuzhiyun	it	ge
187*4882a593Smuzhiyun	movge	r2, r5
188*4882a593Smuzhiyun	cmp	r0, #100
189*4882a593Smuzhiyun	uxth	r2, r2
190*4882a593Smuzhiyun	bne	.L22
191*4882a593Smuzhiyun.L21:
192*4882a593Smuzhiyun	ldrh	r5, [r3, #6]
193*4882a593Smuzhiyun	movs	r0, #128
194*4882a593Smuzhiyun	movs	r6, #230
195*4882a593Smuzhiyun	adds	r4, r4, #1
196*4882a593Smuzhiyun	str	r4, [r3, #24]
197*4882a593Smuzhiyun	smlabb	r0, r5, r6, r0
198*4882a593Smuzhiyun	movs	r5, #26
199*4882a593Smuzhiyun	smlabb	r2, r2, r5, r0
200*4882a593Smuzhiyun	ldr	r0, .L29
201*4882a593Smuzhiyun	cmp	r2, #0
202*4882a593Smuzhiyun	it	lt
203*4882a593Smuzhiyun	addlt	r2, r2, #255
204*4882a593Smuzhiyun	asrs	r2, r2, #8
205*4882a593Smuzhiyun	strh	r2, [r0, #6]	@ movhi
206*4882a593Smuzhiyun	movs	r2, #0
207*4882a593Smuzhiyun	str	r2, [r3, #20]
208*4882a593Smuzhiyun	strh	r2, [r3, #18]	@ movhi
209*4882a593Smuzhiyun.L11:
210*4882a593Smuzhiyun	ldrh	r0, [r3, #6]
211*4882a593Smuzhiyun	ldrh	r4, [r3, #2]
212*4882a593Smuzhiyun	ldrsh	r3, [r3]
213*4882a593Smuzhiyun	ldr	r2, .L29
214*4882a593Smuzhiyun	smlabb	r3, r0, r4, r3
215*4882a593Smuzhiyun	cmp	r1, r3
216*4882a593Smuzhiyun	ble	.L24
217*4882a593Smuzhiyun	ldrh	r3, [r2, #428]
218*4882a593Smuzhiyun	ldrsh	r0, [r2, #4]
219*4882a593Smuzhiyun	adds	r3, r3, #1
220*4882a593Smuzhiyun	uxth	r3, r3
221*4882a593Smuzhiyun	strh	r3, [r2, #428]	@ movhi
222*4882a593Smuzhiyun	sxth	r3, r3
223*4882a593Smuzhiyun	cmp	r0, r3
224*4882a593Smuzhiyun	ite	ge
225*4882a593Smuzhiyun	movge	r0, #0
226*4882a593Smuzhiyun	movlt	r0, #1
227*4882a593Smuzhiyun	pop	{r4, r5, r6, r7, r8, r9, pc}
228*4882a593Smuzhiyun.L24:
229*4882a593Smuzhiyun	movs	r0, #0
230*4882a593Smuzhiyun	strh	r0, [r2, #428]	@ movhi
231*4882a593Smuzhiyun	pop	{r4, r5, r6, r7, r8, r9, pc}
232*4882a593Smuzhiyun.L30:
233*4882a593Smuzhiyun	.align	2
234*4882a593Smuzhiyun.L29:
235*4882a593Smuzhiyun	.word	.LANCHOR0
236*4882a593Smuzhiyun	.word	-2147483393
237*4882a593Smuzhiyun	.word	.LANCHOR0+28
238*4882a593Smuzhiyun	.fnend
239*4882a593Smuzhiyun	.size	vad_preprocess, .-vad_preprocess
240*4882a593Smuzhiyun	.align	1
241*4882a593Smuzhiyun	.global	vad_preprocess_destroy
242*4882a593Smuzhiyun	.thumb
243*4882a593Smuzhiyun	.thumb_func
244*4882a593Smuzhiyun	.type	vad_preprocess_destroy, %function
245*4882a593Smuzhiyunvad_preprocess_destroy:
246*4882a593Smuzhiyun	.fnstart
247*4882a593Smuzhiyun	@ args = 0, pretend = 0, frame = 0
248*4882a593Smuzhiyun	@ frame_needed = 0, uses_anonymous_args = 0
249*4882a593Smuzhiyun	movs	r3, #0
250*4882a593Smuzhiyun	ldr	r2, .L34
251*4882a593Smuzhiyun	push	{r4, lr}
252*4882a593Smuzhiyun	.save {r4, lr}
253*4882a593Smuzhiyun	mov	r4, r3
254*4882a593Smuzhiyun	strh	r3, [r2, #10]	@ movhi
255*4882a593Smuzhiyun	strh	r3, [r2, #12]	@ movhi
256*4882a593Smuzhiyun	strh	r3, [r2, #14]	@ movhi
257*4882a593Smuzhiyun	strh	r3, [r2, #16]	@ movhi
258*4882a593Smuzhiyun	strh	r3, [r2, #18]	@ movhi
259*4882a593Smuzhiyun	strh	r3, [r2, #428]	@ movhi
260*4882a593Smuzhiyun.L32:
261*4882a593Smuzhiyun	ldr	r2, .L34
262*4882a593Smuzhiyun	movs	r1, #0
263*4882a593Smuzhiyun	add	r0, r2, #28
264*4882a593Smuzhiyun	strh	r4, [r0, r3, lsl #1]	@ movhi
265*4882a593Smuzhiyun	adds	r3, r3, #1
266*4882a593Smuzhiyun	cmp	r3, #100
267*4882a593Smuzhiyun	bne	.L32
268*4882a593Smuzhiyun	movs	r3, #32
269*4882a593Smuzhiyun	str	r1, [r2, #20]
270*4882a593Smuzhiyun	strh	r1, [r2, #6]	@ movhi
271*4882a593Smuzhiyun	strh	r3, [r2, #8]	@ movhi
272*4882a593Smuzhiyun	str	r1, [r2, #24]
273*4882a593Smuzhiyun	pop	{r4, pc}
274*4882a593Smuzhiyun.L35:
275*4882a593Smuzhiyun	.align	2
276*4882a593Smuzhiyun.L34:
277*4882a593Smuzhiyun	.word	.LANCHOR0
278*4882a593Smuzhiyun	.fnend
279*4882a593Smuzhiyun	.size	vad_preprocess_destroy, .-vad_preprocess_destroy
280*4882a593Smuzhiyun	.align	1
281*4882a593Smuzhiyun	.global	vad_preprocess_update_params
282*4882a593Smuzhiyun	.thumb
283*4882a593Smuzhiyun	.thumb_func
284*4882a593Smuzhiyun	.type	vad_preprocess_update_params, %function
285*4882a593Smuzhiyunvad_preprocess_update_params:
286*4882a593Smuzhiyun	.fnstart
287*4882a593Smuzhiyun	@ args = 0, pretend = 0, frame = 0
288*4882a593Smuzhiyun	@ frame_needed = 0, uses_anonymous_args = 0
289*4882a593Smuzhiyun	@ link register save eliminated.
290*4882a593Smuzhiyun	ldr	r3, .L37
291*4882a593Smuzhiyun	ldrsh	r3, [r3, #6]
292*4882a593Smuzhiyun	str	r3, [r0]
293*4882a593Smuzhiyun	bx	lr
294*4882a593Smuzhiyun.L38:
295*4882a593Smuzhiyun	.align	2
296*4882a593Smuzhiyun.L37:
297*4882a593Smuzhiyun	.word	.LANCHOR0
298*4882a593Smuzhiyun	.fnend
299*4882a593Smuzhiyun	.size	vad_preprocess_update_params, .-vad_preprocess_update_params
300*4882a593Smuzhiyun	.bss
301*4882a593Smuzhiyun	.align	2
302*4882a593Smuzhiyun.LANCHOR0 = . + 0
303*4882a593Smuzhiyun	.type	g_sound_thd, %object
304*4882a593Smuzhiyun	.size	g_sound_thd, 2
305*4882a593Smuzhiyung_sound_thd:
306*4882a593Smuzhiyun	.space	2
307*4882a593Smuzhiyun	.type	g_noise_level, %object
308*4882a593Smuzhiyun	.size	g_noise_level, 2
309*4882a593Smuzhiyung_noise_level:
310*4882a593Smuzhiyun	.space	2
311*4882a593Smuzhiyun	.type	g_vad_con_thd, %object
312*4882a593Smuzhiyun	.size	g_vad_con_thd, 2
313*4882a593Smuzhiyung_vad_con_thd:
314*4882a593Smuzhiyun	.space	2
315*4882a593Smuzhiyun	.type	g_noise_abs, %object
316*4882a593Smuzhiyun	.size	g_noise_abs, 2
317*4882a593Smuzhiyung_noise_abs:
318*4882a593Smuzhiyun	.space	2
319*4882a593Smuzhiyun	.type	g_signal_gain, %object
320*4882a593Smuzhiyun	.size	g_signal_gain, 2
321*4882a593Smuzhiyung_signal_gain:
322*4882a593Smuzhiyun	.space	2
323*4882a593Smuzhiyun	.type	g_xn_1, %object
324*4882a593Smuzhiyun	.size	g_xn_1, 2
325*4882a593Smuzhiyung_xn_1:
326*4882a593Smuzhiyun	.space	2
327*4882a593Smuzhiyun	.type	g_xn_2, %object
328*4882a593Smuzhiyun	.size	g_xn_2, 2
329*4882a593Smuzhiyung_xn_2:
330*4882a593Smuzhiyun	.space	2
331*4882a593Smuzhiyun	.type	g_yn_1, %object
332*4882a593Smuzhiyun	.size	g_yn_1, 2
333*4882a593Smuzhiyung_yn_1:
334*4882a593Smuzhiyun	.space	2
335*4882a593Smuzhiyun	.type	g_yn_2, %object
336*4882a593Smuzhiyun	.size	g_yn_2, 2
337*4882a593Smuzhiyung_yn_2:
338*4882a593Smuzhiyun	.space	2
339*4882a593Smuzhiyun	.type	g_sample_cnt, %object
340*4882a593Smuzhiyun	.size	g_sample_cnt, 2
341*4882a593Smuzhiyung_sample_cnt:
342*4882a593Smuzhiyun	.space	2
343*4882a593Smuzhiyun	.type	g_sum_abs_frm, %object
344*4882a593Smuzhiyun	.size	g_sum_abs_frm, 4
345*4882a593Smuzhiyung_sum_abs_frm:
346*4882a593Smuzhiyun	.space	4
347*4882a593Smuzhiyun	.type	frm_count, %object
348*4882a593Smuzhiyun	.size	frm_count, 4
349*4882a593Smuzhiyunfrm_count:
350*4882a593Smuzhiyun	.space	4
351*4882a593Smuzhiyun	.type	g_ave_abs_rec, %object
352*4882a593Smuzhiyun	.size	g_ave_abs_rec, 400
353*4882a593Smuzhiyung_ave_abs_rec:
354*4882a593Smuzhiyun	.space	400
355*4882a593Smuzhiyun	.type	g_vad_cnt, %object
356*4882a593Smuzhiyun	.size	g_vad_cnt, 2
357*4882a593Smuzhiyung_vad_cnt:
358*4882a593Smuzhiyun	.space	2
359*4882a593Smuzhiyun	.ident	"GCC: (GNU) 4.9 20150123 (prerelease)"
360*4882a593Smuzhiyun	.section	.note.GNU-stack,"",%progbits
361