Add JetStream to PerformanceTests
[WebKit-https.git] / PerformanceTests / JetStream / simple / float-mm.c
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #define  nil            0
5 #define  false          0
6 #define  true           1
7 #define  bubblebase     1.61f
8 #define  dnfbase        3.5f
9 #define  permbase       1.75f
10 #define  queensbase 1.83f
11 #define  towersbase 2.39f
12 #define  quickbase      1.92f
13 #define  intmmbase      1.46f
14 #define  treebase       2.5f
15 #define  mmbase         0.0f
16 #define  fpmmbase       2.92f
17 #define  puzzlebase     0.5f
18 #define  fftbase        0.0f
19 #define  fpfftbase      4.44f
20     /* Towers */
21 #define maxcells         18
22
23     /* Intmm, Mm */
24 #define rowsize          40
25
26     /* Puzzle */
27 #define size             511
28 #define classmax         3
29 #define typemax          12
30 #define d                    8
31
32     /* Bubble, Quick */
33 #define sortelements 5000
34 #define srtelements  500
35
36     /* fft */
37 #define fftsize          256 
38 #define fftsize2         129  
39 /*
40 type */
41     /* Perm */
42 #define permrange     10
43
44    /* tree */
45 struct node {
46         struct node *left,*right;
47         int val;
48 };
49
50     /* Towers */ /*
51     discsizrange = 1..maxcells; */
52 #define    stackrange   3
53 /*    cellcursor = 0..maxcells; */
54 struct    element {
55         int discsize;
56         int next;
57 };
58 /*    emsgtype = packed array[1..15] of char;
59 */
60     /* Intmm, Mm */ /*
61     index = 1 .. rowsize;
62     intmatrix = array [index,index] of integer;
63     realmatrix = array [index,index] of real;
64 */
65     /* Puzzle */ /*
66     piececlass = 0..classmax;
67     piecetype = 0..typemax;
68     position = 0..size;
69 */
70     /* Bubble, Quick */ /*
71     listsize = 0..sortelements;
72     sortarray = array [listsize] of integer;
73 */
74     /* FFT */
75 struct    complex { float rp, ip; } ;
76 /*
77     carray = array [1..fftsize] of complex ;
78     c2array = array [1..fftsize2] of complex ;
79 */
80
81 float value, fixed, floated;
82
83     /* global */
84 long    seed;  /* converted to long for 16 bit WR*/
85
86     /* Perm */
87 int    permarray[permrange+1];
88 /* converted pctr to unsigned int for 16 bit WR*/
89 unsigned int    pctr;
90
91     /* tree */
92 struct node *tree;
93
94     /* Towers */
95 int        stack[stackrange+1];
96 struct element    cellspace[maxcells+1];
97 int    freelist,  movesdone;
98
99     /* Intmm, Mm */
100
101 int   ima[rowsize+1][rowsize+1], imb[rowsize+1][rowsize+1], imr[rowsize+1][rowsize+1];
102 float rma[rowsize+1][rowsize+1], rmb[rowsize+1][rowsize+1], rmr[rowsize+1][rowsize+1];
103
104     /* Puzzle */
105 int     piececount[classmax+1], class[typemax+1], piecemax[typemax+1];
106 int     puzzl[size+1], p[typemax+1][size+1], n, kount;
107
108     /* Bubble, Quick */
109 int sortlist[sortelements+1], biggest, littlest, top;
110
111     /* FFT */
112 struct complex    z[fftsize+1], w[fftsize+1], e[fftsize2+1];
113 float    zr, zi;
114
115 void Initrand () {
116     seed = 74755L;   /* constant to long WR*/
117 }
118
119 int Rand () {
120     seed = (seed * 1309L + 13849L) & 65535L;  /* constants to long WR*/
121     return( (int)seed );     /* typecast back to int WR*/
122 }
123
124
125     /* Multiplies two real matrices. */
126
127 void rInitmatrix ( float m[rowsize+1][rowsize+1] ) {
128         int temp, i, j;
129         for ( i = 1; i <= rowsize; i++ )
130             for ( j = 1; j <= rowsize; j++ ) {
131                 temp = Rand();
132                         m[i][j] = (float)(temp - (temp/120)*120 - 60)/3;
133         }
134 }
135
136 void rInnerproduct(float *result, float a[rowsize+1][rowsize+1], float b[rowsize+1][rowsize+1], int row, int column) {
137         /* computes the inner product of A[row,*] and B[*,column] */
138         int i;
139         *result = 0.0f;
140         for (i = 1; i<=rowsize; i++) *result = *result+a[row][i]*b[i][column];
141 }
142
143 void Mm (int run)    {
144     int i, j;
145     Initrand();
146     rInitmatrix (rma);
147     rInitmatrix (rmb);
148     for ( i = 1; i <= rowsize; i++ )
149                 for ( j = 1; j <= rowsize; j++ ) 
150                         rInnerproduct(&rmr[i][j],rma,rmb,i,j);
151     if (run < rowsize)
152       printf("%f\n", rmr[run + 1][run + 1]);
153 }
154
155 int main()
156 {
157         int i;
158         for (i = 0; i < 5000; i++) Mm(i);
159         return 0;
160 }