blob: 4debd47af2597f25cc6b1b9ea980eef77a57cb48 [file] [log] [blame]
Bill Yi4e213d52015-06-23 13:53:11 -07001#include <stdio.h>
2#include <stdlib.h>
3#include <memory.h>
4#include <time.h>
5#include "config.h"
6#ifdef HAVE_GETOPT_H
7#include <getopt.h>
8#endif
9#include "fec.h"
10
11#if HAVE_GETOPT_LONG
12struct option Options[] = {
13 {"frame-length",1,NULL,'l'},
14 {"frame-count",1,NULL,'n'},
15 {"verbose",0,NULL,'v'},
16 {"force-altivec",0,NULL,'a'},
17 {"force-port",0,NULL,'p'},
18 {"force-mmx",0,NULL,'m'},
19 {"force-sse",0,NULL,'s'},
20 {"force-sse2",0,NULL,'t'},
21 {NULL},
22};
23#endif
24
25int Verbose = 0;
26
27int main(int argc,char *argv[]){
28 signed short *buf;
29 int i,d,trial,trials=10000;
30 int bufsize = 2048;
31 long long port_sum,simd_sum;
32 time_t t;
33 int timetrials=0;
34
35 find_cpu_mode();
36 time(&t);
37 srandom(t);
38
39#if HAVE_GETOPT_LONG
40 while((d = getopt_long(argc,argv,"vapmstl:n:T",Options,NULL)) != EOF){
41#else
42 while((d = getopt(argc,argv,"vapmstl:n:T")) != EOF){
43#endif
44 switch(d){
45 case 'a':
46 Cpu_mode = ALTIVEC;
47 break;
48 case 'p':
49 Cpu_mode = PORT;
50 break;
51 case 'm':
52 Cpu_mode = MMX;
53 break;
54 case 's':
55 Cpu_mode = SSE;
56 break;
57 case 't':
58 Cpu_mode = SSE2;
59 break;
60 case 'l':
61 bufsize = atoi(optarg);
62 break;
63 case 'n':
64 trials = atoi(optarg);
65 break;
66 case 'v':
67 Verbose++;
68 break;
69 case 'T':
70 timetrials++;
71 break;
72 }
73 }
74
75 buf = (signed short *)calloc(bufsize,sizeof(signed short));
76 if(timetrials){
77 for(trial=0;trial<trials;trial++){
78 (void)sumsq(buf,bufsize);
79 }
80 } else {
81 for(trial=0;trial<trials;trial++){
82 int length,offset;
83
84 offset = random() & 7;
85 length = (random() % bufsize) - offset;
86 if(length <= 0)
87 continue;
88 for(i=0;i<bufsize;i++)
89 buf[i] = random();
90
91 port_sum = sumsq_port(buf+offset,length);
92 simd_sum = sumsq(buf+offset,length);
93 if(port_sum != simd_sum){
94 printf("offset %d len %d port_sum = %lld simd_sum = %lld ",offset,length,port_sum,simd_sum);
95
96 printf("ERROR! diff = %lld\n",simd_sum-port_sum);
97 }
98 }
99 }
100 exit(0);
101}