@/* | |
@ ** Copyright 2003-2010, VisualOn, Inc. | |
@ ** | |
@ ** Licensed under the Apache License, Version 2.0 (the "License"); | |
@ ** you may not use this file except in compliance with the License. | |
@ ** You may obtain a copy of the License at | |
@ ** | |
@ ** http://www.apache.org/licenses/LICENSE-2.0 | |
@ ** | |
@ ** Unless required by applicable law or agreed to in writing, software | |
@ ** distributed under the License is distributed on an "AS IS" BASIS, | |
@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
@ ** See the License for the specific language governing permissions and | |
@ ** limitations under the License. | |
@ */ | |
@**********************************************************************/ | |
@void Syn_filt( | |
@ Word16 a[], /* (i) Q12 : a[m+1] prediction coefficients */ | |
@ Word16 x[], /* (i) : input signal */ | |
@ Word16 y[], /* (o) : output signal */ | |
@ Word16 mem[], /* (i/o) : memory associated with this filtering. */ | |
@) | |
@*********************************************************************** | |
@ a[] --- r0 | |
@ x[] --- r1 | |
@ y[] --- r2 | |
@ mem[] --- r3 | |
@ m --- 16 lg --- 80 update --- 1 | |
.section .text | |
.global Syn_filt_asm | |
.extern voAWB_Copy | |
Syn_filt_asm: | |
STMFD r13!, {r4 - r12, r14} | |
SUB r13, r13, #700 @ y_buf[L_FRAME16k + M16k] | |
MOV r4, r3 @ copy mem[] address | |
MOV r5, r13 @ copy yy = y_buf address | |
@ for(i = 0@ i < m@ i++) | |
@{ | |
@ *yy++ = mem[i]@ | |
@} | |
LDRH r6, [r4], #2 | |
LDRH r7, [r4], #2 | |
LDRH r8, [r4], #2 | |
LDRH r9, [r4], #2 | |
LDRH r10, [r4], #2 | |
LDRH r11, [r4], #2 | |
LDRH r12, [r4], #2 | |
LDRH r14, [r4], #2 | |
STRH r6, [r5], #2 | |
STRH r7, [r5], #2 | |
STRH r8, [r5], #2 | |
STRH r9, [r5], #2 | |
STRH r10, [r5], #2 | |
STRH r11, [r5], #2 | |
STRH r12, [r5], #2 | |
STRH r14, [r5], #2 | |
LDRH r6, [r4], #2 | |
LDRH r7, [r4], #2 | |
LDRH r8, [r4], #2 | |
LDRH r9, [r4], #2 | |
LDRH r10, [r4], #2 | |
LDRH r11, [r4], #2 | |
LDRH r12, [r4], #2 | |
LDRH r14, [r4], #2 | |
STRH r6, [r5], #2 | |
STRH r7, [r5], #2 | |
STRH r8, [r5], #2 | |
STRH r9, [r5], #2 | |
STRH r10, [r5], #2 | |
STRH r11, [r5], #2 | |
STRH r12, [r5], #2 | |
STRH r14, [r5], #2 | |
LDRSH r5, [r0] @ load a[0] | |
MOV r8, #0 @ i = 0 | |
MOV r5, r5, ASR #1 @ a0 = a[0] >> 1 | |
@MOV r4, r13 | |
@ load all a[] | |
LDR r14, =0xffff | |
LDRSH r6, [r0, #2] @ load a[1] | |
LDRSH r7, [r0, #4] @ load a[2] | |
LDRSH r9, [r0, #6] @ load a[3] | |
LDRSH r11,[r0, #8] @ load a[4] | |
AND r6, r6, r14 | |
AND r9, r9, r14 | |
ORR r10, r6, r7, LSL #16 @ -a[2] -- -a[1] | |
ORR r12, r9, r11, LSL #16 @ -a[4] -- -a[3] | |
STR r10, [r13, #-4] | |
STR r12, [r13, #-8] | |
LDRSH r6, [r0, #10] @ load a[5] | |
LDRSH r7, [r0, #12] @ load a[6] | |
LDRSH r9, [r0, #14] @ load a[7] | |
LDRSH r11,[r0, #16] @ load a[8] | |
AND r6, r6, r14 | |
AND r9, r9, r14 | |
ORR r10, r6, r7, LSL #16 @ -a[6] -- -a[5] | |
ORR r12, r9, r11, LSL #16 @ -a[8] -- -a[7] | |
STR r10, [r13, #-12] | |
STR r12, [r13, #-16] | |
LDRSH r6, [r0, #18] @ load a[9] | |
LDRSH r7, [r0, #20] @ load a[10] | |
LDRSH r9, [r0, #22] @ load a[11] | |
LDRSH r11,[r0, #24] @ load a[12] | |
AND r6, r6, r14 | |
AND r9, r9, r14 | |
ORR r10, r6, r7, LSL #16 @ -a[10] -- -a[9] | |
ORR r12, r9, r11, LSL #16 @ -a[12] -- -a[11] | |
STR r10, [r13, #-20] | |
STR r12, [r13, #-24] | |
LDRSH r6, [r0, #26] @ load a[13] | |
LDRSH r7, [r0, #28] @ load a[14] | |
LDRSH r9, [r0, #30] @ load a[15] | |
LDRSH r11,[r0, #32] @ load a[16] | |
AND r6, r6, r14 | |
AND r9, r9, r14 | |
ORR r10, r6, r7, LSL #16 @ -a[14] -- -a[13] | |
ORR r12, r9, r11, LSL #16 @ -a[16] -- -a[15] | |
STR r10, [r13, #-28] | |
STR r12, [r13, #-32] | |
ADD r4, r13, #32 | |
LOOP: | |
LDRSH r6, [r1], #2 @ load x[i] | |
ADD r10, r4, r8, LSL #1 @ temp_p = yy + i | |
MUL r0, r5, r6 @ L_tmp = x[i] * a0 | |
@ for(j = 1@ j <= m, j+=8) | |
LDR r7, [r13, #-4] @ -a[2] -a[1] | |
LDRSH r9, [r10, #-2] @ *(temp_p - 1) | |
LDRSH r12, [r10, #-4] @ *(temp_p - 2) | |
SMULBB r14, r9, r7 @ -a[1] * (*(temp_p -1)) | |
LDRSH r6, [r10, #-6] @ *(temp_p - 3) | |
SMLABT r14, r12, r7, r14 @ -a[2] * (*(temp_p - 2)) | |
LDR r7, [r13, #-8] @ -a[4] -a[3] | |
LDRSH r11, [r10, #-8] @ *(temp_p - 4) | |
SMLABB r14, r6, r7, r14 @ -a[3] * (*(temp_p -3)) | |
LDRSH r9, [r10, #-10] @ *(temp_p - 5) | |
SMLABT r14, r11, r7, r14 @ -a[4] * (*(temp_p -4)) | |
LDR r7, [r13, #-12] @ -a[6] -a[5] | |
LDRSH r12, [r10, #-12] @ *(temp_p - 6) | |
SMLABB r14, r9, r7, r14 @ -a[5] * (*(temp_p -5)) | |
LDRSH r6, [r10, #-14] @ *(temp_p - 7) | |
SMLABT r14, r12, r7, r14 @ -a[6] * (*(temp_p - 6)) | |
LDR r7, [r13, #-16] @ -a[8] -a[7] | |
LDRSH r11, [r10, #-16] @ *(temp_p - 8) | |
SMLABB r14, r6, r7, r14 @ -a[7] * (*(temp_p -7)) | |
LDRSH r9, [r10, #-18] @ *(temp_p - 9) | |
SMLABT r14, r11, r7, r14 @ -a[8] * (*(temp_p -8)) | |
LDR r7, [r13, #-20] @ -a[10] -a[9] | |
LDRSH r12, [r10, #-20] @ *(temp_p - 10) | |
SMLABB r14, r9, r7, r14 @ -a[9] * (*(temp_p -9)) | |
LDRSH r6, [r10, #-22] @ *(temp_p - 11) | |
SMLABT r14, r12, r7, r14 @ -a[10] * (*(temp_p - 10)) | |
LDR r7, [r13, #-24] @ -a[12] -a[11] | |
LDRSH r11, [r10, #-24] @ *(temp_p - 12) | |
SMLABB r14, r6, r7, r14 @ -a[11] * (*(temp_p -11)) | |
LDRSH r9, [r10, #-26] @ *(temp_p - 13) | |
SMLABT r14, r11, r7, r14 @ -a[12] * (*(temp_p -12)) | |
LDR r7, [r13, #-28] @ -a[14] -a[13] | |
LDRSH r12, [r10, #-28] @ *(temp_p - 14) | |
SMLABB r14, r9, r7, r14 @ -a[13] * (*(temp_p -13)) | |
LDRSH r6, [r10, #-30] @ *(temp_p - 15) | |
SMLABT r14, r12, r7, r14 @ -a[14] * (*(temp_p - 14)) | |
LDR r7, [r13, #-32] @ -a[16] -a[15] | |
LDRSH r11, [r10, #-32] @ *(temp_p - 16) | |
SMLABB r14, r6, r7, r14 @ -a[15] * (*(temp_p -15)) | |
SMLABT r14, r11, r7, r14 @ -a[16] * (*(temp_p -16)) | |
RSB r14, r14, r0 | |
MOV r7, r14, LSL #4 @ L_tmp <<=4 | |
ADD r8, r8, #1 | |
ADD r14, r7, #0x8000 | |
MOV r7, r14, ASR #16 @ (L_tmp + 0x8000) >> 16 | |
CMP r8, #80 | |
STRH r7, [r10] @ yy[i] | |
STRH r7, [r2], #2 @ y[i] | |
BLT LOOP | |
@ update mem[] | |
ADD r5, r13, #160 @ yy[64] address | |
MOV r1, r3 | |
MOV r0, r5 | |
MOV r2, #16 | |
BL voAWB_Copy | |
Syn_filt_asm_end: | |
ADD r13, r13, #700 | |
LDMFD r13!, {r4 - r12, r15} | |
@ENDFUNC | |
.END | |