Initial code
diff --git a/sumsq_test.c b/sumsq_test.c
new file mode 100644
index 0000000..4debd47
--- /dev/null
+++ b/sumsq_test.c
@@ -0,0 +1,101 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <memory.h>
+#include <time.h>
+#include "config.h"
+#ifdef HAVE_GETOPT_H
+#include <getopt.h>
+#endif
+#include "fec.h"
+
+#if HAVE_GETOPT_LONG
+struct option Options[] = {
+  {"frame-length",1,NULL,'l'},
+  {"frame-count",1,NULL,'n'},
+  {"verbose",0,NULL,'v'},
+  {"force-altivec",0,NULL,'a'},
+  {"force-port",0,NULL,'p'},
+  {"force-mmx",0,NULL,'m'},
+  {"force-sse",0,NULL,'s'},
+  {"force-sse2",0,NULL,'t'},
+  {NULL},
+};
+#endif
+
+int Verbose = 0;
+
+int main(int argc,char *argv[]){
+  signed short *buf;
+  int i,d,trial,trials=10000;
+  int bufsize = 2048;
+  long long port_sum,simd_sum;
+  time_t t;
+  int timetrials=0;
+
+  find_cpu_mode();
+  time(&t);
+  srandom(t);
+
+#if HAVE_GETOPT_LONG
+  while((d = getopt_long(argc,argv,"vapmstl:n:T",Options,NULL)) != EOF){
+#else
+  while((d = getopt(argc,argv,"vapmstl:n:T")) != EOF){
+#endif
+    switch(d){
+    case 'a':
+      Cpu_mode = ALTIVEC;
+      break;
+    case 'p':
+      Cpu_mode = PORT;
+      break;
+    case 'm':
+      Cpu_mode = MMX;
+      break;
+    case 's':
+      Cpu_mode = SSE;
+      break;
+    case 't':
+      Cpu_mode = SSE2;
+      break;
+    case 'l':
+      bufsize = atoi(optarg);
+      break;
+    case 'n':
+      trials = atoi(optarg);
+      break;
+    case 'v':
+      Verbose++;
+      break;
+    case 'T':
+      timetrials++;
+      break;
+    }
+  }
+
+  buf = (signed short *)calloc(bufsize,sizeof(signed short));
+  if(timetrials){
+    for(trial=0;trial<trials;trial++){
+      (void)sumsq(buf,bufsize);
+    }
+  } else {
+    for(trial=0;trial<trials;trial++){
+      int length,offset;
+
+      offset = random() & 7;
+      length = (random() % bufsize) - offset;
+      if(length <= 0)
+	continue;
+      for(i=0;i<bufsize;i++)
+	buf[i] = random();
+      
+      port_sum = sumsq_port(buf+offset,length);
+      simd_sum = sumsq(buf+offset,length);
+      if(port_sum != simd_sum){
+	printf("offset %d len %d port_sum = %lld simd_sum = %lld ",offset,length,port_sum,simd_sum);
+	
+	printf("ERROR! diff = %lld\n",simd_sum-port_sum);
+      }
+    }
+  }
+  exit(0);
+}