xref: /freebsd-src/contrib/cortex-strings/benchmarks/dhry/dhry.h (revision 8c4282b370bd66908b45b6a223226a9fc2b69d57)
1*09a53ad8SAndrew Turner /*
2*09a53ad8SAndrew Turner  **************************************************************************
3*09a53ad8SAndrew Turner  *                       DHRYSTONE 2.1 BENCHMARK PC VERSION
4*09a53ad8SAndrew Turner  **************************************************************************
5*09a53ad8SAndrew Turner  *
6*09a53ad8SAndrew Turner  *                   "DHRYSTONE" Benchmark Program
7*09a53ad8SAndrew Turner  *                   -----------------------------
8*09a53ad8SAndrew Turner  *
9*09a53ad8SAndrew Turner  *  Version:    C, Version 2.1
10*09a53ad8SAndrew Turner  *
11*09a53ad8SAndrew Turner  *  File:       dhry.h (part 1 of 3)
12*09a53ad8SAndrew Turner  *
13*09a53ad8SAndrew Turner  *  Date:       May 25, 1988
14*09a53ad8SAndrew Turner  *
15*09a53ad8SAndrew Turner  *  Author:     Reinhold P. Weicker
16*09a53ad8SAndrew Turner  *                      Siemens AG, AUT E 51
17*09a53ad8SAndrew Turner  *                      Postfach 3220
18*09a53ad8SAndrew Turner  *                      8520 Erlangen
19*09a53ad8SAndrew Turner  *                      Germany (West)
20*09a53ad8SAndrew Turner  *                              Phone:  [+49]-9131-7-20330
21*09a53ad8SAndrew Turner  *                                      (8-17 Central European Time)
22*09a53ad8SAndrew Turner  *                              Usenet: ..!mcsun!unido!estevax!weicker
23*09a53ad8SAndrew Turner  *
24*09a53ad8SAndrew Turner  *            Original Version (in Ada) published in
25*09a53ad8SAndrew Turner  *            "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
26*09a53ad8SAndrew Turner  *            pp. 1013 - 1030, together with the statistics
27*09a53ad8SAndrew Turner  *            on which the distribution of statements etc. is based.
28*09a53ad8SAndrew Turner  *
29*09a53ad8SAndrew Turner  *            In this C version, the following C library functions are used:
30*09a53ad8SAndrew Turner  *            - strcpy, strcmp (inside the measurement loop)
31*09a53ad8SAndrew Turner  *            - printf, scanf (outside the measurement loop)
32*09a53ad8SAndrew Turner  *            In addition, Berkeley UNIX system calls "times ()" or "time ()"
33*09a53ad8SAndrew Turner  *            are used for execution time measurement. For measurements
34*09a53ad8SAndrew Turner  *            on other systems, these calls have to be changed.
35*09a53ad8SAndrew Turner  *
36*09a53ad8SAndrew Turner  *  Collection of Results:
37*09a53ad8SAndrew Turner  *              Reinhold Weicker (address see above) and
38*09a53ad8SAndrew Turner  *
39*09a53ad8SAndrew Turner  *              Rick Richardson
40*09a53ad8SAndrew Turner  *              PC Research. Inc.
41*09a53ad8SAndrew Turner  *              94 Apple Orchard Drive
42*09a53ad8SAndrew Turner  *              Tinton Falls, NJ 07724
43*09a53ad8SAndrew Turner  *                      Phone:  (201) 389-8963 (9-17 EST)
44*09a53ad8SAndrew Turner  *                      Usenet: ...!uunet!pcrat!rick
45*09a53ad8SAndrew Turner  *
46*09a53ad8SAndrew Turner  *      Please send results to Rick Richardson and/or Reinhold Weicker.
47*09a53ad8SAndrew Turner  *      Complete information should be given on hardware and software used.
48*09a53ad8SAndrew Turner  *      Hardware information includes: Machine type, CPU, type and size
49*09a53ad8SAndrew Turner  *      of caches; for microprocessors: clock frequency, memory speed
50*09a53ad8SAndrew Turner  *      (number of wait states).
51*09a53ad8SAndrew Turner  *      Software information includes: Compiler (and runtime library)
52*09a53ad8SAndrew Turner  *      manufacturer and version, compilation switches, OS version.
53*09a53ad8SAndrew Turner  *      The Operating System version may give an indication about the
54*09a53ad8SAndrew Turner  *      compiler; Dhrystone itself performs no OS calls in the measurement
55*09a53ad8SAndrew Turner  *      loop.
56*09a53ad8SAndrew Turner  *
57*09a53ad8SAndrew Turner  *      The complete output generated by the program should be mailed
58*09a53ad8SAndrew Turner  *      such that at least some checks for correctness can be made.
59*09a53ad8SAndrew Turner  *
60*09a53ad8SAndrew Turner  **************************************************************************
61*09a53ad8SAndrew Turner  *
62*09a53ad8SAndrew Turner  *  This version has changes made by Roy Longbottom to conform to a common
63*09a53ad8SAndrew Turner  *  format for a series of standard benchmarks for PCs:
64*09a53ad8SAndrew Turner  *
65*09a53ad8SAndrew Turner  *  Running time greater than 5 seconds due to inaccuracy of the PC clock.
66*09a53ad8SAndrew Turner  *
67*09a53ad8SAndrew Turner  *  Automatic adjustment of run time, no manually inserted parameters.
68*09a53ad8SAndrew Turner  *
69*09a53ad8SAndrew Turner  *  Initial display of calibration times to confirm linearity.
70*09a53ad8SAndrew Turner  *
71*09a53ad8SAndrew Turner  *  Display of results within one screen (or at a slow speed as the test
72*09a53ad8SAndrew Turner  *  progresses) so that it can be seen to have run successfully.
73*09a53ad8SAndrew Turner  *
74*09a53ad8SAndrew Turner  *  Facilities to type in details of system used etc.
75*09a53ad8SAndrew Turner  *
76*09a53ad8SAndrew Turner  *  All results and details appended to a results file.
77*09a53ad8SAndrew Turner  *
78*09a53ad8SAndrew Turner  *
79*09a53ad8SAndrew Turner  *  Roy Longbottom
80*09a53ad8SAndrew Turner  *  101323.2241@compuserve.com
81*09a53ad8SAndrew Turner  *
82*09a53ad8SAndrew Turner  **************************************************************************
83*09a53ad8SAndrew Turner  *
84*09a53ad8SAndrew Turner  *  For details of history, changes, other defines, benchmark construction
85*09a53ad8SAndrew Turner  *  statistics see official versions from ftp.nosc.mil/pub/aburto where
86*09a53ad8SAndrew Turner  *  the latest table of results (dhry.tbl) are available. See also
87*09a53ad8SAndrew Turner  *  netlib@ornl.gov
88*09a53ad8SAndrew Turner  *
89*09a53ad8SAndrew Turner  **************************************************************************
90*09a53ad8SAndrew Turner  *
91*09a53ad8SAndrew Turner  * Defines:     The following "Defines" are possible:
92*09a53ad8SAndrew Turner  *              -DREG=register          (default: Not defined)
93*09a53ad8SAndrew Turner  *                      As an approximation to what an average C programmer
94*09a53ad8SAndrew Turner  *                      might do, the "register" storage class is applied
95*09a53ad8SAndrew Turner  *                      (if enabled by -DREG=register)
96*09a53ad8SAndrew Turner  *                      - for local variables, if they are used (dynamically)
97*09a53ad8SAndrew Turner  *                        five or more times
98*09a53ad8SAndrew Turner  *                      - for parameters if they are used (dynamically)
99*09a53ad8SAndrew Turner  *                        six or more times
100*09a53ad8SAndrew Turner  *                      Note that an optimal "register" strategy is
101*09a53ad8SAndrew Turner  *                      compiler-dependent, and that "register" declarations
102*09a53ad8SAndrew Turner  *                      do not necessarily lead to faster execution.
103*09a53ad8SAndrew Turner  *              -DNOSTRUCTASSIGN        (default: Not defined)
104*09a53ad8SAndrew Turner  *                      Define if the C compiler does not support
105*09a53ad8SAndrew Turner  *                      assignment of structures.
106*09a53ad8SAndrew Turner  *              -DNOENUMS               (default: Not defined)
107*09a53ad8SAndrew Turner  *                      Define if the C compiler does not support
108*09a53ad8SAndrew Turner  *                      enumeration types.
109*09a53ad8SAndrew Turner  ***************************************************************************
110*09a53ad8SAndrew Turner  *
111*09a53ad8SAndrew Turner  *  Compilation model and measurement (IMPORTANT):
112*09a53ad8SAndrew Turner  *
113*09a53ad8SAndrew Turner  *  This C version of Dhrystone consists of three files:
114*09a53ad8SAndrew Turner  *  - dhry.h (this file, containing global definitions and comments)
115*09a53ad8SAndrew Turner  *  - dhry_1.c (containing the code corresponding to Ada package Pack_1)
116*09a53ad8SAndrew Turner  *  - dhry_2.c (containing the code corresponding to Ada package Pack_2)
117*09a53ad8SAndrew Turner  *
118*09a53ad8SAndrew Turner  *  The following "ground rules" apply for measurements:
119*09a53ad8SAndrew Turner  *  - Separate compilation
120*09a53ad8SAndrew Turner  *  - No procedure merging
121*09a53ad8SAndrew Turner  *  - Otherwise, compiler optimizations are allowed but should be indicated
122*09a53ad8SAndrew Turner  *  - Default results are those without register declarations
123*09a53ad8SAndrew Turner  *  See the companion paper "Rationale for Dhrystone Version 2" for a more
124*09a53ad8SAndrew Turner  *  detailed discussion of these ground rules.
125*09a53ad8SAndrew Turner  *
126*09a53ad8SAndrew Turner  *  For 16-Bit processors (e.g. 80186, 80286), times for all compilation
127*09a53ad8SAndrew Turner  *  models ("small", "medium", "large" etc.) should be given if possible,
128*09a53ad8SAndrew Turner  *  together with a definition of these models for the compiler system used.
129*09a53ad8SAndrew Turner  *
130*09a53ad8SAndrew Turner  **************************************************************************
131*09a53ad8SAndrew Turner  *                Examples of Pentium Results
132*09a53ad8SAndrew Turner  *
133*09a53ad8SAndrew Turner  * Dhrystone Benchmark  Version 2.1 (Language: C)
134*09a53ad8SAndrew Turner  *
135*09a53ad8SAndrew Turner  * Month run            4/1996
136*09a53ad8SAndrew Turner  * PC model             Escom
137*09a53ad8SAndrew Turner  * CPU                  Pentium
138*09a53ad8SAndrew Turner  * Clock MHz            100
139*09a53ad8SAndrew Turner  * Cache                256K
140*09a53ad8SAndrew Turner  * Options              Neptune chipset
141*09a53ad8SAndrew Turner  * OS/DOS               Windows 95
142*09a53ad8SAndrew Turner  * Compiler             Watcom C/ C++ 10.5 Win386
143*09a53ad8SAndrew Turner  * OptLevel             -otexan -zp8 -fp5 -5r
144*09a53ad8SAndrew Turner  * Run by               Roy Longbottom
145*09a53ad8SAndrew Turner  * From                 UK
146*09a53ad8SAndrew Turner  * Mail                 101323.2241@compuserve.com
147*09a53ad8SAndrew Turner  *
148*09a53ad8SAndrew Turner  * Final values         (* implementation-dependent):
149*09a53ad8SAndrew Turner  *
150*09a53ad8SAndrew Turner  * Int_Glob:      O.K.  5
151*09a53ad8SAndrew Turner  * Bool_Glob:     O.K.  1
152*09a53ad8SAndrew Turner  * Ch_1_Glob:     O.K.  A
153*09a53ad8SAndrew Turner  * Ch_2_Glob:     O.K.  B
154*09a53ad8SAndrew Turner  * Arr_1_Glob[8]: O.K.  7
155*09a53ad8SAndrew Turner  * Arr_2_Glob8/7: O.K.     1600010
156*09a53ad8SAndrew Turner  * Ptr_Glob->
157*09a53ad8SAndrew Turner  *   Ptr_Comp:       *  98008
158*09a53ad8SAndrew Turner  *   Discr:       O.K.  0
159*09a53ad8SAndrew Turner  *   Enum_Comp:   O.K.  2
160*09a53ad8SAndrew Turner  *   Int_Comp:    O.K.  17
161*09a53ad8SAndrew Turner  *   Str_Comp:    O.K.  DHRYSTONE PROGRAM, SOME STRING
162*09a53ad8SAndrew Turner  * Next_Ptr_Glob->
163*09a53ad8SAndrew Turner  *   Ptr_Comp:       *  98008 same as above
164*09a53ad8SAndrew Turner  *   Discr:       O.K.  0
165*09a53ad8SAndrew Turner  *   Enum_Comp:   O.K.  1
166*09a53ad8SAndrew Turner  *   Int_Comp:    O.K.  18
167*09a53ad8SAndrew Turner  *   Str_Comp:    O.K.  DHRYSTONE PROGRAM, SOME STRING
168*09a53ad8SAndrew Turner  * Int_1_Loc:     O.K.  5
169*09a53ad8SAndrew Turner  * Int_2_Loc:     O.K.  13
170*09a53ad8SAndrew Turner  * Int_3_Loc:     O.K.  7
171*09a53ad8SAndrew Turner  * Enum_Loc:      O.K.  1
172*09a53ad8SAndrew Turner  * Str_1_Loc:     O.K.  DHRYSTONE PROGRAM, 1'ST STRING
173*09a53ad8SAndrew Turner  * Str_2_Loc:     O.K.  DHRYSTONE PROGRAM, 2'ND STRING
174*09a53ad8SAndrew Turner  *
175*09a53ad8SAndrew Turner  * Register option      Selected.
176*09a53ad8SAndrew Turner  *
177*09a53ad8SAndrew Turner  * Microseconds 1 loop:          4.53
178*09a53ad8SAndrew Turner  * Dhrystones / second:      220690
179*09a53ad8SAndrew Turner  * VAX MIPS rating:            125.61
180*09a53ad8SAndrew Turner  *
181*09a53ad8SAndrew Turner  *
182*09a53ad8SAndrew Turner  * Dhrystone Benchmark  Version 2.1 (Language: C)
183*09a53ad8SAndrew Turner  *
184*09a53ad8SAndrew Turner  * Month run            4/1996
185*09a53ad8SAndrew Turner  * PC model             Escom
186*09a53ad8SAndrew Turner  * CPU                  Pentium
187*09a53ad8SAndrew Turner  * Clock MHz            100
188*09a53ad8SAndrew Turner  * Cache                256K
189*09a53ad8SAndrew Turner  * Options              Neptune chipset
190*09a53ad8SAndrew Turner  * OS/DOS               Windows 95
191*09a53ad8SAndrew Turner  * Compiler             Watcom C/ C++ 10.5 Win386
192*09a53ad8SAndrew Turner  * OptLevel                 No optimisation
193*09a53ad8SAndrew Turner  * Run by               Roy Longbottom
194*09a53ad8SAndrew Turner  * From                 UK
195*09a53ad8SAndrew Turner  * Mail                 101323.2241@compuserve.com
196*09a53ad8SAndrew Turner  *
197*09a53ad8SAndrew Turner  * Final values         (* implementation-dependent):
198*09a53ad8SAndrew Turner  *
199*09a53ad8SAndrew Turner  * Int_Glob:      O.K.  5
200*09a53ad8SAndrew Turner  * Bool_Glob:     O.K.  1
201*09a53ad8SAndrew Turner  * Ch_1_Glob:     O.K.  A
202*09a53ad8SAndrew Turner  * Ch_2_Glob:     O.K.  B
203*09a53ad8SAndrew Turner  * Arr_1_Glob[8]: O.K.  7
204*09a53ad8SAndrew Turner  * Arr_2_Glob8/7: O.K.      320010
205*09a53ad8SAndrew Turner  * Ptr_Glob->
206*09a53ad8SAndrew Turner  *   Ptr_Comp:       *  98004
207*09a53ad8SAndrew Turner  *   Discr:       O.K.  0
208*09a53ad8SAndrew Turner  *   Enum_Comp:   O.K.  2
209*09a53ad8SAndrew Turner  *   Int_Comp:    O.K.  17
210*09a53ad8SAndrew Turner  *   Str_Comp:    O.K.  DHRYSTONE PROGRAM, SOME STRING
211*09a53ad8SAndrew Turner  * Next_Ptr_Glob->
212*09a53ad8SAndrew Turner  *   Ptr_Comp:       *  98004 same as above
213*09a53ad8SAndrew Turner  *   Discr:       O.K.  0
214*09a53ad8SAndrew Turner  *   Enum_Comp:   O.K.  1
215*09a53ad8SAndrew Turner  *   Int_Comp:    O.K.  18
216*09a53ad8SAndrew Turner  *   Str_Comp:    O.K.  DHRYSTONE PROGRAM, SOME STRING
217*09a53ad8SAndrew Turner  * Int_1_Loc:     O.K.  5
218*09a53ad8SAndrew Turner  * Int_2_Loc:     O.K.  13
219*09a53ad8SAndrew Turner  * Int_3_Loc:     O.K.  7
220*09a53ad8SAndrew Turner  * Enum_Loc:      O.K.  1
221*09a53ad8SAndrew Turner  * Str_1_Loc:     O.K.  DHRYSTONE PROGRAM, 1'ST STRING
222*09a53ad8SAndrew Turner  * Str_2_Loc:     O.K.  DHRYSTONE PROGRAM, 2'ND STRING
223*09a53ad8SAndrew Turner  *
224*09a53ad8SAndrew Turner  * Register option      Not selected.
225*09a53ad8SAndrew Turner  *
226*09a53ad8SAndrew Turner  * Microseconds 1 loop:         20.06
227*09a53ad8SAndrew Turner  * Dhrystones / second:       49844
228*09a53ad8SAndrew Turner  * VAX MIPS rating:             28.37
229*09a53ad8SAndrew Turner  *
230*09a53ad8SAndrew Turner  **************************************************************************
231*09a53ad8SAndrew Turner  */
232*09a53ad8SAndrew Turner 
233*09a53ad8SAndrew Turner /* Compiler and system dependent definitions: */
234*09a53ad8SAndrew Turner 
235*09a53ad8SAndrew Turner #ifndef TIME
236*09a53ad8SAndrew Turner #define TIMES
237*09a53ad8SAndrew Turner #endif
238*09a53ad8SAndrew Turner                 /* Use times(2) time function unless    */
239*09a53ad8SAndrew Turner                 /* explicitly defined otherwise         */
240*09a53ad8SAndrew Turner 
241*09a53ad8SAndrew Turner #ifdef TIMES
242*09a53ad8SAndrew Turner /* #include <sys/types.h>
243*09a53ad8SAndrew Turner    #include <sys/times.h> */
244*09a53ad8SAndrew Turner                 /* for "times" */
245*09a53ad8SAndrew Turner #endif
246*09a53ad8SAndrew Turner 
247*09a53ad8SAndrew Turner #define Mic_secs_Per_Second     1000000.0
248*09a53ad8SAndrew Turner                 /* Berkeley UNIX C returns process times in seconds/HZ */
249*09a53ad8SAndrew Turner 
250*09a53ad8SAndrew Turner #ifdef  NOSTRUCTASSIGN
251*09a53ad8SAndrew Turner #define structassign(d, s)      memcpy(&(d), &(s), sizeof(d))
252*09a53ad8SAndrew Turner #else
253*09a53ad8SAndrew Turner #define structassign(d, s)      d = s
254*09a53ad8SAndrew Turner #endif
255*09a53ad8SAndrew Turner 
256*09a53ad8SAndrew Turner #ifdef  NOENUM
257*09a53ad8SAndrew Turner #define Ident_1 0
258*09a53ad8SAndrew Turner #define Ident_2 1
259*09a53ad8SAndrew Turner #define Ident_3 2
260*09a53ad8SAndrew Turner #define Ident_4 3
261*09a53ad8SAndrew Turner #define Ident_5 4
262*09a53ad8SAndrew Turner   typedef int   Enumeration;
263*09a53ad8SAndrew Turner #else
264*09a53ad8SAndrew Turner   typedef       enum    {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
265*09a53ad8SAndrew Turner                 Enumeration;
266*09a53ad8SAndrew Turner #endif
267*09a53ad8SAndrew Turner         /* for boolean and enumeration types in Ada, Pascal */
268*09a53ad8SAndrew Turner 
269*09a53ad8SAndrew Turner /* General definitions: */
270*09a53ad8SAndrew Turner 
271*09a53ad8SAndrew Turner #include <stdio.h>
272*09a53ad8SAndrew Turner #include <string.h>
273*09a53ad8SAndrew Turner 
274*09a53ad8SAndrew Turner                 /* for strcpy, strcmp */
275*09a53ad8SAndrew Turner 
276*09a53ad8SAndrew Turner #define Null 0
277*09a53ad8SAndrew Turner                 /* Value of a Null pointer */
278*09a53ad8SAndrew Turner #define true  1
279*09a53ad8SAndrew Turner #define false 0
280*09a53ad8SAndrew Turner 
281*09a53ad8SAndrew Turner typedef int     One_Thirty;
282*09a53ad8SAndrew Turner typedef int     One_Fifty;
283*09a53ad8SAndrew Turner typedef char    Capital_Letter;
284*09a53ad8SAndrew Turner typedef int     Boolean;
285*09a53ad8SAndrew Turner typedef char    Str_30 [31];
286*09a53ad8SAndrew Turner typedef int     Arr_1_Dim [50];
287*09a53ad8SAndrew Turner typedef int     Arr_2_Dim [50] [50];
288*09a53ad8SAndrew Turner 
289*09a53ad8SAndrew Turner typedef struct record
290*09a53ad8SAndrew Turner     {
291*09a53ad8SAndrew Turner     struct record *Ptr_Comp;
292*09a53ad8SAndrew Turner     Enumeration    Discr;
293*09a53ad8SAndrew Turner     union {
294*09a53ad8SAndrew Turner           struct {
295*09a53ad8SAndrew Turner                   Enumeration Enum_Comp;
296*09a53ad8SAndrew Turner                   int         Int_Comp;
297*09a53ad8SAndrew Turner                   char        Str_Comp [31];
298*09a53ad8SAndrew Turner                   } var_1;
299*09a53ad8SAndrew Turner           struct {
300*09a53ad8SAndrew Turner                   Enumeration E_Comp_2;
301*09a53ad8SAndrew Turner                   char        Str_2_Comp [31];
302*09a53ad8SAndrew Turner                   } var_2;
303*09a53ad8SAndrew Turner           struct {
304*09a53ad8SAndrew Turner                   char        Ch_1_Comp;
305*09a53ad8SAndrew Turner                   char        Ch_2_Comp;
306*09a53ad8SAndrew Turner                   } var_3;
307*09a53ad8SAndrew Turner           } variant;
308*09a53ad8SAndrew Turner       } Rec_Type, *Rec_Pointer;
309*09a53ad8SAndrew Turner 
310*09a53ad8SAndrew Turner 
311*09a53ad8SAndrew Turner 
312