117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@/* 217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** Copyright 2003-2010, VisualOn, Inc. 317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** 417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** Licensed under the Apache License, Version 2.0 (the "License"); 517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** you may not use this file except in compliance with the License. 617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** You may obtain a copy of the License at 717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** 817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** http://www.apache.org/licenses/LICENSE-2.0 917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** 1017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** Unless required by applicable law or agreed to in writing, software 1117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** distributed under the License is distributed on an "AS IS" BASIS, 1217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** See the License for the specific language governing permissions and 1417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ ** limitations under the License. 1517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ */ 1617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 1717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 1817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@*void Convolve ( 1917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@* Word16 x[], /* (i) : input vector */ 2017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@* Word16 h[], /* (i) : impulse response */ 2117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@* Word16 y[], /* (o) : output vector */ 2217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@* Word16 L /* (i) : vector size */ 2317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@*) 2417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ r0 --- x[] 2517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ r1 --- h[] 2617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ r2 --- y[] 2717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong@ r3 --- L 2817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 2917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong .section .text 3017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong .global Convolve_asm 3117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 3217299ab50ceb70d904e610e3b2d7fb2361a11e03James DongConvolve_asm: 3317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 3417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong STMFD r13!, {r4 - r12, r14} 3517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r3, #0 @ n 3617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r11, #0x8000 3717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 3817299ab50ceb70d904e610e3b2d7fb2361a11e03James DongLOOP: 3917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r4, r1, r3, LSL #1 @ tmpH address 4017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r5, r3, #1 @ i = n + 1 4117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r6, r0 @ tmpX = x 4217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 4317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 4417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong SUB r5, r5, #1 4517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MUL r8, r9, r10 4617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 4717299ab50ceb70d904e610e3b2d7fb2361a11e03James DongLOOP1: 4817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong CMP r5, #0 4917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong BLE L1 5017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 5117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 5217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 @ *tmpX++ 5317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 @ *tmpH-- 5417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 5517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 5617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 5717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 5817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 @ *tmpX++ 5917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 @ *tmpH-- 6017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 6117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong SUBS r5, r5, #4 6217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 6317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 6417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong B LOOP1 6517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 6617299ab50ceb70d904e610e3b2d7fb2361a11e03James DongL1: 6717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 6817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r5, r11, r8, LSL #1 6917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r5, r5, LSR #16 @extract_h(s) 7017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r3, r3, #1 7117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong STRH r5, [r2], #2 @y[n] 7217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 7317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 7417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r4, r1, r3, LSL #1 @tmpH address 7517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r5, r3, #1 7617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r6, r0 7717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 7817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 7917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 8017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 8117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 8217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MUL r8, r9, r10 8317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong SUB r5, r5, #2 8417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 8517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 8617299ab50ceb70d904e610e3b2d7fb2361a11e03James DongLOOP2: 8717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong CMP r5, #0 8817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong BLE L2 8917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 9017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 9117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 @ *tmpX++ 9217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 @ *tmpH-- 9317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 9417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 9517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 9617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 9717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 @ *tmpX++ 9817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 @ *tmpH-- 9917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 10017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong SUBS r5, r5, #4 10117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 10217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong B LOOP2 10317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 10417299ab50ceb70d904e610e3b2d7fb2361a11e03James DongL2: 10517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r8, r11, r8, LSL #1 10617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r8, r8, LSR #16 @extract_h(s) 10717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r3, r3, #1 10817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong STRH r8, [r2], #2 @y[n] 10917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 11017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r4, r1, r3, LSL #1 11117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r5, r3, #1 11217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r6, r0 11317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 11417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 11517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 11617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 11717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MUL r8, r9, r10 11817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 11917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 12017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 12117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong SUB r5, r5, #3 12217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 12317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 12417299ab50ceb70d904e610e3b2d7fb2361a11e03James DongLOOP3: 12517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong CMP r5, #0 12617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong BLE L3 12717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 12817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 12917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 @ *tmpX++ 13017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 @ *tmpH-- 13117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 13217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 13317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 13417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 13517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 @ *tmpX++ 13617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 @ *tmpH-- 13717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 13817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong SUBS r5, r5, #4 13917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 14017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong B LOOP3 14117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 14217299ab50ceb70d904e610e3b2d7fb2361a11e03James DongL3: 14317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r8, r11, r8, LSL #1 14417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r8, r8, LSR #16 @extract_h(s) 14517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r3, r3, #1 14617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong STRH r8, [r2], #2 @y[n] 14717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 14817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r5, r3, #1 @ i = n + 1 14917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r4, r1, r3, LSL #1 @ tmpH address 15017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r6, r0 15117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r8, #0 15217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 15317299ab50ceb70d904e610e3b2d7fb2361a11e03James DongLOOP4: 15417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong CMP r5, #0 15517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong BLE L4 15617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 15717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 15817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 @ *tmpX++ 15917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 @ *tmpH-- 16017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 16117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 16217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r9, [r6], #2 @ *tmpX++ 16317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r10, [r4], #-2 @ *tmpH-- 16417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r12, [r6], #2 @ *tmpX++ 16517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDRSH r14, [r4], #-2 @ *tmpH-- 16617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r9, r10, r8 16717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong SUBS r5, r5, #4 16817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MLA r8, r12, r14, r8 16917299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong B LOOP4 17017299ab50ceb70d904e610e3b2d7fb2361a11e03James DongL4: 17117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r5, r11, r8, LSL #1 17217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong MOV r5, r5, LSR #16 @extract_h(s) 17317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong ADD r3, r3, #1 17417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong STRH r5, [r2], #2 @y[n] 17517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 17617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong CMP r3, #64 17717299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong BLT LOOP 17817299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 17917299ab50ceb70d904e610e3b2d7fb2361a11e03James DongConvolve_asm_end: 18017299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 18117299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong LDMFD r13!, {r4 - r12, r15} 18217299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 18317299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong @ENDFUNC 18417299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong .END 18517299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 18617299ab50ceb70d904e610e3b2d7fb2361a11e03James Dong 187