You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

957 lines
22 KiB

/*
This file is part of FFTS -- The Fastest Fourier Transform in the South
Copyright (c) 2012, Anthony M. Blake <amb@anthonix.com>
Copyright (c) 2012, The University of Waikato
All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
* Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
* Neither the name of the organization nor the
names of its contributors may be used to endorse or promote products
derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
DISCLAIMED. IN NO EVENT SHALL ANTHONY M. BLAKE BE LIABLE FOR ANY
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
.align 4
#ifdef __APPLE__
.globl _neon_static_e_f
_neon_static_e_f:
#else
.globl neon_static_e_f
neon_static_e_f:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
ldr lr, [r0, #40] @ this is p->N
add r3, r1, #0
add r7, r1, lr
add r5, r7, lr
add r10, r5, lr
add r4, r10, lr
add r8, r4, lr
add r6, r8, lr
add r9, r6, lr
ldr r12, [r0]
add r1, r0, #0
add r0, r2, #0
ldr r2, [r1, #16] @ this is p->ee_ws
ldr r11, [r1, #28] @ this is p->i0
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_loop:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vsub.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vadd.f32 d31, d5, d2 @
vadd.f32 d28, d4, d3 @
vsub.f32 d30, d4, d3 @
vsub.f32 d5, d19, d14 @
vsub.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vadd.f32 d6, d30, d27 @
vadd.f32 d4, d18, d15 @
vadd.f32 d13, d19, d14 @
vsub.f32 d12, d18, d15 @
vadd.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vsub.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_loop
ldr r11, [r1, #12]
vld2.32 {q9}, [r5, :128]! @tag2
vld2.32 {q13}, [r3, :128]! @tag0
vld2.32 {q12}, [r4, :128]! @tag1
vld2.32 {q0}, [r7, :128]! @tag4
vsub.f32 q11, q13, q12
vld2.32 {q8}, [r6, :128]! @tag3
vadd.f32 q12, q13, q12
vsub.f32 q10, q9, q8
vadd.f32 q8, q9, q8
vadd.f32 q9, q12, q8
vsub.f32 d9, d23, d20 @
vadd.f32 d11, d23, d20 @
vsub.f32 q8, q12, q8
vadd.f32 d8, d22, d21 @
vsub.f32 d10, d22, d21 @
ldr r2, [r12], #4
vld1.32 {d20, d21}, [r11, :128]
ldr lr, [r12], #4
vtrn.32 q9, q4
add r2, r0, r2, lsl #2
vtrn.32 q8, q5
add lr, r0, lr, lsl #2
vswp d9,d10
vst1.32 {d8,d9,d10,d11}, [lr, :128]!
vld2.32 {q13}, [r10, :128]! @tag7
vld2.32 {q15}, [r9, :128]! @tag6
vld2.32 {q11}, [r8, :128]! @tag5
vsub.f32 q14, q15, q13
vsub.f32 q12, q0, q11
vadd.f32 q11, q0, q11
vadd.f32 q13, q15, q13
vsub.f32 d13, d29, d24 @
vadd.f32 q15, q13, q11
vadd.f32 d12, d28, d25 @
vadd.f32 d15, d29, d24 @
vsub.f32 d14, d28, d25 @
vtrn.32 q15, q6
vsub.f32 q15, q13, q11
vtrn.32 q15, q7
vswp d13, d14
vst1.32 {d12,d13,d14,d15}, [lr, :128]!
vtrn.32 q13, q14
vtrn.32 q11, q12
vmul.f32 d24, d26, d21
vmul.f32 d28, d27, d20
vmul.f32 d25, d26, d20
vmul.f32 d26, d27, d21
vmul.f32 d27, d22, d21
vmul.f32 d30, d23, d20
vmul.f32 d29, d23, d21
vmul.f32 d22, d22, d20
vsub.f32 d21, d28, d24
vadd.f32 d20, d26, d25
vadd.f32 d25, d30, d27
vsub.f32 d24, d22, d29
vadd.f32 q11, q12, q10
vsub.f32 q10, q12, q10
vadd.f32 q0, q9, q11
vsub.f32 q2, q9, q11
vsub.f32 d3, d17, d20 @
vadd.f32 d7, d17, d20 @
vadd.f32 d2, d16, d21 @
vsub.f32 d6, d16, d21 @
vswp d1, d2
vswp d5, d6
vstmia r2!, {q0-q3}
add r2, r7, #0
add r7, r9, #0
add r9, r2, #0
add r2, r8, #0
add r8, r10, #0
add r10, r2, #0
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_oo_loop_exit
_neon_oo_loop:
vld2.32 {q8}, [r6, :128]!
vld2.32 {q9}, [r5, :128]!
vld2.32 {q10}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vadd.f32 q11, q9, q8
vsub.f32 q8, q9, q8
vsub.f32 q9, q13, q10
vadd.f32 q12, q13, q10
subs r11, r11, #1
vld2.32 {q10}, [r7, :128]!
vld2.32 {q13}, [r9, :128]!
vsub.f32 q2, q12, q11
vadd.f32 d7, d19, d16 @
vsub.f32 d3, d19, d16 @
vsub.f32 d6, d18, d17 @
vadd.f32 d2, d18, d17 @
vld2.32 {q9}, [r8, :128]!
vld2.32 {q8}, [r10, :128]!
vadd.f32 q0, q12, q11
vadd.f32 q11, q13, q8
vadd.f32 q12, q10, q9
vsub.f32 q8, q13, q8
vsub.f32 q9, q10, q9
vsub.f32 q6, q12, q11
vadd.f32 q4, q12, q11
vtrn.32 q0, q2
ldr r2, [r12], #4
vadd.f32 d15, d19, d16 @
ldr lr, [r12], #4
vsub.f32 d11, d19, d16 @
vsub.f32 d14, d18, d17 @
vadd.f32 d10, d18, d17 @
add r2, r0, r2, lsl #2
vtrn.32 q1, q3
add lr, r0, lr, lsl #2
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_oo_loop
_neon_oo_loop_exit:
add r2, r3, #0
add r3, r7, #0
add r7, r2, #0
add r2, r4, #0
add r4, r8, #0
add r8, r2, #0
add r2, r5, #0
add r5, r9, #0
add r9, r2, #0
add r2, r6, #0
add r6, r10, #0
add r10, r2, #0
add r2, r9, #0
add r9, r10, #0
add r10, r2, #0
ldr r2, [r1, #16]
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_ee_loop2_exit
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_loop2:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vsub.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vadd.f32 d31, d5, d2 @
vadd.f32 d28, d4, d3 @
vsub.f32 d30, d4, d3 @
vsub.f32 d5, d19, d14 @
vsub.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vadd.f32 d6, d30, d27 @
vadd.f32 d4, d18, d15 @
vadd.f32 d13, d19, d14 @
vsub.f32 d12, d18, d15 @
vadd.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vsub.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_loop2
_neon_ee_loop2_exit:
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_o_f
_neon_static_o_f:
#else
.globl neon_static_o_f
neon_static_o_f:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
ldr lr, [r0, #40] @ this is p->N
add r3, r1, #0
add r7, r1, lr
add r5, r7, lr
add r10, r5, lr
add r4, r10, lr
add r8, r4, lr
add r6, r8, lr
add r9, r6, lr
ldr r12, [r0]
add r1, r0, #0
add r0, r2, #0
ldr r2, [r1, #16] @ this is p->ee_ws
ldr r11, [r1, #28] @ this is p->i0
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_o_loop:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vsub.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vadd.f32 d31, d5, d2 @
vadd.f32 d28, d4, d3 @
vsub.f32 d30, d4, d3 @
vsub.f32 d5, d19, d14 @
vsub.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vadd.f32 d6, d30, d27 @
vadd.f32 d4, d18, d15 @
vadd.f32 d13, d19, d14 @
vsub.f32 d12, d18, d15 @
vadd.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vsub.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_o_loop
add r2, r7, #0
add r7, r9, #0
add r9, r2, #0
add r2, r8, #0
add r8, r10, #0
add r10, r2, #0
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_oo_o_loop_exit
_neon_oo_o_loop:
vld2.32 {q8}, [r6, :128]!
vld2.32 {q9}, [r5, :128]!
vld2.32 {q10}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vadd.f32 q11, q9, q8
vsub.f32 q8, q9, q8
vsub.f32 q9, q13, q10
vadd.f32 q12, q13, q10
subs r11, r11, #1
vld2.32 {q10}, [r7, :128]!
vld2.32 {q13}, [r9, :128]!
vsub.f32 q2, q12, q11
vadd.f32 d7, d19, d16 @
vsub.f32 d3, d19, d16 @
vsub.f32 d6, d18, d17 @
vadd.f32 d2, d18, d17 @
vld2.32 {q9}, [r8, :128]!
vld2.32 {q8}, [r10, :128]!
vadd.f32 q0, q12, q11
vadd.f32 q11, q13, q8
vadd.f32 q12, q10, q9
vsub.f32 q8, q13, q8
vsub.f32 q9, q10, q9
vsub.f32 q6, q12, q11
vadd.f32 q4, q12, q11
vtrn.32 q0, q2
ldr r2, [r12], #4
vadd.f32 d15, d19, d16 @
ldr lr, [r12], #4
vsub.f32 d11, d19, d16 @
vsub.f32 d14, d18, d17 @
vadd.f32 d10, d18, d17 @
add r2, r0, r2, lsl #2
vtrn.32 q1, q3
add lr, r0, lr, lsl #2
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_oo_o_loop
_neon_oo_o_loop_exit:
ldr r11, [r1, #8]
vld1.32 {q8}, [r5, :128]!
vld1.32 {q10}, [r6, :128]!
vld2.32 {q11}, [r4, :128]!
vld2.32 {q13}, [r3, :128]!
vld2.32 {q15}, [r10, :128]!
vorr d25, d17, d17
vorr d24, d20, d20
vorr d20, d16, d16
vsub.f32 q9, q13, q11
vadd.f32 q11, q13, q11
ldr r2, [r12], #4
vtrn.32 d24, d25
ldr lr, [r12], #4
vtrn.32 d20, d21
add r2, r0, r2, lsl #2
vsub.f32 q8, q10, q12
add lr, r0, lr, lsl #2
vadd.f32 q10, q10, q12
vadd.f32 q0, q11, q10
vsub.f32 d25, d19, d16 @
vadd.f32 d27, d19, d16 @
vsub.f32 q1, q11, q10
vadd.f32 d24, d18, d17 @
vsub.f32 d26, d18, d17 @
vtrn.32 q0, q12
vtrn.32 q1, q13
vld1.32 {d24, d25}, [r11, :128]
vswp d1, d2
vst1.32 {q0, q1}, [r2, :128]!
vld2.32 {q0}, [r9, :128]!
vadd.f32 q1, q0, q15
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vsub.f32 q15, q0, q15
vsub.f32 q0, q14, q13
vadd.f32 q3, q14, q13
vadd.f32 q2, q3, q1
vsub.f32 d29, d1, d30 @
vadd.f32 d27, d1, d30 @
vsub.f32 q3, q3, q1
vadd.f32 d28, d0, d31 @
vsub.f32 d26, d0, d31 @
vtrn.32 q2, q14
vtrn.32 q3, q13
vswp d5, d6
vst1.32 {q2, q3}, [r2, :128]!
vtrn.32 q11, q9
vtrn.32 q10, q8
vmul.f32 d20, d18, d25
vmul.f32 d22, d19, d24
vmul.f32 d21, d19, d25
vmul.f32 d18, d18, d24
vmul.f32 d19, d16, d25
vmul.f32 d30, d17, d24
vmul.f32 d23, d16, d24
vmul.f32 d24, d17, d25
vadd.f32 d17, d22, d20
vsub.f32 d16, d18, d21
vsub.f32 d21, d30, d19
vadd.f32 d20, d24, d23
vadd.f32 q9, q8, q10
vsub.f32 q8, q8, q10
vadd.f32 q4, q14, q9
vsub.f32 q6, q14, q9
vsub.f32 d11, d27, d16 @
vadd.f32 d15, d27, d16 @
vadd.f32 d10, d26, d17 @
vsub.f32 d14, d26, d17 @
vswp d9, d10
vswp d13, d14
vstmia lr!, {q4-q7}
add r2, r3, #0
add r3, r7, #0
add r7, r2, #0
add r2, r4, #0
add r4, r8, #0
add r8, r2, #0
add r2, r5, #0
add r5, r9, #0
add r9, r2, #0
add r2, r6, #0
add r6, r10, #0
add r10, r2, #0
add r2, r9, #0
add r9, r10, #0
add r10, r2, #0
ldr r2, [r1, #16]
ldr r11, [r1, #32] @ this is p->i1
cmp r11, #0
beq _neon_ee_o_loop2_exit
vld1.32 {d16, d17}, [r2, :128]
_neon_ee_o_loop2:
vld2.32 {q15}, [r10, :128]!
vld2.32 {q13}, [r8, :128]!
vld2.32 {q14}, [r7, :128]!
vld2.32 {q9}, [r4, :128]!
vld2.32 {q10}, [r3, :128]!
vld2.32 {q11}, [r6, :128]!
vld2.32 {q12}, [r5, :128]!
vsub.f32 q1, q14, q13
vld2.32 {q0}, [r9, :128]!
subs r11, r11, #1
vsub.f32 q2, q0, q15
vadd.f32 q0, q0, q15
vmul.f32 d10, d2, d17
vmul.f32 d11, d3, d16
vmul.f32 d12, d3, d17
vmul.f32 d6, d4, d17
vmul.f32 d7, d5, d16
vmul.f32 d8, d4, d16
vmul.f32 d9, d5, d17
vmul.f32 d13, d2, d16
vsub.f32 d7, d7, d6
vadd.f32 d11, d11, d10
vsub.f32 q1, q12, q11
vsub.f32 q2, q10, q9
vadd.f32 d6, d9, d8
vadd.f32 q4, q14, q13
vadd.f32 q11, q12, q11
vadd.f32 q12, q10, q9
vsub.f32 d10, d13, d12
vsub.f32 q7, q4, q0
vsub.f32 q9, q12, q11
vsub.f32 q13, q5, q3
vsub.f32 d29, d5, d2 @
vadd.f32 q5, q5, q3
vadd.f32 q10, q4, q0
vadd.f32 q11, q12, q11
vadd.f32 d31, d5, d2 @
vadd.f32 d28, d4, d3 @
vsub.f32 d30, d4, d3 @
vsub.f32 d5, d19, d14 @
vsub.f32 d7, d31, d26 @
vadd.f32 q1, q14, q5
vadd.f32 q0, q11, q10
vadd.f32 d6, d30, d27 @
vadd.f32 d4, d18, d15 @
vadd.f32 d13, d19, d14 @
vsub.f32 d12, d18, d15 @
vadd.f32 d15, d31, d26 @
ldr r2, [r12], #4
vtrn.32 q1, q3
ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
vsub.f32 q4, q11, q10
add lr, r0, lr, lsl #2
vsub.f32 q5, q14, q5
vsub.f32 d14, d30, d27 @
vst2.32 {q0,q1}, [r2, :128]!
vst2.32 {q2,q3}, [lr, :128]!
vtrn.32 q4, q6
vtrn.32 q5, q7
vst2.32 {q4,q5}, [r2, :128]!
vst2.32 {q6,q7}, [lr, :128]!
bne _neon_ee_o_loop2
_neon_ee_o_loop2_exit:
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x4_f
_neon_static_x4_f:
#else
.globl neon_static_x4_f
neon_static_x4_f:
#endif
@ add r3, r0, #0
push {r4, r5, r6, lr}
vstmdb sp!, {d8-d15}
vld1.32 {q8,q9}, [r0, :128]
add r4, r0, r1, lsl #1
vld1.32 {q10,q11}, [r4, :128]
add r5, r0, r1, lsl #2
vld1.32 {q12,q13}, [r5, :128]
add r6, r4, r1, lsl #2
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q2,q3}, [r2, :128]
vmul.f32 q0, q13, q3
vmul.f32 q5, q12, q2
vmul.f32 q1, q14, q2
vmul.f32 q4, q14, q3
vmul.f32 q14, q12, q3
vmul.f32 q13, q13, q2
vmul.f32 q12, q15, q3
vmul.f32 q2, q15, q2
vsub.f32 q0, q5, q0
vadd.f32 q13, q13, q14
vadd.f32 q12, q12, q1
vsub.f32 q1, q2, q4
vadd.f32 q15, q0, q12
vsub.f32 q12, q0, q12
vadd.f32 q14, q13, q1
vsub.f32 q13, q13, q1
vadd.f32 q0, q8, q15
vadd.f32 q1, q9, q14
vadd.f32 q2, q10, q13 @
vsub.f32 q4, q8, q15
vsub.f32 q3, q11, q12 @
vst1.32 {q0,q1}, [r0, :128]
vsub.f32 q5, q9, q14
vsub.f32 q6, q10, q13 @
vadd.f32 q7, q11, q12 @
vst1.32 {q2,q3}, [r4, :128]
vst1.32 {q4,q5}, [r5, :128]
vst1.32 {q6,q7}, [r6, :128]
vldmia sp!, {d8-d15}
pop {r4, r5, r6, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x8_f
_neon_static_x8_f:
#else
.globl neon_static_x8_f
neon_static_x8_f:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
neon_x8_loop:
vld1.32 {q2,q3}, [r12, :128]!
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q10,q11}, [r5, :128]
adds r11, r11, #1
vmul.f32 q12, q15, q2
vmul.f32 q8, q14, q3
vmul.f32 q13, q14, q2
vmul.f32 q9, q10, q3
vmul.f32 q1, q10, q2
vmul.f32 q0, q11, q2
vmul.f32 q14, q11, q3
vmul.f32 q15, q15, q3
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q10, q12, q8
vadd.f32 q11, q0, q9
vadd.f32 q8, q15, q13
vld1.32 {q12,q13}, [r4, :128]
vsub.f32 q9, q1, q14
vsub.f32 q15, q11, q10
vsub.f32 q14, q9, q8
vadd.f32 q4, q12, q15 @
vsub.f32 q6, q12, q15 @
vsub.f32 q5, q13, q14 @
vadd.f32 q7, q13, q14 @
vld1.32 {q14,q15}, [r9, :128]
vld1.32 {q12,q13}, [r7, :128]
vmul.f32 q1, q14, q2
vmul.f32 q0, q14, q3
vst1.32 {q4,q5}, [r4, :128]
vmul.f32 q14, q15, q3
vmul.f32 q4, q15, q2
vadd.f32 q15, q9, q8
vst1.32 {q6,q7}, [r6, :128]
vmul.f32 q8, q12, q3
vmul.f32 q5, q13, q3
vmul.f32 q12, q12, q2
vmul.f32 q9, q13, q2
vadd.f32 q14, q14, q1
vsub.f32 q13, q4, q0
vadd.f32 q0, q9, q8
vld1.32 {q8,q9}, [r3, :128]
vadd.f32 q1, q11, q10
vsub.f32 q12, q12, q5
vadd.f32 q11, q8, q15
vsub.f32 q8, q8, q15
vadd.f32 q2, q12, q14
vsub.f32 q10, q0, q13
vadd.f32 q15, q0, q13
vadd.f32 q13, q9, q1
vsub.f32 q9, q9, q1
vsub.f32 q12, q12, q14
vadd.f32 q0, q11, q2
vadd.f32 q1, q13, q15
vsub.f32 q4, q11, q2
vadd.f32 q2, q8, q10 @
vsub.f32 q3, q9, q12 @
vst1.32 {q0,q1}, [r3, :128]!
vsub.f32 q5, q13, q15
vld1.32 {q14,q15}, [r10, :128]
vadd.f32 q7, q9, q12 @
vld1.32 {q12,q13}, [r8, :128]
vst1.32 {q2,q3}, [r5, :128]!
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q6, q8, q10 @
vmul.f32 q8, q14, q2
vst1.32 {q4,q5}, [r7, :128]!
vmul.f32 q10, q15, q3
vmul.f32 q9, q13, q3
vmul.f32 q11, q12, q2
vmul.f32 q14, q14, q3
vst1.32 {q6,q7}, [r9, :128]!
vmul.f32 q15, q15, q2
vmul.f32 q12, q12, q3
vmul.f32 q13, q13, q2
vadd.f32 q10, q10, q8
vsub.f32 q11, q11, q9
vld1.32 {q8,q9}, [r4, :128]
vsub.f32 q14, q15, q14
vadd.f32 q15, q13, q12
vadd.f32 q13, q11, q10
vadd.f32 q12, q15, q14
vsub.f32 q15, q15, q14
vsub.f32 q14, q11, q10
vld1.32 {q10,q11}, [r6, :128]
vadd.f32 q0, q8, q13
vadd.f32 q1, q9, q12
vadd.f32 q2, q10, q15 @
vsub.f32 q3, q11, q14 @
vsub.f32 q4, q8, q13
vst1.32 {q0,q1}, [r4, :128]!
vsub.f32 q5, q9, q12
vsub.f32 q6, q10, q15 @
vst1.32 {q2,q3}, [r6, :128]!
vadd.f32 q7, q11, q14 @
vst1.32 {q4,q5}, [r8, :128]!
vst1.32 {q6,q7}, [r10, :128]!
bne neon_x8_loop
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}
.align 4
#ifdef __APPLE__
.globl _neon_static_x8_t_f
_neon_static_x8_t_f:
#else
.globl neon_static_x8_t_f
neon_static_x8_t_f:
#endif
push {r4, r5, r6, r7, r8, r9, r10, r11, lr}
vstmdb sp!, {d8-d15}
mov r11, #0
add r3, r0, #0 @ data0
add r5, r0, r1, lsl #1 @ data2
add r4, r0, r1 @ data1
add r7, r5, r1, lsl #1 @ data4
add r6, r5, r1 @ data3
add r9, r7, r1, lsl #1 @ data6
add r8, r7, r1 @ data5
add r10, r9, r1 @ data7
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
neon_x8_t_loop:
vld1.32 {q2,q3}, [r12, :128]!
vld1.32 {q14,q15}, [r6, :128]
vld1.32 {q10,q11}, [r5, :128]
adds r11, r11, #1
vmul.f32 q12, q15, q2
vmul.f32 q8, q14, q3
vmul.f32 q13, q14, q2
vmul.f32 q9, q10, q3
vmul.f32 q1, q10, q2
vmul.f32 q0, q11, q2
vmul.f32 q14, q11, q3
vmul.f32 q15, q15, q3
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q10, q12, q8
vadd.f32 q11, q0, q9
vadd.f32 q8, q15, q13
vld1.32 {q12,q13}, [r4, :128]
vsub.f32 q9, q1, q14
vsub.f32 q15, q11, q10
vsub.f32 q14, q9, q8
vadd.f32 q4, q12, q15 @
vsub.f32 q6, q12, q15 @
vsub.f32 q5, q13, q14 @
vadd.f32 q7, q13, q14 @
vld1.32 {q14,q15}, [r9, :128]
vld1.32 {q12,q13}, [r7, :128]
vmul.f32 q1, q14, q2
vmul.f32 q0, q14, q3
vst1.32 {q4,q5}, [r4, :128]
vmul.f32 q14, q15, q3
vmul.f32 q4, q15, q2
vadd.f32 q15, q9, q8
vst1.32 {q6,q7}, [r6, :128]
vmul.f32 q8, q12, q3
vmul.f32 q5, q13, q3
vmul.f32 q12, q12, q2
vmul.f32 q9, q13, q2
vadd.f32 q14, q14, q1
vsub.f32 q13, q4, q0
vadd.f32 q0, q9, q8
vld1.32 {q8,q9}, [r3, :128]
vadd.f32 q1, q11, q10
vsub.f32 q12, q12, q5
vadd.f32 q11, q8, q15
vsub.f32 q8, q8, q15
vadd.f32 q2, q12, q14
vsub.f32 q10, q0, q13
vadd.f32 q15, q0, q13
vadd.f32 q13, q9, q1
vsub.f32 q9, q9, q1
vsub.f32 q12, q12, q14
vadd.f32 q0, q11, q2
vadd.f32 q1, q13, q15
vsub.f32 q4, q11, q2
vadd.f32 q2, q8, q10 @
vsub.f32 q3, q9, q12 @
vst2.32 {q0,q1}, [r3, :128]!
vsub.f32 q5, q13, q15
vld1.32 {q14,q15}, [r10, :128]
vadd.f32 q7, q9, q12 @
vld1.32 {q12,q13}, [r8, :128]
vst2.32 {q2,q3}, [r5, :128]!
vld1.32 {q2,q3}, [r12, :128]!
vsub.f32 q6, q8, q10 @
vmul.f32 q8, q14, q2
vst2.32 {q4,q5}, [r7, :128]!
vmul.f32 q10, q15, q3
vmul.f32 q9, q13, q3
vmul.f32 q11, q12, q2
vmul.f32 q14, q14, q3
vst2.32 {q6,q7}, [r9, :128]!
vmul.f32 q15, q15, q2
vmul.f32 q12, q12, q3
vmul.f32 q13, q13, q2
vadd.f32 q10, q10, q8
vsub.f32 q11, q11, q9
vld1.32 {q8,q9}, [r4, :128]
vsub.f32 q14, q15, q14
vadd.f32 q15, q13, q12
vadd.f32 q13, q11, q10
vadd.f32 q12, q15, q14
vsub.f32 q15, q15, q14
vsub.f32 q14, q11, q10
vld1.32 {q10,q11}, [r6, :128]
vadd.f32 q0, q8, q13
vadd.f32 q1, q9, q12
vadd.f32 q2, q10, q15 @
vsub.f32 q3, q11, q14 @
vsub.f32 q4, q8, q13
vst2.32 {q0,q1}, [r4, :128]!
vsub.f32 q5, q9, q12
vsub.f32 q6, q10, q15 @
vst2.32 {q2,q3}, [r6, :128]!
vadd.f32 q7, q11, q14 @
vst2.32 {q4,q5}, [r8, :128]!
vst2.32 {q6,q7}, [r10, :128]!
bne neon_x8_t_loop
vldmia sp!, {d8-d15}
pop {r4, r5, r6, r7, r8, r9, r10, r11, pc}