~linaro-toolchain-dev/cortex-strings/trunk

« back to all changes in this revision

Viewing changes to benchmarks/dhry/dhry.h

  • Committer: Michael Hope
  • Date: 2010-08-26 22:37:26 UTC
  • Revision ID: michael.hope@linaro.org-20100826223726-lo6udrvh314vf639
Added the dhrystone 2.1 benchmark from benchnt

Show diffs side-by-side

added added

removed removed

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