| @/* |
| @ ** 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 |
| |
| |