1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@/*
2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Copyright 2003-2010, VisualOn, Inc.
3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ **
4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Licensed under the Apache License, Version 2.0 (the "License");
5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** you may not use this file except in compliance with the License.
6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** You may obtain a copy of the License at
7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ **
8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ **     http://www.apache.org/licenses/LICENSE-2.0
9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ **
10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Unless required by applicable law or agreed to in writing, software
11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** distributed under the License is distributed on an "AS IS" BASIS,
12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** See the License for the specific language governing permissions and
14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** limitations under the License.
15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ */
16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@
17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@void Residu(
18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@	    Word16 a[],                           /* (i) Q12 : prediction coefficients */
19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@	    Word16 x[],                           /* (i)     : speech (values x[-m..-1] are needed */
20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@	    Word16 y[],                           /* (o) x2  : residual signal       */
21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@	    Word16 lg                             /* (i)     : size of filtering     */
22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@	   )
23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@a[] --- r0
24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@x[] --- r1
25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@y[] --- r2
26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@lg  --- r3
27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        .section  .text
29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	.global   Residu_opt
30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
31e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardResidu_opt:
32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        STMFD   r13!, {r4 - r12, r14}
34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        LDRH    r5, [r0], #2
36e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        LDRH    r6, [r0], #2
37b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard        ORR     r5, r6, r5, LSL #16                  @r5 --- a0, a1
38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
39e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        LDRH    r6, [r0], #2
40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r7, [r0], #2
41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ORR     r6, r7, r6, LSL #16                  @r6 --- a2, a3
42b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        LDRH    r7, [r0], #2
44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r8, [r0], #2
45e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ORR     r7, r8, r7, LSL #16                  @r7 --- a4, a5
46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r8, [r0], #2
48e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r9, [r0], #2
49e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ORR     r8, r9, r8, LSL #16                  @r8 --- a6, a7
50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r9, [r0], #2
52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r10, [r0], #2
53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ORR     r9, r10, r9, LSL #16                 @r9 --- a8, a9
54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r10, [r0], #2
56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r11, [r0], #2
57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ORR     r10, r11, r10, LSL #16               @r10 --- a10, a11
58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        LDRH    r11, [r0], #2
60e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r12, [r0], #2
61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ORR     r11, r12, r11, LSL #16               @r11 --- a12, a13
62b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r12, [r0], #2
64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r4, [r0], #2
65e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ORR     r12, r4, r12, LSL #16                @r12 --- a14, a15
66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
67b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
68b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	STMFD   r13!, {r8 - r12}                     @store r8-r12
69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDRH    r4, [r0], #2                         @load a16
70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        MOV     r14, r3, ASR #2                      @one loop get 4 outputs
71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ADD     r1, r1, #4
72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	MOV     r0, r2
73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	ORR     r14, r4, r14, LSL #16                @r14 --- loopnum, a16
74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardresidu_loop:
76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
77e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        LDR     r10, [r1], #-4                       @r10  --- x[3], x[2]
78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR     r2,  [r1], #-4                       @r2   --- x[1], x[0]
79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMULTB  r3, r5, r2                           @i1(0)  --- r3 = x[0] * a0
81b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard        SMULTT  r4, r5, r2                           @i2(0)  --- r4 = x[1] * a0
82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMULTB  r11, r5, r10                         @i3(0)  --- r11 = x[2] * a0
83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMULTT  r12, r5, r10                         @i4(0)  --- r12 = x[3] * a0
84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        SMLABB  r4, r5, r2, r4                       @i2(1)  --- r4 += x[0] * a1
86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        SMLABT  r11, r5, r2, r11                     @i3(1)  --- r11 += x[1] * a0
87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        SMLABB  r12, r5, r10, r12                    @i4(1)  --- r12 += x[2] * a1
88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB  r11, r6, r2, r11                     @i3(2)  --- r11 += x[0] * a2
90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT  r12, r6, r2, r12                     @i4(2)  --- r12 += x[1] * a2
91b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	SMLABB  r12, r6, r2, r12                     @i4(3)  --- r12 += x[0] * a3
92b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR     r2, [r1], #-4                        @r2 ---- x[-1], x[-2]
94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT  r3, r5, r2, r3                       @i1(1) --- r3 += x[-1] * a1
96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT  r4, r6, r2, r4                       @i2(2) --- r4 += x[-1] * a2
97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT  r11, r6, r2, r11                     @i3(3) --- r11 += x[-1] * a3
98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT  r12, r7, r2, r12                     @i4(4) --- r12 += x[-1] * a4
99b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard        SMLATB  r3, r6, r2, r3                       @i1(2) --- r3 += x[-2] * a2
100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r4, r6, r2, r4				@ i2	(3)
102e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB  r11,r7, r2, r11				@ i3	(4)
103e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r12,r7, r2, r12				@ i4	(5)
104b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r2,[r1],#-4
106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r3, r6, r2, r3				@ i1	(3)
107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r4, r7, r2, r4				@ i2	(4)
108e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r11,r7, r2, r11				@ i3	(5)
109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r12,r8, r2, r12				@ i4	(6)
110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r3, r7, r2, r3				@ i1	(4)
111e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r4, r7, r2, r4				@ i2	(5)
112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r11,r8, r2, r11				@ i3	(6)
113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r12,r8, r2, r12				@ i4	(7)
114b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r2,[r1],#-4
116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r3, r7, r2, r3				@ i1	(5)
117e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r4, r8, r2, r4				@ i2	(6)
118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r11,r8, r2, r11				@ i3	(7)
119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r12,r9, r2, r12				@ i4	(8)
120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r3, r8, r2, r3				@ i1	(6)
121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r4, r8, r2, r4				@ i2	(7)
122e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r11,r9, r2, r11				@ i3	(8)
123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r12,r9, r2, r12				@ i4	(9)
124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r10, [r13, #8]				@ [ a10 | a11]
125b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r2,[r1],#-4
127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r3, r8, r2, r3				@ i1	(7)
128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r4, r9, r2, r4				@ i2	(8)
129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r11,r9, r2, r11				@ i3	(9)
130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r12,r10, r2, r12			@ i4	(10)
131e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r3, r9, r2, r3				@ i1	(8)
132e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r4, r9, r2, r4				@ i2	(9)
133e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r11,r10, r2, r11			@ i3	(10)
134e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r12,r10, r2, r12			@ i4	(11)
135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r8, [r13, #12]				@ [ a12 | a13 ]
136b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r2,[r1],#-4
138e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r3, r9, r2, r3				@ i1	(9)
139e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r4, r10, r2, r4				@ i2	(10)
140e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r11,r10, r2, r11			@ i3	(11)
141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r12,r8, r2, r12				@ i4	(12)
142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r3, r10, r2, r3				@ i1	(10)
143e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r4, r10, r2, r4				@ i2	(11)
144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r11,r8, r2, r11				@ i3	(12)
145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r12,r8, r2, r12				@ i4	(13)
146e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r9, [r13, #16]				@ [ a14 | a15 ]
147b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r2,[r1],#-4
149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r3, r10, r2, r3				@ i1	(11)
150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r4, r8, r2, r4				@ i2	(12)
151e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r11,r8, r2, r11				@ i3	(13)
152e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r12,r9, r2, r12				@ i4	(14)
153e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r3, r8, r2, r3				@ i1	(12)
154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r4, r8, r2, r4				@ i2	(13)
155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r11,r9, r2, r11				@ i3	(14)
156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r12,r9, r2, r12				@ i4	(15)
157b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
158e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
159e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR	r2,[r1],#-4
160e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r3, r8, r2, r3				@ i1	(13)
161e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATT	r4, r9, r2, r4				@ i2	(14)
162e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r11,r9, r2, r11				@ i3	(15)
163e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r12,r14, r2, r12			@ i4	(16)
164e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLATB	r3, r9, r2, r3				@ i1	(14)
165e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r4, r9, r2, r4				@ i2	(15)
166e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r11,r14, r2, r11			@ i3	(16)
167e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR		r8, [r13]					@ [ a6 | a7 ]
168b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
169e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        LDR     r2,[r1],#44         		@ Change
170e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r3, r9, r2, r3
171e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABB	r3, r14, r2, r3
172e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SMLABT	r4, r14, r2, r4
173e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDR		r9, [r13, #4]				@ [ a8 | a9 ]
174b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
175b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
176b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r3,r3,r3
177b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r4,r4,r4
178b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r11,r11,r11
179b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r12,r12,r12
180b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
181b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r3,r3,r3
182b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r4,r4,r4
183b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r11,r11,r11
184b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r12,r12,r12
185b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
186b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r3,r3,r3
187b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r4,r4,r4
188b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r11,r11,r11
189b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r12,r12,r12
190b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
191b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r3,r3,r3
192b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r4,r4,r4
193b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r11,r11,r11
194b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QADD	r12,r12,r12
195b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
196b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	MOV	r2,#32768
197b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
198b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QDADD	r3,r2,r3
199b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QDADD	r4,r2,r4
200b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QDADD	r11,r2,r11
201b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	QDADD	r12,r2,r12
202b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
203b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
204e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	MOV	r3,r3,asr #16
205e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	MOV	r4,r4,asr #16
206e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	MOV	r11,r11,asr #16
207e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	MOV	r12,r12,asr #16
208b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
209e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	STRH	r3,[r0],#2
210e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	STRH	r4,[r0],#2
211e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	STRH	r11,[r0],#2
212e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	STRH	r12,[r0],#2
213b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
214e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	MOV	r2,r14,asr #16
215e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SUB	r14, r14, #0x10000
216e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	SUBS	r2,r2,#1
217b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	BNE	residu_loop
218e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgardend:
219b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard	LDMFD	r13!, {r8 -r12}
220e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard	LDMFD	r13!, {r4 -r12,pc}
221e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
222e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard        @ENDFUNC
223b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard        .END
224b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
225b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
226b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard
227e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
228e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard
229