#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); }