1 .text 2 .p2align 2 3 .global ixheaacd_shiftrountine_with_rnd_eld 4 5 ixheaacd_shiftrountine_with_rnd_eld: 6 STMFD sp!, {r4-r12, r14} 7 MOV r4, #0x1f 8 ADD r12, r2, r3, LSL #1 9 MOV r9, #0x8000 10 SUBS r3, r3, #1 11 BMI S_WITH_R_L6 12 13 S_WITH_R_L5: 14 LDR r5, [r1, r3, LSL #2] @i2 = qmfImag[j] 15 LDR r7, [r0, r3, LSL #2] @r2 = qmfReal[j] 16 LDR r14, [r0], #4 @r1 = *qmfReal 17 LDR r10, [r1], #4 @i1 = *qmfImag 18 19 ADD r6, r5, r7 @*qmfImag++ = add32(i2, r2) 20 MVN r6, r6 @negate32(add32(i2, r2)) 21 ADD r6, r6 , #1 22 23 @SUB r5,r5,r7 @qmfReal[j] = sub32(i2, r2) 24 SUB r5, r7, r5 @qmfReal[j] = sub32(r2, i2) 25 26 ADD r7, r10, r14 @qmfImag[j] = add32(i1, r1) 27 MVN r7, r7 @negate32(add32(i1, r1)) 28 ADD r7, r7 , #1 29 30 @SUB r4,r10,r14 @*qmfReal++ = sub32(i1, r1) 31 SUB r4, r14, r10 @*qmfReal++ = sub32(r1, i1) 32 33 @STR r7,[r1,r3,LSL #2] 34 @STR r5,[r0,r3,LSL #2] 35 @STR r6,[r1],#4 36 @STR r4,[r0],#4 37 38 39 40 @LDRD r4,[r0],#8 @DEBUG 41 42 @LDRD r6,[r1],#8 43 MOVS r10, r4, ASR #0x16 @Right shift by 22 to check the overflow ( is not AAC_ELD right shifted by 21) 44 CMNLT r10, #1 @Check r4 is overflow or not 45 46 MOVLT r4, #0x80000000 @saturate value if r4 is overflowed 47 MVNGT r4, #0x80000000 48 MOVEQ r4, r4, LSL #9 @shift by 9(hardcoded value) if not AAC_ELD left shifted by 10 49 50 MOVS r10, r5, ASR #0x16 51 QADD r4, r4, r9 52 CMNLT r10, #1 53 MOV r4, r4, ASR #16 54 MOVLT r5, #0x80000000 55 MVNGT r5, #0x80000000 56 MOVEQ r5, r5, LSL #9 57 MOV r14, r3, lsl #1 58 59 60 MOVS r10, r6, ASR #0x16 61 QADD r5, r5, r9 62 CMNLT r10, #1 63 MOV r5, r5, ASR #16 64 MOVLT r6, #0x80000000 65 @STRH r5,[r2],#2 66 STRH r5, [r2, r14] 67 MVNGT r6, #0x80000000 68 MOVEQ r6, r6, LSL #9 69 70 MOVS r10, r7, ASR #0x16 71 QADD r6, r6, r9 72 CMNLT r10, #1 73 MOV r6, r6, ASR #16 74 MOVLT r7, #0x80000000 75 MVNGT r7, #0x80000000 76 MOVEQ r7, r7, LSL #9 77 78 QADD r7, r7, r9 79 STRH r4, [r2], #2 80 81 MOV r7, r7, ASR #16 82 83 @STRH r7,[r12],#2 84 STRH r7, [r12, r14] 85 SUBS r3, r3, #2 86 STRH r6, [r12], #2 87 BGE S_WITH_R_L5 88 S_WITH_R_L6: 89 LDMFD sp!, {r4-r12, r15} 90 91 92 93