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