@/* | |
@ ** 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 Pred_lt4( | |
@ Word16 exc[], /* in/out: excitation buffer */ | |
@ Word16 T0, /* input : integer pitch lag */ | |
@ Word16 frac, /* input : fraction of lag */ | |
@ Word16 L_subfr /* input : subframe size */ | |
@ ) | |
@****************************** | |
@ ARM Register | |
@****************************** | |
@ r0 --- exc[] | |
@ r1 --- T0 | |
@ r2 --- frac | |
@ r3 --- L_subfr | |
.section .text | |
.global pred_lt4_asm | |
.extern inter4_2 | |
pred_lt4_asm: | |
STMFD r13!, {r4 - r12, r14} | |
RSB r4, r1, #0 @-T0 | |
RSB r2, r2, #0 @frac = -frac | |
ADD r5, r0, r4, LSL #1 @x = exc - T0 | |
CMP r2, #0 | |
ADDLT r2, r2, #4 @frac += UP_SAMP | |
SUBLT r5, r5, #2 @x-- | |
SUB r5, r5, #30 @x -= 15 | |
RSB r4, r2, #3 @k = 3 - frac | |
LDR r6, Table | |
MOV r8, r4, LSL #6 | |
@MOV r7, #0 @j = 0 | |
ADD r8, r6, r8 @ptr2 = &(inter4_2[k][0]) | |
MOV r1, r5 | |
MOV r5, #0x8000 | |
MOV r14, #21 | |
@ used register | |
@r0 --- exc[] r1 --- x r7 --- j r8 --- ptr2 r5 --- 0x8000 | |
THREE_LOOP: | |
@MOV r1, r5 @ptr1 = x | |
MOV r2, r8 @ptr = ptr2 | |
LDR r3, [r2], #4 @h[0], h[1] | |
LDRSH r4, [r1], #2 @x[0] | |
LDRSH r6, [r1], #2 @x[1] | |
LDRSH r9, [r1], #2 @x[2] | |
SMULBB r10, r4, r3 @x[0] * h[0] | |
SMULBB r11, r6, r3 @x[1] * h[0] | |
SMULBB r12, r9, r3 @x[2] * h[0] | |
LDRSH r4, [r1], #2 @x[3] | |
SMLABT r10, r6, r3, r10 @x[1] * h[1] | |
SMLABT r11, r9, r3, r11 @x[2] * h[1] | |
SMLABT r12, r4, r3, r12 @x[3] * h[1] | |
LDR r3, [r2], #4 @h[2], h[3] | |
LDRSH r6, [r1], #2 @x[4] | |
SMLABB r10, r9, r3, r10 @x[2] * h[2] | |
SMLABB r11, r4, r3, r11 @x[3] * h[2] | |
SMLABB r12, r6, r3, r12 @x[4] * h[2] | |
LDRSH r9, [r1], #2 @x[5] | |
SMLABT r10, r4, r3, r10 @x[3] * h[3] | |
SMLABT r11, r6, r3, r11 @x[4] * h[3] | |
SMLABT r12, r9, r3, r12 @x[5] * h[3] | |
LDR r3, [r2], #4 @h[4], h[5] | |
LDRSH r4, [r1], #2 @x[6] | |
SMLABB r10, r6, r3, r10 @x[4] * h[4] | |
SMLABB r11, r9, r3, r11 @x[5] * h[4] | |
SMLABB r12, r4, r3, r12 @x[6] * h[4] | |
LDRSH r6, [r1], #2 @x[7] | |
SMLABT r10, r9, r3, r10 @x[5] * h[5] | |
SMLABT r11, r4, r3, r11 @x[6] * h[5] | |
SMLABT r12, r6, r3, r12 @x[7] * h[5] | |
LDR r3, [r2], #4 @h[6], h[7] | |
LDRSH r9, [r1], #2 @x[8] | |
SMLABB r10, r4, r3, r10 @x[6] * h[6] | |
SMLABB r11, r6, r3, r11 @x[7] * h[6] | |
SMLABB r12, r9, r3, r12 @x[8] * h[6] | |
LDRSH r4, [r1], #2 @x[9] | |
SMLABT r10, r6, r3, r10 @x[7] * h[7] | |
SMLABT r11, r9, r3, r11 @x[8] * h[7] | |
SMLABT r12, r4, r3, r12 @x[9] * h[7] | |
LDR r3, [r2], #4 @h[8], h[9] | |
LDRSH r6, [r1], #2 @x[10] | |
SMLABB r10, r9, r3, r10 @x[8] * h[8] | |
SMLABB r11, r4, r3, r11 @x[9] * h[8] | |
SMLABB r12, r6, r3, r12 @x[10] * h[8] | |
LDRSH r9, [r1], #2 @x[11] | |
SMLABT r10, r4, r3, r10 @x[9] * h[9] | |
SMLABT r11, r6, r3, r11 @x[10] * h[9] | |
SMLABT r12, r9, r3, r12 @x[11] * h[9] | |
LDR r3, [r2], #4 @h[10], h[11] | |
LDRSH r4, [r1], #2 @x[12] | |
SMLABB r10, r6, r3, r10 @x[10] * h[10] | |
SMLABB r11, r9, r3, r11 @x[11] * h[10] | |
SMLABB r12, r4, r3, r12 @x[12] * h[10] | |
LDRSH r6, [r1], #2 @x[13] | |
SMLABT r10, r9, r3, r10 @x[11] * h[11] | |
SMLABT r11, r4, r3, r11 @x[12] * h[11] | |
SMLABT r12, r6, r3, r12 @x[13] * h[11] | |
LDR r3, [r2], #4 @h[12], h[13] | |
LDRSH r9, [r1], #2 @x[14] | |
SMLABB r10, r4, r3, r10 @x[12] * h[12] | |
SMLABB r11, r6, r3, r11 @x[13] * h[12] | |
SMLABB r12, r9, r3, r12 @x[14] * h[12] | |
LDRSH r4, [r1], #2 @x[15] | |
SMLABT r10, r6, r3, r10 @x[13] * h[13] | |
SMLABT r11, r9, r3, r11 @x[14] * h[13] | |
SMLABT r12, r4, r3, r12 @x[15] * h[13] | |
LDR r3, [r2], #4 @h[14], h[15] | |
LDRSH r6, [r1], #2 @x[16] | |
SMLABB r10, r9, r3, r10 @x[14] * h[14] | |
SMLABB r11, r4, r3, r11 @x[15] * h[14] | |
SMLABB r12, r6, r3, r12 @x[16] * h[14] | |
LDRSH r9, [r1], #2 @x[17] | |
SMLABT r10, r4, r3, r10 @x[15] * h[15] | |
SMLABT r11, r6, r3, r11 @x[16] * h[15] | |
SMLABT r12, r9, r3, r12 @x[17] * h[15] | |
LDR r3, [r2], #4 @h[16], h[17] | |
LDRSH r4, [r1], #2 @x[18] | |
SMLABB r10, r6, r3, r10 @x[16] * h[16] | |
SMLABB r11, r9, r3, r11 @x[17] * h[16] | |
SMLABB r12, r4, r3, r12 @x[18] * h[16] | |
LDRSH r6, [r1], #2 @x[19] | |
SMLABT r10, r9, r3, r10 @x[17] * h[17] | |
SMLABT r11, r4, r3, r11 @x[18] * h[17] | |
SMLABT r12, r6, r3, r12 @x[19] * h[17] | |
LDR r3, [r2], #4 @h[18], h[19] | |
LDRSH r9, [r1], #2 @x[20] | |
SMLABB r10, r4, r3, r10 @x[18] * h[18] | |
SMLABB r11, r6, r3, r11 @x[19] * h[18] | |
SMLABB r12, r9, r3, r12 @x[20] * h[18] | |
LDRSH r4, [r1], #2 @x[21] | |
SMLABT r10, r6, r3, r10 @x[19] * h[19] | |
SMLABT r11, r9, r3, r11 @x[20] * h[19] | |
SMLABT r12, r4, r3, r12 @x[21] * h[19] | |
LDR r3, [r2], #4 @h[20], h[21] | |
LDRSH r6, [r1], #2 @x[22] | |
SMLABB r10, r9, r3, r10 @x[20] * h[20] | |
SMLABB r11, r4, r3, r11 @x[21] * h[20] | |
SMLABB r12, r6, r3, r12 @x[22] * h[20] | |
LDRSH r9, [r1], #2 @x[23] | |
SMLABT r10, r4, r3, r10 @x[21] * h[21] | |
SMLABT r11, r6, r3, r11 @x[22] * h[21] | |
SMLABT r12, r9, r3, r12 @x[23] * h[21] | |
LDR r3, [r2], #4 @h[22], h[23] | |
LDRSH r4, [r1], #2 @x[24] | |
SMLABB r10, r6, r3, r10 @x[22] * h[22] | |
SMLABB r11, r9, r3, r11 @x[23] * h[22] | |
SMLABB r12, r4, r3, r12 @x[24] * h[22] | |
LDRSH r6, [r1], #2 @x[25] | |
SMLABT r10, r9, r3, r10 @x[23] * h[23] | |
SMLABT r11, r4, r3, r11 @x[24] * h[23] | |
SMLABT r12, r6, r3, r12 @x[25] * h[23] | |
LDR r3, [r2], #4 @h[24], h[25] | |
LDRSH r9, [r1], #2 @x[26] | |
SMLABB r10, r4, r3, r10 @x[24] * h[24] | |
SMLABB r11, r6, r3, r11 @x[25] * h[24] | |
SMLABB r12, r9, r3, r12 @x[26] * h[24] | |
LDRSH r4, [r1], #2 @x[27] | |
SMLABT r10, r6, r3, r10 @x[25] * h[25] | |
SMLABT r11, r9, r3, r11 @x[26] * h[25] | |
SMLABT r12, r4, r3, r12 @x[27] * h[25] | |
LDR r3, [r2], #4 @h[26], h[27] | |
LDRSH r6, [r1], #2 @x[28] | |
SMLABB r10, r9, r3, r10 @x[26] * h[26] | |
SMLABB r11, r4, r3, r11 @x[27] * h[26] | |
SMLABB r12, r6, r3, r12 @x[28] * h[26] | |
LDRSH r9, [r1], #2 @x[29] | |
SMLABT r10, r4, r3, r10 @x[27] * h[27] | |
SMLABT r11, r6, r3, r11 @x[28] * h[27] | |
SMLABT r12, r9, r3, r12 @x[29] * h[27] | |
LDR r3, [r2], #4 @h[28], h[29] | |
LDRSH r4, [r1], #2 @x[30] | |
SMLABB r10, r6, r3, r10 @x[28] * h[28] | |
SMLABB r11, r9, r3, r11 @x[29] * h[28] | |
SMLABB r12, r4, r3, r12 @x[30] * h[28] | |
LDRSH r6, [r1], #2 @x[31] | |
SMLABT r10, r9, r3, r10 @x[29] * h[29] | |
SMLABT r11, r4, r3, r11 @x[30] * h[29] | |
SMLABT r12, r6, r3, r12 @x[31] * h[29] | |
LDR r3, [r2], #4 @h[30], h[31] | |
LDRSH r9, [r1], #2 @x[32] | |
SMLABB r10, r4, r3, r10 @x[30] * h[30] | |
SMLABB r11, r6, r3, r11 @x[31] * h[30] | |
SMLABB r12, r9, r3, r12 @x[32] * h[30] | |
LDRSH r4, [r1], #-60 @x[33] | |
SMLABT r10, r6, r3, r10 @x[31] * h[31] | |
SMLABT r11, r9, r3, r11 @x[32] * h[31] | |
SMLABT r12, r4, r3, r12 @x[33] * h[31] | |
@SSAT r10, #32, r10, LSL #2 | |
@SSAT r11, #32, r11, LSL #2 | |
@SSAT r12, #32, r12, LSL #2 | |
MOV r10, r10, LSL #1 | |
MOV r11, r11, LSL #1 | |
MOV r12, r12, LSL #1 | |
QADD r10, r10, r10 | |
QADD r11, r11, r11 | |
QADD r12, r12, r12 | |
QADD r10, r10, r5 | |
QADD r11, r11, r5 | |
QADD r12, r12, r5 | |
SUBS r14, r14, #1 | |
MOV r10, r10, ASR #16 | |
MOV r11, r11, ASR #16 | |
MOV r12, r12, ASR #16 | |
STRH r10, [r0], #2 | |
STRH r11, [r0], #2 | |
STRH r12, [r0], #2 | |
BNE THREE_LOOP | |
MOV r2, r8 @ptr = ptr2 | |
Last2LOOP: | |
LDR r3, [r2], #4 @h[0], h[1] | |
LDRSH r4, [r1], #2 @x[0] | |
LDRSH r6, [r1], #2 @x[1] | |
LDRSH r9, [r1], #2 @x[2] | |
SMULBB r10, r4, r3 @x[0] * h[0] | |
SMULBB r11, r6, r3 @x[1] * h[0] | |
SMLABT r10, r6, r3, r10 @x[1] * h[1] | |
SMLABT r11, r9, r3, r11 @x[2] * h[1] | |
LDR r3, [r2], #4 @h[2], h[3] | |
LDRSH r4, [r1], #2 @x[3] | |
LDRSH r6, [r1], #2 @x[4] | |
SMLABB r10, r9, r3, r10 @x[2] * h[2] | |
SMLABB r11, r4, r3, r11 @x[3] * h[2] | |
SMLABT r10, r4, r3, r10 @x[3] * h[3] | |
SMLABT r11, r6, r3, r11 @x[4] * h[3] | |
LDR r3, [r2], #4 @h[4], h[5] | |
LDRSH r9, [r1], #2 @x[5] | |
LDRSH r4, [r1], #2 @x[6] | |
SMLABB r10, r6, r3, r10 @x[4] * h[4] | |
SMLABB r11, r9, r3, r11 @x[5] * h[4] | |
SMLABT r10, r9, r3, r10 @x[5] * h[5] | |
SMLABT r11, r4, r3, r11 @x[6] * h[5] | |
LDR r3, [r2], #4 @h[6], h[7] | |
LDRSH r6, [r1], #2 @x[7] | |
LDRSH r9, [r1], #2 @x[8] | |
SMLABB r10, r4, r3, r10 @x[6] * h[6] | |
SMLABB r11, r6, r3, r11 @x[7] * h[6] | |
SMLABT r10, r6, r3, r10 @x[7] * h[7] | |
SMLABT r11, r9, r3, r11 @x[8] * h[7] | |
LDR r3, [r2], #4 @h[8], h[9] | |
LDRSH r4, [r1], #2 @x[9] | |
LDRSH r6, [r1], #2 @x[10] | |
SMLABB r10, r9, r3, r10 @x[8] * h[8] | |
SMLABB r11, r4, r3, r11 @x[9] * h[8] | |
SMLABT r10, r4, r3, r10 @x[9] * h[9] | |
SMLABT r11, r6, r3, r11 @x[10] * h[9] | |
LDR r3, [r2], #4 @h[10], h[11] | |
LDRSH r9, [r1], #2 @x[11] | |
LDRSH r4, [r1], #2 @x[12] | |
SMLABB r10, r6, r3, r10 @x[10] * h[10] | |
SMLABB r11, r9, r3, r11 @x[11] * h[10] | |
SMLABT r10, r9, r3, r10 @x[11] * h[11] | |
SMLABT r11, r4, r3, r11 @x[12] * h[11] | |
LDR r3, [r2], #4 @h[12], h[13] | |
LDRSH r6, [r1], #2 @x[13] | |
LDRSH r9, [r1], #2 @x[14] | |
SMLABB r10, r4, r3, r10 @x[12] * h[12] | |
SMLABB r11, r6, r3, r11 @x[13] * h[12] | |
SMLABT r10, r6, r3, r10 @x[13] * h[13] | |
SMLABT r11, r9, r3, r11 @x[14] * h[13] | |
LDR r3, [r2], #4 @h[14], h[15] | |
LDRSH r4, [r1], #2 @x[15] | |
LDRSH r6, [r1], #2 @x[16] | |
SMLABB r10, r9, r3, r10 @x[14] * h[14] | |
SMLABB r11, r4, r3, r11 @x[15] * h[14] | |
SMLABT r10, r4, r3, r10 @x[15] * h[15] | |
SMLABT r11, r6, r3, r11 @x[16] * h[15] | |
LDR r3, [r2], #4 @h[16], h[17] | |
LDRSH r9, [r1], #2 @x[17] | |
LDRSH r4, [r1], #2 @x[18] | |
SMLABB r10, r6, r3, r10 @x[16] * h[16] | |
SMLABB r11, r9, r3, r11 @x[17] * h[16] | |
SMLABT r10, r9, r3, r10 @x[17] * h[17] | |
SMLABT r11, r4, r3, r11 @x[18] * h[17] | |
LDR r3, [r2], #4 @h[18], h[19] | |
LDRSH r6, [r1], #2 @x[19] | |
LDRSH r9, [r1], #2 @x[20] | |
SMLABB r10, r4, r3, r10 @x[18] * h[18] | |
SMLABB r11, r6, r3, r11 @x[19] * h[18] | |
SMLABT r10, r6, r3, r10 @x[19] * h[19] | |
SMLABT r11, r9, r3, r11 @x[20] * h[19] | |
LDR r3, [r2], #4 @h[20], h[21] | |
LDRSH r4, [r1], #2 @x[21] | |
LDRSH r6, [r1], #2 @x[22] | |
SMLABB r10, r9, r3, r10 @x[20] * h[20] | |
SMLABB r11, r4, r3, r11 @x[21] * h[20] | |
SMLABT r10, r4, r3, r10 @x[21] * h[21] | |
SMLABT r11, r6, r3, r11 @x[22] * h[21] | |
LDR r3, [r2], #4 @h[22], h[23] | |
LDRSH r9, [r1], #2 @x[23] | |
LDRSH r4, [r1], #2 @x[24] | |
SMLABB r10, r6, r3, r10 @x[22] * h[22] | |
SMLABB r11, r9, r3, r11 @x[23] * h[22] | |
SMLABT r10, r9, r3, r10 @x[23] * h[23] | |
SMLABT r11, r4, r3, r11 @x[24] * h[23] | |
LDR r3, [r2], #4 @h[24], h[25] | |
LDRSH r6, [r1], #2 @x[25] | |
LDRSH r9, [r1], #2 @x[26] | |
SMLABB r10, r4, r3, r10 @x[24] * h[24] | |
SMLABB r11, r6, r3, r11 @x[25] * h[24] | |
SMLABT r10, r6, r3, r10 @x[25] * h[25] | |
SMLABT r11, r9, r3, r11 @x[26] * h[25] | |
LDR r3, [r2], #4 @h[26], h[27] | |
LDRSH r4, [r1], #2 @x[27] | |
LDRSH r6, [r1], #2 @x[28] | |
SMLABB r10, r9, r3, r10 @x[26] * h[26] | |
SMLABB r11, r4, r3, r11 @x[27] * h[26] | |
SMLABT r10, r4, r3, r10 @x[27] * h[27] | |
SMLABT r11, r6, r3, r11 @x[28] * h[27] | |
LDR r3, [r2], #4 @h[28], h[29] | |
LDRSH r9, [r1], #2 @x[29] | |
LDRSH r4, [r1], #2 @x[30] | |
SMLABB r10, r6, r3, r10 @x[28] * h[28] | |
SMLABB r11, r9, r3, r11 @x[29] * h[28] | |
SMLABT r10, r9, r3, r10 @x[29] * h[29] | |
SMLABT r11, r4, r3, r11 @x[30] * h[29] | |
LDR r3, [r2], #4 @h[30], h[31] | |
LDRSH r6, [r1], #2 @x[31] | |
LDRSH r9, [r1], #2 @x[32] | |
SMLABB r10, r4, r3, r10 @x[30] * h[30] | |
SMLABB r11, r6, r3, r11 @x[31] * h[30] | |
SMLABT r10, r6, r3, r10 @x[31] * h[31] | |
SMLABT r11, r9, r3, r11 @x[32] * h[31] | |
@SSAT r10, #32, r10, LSL #2 | |
@SSAT r11, #32, r11, LSL #2 | |
MOV r10, r10, LSL #1 | |
MOV r11, r11, LSL #1 | |
QADD r10, r10, r10 | |
QADD r11, r11, r11 | |
QADD r10, r10, r5 | |
QADD r11, r11, r5 | |
MOV r10, r10, ASR #16 | |
MOV r11, r11, ASR #16 | |
STRH r10, [r0], #2 | |
STRH r11, [r0], #2 | |
pred_lt4_end: | |
LDMFD r13!, {r4 - r12, r15} | |
Table: | |
.word inter4_2 | |
@ENDFUNC | |
.END | |