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: R4R8First_v7.s 19e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 20e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ Content: Radix8First and Radix4First function armv7 assemble 21e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@ 22e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 23e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 24e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .section .text 25e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .global Radix8First 262857b47a2731579772c76d46285660972c0ba23dBen Cheng .fnstart 27e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 28e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardRadix8First: 29e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard stmdb sp!, {r4 - r11, lr} 302857b47a2731579772c76d46285660972c0ba23dBen Cheng .save {r4 - r11, lr} 312857b47a2731579772c76d46285660972c0ba23dBen Cheng fstmfdd sp!, {d8 - d15} 322857b47a2731579772c76d46285660972c0ba23dBen Cheng .vsave {d8 - d15} 33e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 34e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldr r3, SQRT1_2 35e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard cmp r1, #0 36b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 37b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VDUP.I32 Q15, r3 38e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard beq Radix8First_END 39b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 40e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardRadix8First_LOOP: 41e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VLD1.I32 {d0, d1, d2, d3}, [r0]! 42e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VLD1.I32 {d8, d9, d10, d11}, [r0]! 43b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 44e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d4, d0, d1 @ r0 = buf[0] + buf[2]@i0 = buf[1] + buf[3]@ 45b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VSUB.S32 d5, d0, d1 @ r1 = buf[0] - buf[2]@i1 = buf[1] - buf[3]@ 46b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VSUB.S32 d7, d2, d3 @ r2 = buf[4] - buf[6]@i2 = buf[5] - buf[7]@ 47e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d6, d2, d3 @ r3 = buf[4] + buf[6]@i3 = buf[5] + buf[7]@ 48b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VREV64.I32 d7, d7 49b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 50e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 Q0, Q2, Q3 @ r4 = (r0 + r2)@i4 = (i0 + i2)@i6 = (i1 + r3)@r7 = (r1 + i3) 51e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 Q1, Q2, Q3 @ r5 = (r0 - r2)@i5 = (i0 - i2)@r6 = (r1 - i3)@i7 = (i1 - r3)@ 52e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 53b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VREV64.I32 d3, d3 54e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 55e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d4, d8, d9 @ r0 = buf[ 8] + buf[10]@i0 = buf[ 9] + buf[11]@ 56b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VSUB.S32 d7, d10, d11 @ r1 = buf[12] - buf[14]@i1 = buf[13] - buf[15]@ 57e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d6, d10, d11 @ r2 = buf[12] + buf[14]@i2 = buf[13] + buf[15]@ 58b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VREV64.I32 d7, d7 59e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 d5, d8, d9 @ r3 = buf[ 8] - buf[10]@i3 = buf[ 9] - buf[11]@ 60b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 61b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VTRN.32 d1, d3 62b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 63e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 Q4, Q2, Q3 @ t0 = (r0 + r2) >> 1@t1 = (i0 + i2) >> 1@i0 = i1 + r3@r2 = r1 + i3@ 64e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 Q5, Q2, Q3 @ t2 = (r0 - r2) >> 1@t3 = (i0 - i2) >> 1@r0 = r1 - i3@i2 = i1 - r3@ 65b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 66e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d3, d3 67b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 68b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VSHR.S32 d8, d8, #1 69e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSHR.S32 Q0, Q0, #1 70e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d10, d10 71e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VTRN.32 d11, d9 72e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSHR.S32 Q1, Q1, #1 73e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSHR.S32 d10, d10, #1 74e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d9, d9 75b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 76e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard sub r0, r0, #0x40 77b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 78e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d12, d0, d8 79b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VSUB.S32 d16, d0, d8 80e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d14, d2, d10 81e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 d18, d2, d10 82b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 83e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 d4, d11, d9 84e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d5, d11, d9 85b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 86e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d18, d18 87b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 88e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VQDMULH.S32 Q3, Q2, Q15 89e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VTRN.32 d14, d18 90e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VTRN.32 d6, d7 91b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VREV64.I32 d18, d18 92b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 93e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 d15, d3, d6 94e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d7, d7 95e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d19, d3, d6 96e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d13, d1, d7 97e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 d17, d1, d7 98b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 99e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d17, d17 100e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VTRN.32 d13, d17 101e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d17, d17 102b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 103b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard subs r1, r1, #1 104b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 105e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VST1.I32 {d12, d13, d14, d15}, [r0]! 106b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VST1.I32 {d16, d17, d18, d19}, [r0]! 107e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard bne Radix8First_LOOP 108b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 109e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardRadix8First_END: 1102857b47a2731579772c76d46285660972c0ba23dBen Cheng fldmfdd sp!, {d8 - d15} 111b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard ldmia sp!, {r4 - r11, pc} 112e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardSQRT1_2: 113e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .word 0x2d413ccd 114b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 115e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard @ENDP @ |Radix8First| 1162857b47a2731579772c76d46285660972c0ba23dBen Cheng .fnend 117b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 118e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .section .text 119e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard .global Radix4First 1202857b47a2731579772c76d46285660972c0ba23dBen Cheng .fnstart 121e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 122e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardRadix4First: 123e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard stmdb sp!, {r4 - r11, lr} 1242857b47a2731579772c76d46285660972c0ba23dBen Cheng .save {r4 - r11, lr} 1252857b47a2731579772c76d46285660972c0ba23dBen Cheng fstmfdd sp!, {d8 - d15} 1262857b47a2731579772c76d46285660972c0ba23dBen Cheng .vsave {d8 - d15} 127e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 128e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard cmp r1, #0 129e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard beq Radix4First_END 130b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 131e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardRadix4First_LOOP: 132b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VLD1.I32 {d0, d1, d2, d3}, [r0] 133b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 134b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VADD.S32 d4, d0, d1 @ r0 = buf[0] + buf[2]@ r1 = buf[1] + buf[3]@ 135e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 d5, d0, d1 @ r2 = buf[0] - buf[2]@ r3 = buf[1] - buf[3]@ 136e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 d7, d2, d3 @ r4 = buf[4] + buf[6]@ r5 = buf[5] + buf[7]@ 137e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 d6, d2, d3 @ r6 = buf[4] - buf[6]@ r7 = buf[5] - buf[7]@ 138b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 139b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard VREV64.I32 d7, d7 @ 140b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 141e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VADD.S32 Q4, Q2, Q3 142e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VSUB.S32 Q5, Q2, Q3 143b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 144e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d11, d11 145e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VTRN.32 d9, d11 146b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard subs r1, r1, #1 147e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VREV64.I32 d11, d11 148e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard VST1.I32 {d8, d9, d10, d11}, [r0]! 149e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 150e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard bne Radix4First_LOOP 151b676a05348e4c516fa8b57e33b10548e6142c3f8Mans Rullgard 152e2e838afcf03e603a41a0455846eaf9614537c16Mans RullgardRadix4First_END: 1532857b47a2731579772c76d46285660972c0ba23dBen Cheng fldmfdd sp!, {d8 - d15} 154e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard ldmia sp!, {r4 - r11, pc} 155e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard 156e2e838afcf03e603a41a0455846eaf9614537c16Mans Rullgard @ENDP @ |Radix4First| 1572857b47a2731579772c76d46285660972c0ba23dBen Cheng .fnend 158