1e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@/* 2e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Copyright 2003-2010, VisualOn, Inc. 3e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 4e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Licensed under the Apache License, Version 2.0 (the "License"); 5e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** you may not use this file except in compliance with the License. 6e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** You may obtain a copy of the License at 7e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 8e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** http://www.apache.org/licenses/LICENSE-2.0 9e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** 10e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** Unless required by applicable law or agreed to in writing, software 11e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** distributed under the License is distributed on an "AS IS" BASIS, 12e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** See the License for the specific language governing permissions and 14e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ ** limitations under the License. 15e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ */ 16e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 17e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 18e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ File: PrePostMDCT_v5.s 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Content: premdct and postmdct function armv5 assemble 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .section .text 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .global PreMDCT 26e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 27e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPreMDCT: 28e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard stmdb sp!, {r4 - r11, lr} 29b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 30e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r9, r0, r1, lsl #2 31e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r3, r9, #8 32e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard movs r1, r1, asr #2 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard beq PreMDCT_END 35b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 36e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPreMDCT_LOOP: 37e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r8, [r2], #4 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r9, [r2], #4 39b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 40e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldrd r4, [r0] 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldrd r6, [r3] 42b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 43e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r14, r11, r4, r8 @ MULHIGH(tr1, cosa) 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r10, r12, r7, r8 @ MULHIGH(ti1, cosa) 45b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 46e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r14, r8, r7, r9 @ MULHIGH(ti1, sina) 47b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard smull r7, r10, r4, r9 @ MULHIGH(tr1, sina) 48b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 49b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r11, r11, r8 @ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r7, r12, r10 @ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina) 51b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r8, [r2], #4 53e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r9, [r2], #4 54b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r14, r4, r6, r8 @ MULHIGH(tr2, cosa) 56e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r10, r12, r5, r8 @ MULHIGH(ti2, cosa) 57b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 58e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r14, r8, r5, r9 @ MULHIGH(ti2, sina) 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r5, r10, r6, r9 @ MULHIGH(tr2, sina) 60b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 61e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r8, r8, r4 62e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r9, r12, r10 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 64b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r6, r11 65b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 66b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard strd r6, [r0] 67e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard strd r8, [r3] 68b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard subs r1, r1, #1 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r3, r3, #8 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r0, r0, #8 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard bne PreMDCT_LOOP 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 74e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPreMDCT_END: 75e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldmia sp!, {r4 - r11, pc} 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard @ENDP @ |PreMDCT| 77b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .section .text 79e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .global PostMDCT 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 81e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPostMDCT: 82e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard stmdb sp!, {r4 - r11, lr} 83b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r9, r0, r1, lsl #2 85e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r3, r9, #8 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 87e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard movs r1, r1, asr #2 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard beq PostMDCT_END 89b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 90e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPostMDCT_LOOP: 91b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldr r8, [r2], #4 92e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r9, [r2], #4 93b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldrd r4, [r0] 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldrd r6, [r3] 96b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r14, r11, r4, r8 @ MULHIGH(tr1, cosa) 98e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r10, r12, r5, r8 @ MULHIGH(ti1, cosa) 99b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r14, r8, r5, r9 @ MULHIGH(ti1, sina) 101b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard smull r5, r10, r4, r9 @ MULHIGH(tr1, sina) 102b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 103b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard add r4, r11, r8 @ MULHIGH(cosa, tr1) + MULHIGH(sina, ti1)@ 104e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r11, r10, r12 @ MULHIGH(ti1, cosa) - MULHIGH(tr1, sina)@ 105b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 106e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r8, [r2], #4 @ 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r9, [r2], #4 108b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 109e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r14, r5, r6, r8 @ MULHIGH(tr2, cosa) 110e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r10, r12, r7, r8 @ MULHIGH(ti2, cosa) 111b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 112e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r14, r8, r7, r9 @ MULHIGH(ti2, sina) 113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard smull r7, r10, r6, r9 @ MULHIGH(tr2, sina) 114b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r6, r8, r5 @ MULHIGH(cosb, tr2) + MULHIGH(sinb, ti2)@ 116e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r5, r10, r12 @ MULHIGH(sinb, tr2) - MULHIGH(cosb, ti2)@ 117b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 118b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard mov r7, r11 119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 120e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard strd r4, [r0] 121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard strd r6, [r3] 122b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard subs r1, r1, #1 124e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r3, r3, #8 125e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard add r0, r0, #8 126e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard bne PostMDCT_LOOP 127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 128e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardPostMDCT_END: 129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldmia sp!, {r4 - r11, pc} 130e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard @ENDP @ |PostMDCT| 131891abc0ee089f2ba5b92dcc014e5efc2ef07f01eMartin Storsjo .end 132