| /* |
| ************************************************************************** |
| * DHRYSTONE 2.1 BENCHMARK PC VERSION |
| ************************************************************************** |
| * |
| * "DHRYSTONE" Benchmark Program |
| * ----------------------------- |
| * |
| * Version: C, Version 2.1 |
| * |
| * File: dhry.h (part 1 of 3) |
| * |
| * Date: May 25, 1988 |
| * |
| * Author: Reinhold P. Weicker |
| * Siemens AG, AUT E 51 |
| * Postfach 3220 |
| * 8520 Erlangen |
| * Germany (West) |
| * Phone: [+49]-9131-7-20330 |
| * (8-17 Central European Time) |
| * Usenet: ..!mcsun!unido!estevax!weicker |
| * |
| * Original Version (in Ada) published in |
| * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984), |
| * pp. 1013 - 1030, together with the statistics |
| * on which the distribution of statements etc. is based. |
| * |
| * In this C version, the following C library functions are used: |
| * - strcpy, strcmp (inside the measurement loop) |
| * - printf, scanf (outside the measurement loop) |
| * In addition, Berkeley UNIX system calls "times ()" or "time ()" |
| * are used for execution time measurement. For measurements |
| * on other systems, these calls have to be changed. |
| * |
| * Collection of Results: |
| * Reinhold Weicker (address see above) and |
| * |
| * Rick Richardson |
| * PC Research. Inc. |
| * 94 Apple Orchard Drive |
| * Tinton Falls, NJ 07724 |
| * Phone: (201) 389-8963 (9-17 EST) |
| * Usenet: ...!uunet!pcrat!rick |
| * |
| * Please send results to Rick Richardson and/or Reinhold Weicker. |
| * Complete information should be given on hardware and software used. |
| * Hardware information includes: Machine type, CPU, type and size |
| * of caches; for microprocessors: clock frequency, memory speed |
| * (number of wait states). |
| * Software information includes: Compiler (and runtime library) |
| * manufacturer and version, compilation switches, OS version. |
| * The Operating System version may give an indication about the |
| * compiler; Dhrystone itself performs no OS calls in the measurement |
| * loop. |
| * |
| * The complete output generated by the program should be mailed |
| * such that at least some checks for correctness can be made. |
| * |
| ************************************************************************** |
| * |
| * This version has changes made by Roy Longbottom to conform to a common |
| * format for a series of standard benchmarks for PCs: |
| * |
| * Running time greater than 5 seconds due to inaccuracy of the PC clock. |
| * |
| * Automatic adjustment of run time, no manually inserted parameters. |
| * |
| * Initial display of calibration times to confirm linearity. |
| * |
| * Display of results within one screen (or at a slow speed as the test |
| * progresses) so that it can be seen to have run successfully. |
| * |
| * Facilities to type in details of system used etc. |
| * |
| * All results and details appended to a results file. |
| * |
| * |
| * Roy Longbottom |
| * 101323.2241@compuserve.com |
| * |
| ************************************************************************** |
| * |
| * For details of history, changes, other defines, benchmark construction |
| * statistics see official versions from ftp.nosc.mil/pub/aburto where |
| * the latest table of results (dhry.tbl) are available. See also |
| * netlib@ornl.gov |
| * |
| ************************************************************************** |
| * |
| * Defines: The following "Defines" are possible: |
| * -DREG=register (default: Not defined) |
| * As an approximation to what an average C programmer |
| * might do, the "register" storage class is applied |
| * (if enabled by -DREG=register) |
| * - for local variables, if they are used (dynamically) |
| * five or more times |
| * - for parameters if they are used (dynamically) |
| * six or more times |
| * Note that an optimal "register" strategy is |
| * compiler-dependent, and that "register" declarations |
| * do not necessarily lead to faster execution. |
| * -DNOSTRUCTASSIGN (default: Not defined) |
| * Define if the C compiler does not support |
| * assignment of structures. |
| * -DNOENUMS (default: Not defined) |
| * Define if the C compiler does not support |
| * enumeration types. |
| *************************************************************************** |
| * |
| * Compilation model and measurement (IMPORTANT): |
| * |
| * This C version of Dhrystone consists of three files: |
| * - dhry.h (this file, containing global definitions and comments) |
| * - dhry_1.c (containing the code corresponding to Ada package Pack_1) |
| * - dhry_2.c (containing the code corresponding to Ada package Pack_2) |
| * |
| * The following "ground rules" apply for measurements: |
| * - Separate compilation |
| * - No procedure merging |
| * - Otherwise, compiler optimizations are allowed but should be indicated |
| * - Default results are those without register declarations |
| * See the companion paper "Rationale for Dhrystone Version 2" for a more |
| * detailed discussion of these ground rules. |
| * |
| * For 16-Bit processors (e.g. 80186, 80286), times for all compilation |
| * models ("small", "medium", "large" etc.) should be given if possible, |
| * together with a definition of these models for the compiler system used. |
| * |
| ************************************************************************** |
| * Examples of Pentium Results |
| * |
| * Dhrystone Benchmark Version 2.1 (Language: C) |
| * |
| * Month run 4/1996 |
| * PC model Escom |
| * CPU Pentium |
| * Clock MHz 100 |
| * Cache 256K |
| * Options Neptune chipset |
| * OS/DOS Windows 95 |
| * Compiler Watcom C/ C++ 10.5 Win386 |
| * OptLevel -otexan -zp8 -fp5 -5r |
| * Run by Roy Longbottom |
| * From UK |
| * Mail 101323.2241@compuserve.com |
| * |
| * Final values (* implementation-dependent): |
| * |
| * Int_Glob: O.K. 5 |
| * Bool_Glob: O.K. 1 |
| * Ch_1_Glob: O.K. A |
| * Ch_2_Glob: O.K. B |
| * Arr_1_Glob[8]: O.K. 7 |
| * Arr_2_Glob8/7: O.K. 1600010 |
| * Ptr_Glob-> |
| * Ptr_Comp: * 98008 |
| * Discr: O.K. 0 |
| * Enum_Comp: O.K. 2 |
| * Int_Comp: O.K. 17 |
| * Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING |
| * Next_Ptr_Glob-> |
| * Ptr_Comp: * 98008 same as above |
| * Discr: O.K. 0 |
| * Enum_Comp: O.K. 1 |
| * Int_Comp: O.K. 18 |
| * Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING |
| * Int_1_Loc: O.K. 5 |
| * Int_2_Loc: O.K. 13 |
| * Int_3_Loc: O.K. 7 |
| * Enum_Loc: O.K. 1 |
| * Str_1_Loc: O.K. DHRYSTONE PROGRAM, 1'ST STRING |
| * Str_2_Loc: O.K. DHRYSTONE PROGRAM, 2'ND STRING |
| * |
| * Register option Selected. |
| * |
| * Microseconds 1 loop: 4.53 |
| * Dhrystones / second: 220690 |
| * VAX MIPS rating: 125.61 |
| * |
| * |
| * Dhrystone Benchmark Version 2.1 (Language: C) |
| * |
| * Month run 4/1996 |
| * PC model Escom |
| * CPU Pentium |
| * Clock MHz 100 |
| * Cache 256K |
| * Options Neptune chipset |
| * OS/DOS Windows 95 |
| * Compiler Watcom C/ C++ 10.5 Win386 |
| * OptLevel No optimisation |
| * Run by Roy Longbottom |
| * From UK |
| * Mail 101323.2241@compuserve.com |
| * |
| * Final values (* implementation-dependent): |
| * |
| * Int_Glob: O.K. 5 |
| * Bool_Glob: O.K. 1 |
| * Ch_1_Glob: O.K. A |
| * Ch_2_Glob: O.K. B |
| * Arr_1_Glob[8]: O.K. 7 |
| * Arr_2_Glob8/7: O.K. 320010 |
| * Ptr_Glob-> |
| * Ptr_Comp: * 98004 |
| * Discr: O.K. 0 |
| * Enum_Comp: O.K. 2 |
| * Int_Comp: O.K. 17 |
| * Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING |
| * Next_Ptr_Glob-> |
| * Ptr_Comp: * 98004 same as above |
| * Discr: O.K. 0 |
| * Enum_Comp: O.K. 1 |
| * Int_Comp: O.K. 18 |
| * Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING |
| * Int_1_Loc: O.K. 5 |
| * Int_2_Loc: O.K. 13 |
| * Int_3_Loc: O.K. 7 |
| * Enum_Loc: O.K. 1 |
| * Str_1_Loc: O.K. DHRYSTONE PROGRAM, 1'ST STRING |
| * Str_2_Loc: O.K. DHRYSTONE PROGRAM, 2'ND STRING |
| * |
| * Register option Not selected. |
| * |
| * Microseconds 1 loop: 20.06 |
| * Dhrystones / second: 49844 |
| * VAX MIPS rating: 28.37 |
| * |
| ************************************************************************** |
| */ |
| |
| /* Compiler and system dependent definitions: */ |
| |
| #ifndef TIME |
| #define TIMES |
| #endif |
| /* Use times(2) time function unless */ |
| /* explicitly defined otherwise */ |
| |
| #ifdef TIMES |
| /* #include <sys/types.h> |
| #include <sys/times.h> */ |
| /* for "times" */ |
| #endif |
| |
| #define Mic_secs_Per_Second 1000000.0 |
| /* Berkeley UNIX C returns process times in seconds/HZ */ |
| |
| #ifdef NOSTRUCTASSIGN |
| #define structassign(d, s) memcpy(&(d), &(s), sizeof(d)) |
| #else |
| #define structassign(d, s) d = s |
| #endif |
| |
| #ifdef NOENUM |
| #define Ident_1 0 |
| #define Ident_2 1 |
| #define Ident_3 2 |
| #define Ident_4 3 |
| #define Ident_5 4 |
| typedef int Enumeration; |
| #else |
| typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5} |
| Enumeration; |
| #endif |
| /* for boolean and enumeration types in Ada, Pascal */ |
| |
| /* General definitions: */ |
| |
| #include <stdio.h> |
| #include <string.h> |
| |
| /* for strcpy, strcmp */ |
| |
| #define Null 0 |
| /* Value of a Null pointer */ |
| #define true 1 |
| #define false 0 |
| |
| typedef int One_Thirty; |
| typedef int One_Fifty; |
| typedef char Capital_Letter; |
| typedef int Boolean; |
| typedef char Str_30 [31]; |
| typedef int Arr_1_Dim [50]; |
| typedef int Arr_2_Dim [50] [50]; |
| |
| typedef struct record |
| { |
| struct record *Ptr_Comp; |
| Enumeration Discr; |
| union { |
| struct { |
| Enumeration Enum_Comp; |
| int Int_Comp; |
| char Str_Comp [31]; |
| } var_1; |
| struct { |
| Enumeration E_Comp_2; |
| char Str_2_Comp [31]; |
| } var_2; |
| struct { |
| char Ch_1_Comp; |
| char Ch_2_Comp; |
| } var_3; |
| } variant; |
| } Rec_Type, *Rec_Pointer; |
| |
| |
| |