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.
101 lines
2.0 KiB
101 lines
2.0 KiB
#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); |
|
}
|
|
|