changeset 11:abdcde012978

backup
author Peter Meerwald <p.meerwald@bct-electronic.com>
date Thu, 22 Sep 2011 15:19:18 +0200
parents 05f6ab0a17c0
children 655dc5c14169
files kf_bfly4.S peck_fft.c peck_test.c
diffstat 3 files changed, 74 insertions(+), 61 deletions(-) [+]
line wrap: on
line diff
--- a/kf_bfly4.S	Wed Sep 21 15:20:58 2011 +0200
+++ b/kf_bfly4.S	Thu Sep 22 15:19:18 2011 +0200
@@ -20,69 +20,72 @@
 	mov	r4, r3, asl #1
 	add	r6, r4, r3
 	add	ip, r2, #264
-	ldr	r2, [r2, #4]
-	cmp	r2, #0
-	beq	.forward
+
 	mov	r8, r1, asl #4
 	mov	r7, r1, asl #5
 	add	r1, r1, r1, asl #1
-	mov	r1, r1, asl #4
-	add	r2, r0, #0
+	ldr	r2, [r2, #4]
 	add	r5, r0, r3, asl #4
 	add	r4, r0, r4, asl #4
+	mov	r1, r1, asl #4
+	mov	sl, ip
+	cmp	r2, #0
+	beq	.forward
+	add	r2, r0, #0
 	add	r0, r0, r6, asl #4
-	mov	sl, ip
 	mov	r6, ip
 .inverse_loop:
     // C_MUL(scratch[0], Fout[m], *tw1);
     vld1.32     {d18,d19}, [r5]
     vld1.32     {d16,d17}, [ip]
 	vmul.f32	d20, d18, d16
+	vmul.f32	d21, d16, d19
+        // load Fout[m2], *tw2
+        vld1.32     {d14,d15}, [r4]
+        vld1.32     {d12,d13}, [r6]
 	vmls.f32	d20, d19, d17
-	vmul.f32	d21, d16, d19
 	vmla.f32	d21, d18, d17
 	
 	// C_MUL(scratch[3], Fout[m2], *tw2);
-    vld1.32     {d18,d19}, [r4]
-    vld1.32     {d16,d17}, [r6]
-	vmul.f32	d22, d18, d16
-	vmls.f32	d22, d19, d17
-	vmul.f32	d23, d16, d19
-	vmla.f32	d23, d18, d17
+	vmul.f32	d22, d14, d12
+	vmul.f32	d23, d12, d15
+        // load Fout[m3], *tw3
+        vld1.32     {d18,d19}, [r0]
+        vld1.32     {d16,d17}, [sl]
+	vmls.f32	d22, d15, d13
+	vmla.f32	d23, d14, d13
 
     // C_MUL(scratch[2], Fout[m3], *tw3);
-    vld1.32     {d18,d19}, [r0]
-    vld1.32     {d16,d17}, [sl]
 	vmul.f32	d24, d18, d16
+	vmul.f32	d25, d16, d19
+	
+    // C_SUB(scratch[1], *Fout, scratch[3]);
+    vld1.32     {d14,d15}, [r2]
+    vsub.f32   q13, q7, q11
+
 	vmls.f32	d24, d19, d17
-	vmul.f32	d25, d16, d19
 	vmla.f32	d25, d18, d17
 
-    // C_SUB(scratch[1], *Fout, scratch[3]);
-    vld1.32     {d16,d17}, [r2]
-    vsubq.f32   q13, q8, q11
-
     // C_ADDTO(*Fout, scratch[3]);
-    vaddq.f32   q8, q8, q11
+    vadd.f32   q7, q7, q11
+        // C_ADD(scratch[3], scratch[0], scratch[2]);
+        vadd.f32   q11, q10, q12
 	vst1.32     {d16,d17}, [r2]
 	
-    // C_ADD(scratch[3], scratch[0], scratch[2]);
-    vaddq.f32   q11, q10, q12
-	
     // C_SUB(Fout[m2], *Fout, scratch[3]);
-    vsubq.f32   q9, q8, q11
+    vsub.f32   q9, q7, q11
     vst1.32     {d18,d19}, [r4]!
     
     // C_ADDTO(*Fout, scratch[3]);
-    vaddq.f32   q8, q8, q11
-    vst1.32     {d16,d17}, [r2]!
+    vadd.f32   q7, q7, q11
+    vst1.32     {d14,d15}, [r2]!
 
 	add	ip, ip, r8
 	add	r6, r6, r7
 	add	sl, sl, r1
 
     // C_SUB(scratch[3], scratch[0], scratch[2]);
-    vsubq.f32   q11, q10, q12
+    vsub.f32   q11, q10, q12
 
     // Fout[m].r = scratch[1].r - scratch[3].i;
     // Fout[m].i = scratch[1].i + scratch[3].r;
@@ -100,66 +103,61 @@
 	bne	.inverse_loop
 	b	.done
 .forward:
-	mov	r8, r1, asl #4
-	mov	r7, r1, asl #5
-	add	r1, r1, r1, asl #1
-	mov	r1, r1, asl #4
 	add	r2, r0, #0
-	add	r5, r0, r3, asl #4
-	add	r4, r0, r4, asl #4
 	add	r0, r0, r6, asl #4
-	mov	sl, ip
 	mov	r6, ip
 .forward_loop:
     // C_MUL(scratch[0], Fout[m], *tw1);
     vld1.32     {d18,d19}, [r5]
     vld1.32     {d16,d17}, [ip]
 	vmul.f32	d20, d18, d16
+	vmul.f32	d21, d16, d19
+        // load Fout[m2], *tw2
+        vld1.32     {d14,d15}, [r4]
+        vld1.32     {d12,d13}, [r6]
 	vmls.f32	d20, d19, d17
-	vmul.f32	d21, d16, d19
 	vmla.f32	d21, d18, d17
 	
 	// C_MUL(scratch[3], Fout[m2], *tw2);
-    vld1.32     {d18,d19}, [r4]
-    vld1.32     {d16,d17}, [r6]
-	vmul.f32	d22, d18, d16
-	vmls.f32	d22, d19, d17
-	vmul.f32	d23, d16, d19
-	vmla.f32	d23, d18, d17
+	vmul.f32	d22, d14, d12
+	vmul.f32	d23, d12, d15
+        // load Fout[m3], *tw3
+        vld1.32     {d18,d19}, [r0]
+        vld1.32     {d16,d17}, [sl]
+	vmls.f32	d22, d15, d13
+	vmla.f32	d23, d14, d13
 
     // C_MUL(scratch[2], Fout[m3], *tw3);
-    vld1.32     {d18,d19}, [r0]
-    vld1.32     {d16,d17}, [sl]
 	vmul.f32	d24, d18, d16
+	vmul.f32	d25, d16, d19
+	
+    // C_SUB(scratch[1], *Fout, scratch[3]);
+    vld1.32     {d14,d15}, [r2]
+    vsub.f32   q13, q7, q11
+
 	vmls.f32	d24, d19, d17
-	vmul.f32	d25, d16, d19
 	vmla.f32	d25, d18, d17
 
-    // C_SUB(scratch[1], *Fout, scratch[3]);
-    vld1.32     {d16,d17}, [r2]
-    vsubq.f32   q13, q8, q11
-
     // C_ADDTO(*Fout, scratch[3]);
-    vaddq.f32   q8, q8, q11
+    vadd.f32   q7, q7, q11
+        // C_ADD(scratch[3], scratch[0], scratch[2]);
+        vadd.f32   q11, q10, q12
 	vst1.32     {d16,d17}, [r2]
 	
-    // C_ADD(scratch[3], scratch[0], scratch[2]);
-    vaddq.f32   q11, q10, q12
-	
     // C_SUB(Fout[m2], *Fout, scratch[3]);
-    vsubq.f32   q9, q8, q11
+    vsub.f32   q9, q7, q11
     vst1.32     {d18,d19}, [r4]!
     
     // C_ADDTO(*Fout, scratch[3]);
-    vaddq.f32   q8, q8, q11
-    vst1.32     {d16,d17}, [r2]!
+    vadd.f32   q7, q7, q11
+    vst1.32     {d14,d15}, [r2]!
 
 	add	ip, ip, r8
 	add	r6, r6, r7
 	add	sl, sl, r1
 
     // C_SUB(scratch[3], scratch[0], scratch[2]);
-    vsubq.f32   q11, q10, q12
+    vsub.f32   q11, q10, q12
 
     // Fout[m].r = scratch[1].r - scratch[3].i;
     // Fout[m].i = scratch[1].i + scratch[3].r;
--- a/peck_fft.c	Wed Sep 21 15:20:58 2011 +0200
+++ b/peck_fft.c	Thu Sep 22 15:19:18 2011 +0200
@@ -294,7 +294,18 @@
             kf_bfly2(Fout, fstride, st, m); 
             break;
         case 3: kf_bfly3(Fout, fstride, st, m); break; 
-        case 4: kf_bfly4(Fout, fstride, st, m); break;
+        case 4: 
+        {
+static unsigned counter = 0;        
+            armv7_cycles_start();
+            unsigned int t1 = armv7_cycles_read();
+            kf_bfly4(Fout, fstride, st, m); 
+            unsigned int t2 = armv7_cycles_read();
+            armv7_cycles_stop();
+            counter++;
+            if (counter > 150 && counter < 160) printf("XX %d\n", t2-t1);
+}            
+            break;
         case 5: kf_bfly5(Fout, fstride, st, m); break; 
         default: kf_bfly_generic(Fout, fstride, st, m, p); break;
     }
--- a/peck_test.c	Wed Sep 21 15:20:58 2011 +0200
+++ b/peck_test.c	Thu Sep 22 15:19:18 2011 +0200
@@ -67,7 +67,7 @@
 
         if (j == 0) {
             for (i = 0; i < 8; i++)
-                printf("%d: %f\n", i, *(float*)&res[i] / N);
+                printf("%d: %f %f\n", i, ((float*)&res[i])[0] / N, ((float*)&res[i])[1] / N);
         }
     }
     peck_fftr_free(p);    
@@ -75,8 +75,12 @@
     peck_fft_cleanup();
 
     for (i = 0; i < N; i++) {
-        if (fabs(*(float*)&in[i] - *(float*)&res[i]/N) > 0.00001) {
-            fprintf(stderr, "!!!! ERROR !!!! at %d\n", i);
+        if (fabs(((float*)&in[i])[0] - ((float*)&res[i])[0]/N) > 0.00001) {
+            fprintf(stderr, "!!!! ERROR0 !!!! at %d\n", i);
+            exit(EXIT_FAILURE);
+        }
+        if (fabs(((float*)&in[i])[1] - ((float*)&res[i])[1]/N) > 0.00001) {
+            fprintf(stderr, "!!!! ERROR1 !!!! at %d\n", i);
             exit(EXIT_FAILURE);
         }
     }

Repositories maintained by Peter Meerwald, pmeerw@pmeerw.net.