summaryrefslogtreecommitdiffstats
path: root/src/neon.s
diff options
context:
space:
mode:
authorAnthony Blake <anthonix@me.com>2012-08-24 13:08:34 +1200
committerAnthony Blake <anthonix@me.com>2012-08-24 13:08:34 +1200
commit625f46968820cb98391d67782a9deac4504e289a (patch)
treeece20b8d1c5f08f7f03ce54a822fedbb57771c41 /src/neon.s
parent7181d4763a5b526c675857626d42faf68f6cb97b (diff)
downloadffts-625f46968820cb98391d67782a9deac4504e289a.zip
ffts-625f46968820cb98391d67782a9deac4504e289a.tar.gz
Working on ARM
Diffstat (limited to 'src/neon.s')
-rw-r--r--src/neon.s547
1 files changed, 344 insertions, 203 deletions
diff --git a/src/neon.s b/src/neon.s
index e9e300f..2ee1a4d 100644
--- a/src/neon.s
+++ b/src/neon.s
@@ -2,37 +2,39 @@
.globl _neon_x4
.align 4
_neon_x4:
- add r3, r0, #0
- add r4, r3, r1, lsl #1
- add r5, r3, r1, lsl #2
- add r6, r4, r1, lsl #2
-
+@ add r3, r0, #0
- vld1.32 {q2,q3}, [r2, :128]
- vld1.32 {q8,q9}, [r3, :128]
+ 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 q1, q12, q2
- vmul.f32 q0, q14, q2
- vmul.f32 q4, q15, q2
- vmul.f32 q12, q12, q3
- vmls.f32 q1,q13,q3
- vmla.f32 q0,q15,q3
- vmls.f32 q4,q14,q3
- vadd.f32 q15, q1, q0
- vmla.f32 q12,q13,q2
- vsub.f32 q13, q12, q4
- vadd.f32 q14, q12, q4
- vsub.f32 q12, q1, q0
+ 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}, [r3, :128]
+ vst1.32 {q0,q1}, [r0, :128]
vsub.f32 q5, q9, q14
vsub.f32 q6, q10, q13
vadd.f32 q7, q11, q12
@@ -41,6 +43,39 @@ _neon_x4:
vst1.32 {q6,q7}, [r6, :128]
bx lr
+@@vld1.32 {q2,q3}, [r2, :128]
+@@vld1.32 {q8,q9}, [r3, :128]
+@@vld1.32 {q10,q11}, [r4, :128]
+@@vld1.32 {q12,q13}, [r5, :128]
+@@vld1.32 {q14,q15}, [r6, :128]
+@@
+@@vmul.f32 q1, q12, q2
+@@vmul.f32 q0, q14, q2
+@@vmul.f32 q4, q15, q2
+@@vmul.f32 q12, q12, q3
+@@vmls.f32 q1,q13,q3
+@@vmla.f32 q0,q15,q3
+@@vmls.f32 q4,q14,q3
+@@vadd.f32 q15, q1, q0
+@@vmla.f32 q12,q13,q2
+@@vsub.f32 q13, q12, q4
+@@vadd.f32 q14, q12, q4
+@@vsub.f32 q12, q1, q0
+@@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}, [r3, :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]
+@@bx lr
+
.globl _neon_x8
.align 4
_neon_x8:
@@ -56,94 +91,191 @@ _neon_x8:
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
- nop
neon_x8_loop:
- vld1.32 {q10,q11}, [r5, :128]
- vld1.32 {q12,q13}, [r4, :128]
- vld1.32 {q14,q15}, [r6, :128]
- adds r11, r11, #1
- vld1.32 {q2,q3}, [r12, :128]!
- vmul.f32 q1, q10, q3
- vmul.f32 q9, q15, q2
- vmul.f32 q0, q14, q2
- vmul.f32 q10, q10, q2
- vmla.f32 q1,q11,q2
- vmls.f32 q9,q14,q3
- vmla.f32 q0,q15,q3
- vsub.f32 q14, q1, q9
- vmls.f32 q10,q11,q3
- vsub.f32 q11, q10, q0
- vadd.f32 q10, q10, q0
- vadd.f32 q4, q12, q14
- vsub.f32 q5, q13, q11
- vsub.f32 q6, q12, q14
- vadd.f32 q7, q13, q11
- vst1.32 {q4,q5}, [r4, :128]
- vadd.f32 q9, q1, q9
- vld1.32 {q2,q3}, [r3, :128]
- vst1.32 {q6,q7}, [r6, :128]
- vld1.32 {q12,q13}, [r7, :128]
- vld1.32 {q14,q15}, [r9, :128]
- vmov q1, q3
- vmov q8, q2
- vld1.32 {q2,q3}, [r12, :128]!
- vmul.f32 q0, q12, q2
- vmul.f32 q11, q14, q2
- vmul.f32 q4, q15, q2
- vmul.f32 q12, q12, q3
- vmls.f32 q0,q13,q3
- vmla.f32 q11,q15,q3
- vadd.f32 q15, q8, q10
- vmls.f32 q4,q14,q3
- vmla.f32 q12,q13,q2
- vadd.f32 q14, q0, q11
- vsub.f32 q8, q8, q10
- vsub.f32 q10, q12, q4
- vadd.f32 q13, q12, q4
- vadd.f32 q12, q1, q9
- vsub.f32 q9, q1, q9
- vsub.f32 q11, q0, q11
- vadd.f32 q0, q15, q14
- vadd.f32 q1, q12, q13
- vsub.f32 q4, q15, q14
- vadd.f32 q2, q8, q10
- vsub.f32 q5, q12, q13
- vst1.32 {q0,q1}, [r3, :128]!
- vsub.f32 q3, q9, q11
- vsub.f32 q6, q8, q10
- vadd.f32 q7, q9, q11
- vst1.32 {q2,q3}, [r5, :128]!
- vst1.32 {q4,q5}, [r7, :128]!
- vst1.32 {q6,q7}, [r9, :128]!
- vld1.32 {q8,q9}, [r4, :128]
- vld1.32 {q10,q11}, [r6, :128]
- vld1.32 {q12,q13}, [r8, :128]
- vld1.32 {q14,q15}, [r10, :128]
- vld1.32 {q2,q3}, [r12, :128]!
- vmul.f32 q4, q14, q2
- vmul.f32 q5, q12, q2
- vmul.f32 q6, q15, q2
- vmul.f32 q7, q12, q3
- vmla.f32 q4,q15,q3
- vmls.f32 q5,q13,q3
- vmls.f32 q6,q14,q3
- vadd.f32 q12, q5, q4
- vmla.f32 q7,q13,q2
- vsub.f32 q14, q5, q4
- vadd.f32 q13, q7, q6
- vsub.f32 q15, q7, q6
- vadd.f32 q0, q8, q12
- vadd.f32 q1, q9, q13
- vadd.f32 q2, q10, q15
- vsub.f32 q3, q11, q14
- vsub.f32 q4, q8, q12
- vst1.32 {q0,q1}, [r4, :128]!
- vsub.f32 q5, q9, q13
- 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]!
+ 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]!
+
+
+
+
+@@vld1.32 {q2, q3}, [r12, :128]!
+@@vld1.32 {q14,q15}, [r6, :128]
+@@vld1.32 {q10,q11}, [r5, :128]
+@@vld1.32 {q12,q13}, [r4, :128]
+@@adds r11, r11, #1
+@@vmul.f32 q0, q10, q3
+@@vmul.f32 q1, q15, q2
+@@vmul.f32 q8, q14, q2
+@@vmul.f32 q9, q10, q2
+@@vmla.f32 q0,q11,q2
+@@vmls.f32 q1,q14,q3
+@@vmla.f32 q8,q15,q3
+@@vsub.f32 q10, q1, q0
+@@vld1.32 {q14,q15}, [r9, :128]
+@@vmls.f32 q9,q11,q3
+@@vld1.32 {q2, q3}, [r12, :128]!
+@@vsub.f32 q11, q9, q8
+@@vadd.f32 q0, q0, q1
+@@vsub.f32 q4, q12, q10
+@@vsub.f32 q5, q13, q11
+@@vadd.f32 q6, q12, q10
+@@vadd.f32 q7, q13, q11
+@@vld1.32 {q12,q13}, [r7, :128]
+@@vst1.32 {q4,q5}, [r4, :128]
+@@vmul.f32 q4, q12, q2
+@@vmul.f32 q11, q14, q2
+@@vmul.f32 q12, q12, q3
+@@vmul.f32 q5, q15, q2
+@@vadd.f32 q10, q9, q8
+@@vld1.32 {q8,q9}, [r3, :128]
+@@vst1.32 {q6,q7}, [r6, :128]
+@@vmls.f32 q4,q13,q3
+@@vmla.f32 q11,q15,q3
+@@vmla.f32 q12,q13,q2
+@@vmls.f32 q5,q14,q3
+@@vadd.f32 q15, q8, q10
+@@vadd.f32 q14, q4, q11
+@@vsub.f32 q8, q8, q10
+@@vsub.f32 q10, q5, q12
+@@vadd.f32 q13, q12, q5
+@@vadd.f32 q12, q9, q0
+@@vsub.f32 q9, q9, q0
+@@vsub.f32 q11, q4, q11
+@@vadd.f32 q0, q15, q14
+@@vadd.f32 q1, q12, q13
+@@vsub.f32 q2, q8, q10
+@@vsub.f32 q3, q9, q11
+@@vsub.f32 q4, q15, q14
+@@vst1.32 {q0,q1}, [r3, :128]!
+@@vld1.32 {q14,q15}, [r10, :128]
+@@vsub.f32 q5, q12, q13
+@@vld1.32 {q12,q13}, [r8, :128]
+@@vst1.32 {q2,q3}, [r5, :128]!
+@@vld1.32 {q2, q3}, [r12, :128]!
+@@vadd.f32 q6, q8, q10
+@@vadd.f32 q7, q9, q11
+@@vld1.32 {q8,q9}, [r4, :128]
+@@vst1.32 {q4,q5}, [r7, :128]!
+@@vmul.f32 q10, q14, q2
+@@vmul.f32 q11, q12, q2
+@@vmul.f32 q4, q15, q2
+@@vmul.f32 q5, q12, q3
+@@vst1.32 {q6,q7}, [r9, :128]!
+@@vmla.f32 q10,q15,q3
+@@vmls.f32 q11,q13,q3
+@@vmls.f32 q4,q14,q3
+@@vadd.f32 q12, q11, q10
+@@vmla.f32 q5,q13,q2
+@@vsub.f32 q14, q11, q10
+@@vld1.32 {q10,q11}, [r6, :128]
+@@vsub.f32 q15, q4, q5
+@@vadd.f32 q13, q5, q4
+@@vadd.f32 q0, q8, q12
+@@vsub.f32 q2, q10, q15
+@@vadd.f32 q1, q9, q13
+@@vsub.f32 q3, q11, q14
+@@vsub.f32 q4, q8, q12
+@@vsub.f32 q5, q9, q13
+@@vst1.32 {q0,q1}, [r4, :128]!
+@@vadd.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
bx lr
@@ -163,94 +295,103 @@ _neon_x8_t:
add r12, r2, #0 @ LUT
sub r11, r11, r1, lsr #5
- nop
neon_x8_t_loop:
- vld1.32 {q10,q11}, [r5, :128]
- vld1.32 {q12,q13}, [r4, :128]
- adds r11, r11, #1
- vld1.32 {q14,q15}, [r6, :128]
- vld1.32 {q2,q3}, [r12, :128]!
- vmul.f32 q1, q10, q3
- vmul.f32 q9, q15, q2
- vmul.f32 q0, q14, q2
- vmul.f32 q10, q10, q2
- vmla.f32 q1,q11,q2
- vmls.f32 q9,q14,q3
- vmla.f32 q0,q15,q3
- vsub.f32 q14, q1, q9
- vmls.f32 q10,q11,q3
- vsub.f32 q11, q10, q0
- vadd.f32 q10, q10, q0
- vadd.f32 q4, q12, q14
- vsub.f32 q5, q13, q11
- vsub.f32 q6, q12, q14
- vadd.f32 q7, q13, q11
- vst1.32 {q4,q5}, [r4, :128]
- vadd.f32 q9, q1, q9
- vld1.32 {q2,q3}, [r3, :128]
- vst1.32 {q6,q7}, [r6, :128]
- vld1.32 {q12,q13}, [r7, :128]
- vld1.32 {q14,q15}, [r9, :128]
- vmov q1, q3
- vmov q8, q2
- vld1.32 {q2,q3}, [r12, :128]!
- vmul.f32 q0, q12, q2
- vmul.f32 q11, q14, q2
- vmul.f32 q4, q15, q2
- vmul.f32 q12, q12, q3
- vmls.f32 q0,q13,q3
- vmla.f32 q11,q15,q3
- vadd.f32 q15, q8, q10
- vmls.f32 q4,q14,q3
- vmla.f32 q12,q13,q2
- vadd.f32 q14, q0, q11
- vsub.f32 q8, q8, q10
- vsub.f32 q10, q12, q4
- vadd.f32 q13, q12, q4
- vadd.f32 q12, q1, q9
- vsub.f32 q9, q1, q9
- vsub.f32 q11, q0, q11
- vadd.f32 q0, q15, q14
- vadd.f32 q1, q12, q13
- vsub.f32 q4, q15, q14
- vadd.f32 q2, q8, q10
- vsub.f32 q5, q12, q13
- vst2.32 {q0,q1}, [r3, :128]!
- vsub.f32 q3, q9, q11
- vsub.f32 q6, q8, q10
- vadd.f32 q7, q9, q11
- vst2.32 {q2,q3}, [r5, :128]!
- vst2.32 {q4,q5}, [r7, :128]!
- vst2.32 {q6,q7}, [r9, :128]!
- vld1.32 {q8,q9}, [r4, :128]
- vld1.32 {q10,q11}, [r6, :128]
- vld1.32 {q12,q13}, [r8, :128]
- vld1.32 {q14,q15}, [r10, :128]
- vld1.32 {q2,q3}, [r12, :128]!
- vmul.f32 q4, q14, q2
- vmul.f32 q5, q12, q2
- vmul.f32 q6, q15, q2
- vmul.f32 q7, q12, q3
- vmla.f32 q4,q15,q3
- vmls.f32 q5,q13,q3
- vmls.f32 q6,q14,q3
- vadd.f32 q12, q5, q4
- vmla.f32 q7,q13,q2
- vsub.f32 q14, q5, q4
- vadd.f32 q13, q7, q6
- vsub.f32 q15, q7, q6
- vadd.f32 q0, q8, q12
- vadd.f32 q1, q9, q13
- vadd.f32 q2, q10, q15
- vsub.f32 q3, q11, q14
- vsub.f32 q4, q8, q12
- vst2.32 {q0,q1}, [r4, :128]!
- vsub.f32 q5, q9, q13
- 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]!
+ 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
@bx lr
@@ -315,12 +456,12 @@ _neon_ee_loop:
vsub.f32 d12, d18, d15
vadd.f32 d15, d31, d26
ldr r2, [r12], #4
- ldr lr, [r12], #4
vtrn.32 q1, q3
+ ldr lr, [r12], #4
vtrn.32 q0, q2
add r2, r0, r2, lsl #2
- add lr, r0, lr, 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]!
@@ -369,14 +510,14 @@ _neon_oo_loop:
vadd.f32 q4, q12, q11
vtrn.32 q0, q2
ldr r2, [r12], #4
- ldr lr, [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
- add lr, r0, lr, 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
@@ -410,12 +551,12 @@ _neon_eo:
vadd.f32 d8, d22, d21
vsub.f32 d10, d22, d21
ldr r2, [r12], #4
- ldr lr, [r12], #4
vld1.32 {d20, d21}, [r11, :128]
+ ldr lr, [r12], #4
vtrn.32 q9, q4
add r2, r0, r2, lsl #2
- add lr, r0, lr, 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
@@ -482,12 +623,12 @@ _neon_oe:
vsub.f32 q9, q13, q11
vadd.f32 q11, q13, q11
ldr r2, [r12], #4
- ldr lr, [r12], #4
vtrn.32 d24, d25
+ ldr lr, [r12], #4
vtrn.32 d20, d21
add r2, r0, r2, lsl #2
- add lr, r0, lr, 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
OpenPOWER on IntegriCloud