@/* @ ** 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. @ */ @ @Word32 Dot_product12( /* (o) Q31: normalized result (1 < val <= -1) */ @ Word16 x[], /* (i) 12bits: x vector */ @ Word16 y[], /* (i) 12bits: y vector */ @ Word16 lg, /* (i) : vector length */ @ Word16 * exp /* (o) : exponent of result (0..+30) */ @) @**************************************************************** @ x[] --- r0 @ y[] --- r1 @ lg --- r2 @ *exp --- r3 .section .text .global Dot_product12_asm Dot_product12_asm: STMFD r13!, {r4 - r12, r14} MOV r4, #0 @ L_sum = 0 MOV r5, #0 @ i = 0 LOOP: LDR r6, [r0], #4 LDR r7, [r1], #4 LDR r8, [r0], #4 SMLABB r4, r6, r7, r4 LDR r9, [r1], #4 SMLATT r4, r6, r7, r4 LDR r6, [r0], #4 SMLABB r4, r8, r9, r4 LDR r7, [r1], #4 SMLATT r4, r8, r9, r4 LDR r8, [r0], #4 SMLABB r4, r6, r7, r4 LDR r9, [r1], #4 SMLATT r4, r6, r7, r4 ADD r5, r5, #8 SMLABB r4, r8, r9, r4 CMP r5, r2 SMLATT r4, r8, r9, r4 BLT LOOP MOV r12, r4, LSL #1 ADD r12, r12, #1 @ L_sum = (L_sum << 1) + 1 MOV r4, r12 CMP r12, #0 RSBLT r4, r12, #0 CLZ r10, r4 SUB r10, r10, #1 @ sft = norm_l(L_sum) MOV r0, r12, LSL r10 @ L_sum = L_sum << sft RSB r11, r10, #30 @ *exp = 30 - sft STRH r11, [r3] Dot_product12_end: LDMFD r13!, {r4 - r12, r15} @ENDFUNC .end