1@/* 2@ ** Copyright 2003-2010, VisualOn, Inc. 3@ ** 4@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5@ ** you may not use this file except in compliance with the License. 6@ ** You may obtain a copy of the License at 7@ ** 8@ ** http://www.apache.org/licenses/LICENSE-2.0 9@ ** 10@ ** Unless required by applicable law or agreed to in writing, software 11@ ** distributed under the License is distributed on an "AS IS" BASIS, 12@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13@ ** See the License for the specific language governing permissions and 14@ ** limitations under the License. 15@ */ 16 17@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 18@ File: PrePostMDCT_v7.s 19@ 20@ Content: premdct and postmdct function armv7 assemble 21@ 22@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 23 24 .section .text 25 .global PreMDCT 26 27PreMDCT: 28 stmdb sp!, {r4 - r11, lr} 29 30 add r9, r0, r1, lsl #2 31 sub r3, r9, #32 32 33 movs r1, r1, asr #2 34 beq PreMDCT_END 35 36PreMDCT_LOOP: 37 VLD4.I32 {d0, d2, d4, d6}, [r2]! @ cosa = *csptr++@ sina = *csptr++@ 38 VLD4.I32 {d1, d3, d5, d7}, [r2]! @ cosb = *csptr++@ sinb = *csptr++@ 39 VLD2.I32 {d8, d9, d10, d11}, [r0] @ tr1 = *(buf0 + 0)@ ti2 = *(buf0 + 1)@ 40 VLD2.I32 {d13, d15}, [r3]! @ tr2 = *(buf1 - 1)@ ti1 = *(buf1 + 0)@ 41 VLD2.I32 {d12, d14}, [r3]! @ tr2 = *(buf1 - 1)@ ti1 = *(buf1 + 0)@ 42 43 VREV64.32 Q8, Q7 44 VREV64.32 Q9, Q6 45 46 47 VQDMULH.S32 Q10, Q0, Q4 @ MULHIGH(cosa, tr1) 48 VQDMULH.S32 Q11, Q1, Q8 @ MULHIGH(sina, ti1) 49 VQDMULH.S32 Q12, Q0, Q8 @ MULHIGH(cosa, ti1) 50 VQDMULH.S32 Q13, Q1, Q4 @ MULHIGH(sina, tr1) 51 52 VADD.S32 Q0, Q10, Q11 @ *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ 53 VSUB.S32 Q1, Q12, Q13 @ *buf0++ = MULHIGH(cosa, ti1) - MULHIGH(sina, tr1)@ 54 55 VST2.I32 {d0, d1, d2, d3}, [r0]! 56 sub r3, r3, #32 57 58 VQDMULH.S32 Q10, Q2, Q9 @ MULHIGH(cosb, tr2) 59 VQDMULH.S32 Q11, Q3, Q5 @ MULHIGH(sinb, ti2) 60 VQDMULH.S32 Q12, Q2, Q5 @ MULHIGH(cosb, ti2) 61 VQDMULH.S32 Q13, Q3, Q9 @ MULHIGH(sinb, tr2) 62 63 VADD.S32 Q0, Q10, Q11 @ MULHIGH(cosa, tr2) + MULHIGH(sina, ti2)@ 64 VSUB.S32 Q1, Q12, Q13 @ MULHIGH(cosa, ti2) - MULHIGH(sina, tr2)@ 65 66 VREV64.32 Q3, Q1 67 VREV64.32 Q2, Q0 68 69 VST2.I32 {d5, d7}, [r3]! 70 VST2.I32 {d4, d6}, [r3]! 71 72 subs r1, r1, #4 73 sub r3, r3, #64 74 bne PreMDCT_LOOP 75 76PreMDCT_END: 77 ldmia sp!, {r4 - r11, pc} 78 @ENDP @ |PreMDCT| 79 80 .section .text 81 .global PostMDCT 82 83PostMDCT: 84 stmdb sp!, {r4 - r11, lr} 85 86 add r9, r0, r1, lsl #2 87 sub r3, r9, #32 88 89 movs r1, r1, asr #2 90 beq PostMDCT_END 91 92PostMDCT_LOOP: 93 VLD4.I32 {d0, d2, d4, d6}, [r2]! @ cosa = *csptr++@ sina = *csptr++@ 94 VLD4.I32 {d1, d3, d5, d7}, [r2]! @ cosb = *csptr++@ sinb = *csptr++@ 95 VLD2.I32 {d8, d9, d10, d11}, [r0] @ tr1 = *(zbuf1 + 0)@ ti1 = *(zbuf1 + 1)@ 96 VLD2.I32 {d13, d15}, [r3]! @ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@ 97 VLD2.I32 {d12, d14}, [r3]! @ tr2 = *(zbuf2 - 1)@ ti2 = *(zbuf2 + 0)@ 98 99 VREV64.32 Q8, Q6 100 VREV64.32 Q9, Q7 101 102 VQDMULH.S32 Q10, Q0, Q4 @ MULHIGH(cosa, tr1) 103 VQDMULH.S32 Q11, Q1, Q5 @ MULHIGH(sina, ti1) 104 VQDMULH.S32 Q12, Q0, Q5 @ MULHIGH(cosa, ti1) 105 VQDMULH.S32 Q13, Q1, Q4 @ MULHIGH(sina, tr1) 106 107 VADD.S32 Q0, Q10, Q11 @ *buf0++ = MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ 108 VSUB.S32 Q5, Q13, Q12 @ *buf1-- = MULHIGH(sina, tr1) - MULHIGH(cosa, ti1)@ 109 110 VQDMULH.S32 Q10, Q2, Q8 @ MULHIGH(cosb, tr2) 111 VQDMULH.S32 Q11, Q3, Q9 @ MULHIGH(sinb, ti2) 112 VQDMULH.S32 Q12, Q2, Q9 @ MULHIGH(cosb, ti2) 113 VQDMULH.S32 Q13, Q3, Q8 @ MULHIGH(sinb, tr2) 114 115 VADD.S32 Q4, Q10, Q11 @ *buf1-- = MULHIGH(cosa, tr2) + MULHIGH(sina, ti2)@ 116 VSUB.S32 Q1, Q13, Q12 @ *buf0++ = MULHIGH(sina, tr2) - MULHIGH(cosa, ti2)@ 117 118 VREV64.32 Q2, Q4 119 VREV64.32 Q3, Q5 120 121 sub r3, r3, #32 122 VST2.I32 {d0, d1, d2, d3}, [r0]! 123 124 VST2.I32 {d5, d7}, [r3]! 125 VST2.I32 {d4, d6}, [r3]! 126 127 subs r1, r1, #4 128 sub r3, r3, #64 129 bne PostMDCT_LOOP 130 131PostMDCT_END: 132 ldmia sp!, {r4 - r11, pc} 133 134 @ENDP @ |PostMDCT| 135 .end