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