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