xref: /openbmc/u-boot/lib/dhry/dhry.h (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */
2d1389403SSimon Glass /*
3d1389403SSimon Glass  * (C) Copyright 2015 Google, Inc
4d1389403SSimon Glass  *
5d1389403SSimon Glass  * Dhrystone is widely available in the public domain. A GPL license is
6d1389403SSimon Glass  * chosen for U-Boot.
7d1389403SSimon Glass  */
8d1389403SSimon Glass 
9d1389403SSimon Glass /*****************************************************************************
10d1389403SSimon Glass  *  The BYTE UNIX Benchmarks - Release 3
11d1389403SSimon Glass  *          Module: dhry.h   SID: 3.4 5/15/91 19:30:21
12d1389403SSimon Glass  *
13d1389403SSimon Glass  *****************************************************************************
14d1389403SSimon Glass  * Bug reports, patches, comments, suggestions should be sent to:
15d1389403SSimon Glass  *
16d1389403SSimon Glass  *	Ben Smith, Rick Grehan or Tom Yager
17d1389403SSimon Glass  *	ben@bytepb.byte.com   rick_g@bytepb.byte.com   tyager@bytepb.byte.com
18d1389403SSimon Glass  *
19d1389403SSimon Glass  *****************************************************************************
20d1389403SSimon Glass  *  Modification Log:
21d1389403SSimon Glass  *  addapted from:
22d1389403SSimon Glass  *
23d1389403SSimon Glass  *
24d1389403SSimon Glass  *                   "DHRYSTONE" Benchmark Program
25d1389403SSimon Glass  *                   -----------------------------
26d1389403SSimon Glass  *
27d1389403SSimon Glass  *  Version:    C, Version 2.1
28d1389403SSimon Glass  *
29d1389403SSimon Glass  *  File:       dhry.h (part 1 of 3)
30d1389403SSimon Glass  *
31d1389403SSimon Glass  *  Date:       May 25, 1988
32d1389403SSimon Glass  *
33d1389403SSimon Glass  *  Author:     Reinhold P. Weicker
34d1389403SSimon Glass  *                      Siemens AG, AUT E 51
35d1389403SSimon Glass  *                      Postfach 3220
36d1389403SSimon Glass  *                      8520 Erlangen
37d1389403SSimon Glass  *                      Germany (West)
38d1389403SSimon Glass  *                              Phone:  [+49]-9131-7-20330
39d1389403SSimon Glass  *                                      (8-17 Central European Time)
40d1389403SSimon Glass  *                              Usenet: ..!mcvax!unido!estevax!weicker
41d1389403SSimon Glass  *
42d1389403SSimon Glass  *              Original Version (in Ada) published in
43d1389403SSimon Glass  *              "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
44d1389403SSimon Glass  *              pp. 1013 - 1030, together with the statistics
45d1389403SSimon Glass  *              on which the distribution of statements etc. is based.
46d1389403SSimon Glass  *
47d1389403SSimon Glass  *              In this C version, the following C library functions are used:
48d1389403SSimon Glass  *              - strcpy, strcmp (inside the measurement loop)
49d1389403SSimon Glass  *              - printf, scanf (outside the measurement loop)
50d1389403SSimon Glass  *              In addition, Berkeley UNIX system calls "times ()" or "time ()"
51d1389403SSimon Glass  *              are used for execution time measurement. For measurements
52d1389403SSimon Glass  *              on other systems, these calls have to be changed.
53d1389403SSimon Glass  *
54d1389403SSimon Glass  *  Collection of Results:
55d1389403SSimon Glass  *              Reinhold Weicker (address see above) and
56d1389403SSimon Glass  *
57d1389403SSimon Glass  *              Rick Richardson
58d1389403SSimon Glass  *              PC Research. Inc.
59d1389403SSimon Glass  *              94 Apple Orchard Drive
60d1389403SSimon Glass  *              Tinton Falls, NJ 07724
61d1389403SSimon Glass  *                      Phone:  (201) 834-1378 (9-17 EST)
62d1389403SSimon Glass  *                      Usenet: ...!seismo!uunet!pcrat!rick
63d1389403SSimon Glass  *
64d1389403SSimon Glass  *      Please send results to Rick Richardson and/or Reinhold Weicker.
65d1389403SSimon Glass  *      Complete information should be given on hardware and software used.
66d1389403SSimon Glass  *      Hardware information includes: Machine type, CPU, type and size
67d1389403SSimon Glass  *      of caches; for microprocessors: clock frequency, memory speed
68d1389403SSimon Glass  *      (number of wait states).
69d1389403SSimon Glass  *      Software information includes: Compiler (and runtime library)
70d1389403SSimon Glass  *      manufacturer and version, compilation switches, OS version.
71d1389403SSimon Glass  *      The Operating System version may give an indication about the
72d1389403SSimon Glass  *      compiler; Dhrystone itself performs no OS calls in the measurement loop.
73d1389403SSimon Glass  *
74d1389403SSimon Glass  *      The complete output generated by the program should be mailed
75d1389403SSimon Glass  *      such that at least some checks for correctness can be made.
76d1389403SSimon Glass  *
77d1389403SSimon Glass  ***************************************************************************
78d1389403SSimon Glass  *
79d1389403SSimon Glass  *  History:    This version C/2.1 has been made for two reasons:
80d1389403SSimon Glass  *
81d1389403SSimon Glass  *              1) There is an obvious need for a common C version of
82d1389403SSimon Glass  *              Dhrystone, since C is at present the most popular system
83d1389403SSimon Glass  *              programming language for the class of processors
84d1389403SSimon Glass  *              (microcomputers, minicomputers) where Dhrystone is used most.
85d1389403SSimon Glass  *              There should be, as far as possible, only one C version of
86d1389403SSimon Glass  *              Dhrystone such that results can be compared without
87d1389403SSimon Glass  *              restrictions. In the past, the C versions distributed
88d1389403SSimon Glass  *              by Rick Richardson (Version 1.1) and by Reinhold Weicker
89d1389403SSimon Glass  *              had small (though not significant) differences.
90d1389403SSimon Glass  *
91d1389403SSimon Glass  *              2) As far as it is possible without changes to the Dhrystone
92d1389403SSimon Glass  *              statistics, optimizing compilers should be prevented from
93d1389403SSimon Glass  *              removing significant statements.
94d1389403SSimon Glass  *
95d1389403SSimon Glass  *              This C version has been developed in cooperation with
96d1389403SSimon Glass  *              Rick Richardson (Tinton Falls, NJ), it incorporates many
97d1389403SSimon Glass  *              ideas from the "Version 1.1" distributed previously by
98d1389403SSimon Glass  *              him over the UNIX network Usenet.
99d1389403SSimon Glass  *              I also thank Chaim Benedelac (National Semiconductor),
100d1389403SSimon Glass  *              David Ditzel (SUN), Earl Killian and John Mashey (MIPS),
101d1389403SSimon Glass  *              Alan Smith and Rafael Saavedra-Barrera (UC at Berkeley)
102d1389403SSimon Glass  *              for their help with comments on earlier versions of the
103d1389403SSimon Glass  *              benchmark.
104d1389403SSimon Glass  *
105d1389403SSimon Glass  *  Changes:    In the initialization part, this version follows mostly
106d1389403SSimon Glass  *              Rick Richardson's version distributed via Usenet, not the
107d1389403SSimon Glass  *              version distributed earlier via floppy disk by Reinhold Weicker.
108d1389403SSimon Glass  *              As a concession to older compilers, names have been made
109d1389403SSimon Glass  *              unique within the first 8 characters.
110d1389403SSimon Glass  *              Inside the measurement loop, this version follows the
111d1389403SSimon Glass  *              version previously distributed by Reinhold Weicker.
112d1389403SSimon Glass  *
113d1389403SSimon Glass  *              At several places in the benchmark, code has been added,
114d1389403SSimon Glass  *              but within the measurement loop only in branches that
115d1389403SSimon Glass  *              are not executed. The intention is that optimizing compilers
116d1389403SSimon Glass  *              should be prevented from moving code out of the measurement
117d1389403SSimon Glass  *              loop, or from removing code altogether. Since the statements
118d1389403SSimon Glass  *              that are executed within the measurement loop have NOT been
119d1389403SSimon Glass  *              changed, the numbers defining the "Dhrystone distribution"
120d1389403SSimon Glass  *              (distribution of statements, operand types and locality)
121d1389403SSimon Glass  *              still hold. Except for sophisticated optimizing compilers,
122d1389403SSimon Glass  *              execution times for this version should be the same as
123d1389403SSimon Glass  *              for previous versions.
124d1389403SSimon Glass  *
125d1389403SSimon Glass  *              Since it has proven difficult to subtract the time for the
126d1389403SSimon Glass  *              measurement loop overhead in a correct way, the loop check
127d1389403SSimon Glass  *              has been made a part of the benchmark. This does have
128d1389403SSimon Glass  *              an impact - though a very minor one - on the distribution
129d1389403SSimon Glass  *              statistics which have been updated for this version.
130d1389403SSimon Glass  *
131d1389403SSimon Glass  *              All changes within the measurement loop are described
132d1389403SSimon Glass  *              and discussed in the companion paper "Rationale for
133d1389403SSimon Glass  *              Dhrystone version 2".
134d1389403SSimon Glass  *
135d1389403SSimon Glass  *              Because of the self-imposed limitation that the order and
136d1389403SSimon Glass  *              distribution of the executed statements should not be
137d1389403SSimon Glass  *              changed, there are still cases where optimizing compilers
138d1389403SSimon Glass  *              may not generate code for some statements. To a certain
139d1389403SSimon Glass  *              degree, this is unavoidable for small synthetic benchmarks.
140d1389403SSimon Glass  *              Users of the benchmark are advised to check code listings
141d1389403SSimon Glass  *              whether code is generated for all statements of Dhrystone.
142d1389403SSimon Glass  *
143d1389403SSimon Glass  *              Version 2.1 is identical to version 2.0 distributed via
144d1389403SSimon Glass  *              the UNIX network Usenet in March 1988 except that it corrects
145d1389403SSimon Glass  *              some minor deficiencies that were found by users of version 2.0.
146d1389403SSimon Glass  *              The only change within the measurement loop is that a
147d1389403SSimon Glass  *              non-executed "else" part was added to the "if" statement in
148d1389403SSimon Glass  *              Func_3, and a non-executed "else" part removed from Proc_3.
149d1389403SSimon Glass  *
150d1389403SSimon Glass  ***************************************************************************
151d1389403SSimon Glass  *
152d1389403SSimon Glass  * Defines:     The following "Defines" are possible:
153d1389403SSimon Glass  *              -DREG=register          (default: Not defined)
154d1389403SSimon Glass  *                      As an approximation to what an average C programmer
155d1389403SSimon Glass  *                      might do, the "register" storage class is applied
156d1389403SSimon Glass  *                      (if enabled by -DREG=register)
157d1389403SSimon Glass  *                      - for local variables, if they are used (dynamically)
158d1389403SSimon Glass  *                        five or more times
159d1389403SSimon Glass  *                      - for parameters if they are used (dynamically)
160d1389403SSimon Glass  *                        six or more times
161d1389403SSimon Glass  *                      Note that an optimal "register" strategy is
162d1389403SSimon Glass  *                      compiler-dependent, and that "register" declarations
163d1389403SSimon Glass  *                      do not necessarily lead to faster execution.
164d1389403SSimon Glass  *              -DNOSTRUCTASSIGN        (default: Not defined)
165d1389403SSimon Glass  *                      Define if the C compiler does not support
166d1389403SSimon Glass  *                      assignment of structures.
167d1389403SSimon Glass  *              -DNOENUMS               (default: Not defined)
168d1389403SSimon Glass  *                      Define if the C compiler does not support
169d1389403SSimon Glass  *                      enumeration types.
170d1389403SSimon Glass  *              -DTIMES                 (default)
171d1389403SSimon Glass  *              -DTIME
172d1389403SSimon Glass  *                      The "times" function of UNIX (returning process times)
173d1389403SSimon Glass  *                      or the "time" function (returning wallclock time)
174d1389403SSimon Glass  *                      is used for measurement.
175d1389403SSimon Glass  *                      For single user machines, "time ()" is adequate. For
176d1389403SSimon Glass  *                      multi-user machines where you cannot get single-user
177d1389403SSimon Glass  *                      access, use the "times ()" function. If you have
178d1389403SSimon Glass  *                      neither, use a stopwatch in the dead of night.
179d1389403SSimon Glass  *                      "printf"s are provided marking the points "Start Timer"
180d1389403SSimon Glass  *                      and "Stop Timer". DO NOT use the UNIX "time(1)"
181d1389403SSimon Glass  *                      command, as this will measure the total time to
182d1389403SSimon Glass  *                      run this program, which will (erroneously) include
183d1389403SSimon Glass  *                      the time to allocate storage (malloc) and to perform
184d1389403SSimon Glass  *                      the initialization.
185d1389403SSimon Glass  *              -DHZ=nnn
186d1389403SSimon Glass  *                      In Berkeley UNIX, the function "times" returns process
187d1389403SSimon Glass  *                      time in 1/HZ seconds, with HZ = 60 for most systems.
188d1389403SSimon Glass  *                      CHECK YOUR SYSTEM DESCRIPTION BEFORE YOU JUST APPLY
189d1389403SSimon Glass  *                      A VALUE.
190d1389403SSimon Glass  *
191d1389403SSimon Glass  ***************************************************************************
192d1389403SSimon Glass  *
193d1389403SSimon Glass  *  Compilation model and measurement (IMPORTANT):
194d1389403SSimon Glass  *
195d1389403SSimon Glass  *  This C version of Dhrystone consists of three files:
196d1389403SSimon Glass  *  - dhry.h (this file, containing global definitions and comments)
197d1389403SSimon Glass  *  - dhry_1.c (containing the code corresponding to Ada package Pack_1)
198d1389403SSimon Glass  *  - dhry_2.c (containing the code corresponding to Ada package Pack_2)
199d1389403SSimon Glass  *
200d1389403SSimon Glass  *  The following "ground rules" apply for measurements:
201d1389403SSimon Glass  *  - Separate compilation
202d1389403SSimon Glass  *  - No procedure merging
203d1389403SSimon Glass  *  - Otherwise, compiler optimizations are allowed but should be indicated
204d1389403SSimon Glass  *  - Default results are those without register declarations
205d1389403SSimon Glass  *  See the companion paper "Rationale for Dhrystone Version 2" for a more
206d1389403SSimon Glass  *  detailed discussion of these ground rules.
207d1389403SSimon Glass  *
208d1389403SSimon Glass  *  For 16-Bit processors (e.g. 80186, 80286), times for all compilation
209d1389403SSimon Glass  *  models ("small", "medium", "large" etc.) should be given if possible,
210d1389403SSimon Glass  *  together with a definition of these models for the compiler system used.
211d1389403SSimon Glass  *
212d1389403SSimon Glass  **************************************************************************
213d1389403SSimon Glass  *
214d1389403SSimon Glass  *  Dhrystone (C version) statistics:
215d1389403SSimon Glass  *
216d1389403SSimon Glass  *  [Comment from the first distribution, updated for version 2.
217d1389403SSimon Glass  *   Note that because of language differences, the numbers are slightly
218d1389403SSimon Glass  *   different from the Ada version.]
219d1389403SSimon Glass  *
220d1389403SSimon Glass  *  The following program contains statements of a high level programming
221d1389403SSimon Glass  *  language (here: C) in a distribution considered representative:
222d1389403SSimon Glass  *
223d1389403SSimon Glass  *    assignments                  52 (51.0 %)
224d1389403SSimon Glass  *    control statements           33 (32.4 %)
225d1389403SSimon Glass  *    procedure, function calls    17 (16.7 %)
226d1389403SSimon Glass  *
227d1389403SSimon Glass  *  103 statements are dynamically executed. The program is balanced with
228d1389403SSimon Glass  *  respect to the three aspects:
229d1389403SSimon Glass  *
230d1389403SSimon Glass  *    - statement type
231d1389403SSimon Glass  *    - operand type
232d1389403SSimon Glass  *    - operand locality
233d1389403SSimon Glass  *         operand global, local, parameter, or constant.
234d1389403SSimon Glass  *
235d1389403SSimon Glass  *  The combination of these three aspects is balanced only approximately.
236d1389403SSimon Glass  *
237d1389403SSimon Glass  *  1. Statement Type:
238d1389403SSimon Glass  *  -----------------             number
239d1389403SSimon Glass  *
240d1389403SSimon Glass  *     V1 = V2                     9
241d1389403SSimon Glass  *       (incl. V1 = F(..)
242d1389403SSimon Glass  *     V = Constant               12
243d1389403SSimon Glass  *     Assignment,                 7
244d1389403SSimon Glass  *       with array element
245d1389403SSimon Glass  *     Assignment,                 6
246d1389403SSimon Glass  *       with record component
247d1389403SSimon Glass  *                                --
248d1389403SSimon Glass  *                                34       34
249d1389403SSimon Glass  *
250d1389403SSimon Glass  *     X = Y +|-|"&&"|"|" Z        5
251d1389403SSimon Glass  *     X = Y +|-|"==" Constant     6
252d1389403SSimon Glass  *     X = X +|- 1                 3
253d1389403SSimon Glass  *     X = Y *|/ Z                 2
254d1389403SSimon Glass  *     X = Expression,             1
255d1389403SSimon Glass  *           two operators
256d1389403SSimon Glass  *     X = Expression,             1
257d1389403SSimon Glass  *           three operators
258d1389403SSimon Glass  *                                --
259d1389403SSimon Glass  *                                18       18
260d1389403SSimon Glass  *
261d1389403SSimon Glass  *     if ....                    14
262d1389403SSimon Glass  *       with "else"      7
263d1389403SSimon Glass  *       without "else"   7
264d1389403SSimon Glass  *           executed        3
265d1389403SSimon Glass  *           not executed    4
266d1389403SSimon Glass  *     for ...                     7  |  counted every time
267d1389403SSimon Glass  *     while ...                   4  |  the loop condition
268d1389403SSimon Glass  *     do ... while                1  |  is evaluated
269d1389403SSimon Glass  *     switch ...                  1
270d1389403SSimon Glass  *     break                       1
271d1389403SSimon Glass  *     declaration with            1
272d1389403SSimon Glass  *       initialization
273d1389403SSimon Glass  *                                --
274d1389403SSimon Glass  *                                34       34
275d1389403SSimon Glass  *
276d1389403SSimon Glass  *     P (...)  procedure call    11
277d1389403SSimon Glass  *       user procedure      10
278d1389403SSimon Glass  *       library procedure    1
279d1389403SSimon Glass  *     X = F (...)
280d1389403SSimon Glass  *             function  call      6
281d1389403SSimon Glass  *       user function        5
282d1389403SSimon Glass  *       library function     1
283d1389403SSimon Glass  *                                --
284d1389403SSimon Glass  *                                17       17
285d1389403SSimon Glass  *                                        ---
286d1389403SSimon Glass  *                                        103
287d1389403SSimon Glass  *
288d1389403SSimon Glass  *    The average number of parameters in procedure or function calls
289d1389403SSimon Glass  *    is 1.82 (not counting the function values as implicit parameters).
290d1389403SSimon Glass  *
291d1389403SSimon Glass  *
292d1389403SSimon Glass  *  2. Operators
293d1389403SSimon Glass  *  ------------
294d1389403SSimon Glass  *                          number    approximate
295d1389403SSimon Glass  *                                    percentage
296d1389403SSimon Glass  *
297d1389403SSimon Glass  *    Arithmetic             32          50.8
298d1389403SSimon Glass  *
299d1389403SSimon Glass  *       +                     21          33.3
300d1389403SSimon Glass  *       -                      7          11.1
301d1389403SSimon Glass  *       *                      3           4.8
302d1389403SSimon Glass  *       / (int div)            1           1.6
303d1389403SSimon Glass  *
304d1389403SSimon Glass  *    Comparison             27           42.8
305d1389403SSimon Glass  *
306d1389403SSimon Glass  *       ==                     9           14.3
307d1389403SSimon Glass  *       /=                     4            6.3
308d1389403SSimon Glass  *       >                      1            1.6
309d1389403SSimon Glass  *       <                      3            4.8
310d1389403SSimon Glass  *       >=                     1            1.6
311d1389403SSimon Glass  *       <=                     9           14.3
312d1389403SSimon Glass  *
313d1389403SSimon Glass  *    Logic                   4            6.3
314d1389403SSimon Glass  *
315d1389403SSimon Glass  *       && (AND-THEN)          1            1.6
316d1389403SSimon Glass  *       |  (OR)                1            1.6
317d1389403SSimon Glass  *       !  (NOT)               2            3.2
318d1389403SSimon Glass  *
319d1389403SSimon Glass  *                           --          -----
320d1389403SSimon Glass  *                           63          100.1
321d1389403SSimon Glass  *
322d1389403SSimon Glass  *
323d1389403SSimon Glass  *  3. Operand Type (counted once per operand reference):
324d1389403SSimon Glass  *  ---------------
325d1389403SSimon Glass  *                          number    approximate
326d1389403SSimon Glass  *                                    percentage
327d1389403SSimon Glass  *
328d1389403SSimon Glass  *     Integer               175        72.3 %
329d1389403SSimon Glass  *     Character              45        18.6 %
330d1389403SSimon Glass  *     Pointer                12         5.0 %
331d1389403SSimon Glass  *     String30                6         2.5 %
332d1389403SSimon Glass  *     Array                   2         0.8 %
333d1389403SSimon Glass  *     Record                  2         0.8 %
334d1389403SSimon Glass  *                           ---       -------
335d1389403SSimon Glass  *                           242       100.0 %
336d1389403SSimon Glass  *
337d1389403SSimon Glass  *  When there is an access path leading to the final operand (e.g. a record
338d1389403SSimon Glass  *  component), only the final data type on the access path is counted.
339d1389403SSimon Glass  *
340d1389403SSimon Glass  *
341d1389403SSimon Glass  *  4. Operand Locality:
342d1389403SSimon Glass  *  -------------------
343d1389403SSimon Glass  *                                number    approximate
344d1389403SSimon Glass  *                                          percentage
345d1389403SSimon Glass  *
346d1389403SSimon Glass  *     local variable              114        47.1 %
347d1389403SSimon Glass  *     global variable              22         9.1 %
348d1389403SSimon Glass  *     parameter                    45        18.6 %
349d1389403SSimon Glass  *        value                        23         9.5 %
350d1389403SSimon Glass  *        reference                    22         9.1 %
351d1389403SSimon Glass  *     function result               6         2.5 %
352d1389403SSimon Glass  *     constant                     55        22.7 %
353d1389403SSimon Glass  *                                 ---       -------
354d1389403SSimon Glass  *                                 242       100.0 %
355d1389403SSimon Glass  *
356d1389403SSimon Glass  *
357d1389403SSimon Glass  *  The program does not compute anything meaningful, but it is syntactically
358d1389403SSimon Glass  *  and semantically correct. All variables have a value assigned to them
359d1389403SSimon Glass  *  before they are used as a source operand.
360d1389403SSimon Glass  *
361d1389403SSimon Glass  *  There has been no explicit effort to account for the effects of a
362d1389403SSimon Glass  *  cache, or to balance the use of long or short displacements for code or
363d1389403SSimon Glass  *  data.
364d1389403SSimon Glass  *
365d1389403SSimon Glass  ***************************************************************************
366d1389403SSimon Glass  */
367d1389403SSimon Glass 
368d1389403SSimon Glass 
369d1389403SSimon Glass /* Compiler and system dependent definitions: */
370d1389403SSimon Glass 
371d1389403SSimon Glass #ifndef TIME
372d1389403SSimon Glass #define TIMES
373d1389403SSimon Glass #endif
374d1389403SSimon Glass                 /* Use times(2) time function unless    */
375d1389403SSimon Glass                 /* explicitly defined otherwise         */
376d1389403SSimon Glass 
377d1389403SSimon Glass #define Mic_secs_Per_Second     1000000.0
378d1389403SSimon Glass                 /* Berkeley UNIX C returns process times in seconds/HZ */
379d1389403SSimon Glass 
380d1389403SSimon Glass #ifdef  NOSTRUCTASSIGN
381d1389403SSimon Glass #define structassign(d, s)      memcpy(&(d), &(s), sizeof(d))
382d1389403SSimon Glass #else
383d1389403SSimon Glass #define structassign(d, s)      d = s
384d1389403SSimon Glass #endif
385d1389403SSimon Glass 
386d1389403SSimon Glass #ifdef  NOENUM
387d1389403SSimon Glass #define Ident_1 0
388d1389403SSimon Glass #define Ident_2 1
389d1389403SSimon Glass #define Ident_3 2
390d1389403SSimon Glass #define Ident_4 3
391d1389403SSimon Glass #define Ident_5 4
392d1389403SSimon Glass   typedef int   Enumeration;
393d1389403SSimon Glass #else
394d1389403SSimon Glass   typedef       enum    {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
395d1389403SSimon Glass                 Enumeration;
396d1389403SSimon Glass #endif
397d1389403SSimon Glass         /* for boolean and enumeration types in Ada, Pascal */
398d1389403SSimon Glass 
399d1389403SSimon Glass /* General definitions: */
400d1389403SSimon Glass 
401d1389403SSimon Glass #define Null 0
402d1389403SSimon Glass                 /* Value of a Null pointer */
403d1389403SSimon Glass #define true  1
404d1389403SSimon Glass #define false 0
405d1389403SSimon Glass 
406d1389403SSimon Glass typedef int     One_Thirty;
407d1389403SSimon Glass typedef int     One_Fifty;
408d1389403SSimon Glass typedef char    Capital_Letter;
409d1389403SSimon Glass typedef int     Boolean;
410d1389403SSimon Glass typedef char    Str_30 [31];
411d1389403SSimon Glass typedef int     Arr_1_Dim [50];
412d1389403SSimon Glass typedef int     Arr_2_Dim [50] [50];
413d1389403SSimon Glass 
414d1389403SSimon Glass typedef struct record
415d1389403SSimon Glass     {
416d1389403SSimon Glass     struct record *Ptr_Comp;
417d1389403SSimon Glass     Enumeration    Discr;
418d1389403SSimon Glass     union {
419d1389403SSimon Glass           struct {
420d1389403SSimon Glass                   Enumeration Enum_Comp;
421d1389403SSimon Glass                   int         Int_Comp;
422d1389403SSimon Glass                   char        Str_Comp [31];
423d1389403SSimon Glass                   } var_1;
424d1389403SSimon Glass           struct {
425d1389403SSimon Glass                   Enumeration E_Comp_2;
426d1389403SSimon Glass                   char        Str_2_Comp [31];
427d1389403SSimon Glass                   } var_2;
428d1389403SSimon Glass           struct {
429d1389403SSimon Glass                   char        Ch_1_Comp;
430d1389403SSimon Glass                   char        Ch_2_Comp;
431d1389403SSimon Glass                   } var_3;
432d1389403SSimon Glass           } variant;
433d1389403SSimon Glass       } Rec_Type, *Rec_Pointer;
434d1389403SSimon Glass 
435d1389403SSimon Glass 
436d1389403SSimon Glass /*
437d1389403SSimon Glass  * dhry() - run dhrystone for a given number of iterations
438d1389403SSimon Glass  *
439d1389403SSimon Glass  * @iterations:	Number of iterations to run
440d1389403SSimon Glass  */
441d1389403SSimon Glass void dhry(int iterations);
442