| 1 | /***** hpda:net.sources / homxb!gemini /  1:58 am  Apr  1, 1986*/ | 
| 2 | /*    EVERBODY:    Please read "APOLOGY" below. -rick 01/06/85 | 
| 3 | *            See introduction in net.arch, or net.micro | 
| 4 | * | 
| 5 | *    "DHRYSTONE" Benchmark Program | 
| 6 | * | 
| 7 | *    Version:    C/1.1, 12/01/84 | 
| 8 | * | 
| 9 | *    Date:        PROGRAM updated 01/06/86, RESULTS updated 03/31/86 | 
| 10 | * | 
| 11 | *    Author:        Reinhold P. Weicker,  CACM Vol 27, No 10, 10/84 pg. 1013 | 
| 12 | *            Translated from ADA by Rick Richardson | 
| 13 | *            Every method to preserve ADA-likeness has been used, | 
| 14 | *            at the expense of C-ness. | 
| 15 | * | 
| 16 | *    Compile:    cc -O dry.c -o drynr            : No registers | 
| 17 | *            cc -O -DREG=register dry.c -o dryr    : Registers | 
| 18 | * | 
| 19 | *    Defines:    Defines are provided for old C compiler's | 
| 20 | *            which don't have enums, and can't assign structures. | 
| 21 | *            The time(2) function is library dependant; Most | 
| 22 | *            return the time in seconds, but beware of some, like | 
| 23 | *            Aztec C, which return other units. | 
| 24 | *            The LOOPS define is initially set for 50000 loops. | 
| 25 | *            If you have a machine with large integers and is | 
| 26 | *            very fast, please change this number to 500000 to | 
| 27 | *            get better accuracy.  Please select the way to | 
| 28 | *            measure the execution time using the TIME define. | 
| 29 | *            For single user machines, time(2) is adequate. For | 
| 30 | *            multi-user machines where you cannot get single-user | 
| 31 | *            access, use the times(2) function.  If you have | 
| 32 | *            neither, use a stopwatch in the dead of night. | 
| 33 | *            Use a "printf" at the point marked "start timer" | 
| 34 | *            to begin your timings. DO NOT use the UNIX "time(1)" | 
| 35 | *            command, as this will measure the total time to | 
| 36 | *            run this program, which will (erroneously) include | 
| 37 | *            the time to malloc(3) storage and to compute the | 
| 38 | *            time it takes to do nothing. | 
| 39 | * | 
| 40 | *    Run:        drynr; dryr | 
| 41 | * | 
| 42 | *    Results:    If you get any new machine/OS results, please send to: | 
| 43 | * | 
| 44 | *                ihnp4!castor!pcrat!rick | 
| 45 | * | 
| 46 | *            and thanks to all that do.  Space prevents listing | 
| 47 | *            the names of those who have provided some of these | 
| 48 | *            results.  I'll be forwarding these results to | 
| 49 | *            Rheinhold Weicker. | 
| 50 | * | 
| 51 | *    Note:        I order the list in increasing performance of the | 
| 52 | *            "with registers" benchmark.  If the compiler doesn't | 
| 53 | *            provide register variables, then the benchmark | 
| 54 | *            is the same for both REG and NOREG. | 
| 55 | * | 
| 56 | *    PLEASE:        Send complete information about the machine type, | 
| 57 | *            clock speed, OS and C manufacturer/version.  If | 
| 58 | *            the machine is modified, tell me what was done. | 
| 59 | *            On UNIX, execute uname -a and cc -V to get this info. | 
| 60 | * | 
| 61 | *    80x8x NOTE:    80x8x benchers: please try to do all memory models | 
| 62 | *            for a particular compiler. | 
| 63 | * | 
| 64 | *    APOLOGY (1/30/86): | 
| 65 | *        Well, I goofed things up!  As pointed out by Haakon Bugge, | 
| 66 | *        the line of code marked "GOOF" below was missing from the | 
| 67 | *        Dhrystone distribution for the last several months.  It | 
| 68 | *        *WAS* in a backup copy I made last winter, so no doubt it | 
| 69 | *        was victimized by sleepy fingers operating vi! | 
| 70 | * | 
| 71 | *        The effect of the line missing is that the reported benchmarks | 
| 72 | *        are 15% too fast (at least on a 80286).  Now, this creates | 
| 73 | *        a dilema - do I throw out ALL the data so far collected | 
| 74 | *        and use only results from this (corrected) version, or | 
| 75 | *        do I just keep collecting data for the old version? | 
| 76 | * | 
| 77 | *        Since the data collected so far *is* valid as long as it | 
| 78 | *        is compared with like data, I have decided to keep | 
| 79 | *        TWO lists- one for the old benchmark, and one for the | 
| 80 | *        new.  This also gives me an opportunity to correct one | 
| 81 | *        other error I made in the instructions for this benchmark. | 
| 82 | *        My experience with C compilers has been mostly with | 
| 83 | *        UNIX 'pcc' derived compilers, where the 'optimizer' simply | 
| 84 | *        fixes sloppy code generation (peephole optimization). | 
| 85 | *        But today, there exist C compiler optimizers that will actually | 
| 86 | *        perform optimization in the Computer Science sense of the word, | 
| 87 | *        by removing, for example, assignments to a variable whose | 
| 88 | *        value is never used.  Dhrystone, unfortunately, provides | 
| 89 | *        lots of opportunities for this sort of optimization. | 
| 90 | * | 
| 91 | *        I request that benchmarkers re-run this new, corrected | 
| 92 | *        version of Dhrystone, turning off or bypassing optimizers | 
| 93 | *        which perform more than peephole optimization.  Please | 
| 94 | *        indicate the version of Dhrystone used when reporting the | 
| 95 | *        results to me. | 
| 96 | * | 
| 97 | * RESULTS BEGIN HERE | 
| 98 | * | 
| 99 | *----------------DHRYSTONE VERSION 1.1 RESULTS BEGIN-------------------------- | 
| 100 | * | 
| 101 | * MACHINE    MICROPROCESSOR    OPERATING    COMPILER    DHRYSTONES/SEC. | 
| 102 | * TYPE                SYSTEM                NO REG    REGS | 
| 103 | * --------------------------    ------------    -----------    --------------- | 
| 104 | * Apple IIe    65C02-1.02Mhz    DOS 3.3        Aztec CII v1.05i  37      37 | 
| 105 | * -        Z80-2.5Mhz    CPM-80 v2.2    Aztec CII v1.05g  91      91 | 
| 106 | * -        8086-8Mhz    RMX86 V6    Intel C-86 V2.0     197     203LM?? | 
| 107 | * IBM PC/XT    8088-4.77Mhz    COHERENT 2.3.43    Mark Wiiliams     259     275 | 
| 108 | * -        8086-8Mhz    RMX86 V6    Intel C-86 V2.0     287     304 ?? | 
| 109 | * Fortune 32:16 68000-6Mhz    V7+sys3+4.1BSD  cc         360     346 | 
| 110 | * PDP-11/34A    w/FP-11C    UNIX V7m    cc         406     449 | 
| 111 | * Macintosh512    68000-7.7Mhz    Mac ROM O/S    DeSmet(C ware)     625     625 | 
| 112 | * VAX-11/750    w/FPA        UNIX 4.2BSD    cc         831     852 | 
| 113 | * DataMedia 932 68000-10Mhz    UNIX sysV    cc         837     888 | 
| 114 | * Plexus P35    68000-12.5Mhz    UNIX sysIII    cc         835     894 | 
| 115 | * ATT PC7300    68010-10Mhz    UNIX 5.0.3    cc         973    1034 | 
| 116 | * Compaq II    80286-8Mhz    MSDOS 3.1    MS C 3.0     1086    1140 LM | 
| 117 | * IBM PC/AT    80286-7.5Mhz    Venix/286 SVR2  cc              1159    1254 *15 | 
| 118 | * Compaq II    80286-8Mhz    MSDOS 3.1    MS C 3.0     1190    1282 MM | 
| 119 | * MicroVAX II    -        Mach/4.3    cc        1361    1385 | 
| 120 | * DEC uVAX II    -        Ultrix-32m v1.1    cc        1385    1399 | 
| 121 | * Compaq II    80286-8Mhz    MSDOS 3.1    MS C 3.0     1351    1428 | 
| 122 | * VAX 11/780    -        UNIX 4.2BSD    cc        1417    1441 | 
| 123 | * VAX-780/MA780        Mach/4.3    cc        1428    1470 | 
| 124 | * VAX 11/780    -        UNIX 5.0.1    cc 4.1.1.31    1650    1640 | 
| 125 | * Ridge 32C V1    -        ROS 3.3        Ridge C (older)    1628    1695 | 
| 126 | * Gould PN6005    -        UTX 1.1c+ (4.2)    cc        1732    1884 | 
| 127 | * Gould PN9080    custom ECL    UTX-32 1.1C    cc        4745    4992 | 
| 128 | * VAX-784    -        Mach/4.3    cc        5263    5555 &4 | 
| 129 | * VAX 8600    -        4.3 BSD        cc        6329    6423 | 
| 130 | * Amdahl 5860    -        UTS sysV    cc 1.22           28735   28846 | 
| 131 | * IBM3090/200    -        ?        ?           31250   31250 | 
| 132 | * | 
| 133 | * | 
| 134 | *----------------DHRYSTONE VERSION 1.0 RESULTS BEGIN-------------------------- | 
| 135 | * | 
| 136 | * MACHINE    MICROPROCESSOR    OPERATING    COMPILER    DHRYSTONES/SEC. | 
| 137 | * TYPE                SYSTEM                NO REG    REGS | 
| 138 | * --------------------------    ------------    -----------    --------------- | 
| 139 | * Commodore 64    6510-1MHz    C64 ROM        C Power 2.8      36      36 | 
| 140 | * HP-110    8086-5.33Mhz    MSDOS 2.11    Lattice 2.14     284     284 | 
| 141 | * IBM PC/XT    8088-4.77Mhz    PC/IX        cc         271     294 | 
| 142 | * CCC 3205    -        Xelos(SVR2)     cc         558     592 | 
| 143 | * Perq-II    2901 bitslice    Accent S5c     cc (CMU)     301     301 | 
| 144 | * IBM PC/XT    8088-4.77Mhz    COHERENT 2.3.43    MarkWilliams cc  296     317 | 
| 145 | * Cosmos    68000-8Mhz    UniSoft        cc         305     322 | 
| 146 | * IBM PC/XT    8088-4.77Mhz    Venix/86 2.0    cc         297     324 | 
| 147 | * DEC PRO 350  11/23           Venix/PRO SVR2  cc               299     325 | 
| 148 | * IBM PC    8088-4.77Mhz    MSDOS 2.0    b16cc 2.0     310     340 | 
| 149 | * PDP11/23    11/23           Venix (V7)      cc               320     358 | 
| 150 | * Commodore Amiga        ?        Lattice 3.02     368     371 | 
| 151 | * PC/XT        8088-4.77Mhz    Venix/86 SYS V  cc               339     377 | 
| 152 | * IBM PC    8088-4.77Mhz    MSDOS 2.0    CI-C86 2.20M     390     390 | 
| 153 | * IBM PC/XT    8088-4.77Mhz    PCDOS 2.1    Wizard 2.1     367     403 | 
| 154 | * IBM PC/XT    8088-4.77Mhz    PCDOS 3.1    Lattice 2.15     403     403 @ | 
| 155 | * Colex DM-6    68010-8Mhz    Unisoft SYSV    cc         378     410 | 
| 156 | * IBM PC    8088-4.77Mhz    PCDOS 3.1    Datalight 1.10     416     416 | 
| 157 | * IBM PC    NEC V20-4.77Mhz    MSDOS 3.1    MS 3.1          387     420 | 
| 158 | * IBM PC/XT    8088-4.77Mhz    PCDOS 2.1    Microsoft 3.0     390     427 | 
| 159 | * IBM PC    NEC V20-4.77Mhz    MSDOS 3.1    MS 3.1 (186)      393     427 | 
| 160 | * PDP-11/34    -        UNIX V7M    cc         387     438 | 
| 161 | * IBM PC    8088, 4.77mhz    PC-DOS 2.1    Aztec C v3.2d     423     454 | 
| 162 | * Tandy 1000    V20, 4.77mhz    MS-DOS 2.11    Aztec C v3.2d     423     458 | 
| 163 | * Tandy TRS-16B 68000-6Mhz    Xenix 1.3.5    cc         438     458 | 
| 164 | * PDP-11/34    -        RSTS/E        decus c         438     495 | 
| 165 | * Onyx C8002    Z8000-4Mhz    IS/1 1.1 (V7)    cc         476     511 | 
| 166 | * Tandy TRS-16B 68000-6Mhz    Xenix 1.3.5    Green Hills     609     617 | 
| 167 | * DEC PRO 380  11/73           Venix/PRO SVR2  cc               577     628 | 
| 168 | * FHL QT+    68000-10Mhz    Os9/68000    version 1.3     603     649 FH | 
| 169 | * Apollo DN550    68010-?Mhz    AegisSR9/IX    cc 3.12         666     666 | 
| 170 | * HP-110    8086-5.33Mhz    MSDOS 2.11    Aztec-C         641     676 | 
| 171 | * ATT PC6300    8086-8Mhz    MSDOS 2.11    b16cc 2.0     632     684 | 
| 172 | * IBM PC/AT    80286-6Mhz    PCDOS 3.0    CI-C86 2.1     666     684 | 
| 173 | * Tandy 6000    68000-8Mhz    Xenix 3.0    cc         694     694 | 
| 174 | * IBM PC/AT    80286-6Mhz    Xenix 3.0    cc         684     704 MM | 
| 175 | * Macintosh    68000-7.8Mhz 2M    Mac Rom        Mac C 32 bit int 694     704 | 
| 176 | * Macintosh    68000-7.7Mhz    -        MegaMax C 2.0     661     709 | 
| 177 | * Macintosh512    68000-7.7Mhz    Mac ROM O/S    DeSmet(C ware)     714     714 | 
| 178 | * IBM PC/AT    80286-6Mhz    Xenix 3.0    cc         704     714 LM | 
| 179 | * Codata 3300    68000-8Mhz    UniPlus+ (v7)    cc         678     725 | 
| 180 | * WICAT MB    68000-8Mhz    System V    WICAT C 4.1     585     731 ~ | 
| 181 | * Cadmus 9000    68010-10Mhz    UNIX        cc         714     735 | 
| 182 | * AT&T 6300    8086-8Mhz       Venix/86 SVR2   cc               668     743 | 
| 183 | * Cadmus 9790    68010-10Mhz 1MB    SVR0,Cadmus3.7    cc         720     747 | 
| 184 | * NEC PC9801F    8086-8Mhz    PCDOS 2.11    Lattice 2.15     768      -  @ | 
| 185 | * ATT PC6300    8086-8Mhz    MSDOS 2.11    CI-C86 2.20M     769     769 | 
| 186 | * Burroughs XE550 68010-10Mhz    Centix 2.10    cc         769     769 CT1 | 
| 187 | * EAGLE/TURBO  8086-8Mhz       Venix/86 SVR2   cc               696     779 | 
| 188 | * ALTOS 586    8086-10Mhz    Xenix 3.0b    cc          724     793 | 
| 189 | * DEC 11/73    J-11 micro    Ultrix-11 V3.0    cc         735     793 | 
| 190 | * ATT 3B2/300    WE32000-?Mhz    UNIX 5.0.2    cc         735     806 | 
| 191 | * Apollo DN320    68010-?Mhz    AegisSR9/IX    cc 3.12         806     806 | 
| 192 | * IRIS-2400    68010-10Mhz    UNIX System V    cc         772     829 | 
| 193 | * Atari 520ST  68000-8Mhz      TOS             DigResearch      839     846 | 
| 194 | * IBM PC/AT    80286-6Mhz    PCDOS 3.0    MS 3.0(large)     833     847 LM | 
| 195 | * WICAT MB    68000-8Mhz    System V    WICAT C 4.1     675     853 S~ | 
| 196 | * VAX 11/750    -        Ultrix 1.1    4.2BSD cc     781     862 | 
| 197 | * CCC  7350A    68000-8MHz    UniSoft V.2    cc         821     875 | 
| 198 | * VAX 11/750    -        UNIX 4.2bsd    cc         862     877 | 
| 199 | * Fast Mac    68000-7.7Mhz    -        MegaMax C 2.0     839     904 + | 
| 200 | * IBM PC/XT    8086-9.54Mhz    PCDOS 3.1    Microsoft 3.0     833     909 C1 | 
| 201 | * DEC 11/44            Ultrix-11 V3.0    cc         862     909 | 
| 202 | * Macintosh    68000-7.8Mhz 2M    Mac Rom        Mac C 16 bit int 877     909 S | 
| 203 | * CCC 3210    -        Xelos R01(SVR2)    cc         849     924 | 
| 204 | * CCC 3220    -               Ed. 7 v2.3      cc         892     925 | 
| 205 | * IBM PC/AT    80286-6Mhz    Xenix 3.0    cc -i         909     925 | 
| 206 | * AT&T 6300    8086, 8mhz    MS-DOS 2.11    Aztec C v3.2d     862     943 | 
| 207 | * IBM PC/AT    80286-6Mhz    Xenix 3.0    cc         892     961 | 
| 208 | * VAX 11/750    w/FPA        Eunice 3.2    cc         914     976 | 
| 209 | * IBM PC/XT    8086-9.54Mhz    PCDOS 3.1    Wizard 2.1     892     980 C1 | 
| 210 | * IBM PC/XT    8086-9.54Mhz    PCDOS 3.1    Lattice 2.15     980     980 C1 | 
| 211 | * Plexus P35    68000-10Mhz    UNIX System III cc         984     980 | 
| 212 | * PDP-11/73    KDJ11-AA 15Mhz    UNIX V7M 2.1    cc         862     981 | 
| 213 | * VAX 11/750    w/FPA        UNIX 4.3bsd    cc         994     997 | 
| 214 | * IRIS-1400    68010-10Mhz    UNIX System V    cc         909    1000 | 
| 215 | * IBM PC/AT    80286-6Mhz    Venix/86 2.1    cc         961    1000 | 
| 216 | * IBM PC/AT    80286-6Mhz    PCDOS 3.0    b16cc 2.0     943    1063 | 
| 217 | * Zilog S8000/11 Z8001-5.5Mhz    Zeus 3.2    cc        1011    1084 | 
| 218 | * NSC ICM-3216 NSC 32016-10Mhz    UNIX SVR2    cc        1041    1084 | 
| 219 | * IBM PC/AT    80286-6Mhz    PCDOS 3.0    MS 3.0(small)    1063    1086 | 
| 220 | * VAX 11/750    w/FPA        VMS        VAX-11 C 2.0     958    1091 | 
| 221 | * Stride    68000-10Mhz    System-V/68    cc        1041    1111 | 
| 222 | * Plexus P/60  MC68000-12.5Mhz    UNIX SYSIII    Plexus        1111    1111 | 
| 223 | * ATT PC7300    68010-10Mhz    UNIX 5.0.2    cc        1041    1111 | 
| 224 | * CCC 3230    -        Xelos R01(SVR2)    cc        1040    1126 | 
| 225 | * Stride    68000-12Mhz    System-V/68    cc        1063    1136 | 
| 226 | * IBM PC/AT    80286-6Mhz      Venix/286 SVR2  cc              1056    1149 | 
| 227 | * Plexus P/60  MC68000-12.5Mhz    UNIX SYSIII    Plexus        1111    1163 T | 
| 228 | * IBM PC/AT    80286-6Mhz    PCDOS 3.0    Datalight 1.10    1190    1190 | 
| 229 | * ATT PC6300+    80286-6Mhz    MSDOS 3.1    b16cc 2.0    1111    1219 | 
| 230 | * IBM PC/AT    80286-6Mhz    PCDOS 3.1    Wizard 2.1    1136    1219 | 
| 231 | * Sun2/120    68010-10Mhz    Sun 4.2BSD    cc        1136    1219 | 
| 232 | * IBM PC/AT    80286-6Mhz    PCDOS 3.0    CI-C86 2.20M    1219    1219 | 
| 233 | * WICAT PB    68000-8Mhz    System V    WICAT C 4.1     998    1226 ~ | 
| 234 | * MASSCOMP 500    68010-10MHz    RTU V3.0    cc (V3.2)    1156    1238 | 
| 235 | * Alliant FX/8 IP (68012-12Mhz) Concentrix    cc -ip;exec -i     1170    1243 FX | 
| 236 | * Cyb DataMate    68010-12.5Mhz    Uniplus 5.0    Unisoft cc    1162    1250 | 
| 237 | * PDP 11/70    -        UNIX 5.2    cc        1162    1250 | 
| 238 | * IBM PC/AT    80286-6Mhz    PCDOS 3.1    Lattice 2.15    1250    1250 | 
| 239 | * IBM PC/AT    80286-7.5Mhz    Venix/86 2.1    cc        1190    1315 *15 | 
| 240 | * Sun2/120    68010-10Mhz    Standalone    cc        1219    1315 | 
| 241 | * Intel 380    80286-8Mhz    Xenix R3.0up1    cc        1250    1315 *16 | 
| 242 | * Sequent Balance 8000    NS32032-10MHz    Dynix 2.0    cc    1250    1315 N12 | 
| 243 | * IBM PC/DSI-32 32032-10Mhz    MSDOS 3.1    GreenHills 2.14    1282    1315 C3 | 
| 244 | * ATT 3B2/400    WE32100-?Mhz    UNIX 5.2    cc        1315    1315 | 
| 245 | * CCC 3250XP    -        Xelos R01(SVR2)    cc        1215    1318 | 
| 246 | * IBM PC/RT 032 RISC(801?)?Mhz BSD 4.2         cc              1248    1333 RT | 
| 247 | * DG MV4000    -        AOS/VS 5.00    cc        1333    1333 | 
| 248 | * IBM PC/AT    80286-8Mhz    Venix/86 2.1    cc        1275    1380 *16 | 
| 249 | * IBM PC/AT    80286-6Mhz    MSDOS 3.0    Microsoft 3.0    1250    1388 | 
| 250 | * ATT PC6300+    80286-6Mhz    MSDOS 3.1    CI-C86 2.20M    1428    1428 | 
| 251 | * COMPAQ/286   80286-8Mhz      Venix/286 SVR2  cc              1326    1443 | 
| 252 | * IBM PC/AT    80286-7.5Mhz    Venix/286 SVR2  cc              1333    1449 *15 | 
| 253 | * WICAT PB    68000-8Mhz    System V    WICAT C 4.1    1169    1464 S~ | 
| 254 | * Tandy II/6000 68000-8Mhz    Xenix 3.0    cc          1384    1477 | 
| 255 | * MicroVAX II    -        Mach/4.3    cc        1513    1536 | 
| 256 | * WICAT MB    68000-12.5Mhz    System V    WICAT C 4.1    1246    1537 ~ | 
| 257 | * IBM PC/AT    80286-9Mhz      SCO Xenix V     cc              1540    1556 *18 | 
| 258 | * Cyb DataMate    68010-12.5Mhz    Uniplus 5.0    Unisoft cc    1470    1562 S | 
| 259 | * VAX 11/780    -        UNIX 5.2    cc        1515    1562 | 
| 260 | * MicroVAX-II    -        -        -        1562    1612 | 
| 261 | * VAX-780/MA780        Mach/4.3    cc        1587    1612 | 
| 262 | * VAX 11/780    -        UNIX 4.3bsd    cc        1646    1662 | 
| 263 | * Apollo DN660    -        AegisSR9/IX    cc 3.12        1666    1666 | 
| 264 | * ATT 3B20    -        UNIX 5.2    cc        1515    1724 | 
| 265 | * NEC PC-98XA    80286-8Mhz    PCDOS 3.1    Lattice 2.15    1724    1724 @ | 
| 266 | * HP9000-500    B series CPU    HP-UX 4.02    cc        1724    - | 
| 267 | * Ridge 32C V1    -        ROS 3.3        Ridge C (older)    1776    - | 
| 268 | * IBM PC/STD    80286-8Mhz    MSDOS 3.0     Microsoft 3.0    1724    1785 C2 | 
| 269 | * WICAT MB    68000-12.5Mhz    System V    WICAT C 4.1    1450    1814 S~ | 
| 270 | * WICAT PB    68000-12.5Mhz    System V    WICAT C 4.1    1530    1898 ~ | 
| 271 | * DEC-2065    KL10-Model B    TOPS-20 6.1FT5    Port. C Comp.    1937    1946 | 
| 272 | * Gould PN6005    -        UTX 1.1(4.2BSD)    cc        1675    1964 | 
| 273 | * DEC2060    KL-10        TOPS-20        cc        2000    2000 NM | 
| 274 | * Intel 310AP    80286-8Mhz    Xenix 3.0    cc        1893    2009 | 
| 275 | * VAX 11/785    -        UNIX 5.2    cc        2083    2083 | 
| 276 | * VAX 11/785    -        VMS        VAX-11 C 2.0    2083    2083 | 
| 277 | * VAX 11/785    -        UNIX SVR2    cc        2123    2083 | 
| 278 | * VAX 11/785   -               ULTRIX-32 1.1   cc        2083    2091 | 
| 279 | * VAX 11/785    -        UNIX 4.3bsd    cc        2135    2136 | 
| 280 | * WICAT PB    68000-12.5Mhz    System V    WICAT C 4.1    1780    2233 S~ | 
| 281 | * Pyramid 90x    -        OSx 2.3        cc        2272    2272 | 
| 282 | * Pyramid 90x    FPA,cache,4Mb    OSx 2.5        cc no -O    2777    2777 | 
| 283 | * Pyramid 90x    w/cache        OSx 2.5        cc w/-O        3333    3333 | 
| 284 | * IBM-4341-II    -        VM/SP3        Waterloo C 1.2  3333    3333 | 
| 285 | * IRIS-2400T    68020-16.67Mhz    UNIX System V    cc        3105    3401 | 
| 286 | * Celerity C-1200 ?        UNIX 4.2BSD    cc        3485    3468 | 
| 287 | * SUN 3/75    68020-16.67Mhz    SUN 4.2 V3    cc        3333    3571 | 
| 288 | * IBM-4341    Model 12    UTS 5.0        ?        3685    3685 | 
| 289 | * SUN-3/160    68020-16.67Mhz  Sun 4.2 V3.0A   cc        3381    3764 | 
| 290 | * Sun 3/180    68020-16.67Mhz    Sun 4.2        cc        3333    3846 | 
| 291 | * IBM-4341    Model 12    UTS 5.0        ?        3910    3910 MN | 
| 292 | * MC 5400    68020-16.67MHz    RTU V3.0    cc (V4.0)    3952    4054 | 
| 293 | * Intel 386/20    80386-12.5Mhz    PMON debugger    Intel C386v0.2    4149    4386 | 
| 294 | * NCR Tower32  68020-16.67Mhz  SYS 5.0 Rel 2.0 cc              3846    4545 | 
| 295 | * MC 5600/5700    68020-16.67MHz    RTU V3.0    cc (V4.0)    4504    4746 % | 
| 296 | * Intel 386/20    80386-12.5Mhz    PMON debugger    Intel C386v0.2    4534    4794 i1 | 
| 297 | * Intel 386/20    80386-16Mhz    PMON debugger    Intel C386v0.2    5304    5607 | 
| 298 | * Gould PN9080    custom ECL    UTX-32 1.1C    cc        5369    5676 | 
| 299 | * Gould 1460-342 ECL proc      UTX/32 1.1/c    cc              5342    5677 G1 | 
| 300 | * VAX-784    -        Mach/4.3    cc        5882    5882 &4 | 
| 301 | * Intel 386/20    80386-16Mhz    PMON debugger    Intel C386v0.2    5801    6133 i1 | 
| 302 | * VAX 8600    -        UNIX 4.3bsd    cc        7024    7088 | 
| 303 | * VAX 8600    -        VMS        VAX-11 C 2.0    7142    7142 | 
| 304 | * Alliant FX/8 CE        Concentrix    cc -ce;exec -c     6952    7655 FX | 
| 305 | * CCI POWER 6/32        COS(SV+4.2)    cc        7500    7800 | 
| 306 | * CCI POWER 6/32        POWER 6 UNIX/V    cc        8236    8498 | 
| 307 | * CCI POWER 6/32        4.2 Rel. 1.2b    cc        8963    9544 | 
| 308 | * Sperry (CCI Power 6)        4.2BSD        cc        9345   10000 | 
| 309 | * CRAY-X-MP/12       105Mhz    COS 1.14    Cray C         10204   10204 | 
| 310 | * IBM-3083    -        UTS 5.0 Rel 1    cc           16666   12500 | 
| 311 | * CRAY-1A        80Mhz    CTSS        Cray C 2.0     12100   13888 | 
| 312 | * IBM-3083    -        VM/CMS HPO 3.4    Waterloo C 1.2 13889   13889 | 
| 313 | * Amdahl 470 V/8         UTS/V 5.2       cc v1.23       15560   15560 | 
| 314 | * CRAY-X-MP/48       105Mhz    CTSS        Cray C 2.0     15625   17857 | 
| 315 | * Amdahl 580    -        UTS 5.0 Rel 1.2    cc v1.5        23076   23076 | 
| 316 | * Amdahl 5860             UTS/V 5.2       cc v1.23       28970   28970 | 
| 317 | * | 
| 318 | * NOTE | 
| 319 | *   *   Crystal changed from 'stock' to listed value. | 
| 320 | *   +   This Macintosh was upgraded from 128K to 512K in such a way that | 
| 321 | *       the new 384K of memory is not slowed down by video generator accesses. | 
| 322 | *   %   Single processor; MC == MASSCOMP | 
| 323 | *   NM  A version 7 C compiler written at New Mexico Tech. | 
| 324 | *   @   vanilla Lattice compiler used with MicroPro standard library | 
| 325 | *   S   Shorts used instead of ints | 
| 326 | *   T     with Chris Torek's patches (whatever they are). | 
| 327 | *   ~   For WICAT Systems: MB=MultiBus, PB=Proprietary Bus | 
| 328 | *   LM  Large Memory Model. (Otherwise, all 80x8x results are small model) | 
| 329 | *   MM  Medium Memory Model. (Otherwise, all 80x8x results are small model) | 
| 330 | *   C1  Univation PC TURBO Co-processor; 9.54Mhz 8086, 640K RAM | 
| 331 | *   C2  Seattle Telecom STD-286 board | 
| 332 | *   C3  Definicon DSI-32 coprocessor | 
| 333 | *   C?  Unknown co-processor board? | 
| 334 | *   CT1 Convergent Technologies MegaFrame, 1 processor. | 
| 335 | *   MN  Using Mike Newtons 'optimizer' (see net.sources). | 
| 336 | *   G1  This Gould machine has 2 processors and was able to run 2 dhrystone | 
| 337 | *       Benchmarks in parallel with no slowdown. | 
| 338 | *   FH  FHC == Frank Hogg Labs (Hazelwood Uniquad 2 in an FHL box). | 
| 339 | *   FX  The Alliant FX/8 is a system consisting of 1-8 CEs (computation | 
| 340 | *     engines) and 1-12 IPs (interactive processors). Note N8 applies. | 
| 341 | *   RT  This is one of the RT's that CMU has been using for awhile.  I'm | 
| 342 | *     not sure that this is identical to the machine that IBM is selling | 
| 343 | *     to the public. | 
| 344 | *   i1  Normally, the 386/20 starter kit has a 16k direct mapped cache | 
| 345 | *     which inserts 2 or 3 wait states on a write thru.  These results | 
| 346 | *     were obtained by disabling the write-thru, or essentially turning | 
| 347 | *     the cache into 0 wait state memory. | 
| 348 | *   Nnn This machine has multiple processors, allowing "nn" copies of the | 
| 349 | *     benchmark to run in the same time as 1 copy. | 
| 350 | *   &nn This machine has "nn" processors, and the benchmark results were | 
| 351 | *     obtained by having all "nn" processors working on 1 copy of dhrystone. | 
| 352 | *     (Note, this is different than Nnn. Salesmen like this measure). | 
| 353 | *   ?   I don't trust results marked with '?'.  These were sent to me with | 
| 354 | *       either incomplete info, or with times that just don't make sense. | 
| 355 | *     ?? means I think the performance is too poor, ?! means too good. | 
| 356 | *       If anybody can confirm these figures, please respond. | 
| 357 | * | 
| 358 | *  ABBREVIATIONS | 
| 359 | *    CCC    Concurrent Computer Corp. (was Perkin-Elmer) | 
| 360 | *    MC    Masscomp | 
| 361 | * | 
| 362 | *--------------------------------RESULTS END---------------------------------- | 
| 363 | * | 
| 364 | *    The following program contains statements of a high-level programming | 
| 365 | *    language (C) in a distribution considered representative: | 
| 366 | * | 
| 367 | *    assignments            53% | 
| 368 | *    control statements        32% | 
| 369 | *    procedure, function calls    15% | 
| 370 | * | 
| 371 | *    100 statements are dynamically executed.  The program is balanced with | 
| 372 | *    respect to the three aspects: | 
| 373 | *        - statement type | 
| 374 | *        - operand type (for simple data types) | 
| 375 | *        - operand access | 
| 376 | *            operand global, local, parameter, or constant. | 
| 377 | * | 
| 378 | *    The combination of these three aspects is balanced only approximately. | 
| 379 | * | 
| 380 | *    The program does not compute anything meaningfull, but it is | 
| 381 | *    syntactically and semantically correct. | 
| 382 | * | 
| 383 | */ | 
| 384 |  | 
| 385 | /* Accuracy of timings and human fatigue controlled by next two lines */ | 
| 386 | /*#define LOOPS    5000        /* Use this for slow or 16 bit machines */ | 
| 387 | /*#define LOOPS    50000        /* Use this for slow or 16 bit machines */ | 
| 388 | #define LOOPS    500000        /* Use this for faster machines */ | 
| 389 |  | 
| 390 | /* Compiler dependent options */ | 
| 391 | #undef    NOENUM            /* Define if compiler has no enum's */ | 
| 392 | #undef    NOSTRUCTASSIGN        /* Define if compiler can't assign structures */ | 
| 393 |  | 
| 394 | /* define only one of the next three defines */ | 
| 395 | /*#define GETRUSAGE        /* Use getrusage(2) time function */ | 
| 396 | /*#define TIMES            /* Use times(2) time function */ | 
| 397 | /*#define TIME            /* Use time(2) time function */ | 
| 398 |  | 
| 399 | /* define the granularity of your times(2) function (when used) */ | 
| 400 | /*#define HZ    60        /* times(2) returns 1/60 second (most) */ | 
| 401 | /*#define HZ    100        /* times(2) returns 1/100 second (WECo) */ | 
| 402 |  | 
| 403 | /* for compatibility with goofed up version */ | 
| 404 | /*#define GOOF            /* Define if you want the goofed up version */ | 
| 405 |  | 
| 406 | #ifdef GOOF | 
| 407 | char    Version[] = "1.0"; | 
| 408 | #else | 
| 409 | char    Version[] = "1.1"; | 
| 410 | #endif | 
| 411 |  | 
| 412 | #ifdef    NOSTRUCTASSIGN | 
| 413 | #define    structassign(d, s)    memcpy(&(d), &(s), sizeof(d)) | 
| 414 | #else | 
| 415 | #define    structassign(d, s)    d = : pass=500000 = : enter=0, leave=0
 = s
 | 
| 416 | #endif | 
| 417 |  | 
| 418 | #ifdef    NOENUM | 
| 419 | #define    Ident1    1 | 
| 420 | #define    Ident2    2 | 
| 421 | #define    Ident3    3 | 
| 422 | #define    Ident4    4 | 
| 423 | #define    Ident5    5 | 
| 424 | typedef int    Enumeration; | 
| 425 | #else | 
| 426 | typedef enum    {Ident1, Ident2, Ident3, Ident4, Ident5} Enumeration; | 
| 427 | #endif | 
| 428 |  | 
| 429 | typedef int    OneToThirty; | 
| 430 | typedef int    OneToFifty; | 
| 431 | typedef char    CapitalLetter; | 
| 432 | typedef char    String30[31]; | 
| 433 | typedef int    Array1Dim[51]; | 
| 434 | typedef int    Array2Dim[51][51]; | 
| 435 |  | 
| 436 | struct    Record | 
| 437 | { | 
| 438 | struct Record        *PtrComp; | 
| 439 | Enumeration        Discr; | 
| 440 | Enumeration        EnumComp; | 
| 441 | OneToFifty        IntComp; | 
| 442 | String30        StringComp; | 
| 443 | }; | 
| 444 |  | 
| 445 | typedef struct Record     RecordType; | 
| 446 | typedef RecordType *    RecordPtr; | 
| 447 | typedef int        boolean; | 
| 448 |  | 
| 449 | #define    NULL        0 | 
| 450 | #define    TRUE        1 | 
| 451 | #define    FALSE        0 | 
| 452 |  | 
| 453 | #ifndef REG | 
| 454 | #define    REG | 
| 455 | #endif | 
| 456 |  | 
| 457 | extern Enumeration    Func1(); | 
| 458 | extern boolean        Func2(); | 
| 459 |  | 
| 460 | #ifdef TIMES | 
| 461 | #include <sys/param.h> | 
| 462 | #include <sys/types.h> | 
| 463 | #include <sys/times.h> | 
| 464 | #endif | 
| 465 | #ifdef GETRUSAGE | 
| 466 | #include <sys/time.h> | 
| 467 | #include <sys/resource.h> | 
| 468 | #endif | 
| 469 |  | 
| 470 | main : call=1 main()
 | 
| 471 | { | 
| 472 | function : enter=1, leave=1 Proc0();
 | 
| 473 | function : enter=1, leave=0 exit(0);
 | 
| 474 | } | 
| 475 |  | 
| 476 | /* | 
| 477 | * Package 1 | 
| 478 | */ | 
| 479 | int        IntGlob; | 
| 480 | boolean        BoolGlob; | 
| 481 | char        Char1Glob; | 
| 482 | char        Char2Glob; | 
| 483 | Array1Dim    Array1Glob; | 
| 484 | Array2Dim    Array2Glob; | 
| 485 | RecordPtr    PtrGlb; | 
| 486 | RecordPtr    PtrGlbNext; | 
| 487 |  | 
| 488 | Proc0 : call=1 Proc0()
 | 
| 489 | { | 
| 490 | OneToFifty        IntLoc1; | 
| 491 | REG OneToFifty        IntLoc2; | 
| 492 | OneToFifty        IntLoc3; | 
| 493 | REG char        CharLoc; | 
| 494 | REG char        CharIndex; | 
| 495 | Enumeration         EnumLoc; | 
| 496 | String30        String1Loc; | 
| 497 | String30        String2Loc; | 
| 498 | extern char        *malloc(); | 
| 499 |  | 
| 500 | register unsigned int    i; | 
| 501 | #ifdef TIME | 
| 502 | long            time(); | 
| 503 | long            starttime; | 
| 504 | long            benchtime; | 
| 505 | long            nulltime; | 
| 506 |  | 
| 507 | starttime = time( (long *) 0); | 
| 508 | for (i = 0; i < LOOPS; ++i); | 
| 509 | nulltime = time( (long *) 0) - starttime; /* Computes o'head of loop */ | 
| 510 | #endif | 
| 511 | #ifdef TIMES | 
| 512 | time_t            starttime; | 
| 513 | time_t            benchtime; | 
| 514 | time_t            nulltime; | 
| 515 | struct tms        tms; | 
| 516 |  | 
| 517 | times : enter=1, leave=1 
 times : /usr/include/sys/times.h line=49 column=16
times(&tms : dhrystone.c line=515 column=14
 tms); starttime : dhrystone.c line=512 column=11
 starttime = : pass=1
 = tms : dhrystone.c line=515 column=14
 tms.tms_utime : /usr/include/sys/times.h line=37 column=13
tms_utime;
 | 
| 518 | for : true=500000, false=1 for (i : dhrystone.c line=500 column=24
 i = : pass=1
 = 0; i : dhrystone.c line=500 column=24
 i < : true=500000, false=1
 < LOOPS; ++ : pass=500000
 ++i : dhrystone.c line=500 column=24
 i);
 | 
| 519 | times : enter=1, leave=1 
 times : /usr/include/sys/times.h line=49 column=16
times(&tms : dhrystone.c line=515 column=14
 tms);
 | 
| 520 | nulltime : dhrystone.c line=514 column=11 nulltime = : pass=1
 = tms : dhrystone.c line=515 column=14
 tms.tms_utime : /usr/include/sys/times.h line=37 column=13
tms_utime - : pass=1
 - starttime : dhrystone.c line=512 column=11
 starttime; /* Computes overhead of looping */
 | 
| 521 | #endif | 
| 522 | #ifdef GETRUSAGE | 
| 523 | struct rusage starttime; | 
| 524 | struct rusage endtime; | 
| 525 | struct timeval nulltime; | 
| 526 |  | 
| 527 | getrusage(RUSAGE_SELF, &starttime); | 
| 528 | for (i = 0; i < LOOPS; ++i); | 
| 529 | getrusage(RUSAGE_SELF, &endtime); | 
| 530 | nulltime.tv_sec  = endtime.ru_utime.tv_sec  - starttime.ru_utime.tv_sec; | 
| 531 | nulltime.tv_usec = endtime.ru_utime.tv_usec - starttime.ru_utime.tv_usec; | 
| 532 | #endif | 
| 533 |  | 
| 534 | PtrGlbNext : dhrystone.c line=486 column=11 PtrGlbNext = : pass=1
 = (RecordPtr) malloc : enter=1, leave=1
 
 malloc : dhrystone.c line=498 column=16
 malloc(sizeof(RecordType));
 | 
| 535 | PtrGlb : dhrystone.c line=485 column=11 PtrGlb = : pass=1
 = (RecordPtr) malloc : enter=1, leave=1
 
 malloc : dhrystone.c line=498 column=16
 malloc(sizeof(RecordType));
 | 
| 536 | PtrGlb : dhrystone.c line=485 column=11 PtrGlb-> : enter=1, leave=1
 ->PtrComp : dhrystone.c line=438 column=18
 PtrComp = : enter=1, leave=1
 = PtrGlbNext : dhrystone.c line=486 column=11
 PtrGlbNext;
 | 
| 537 | PtrGlb : dhrystone.c line=485 column=11 PtrGlb-> : enter=1, leave=1
 ->Discr : dhrystone.c line=439 column=15
 Discr = : enter=1, leave=1
 = Ident1 : dhrystone.c line=426 column=15
 Ident1;
 | 
| 538 | PtrGlb : dhrystone.c line=485 column=11 PtrGlb-> : enter=1, leave=1
 ->EnumComp : dhrystone.c line=440 column=15
 EnumComp = : enter=1, leave=1
 = Ident3 : dhrystone.c line=426 column=31
 Ident3;
 | 
| 539 | PtrGlb : dhrystone.c line=485 column=11 PtrGlb-> : enter=1, leave=1
 ->IntComp : dhrystone.c line=441 column=14
 IntComp = : enter=1, leave=1
 = 40;
 | 
| 540 | function : enter=1, leave=1 strcpy(PtrGlb : dhrystone.c line=485 column=11
 PtrGlb-> : enter=1, leave=1
 ->StringComp : dhrystone.c line=442 column=12
 StringComp, "DHRYSTONE PROGRAM, SOME STRING");
 | 
| 541 | #ifndef    GOOF | 
| 542 | function : enter=1, leave=1 strcpy(String1Loc : dhrystone.c line=496 column=12
 String1Loc, "DHRYSTONE PROGRAM, 1'ST STRING");    /*GOOF*/
 | 
| 543 | #endif | 
| 544 | Array2Glob : dhrystone.c line=484 column=11 Array2Glob[] : enter=1, leave=1
 [8][7] = : enter=1, leave=1
 = 10;    /* Was missing in published program */
 | 
| 545 |  | 
| 546 | /***************** | 
| 547 | -- Start Timer -- | 
| 548 | *****************/ | 
| 549 | #ifdef TIME | 
| 550 | starttime = time( (long *) 0); | 
| 551 | #endif | 
| 552 | #ifdef TIMES | 
| 553 | times : enter=1, leave=1 
 times : /usr/include/sys/times.h line=49 column=16
times(&tms : dhrystone.c line=515 column=14
 tms); starttime : dhrystone.c line=512 column=11
 starttime = : pass=1
 = tms : dhrystone.c line=515 column=14
 tms.tms_utime : /usr/include/sys/times.h line=37 column=13
tms_utime;
 | 
| 554 | #endif | 
| 555 | #ifdef GETRUSAGE | 
| 556 | getrusage (RUSAGE_SELF, &starttime); | 
| 557 | #endif | 
| 558 | for : true=500000, false=1 for (i : dhrystone.c line=500 column=24
 i = : pass=1
 = 0; i : dhrystone.c line=500 column=24
 i < : true=500000, false=1
 < LOOPS; ++ : pass=500000
 ++i : dhrystone.c line=500 column=24
 i)
 | 
| 559 | { | 
| 560 |  | 
| 561 | function : enter=500000, leave=500000 Proc5();
 | 
| 562 | function : enter=500000, leave=500000 Proc4();
 | 
| 563 | IntLoc1 : dhrystone.c line=490 column=14 IntLoc1 = : pass=500000
 = 2;
 | 
| 564 | IntLoc2 : dhrystone.c line=491 column=18 IntLoc2 = : pass=500000
 = 3;
 | 
| 565 | function : enter=500000, leave=500000 strcpy(String2Loc : dhrystone.c line=497 column=12
 String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
 | 
| 566 | EnumLoc : dhrystone.c line=495 column=16 EnumLoc = : pass=500000
 = Ident2 : dhrystone.c line=426 column=23
 Ident2;
 | 
| 567 | BoolGlob : dhrystone.c line=480 column=10 BoolGlob = : pass=500000
 = ! : true=500000, false=0
 ! Func2 : enter=500000, leave=500000
 
 Func2 : dhrystone.c line=458 column=17
 Func2(String1Loc : dhrystone.c line=496 column=12
 String1Loc, String2Loc : dhrystone.c line=497 column=12
 String2Loc);
 | 
| 568 | while : true=500000, false=500000 while (IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1 < : true=500000, false=500000
 < IntLoc2 : dhrystone.c line=491 column=18
 IntLoc2)
 | 
| 569 | { | 
| 570 | IntLoc3 : dhrystone.c line=492 column=14 IntLoc3 = : pass=500000
 = 5 * : pass=500000
 * IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1 - : pass=500000
 - IntLoc2 : dhrystone.c line=491 column=18
 IntLoc2;
 | 
| 571 | function : enter=500000, leave=500000 Proc7(IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1, IntLoc2 : dhrystone.c line=491 column=18
 IntLoc2, &IntLoc3 : dhrystone.c line=492 column=14
 IntLoc3);
 | 
| 572 | ++ : pass=500000 ++IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1;
 | 
| 573 | } | 
| 574 | function : enter=500000, leave=500000 Proc8(Array1Glob : dhrystone.c line=483 column=11
 Array1Glob, Array2Glob : dhrystone.c line=484 column=11
 Array2Glob, IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1, IntLoc3 : dhrystone.c line=492 column=14
 IntLoc3);
 | 
| 575 | function : enter=500000, leave=500000 Proc1(PtrGlb : dhrystone.c line=485 column=11
 PtrGlb);
 | 
| 576 | for : true=1000000, false=500000 for (CharIndex : dhrystone.c line=494 column=12
 CharIndex = : pass=500000
 = 'A'; CharIndex : dhrystone.c line=494 column=12
 CharIndex <= : true=1000000, false=500000
 <= Char2Glob : dhrystone.c line=482 column=7
 Char2Glob; ++ : pass=1000000
 ++CharIndex : dhrystone.c line=494 column=12
 CharIndex)
 | 
| 577 | if : true=0, false=1000000 if (EnumLoc : dhrystone.c line=495 column=16
 EnumLoc == : true=0, false=1000000
 == Func1 : enter=1000000, leave=1000000
 
 Func1 : dhrystone.c line=457 column=20
 Func1(CharIndex : dhrystone.c line=494 column=12
 CharIndex, 'C'))
 | 
| 578 | function : enter=0, leave=0 Proc6(Ident1 : dhrystone.c line=426 column=15
 Ident1, &EnumLoc : dhrystone.c line=495 column=16
 EnumLoc);
 | 
| 579 | IntLoc3 : dhrystone.c line=492 column=14 IntLoc3 = : pass=500000
 = IntLoc2 : dhrystone.c line=491 column=18
 IntLoc2 * : pass=500000
 * IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1;
 | 
| 580 | IntLoc2 : dhrystone.c line=491 column=18 IntLoc2 = : pass=500000
 = IntLoc3 : dhrystone.c line=492 column=14
 IntLoc3 / : pass=500000
 / IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1;
 | 
| 581 | IntLoc2 : dhrystone.c line=491 column=18 IntLoc2 = : pass=500000
 = 7 * : pass=500000
 * (IntLoc3 : dhrystone.c line=492 column=14
 IntLoc3 - : pass=500000
 - IntLoc2 : dhrystone.c line=491 column=18
 IntLoc2) - : pass=500000
 - IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1;
 | 
| 582 | function : enter=500000, leave=500000 Proc2(&IntLoc1 : dhrystone.c line=490 column=14
 IntLoc1);
 | 
| 583 | } | 
| 584 |  | 
| 585 | /***************** | 
| 586 | -- Stop Timer -- | 
| 587 | *****************/ | 
| 588 |  | 
| 589 | #ifdef TIME | 
| 590 | benchtime = time( (long *) 0) - starttime - nulltime; | 
| 591 | printf("Dhrystone(%s) time for %ld passes = %ld\n", | 
| 592 | Version, | 
| 593 | (long) LOOPS, benchtime); | 
| 594 | printf("This machine benchmarks at %ld dhrystones/second\n", | 
| 595 | ((long) LOOPS) / benchtime); | 
| 596 | #endif | 
| 597 | #ifdef TIMES | 
| 598 | times : enter=1, leave=1 
 times : /usr/include/sys/times.h line=49 column=16
times(&tms : dhrystone.c line=515 column=14
 tms);
 | 
| 599 | benchtime : dhrystone.c line=513 column=11 benchtime = : pass=1
 = tms : dhrystone.c line=515 column=14
 tms.tms_utime : /usr/include/sys/times.h line=37 column=13
tms_utime - : pass=1
 - starttime : dhrystone.c line=512 column=11
 starttime - : pass=1
 - nulltime : dhrystone.c line=514 column=11
 nulltime;
 | 
| 600 | function : enter=1, leave=1 printf("Dhrystone(%s) time for %ld passes = %ld\n",
 | 
| 601 | Version : dhrystone.c line=409 column=6 Version,
 | 
| 602 | (long) LOOPS, benchtime : dhrystone.c line=513 column=11 benchtime/ : pass=1
 /HZ);
 | 
| 603 | function : enter=1, leave=1 printf("This machine benchmarks at %ld dhrystones/second\n",
 | 
| 604 | ((long) LOOPS) * : pass=1 * HZ / : pass=1
 / benchtime : dhrystone.c line=513 column=11
 benchtime);
 | 
| 605 | #endif | 
| 606 | #ifdef GETRUSAGE | 
| 607 | getrusage(RUSAGE_SELF, &endtime); | 
| 608 | { | 
| 609 | double t = (double)(endtime.ru_utime.tv_sec | 
| 610 | - starttime.ru_utime.tv_sec | 
| 611 | - nulltime.tv_sec) | 
| 612 | + (double)(endtime.ru_utime.tv_usec | 
| 613 | - starttime.ru_utime.tv_usec | 
| 614 | - nulltime.tv_usec) * 1e-6; | 
| 615 | printf("Dhrystone(%s) time for %ld passes = %.1f\n", | 
| 616 | Version, | 
| 617 | (long)LOOPS, | 
| 618 | t); | 
| 619 | printf("This machine benchmarks at %.0f dhrystones/second\n", | 
| 620 | (double)LOOPS / t); | 
| 621 | } | 
| 622 | #endif | 
| 623 |  | 
| 624 | } | 
| 625 |  | 
| 626 | Proc1 : call=500000 Proc1(PtrParIn)
 | 
| 627 | REG RecordPtr    PtrParIn; | 
| 628 | { | 
| 629 | #define    NextRecord    (* dereference : enter=0, leave=0 *(PtrParIn : dhrystone.c line=627 column=15
 PtrParIn-> : enter=0, leave=0
 ->PtrComp : dhrystone.c line=438 column=18
 PtrComp))
 | 
| 630 |  | 
| 631 | structassign(NextRecord, * dereference : enter=1000000, leave=1000000 *PtrGlb : dhrystone.c line=485 column=11
 PtrGlb);
 | 
| 632 | PtrParIn : dhrystone.c line=627 column=15 PtrParIn-> : enter=500000, leave=500000
 ->IntComp : dhrystone.c line=441 column=14
 IntComp = : enter=500000, leave=500000
 = 5;
 | 
| 633 | NextRecord.IntComp : dhrystone.c line=441 column=14 IntComp = : pass=500000
 = PtrParIn : dhrystone.c line=627 column=15
 PtrParIn-> : enter=500000, leave=500000
 ->IntComp : dhrystone.c line=441 column=14
 IntComp;
 | 
| 634 | NextRecord.PtrComp : dhrystone.c line=438 column=18 PtrComp = : pass=500000
 = PtrParIn : dhrystone.c line=627 column=15
 PtrParIn-> : enter=500000, leave=500000
 ->PtrComp : dhrystone.c line=438 column=18
 PtrComp;
 | 
| 635 | function : enter=500000, leave=500000 Proc3(NextRecord.PtrComp : dhrystone.c line=438 column=18
 PtrComp);
 | 
| 636 | if : true=500000, false=0 if (NextRecord.Discr : dhrystone.c line=439 column=15
 Discr == : true=500000, false=0
 == Ident1 : dhrystone.c line=426 column=15
 Ident1)
 | 
| 637 | { | 
| 638 | NextRecord.IntComp : dhrystone.c line=441 column=14 IntComp = : pass=500000
 = 6;
 | 
| 639 | function : enter=500000, leave=500000 Proc6(PtrParIn : dhrystone.c line=627 column=15
 PtrParIn-> : enter=500000, leave=500000
 ->EnumComp : dhrystone.c line=440 column=15
 EnumComp, &NextRecord.EnumComp : dhrystone.c line=440 column=15
 EnumComp);
 | 
| 640 | NextRecord.PtrComp : dhrystone.c line=438 column=18 PtrComp = : pass=500000
 = PtrGlb : dhrystone.c line=485 column=11
 PtrGlb-> : enter=500000, leave=500000
 ->PtrComp : dhrystone.c line=438 column=18
 PtrComp;
 | 
| 641 | function : enter=500000, leave=500000 Proc7(NextRecord.IntComp : dhrystone.c line=441 column=14
 IntComp, 10, &NextRecord.IntComp : dhrystone.c line=441 column=14
 IntComp);
 | 
| 642 | } | 
| 643 | else | 
| 644 | structassign(*PtrParIn : dhrystone.c line=627 column=15 PtrParIn, NextRecord);
 | 
| 645 |  | 
| 646 | #undef    NextRecord | 
| 647 | } | 
| 648 |  | 
| 649 | Proc2 : call=500000 Proc2(IntParIO)
 | 
| 650 | OneToFifty    *IntParIO; | 
| 651 | { | 
| 652 | REG OneToFifty        IntLoc; | 
| 653 | REG Enumeration        EnumLoc; | 
| 654 |  | 
| 655 | IntLoc : dhrystone.c line=652 column=18 IntLoc = : pass=500000
 = * dereference : enter=500000, leave=500000
 *IntParIO : dhrystone.c line=650 column=13
 IntParIO + : pass=500000
 + 10;
 | 
| 656 | for(;;) | 
| 657 | { | 
| 658 | if : true=500000, false=0 if (Char1Glob : dhrystone.c line=481 column=7
 Char1Glob == : true=500000, false=0
 == 'A')
 | 
| 659 | { | 
| 660 | -- : pass=500000 --IntLoc : dhrystone.c line=652 column=18
 IntLoc;
 | 
| 661 | *IntParIO : dhrystone.c line=650 column=13 IntParIO = : enter=500000, leave=500000
 = IntLoc : dhrystone.c line=652 column=18
 IntLoc - : pass=500000
 - IntGlob : dhrystone.c line=479 column=6
 IntGlob;
 | 
| 662 | EnumLoc : dhrystone.c line=653 column=19 EnumLoc = : pass=500000
 = Ident1 : dhrystone.c line=426 column=15
 Ident1;
 | 
| 663 | } | 
| 664 | if : true=500000, false=0 if (EnumLoc : dhrystone.c line=653 column=19
 EnumLoc == : true=500000, false=0
 == Ident1 : dhrystone.c line=426 column=15
 Ident1)
 | 
| 665 | break : pass=500000 break;
 | 
| 666 | } | 
| 667 | } | 
| 668 |  | 
| 669 | Proc3 : call=500000 Proc3(PtrParOut)
 | 
| 670 | RecordPtr    *PtrParOut; | 
| 671 | { | 
| 672 | if : true=500000, false=0 if (PtrGlb : dhrystone.c line=485 column=11
 PtrGlb != : true=500000, false=0
 != NULL)
 | 
| 673 | *PtrParOut : dhrystone.c line=670 column=12 PtrParOut = : enter=500000, leave=500000
 = PtrGlb : dhrystone.c line=485 column=11
 PtrGlb-> : enter=500000, leave=500000
 ->PtrComp : dhrystone.c line=438 column=18
 PtrComp;
 | 
| 674 | else | 
| 675 | IntGlob : dhrystone.c line=479 column=6 IntGlob = : pass=0
 = 100;
 | 
| 676 | function : enter=500000, leave=500000 Proc7(10, IntGlob : dhrystone.c line=479 column=6
 IntGlob, &PtrGlb : dhrystone.c line=485 column=11
 PtrGlb-> : enter=500000, leave=500000
 ->IntComp : dhrystone.c line=441 column=14
 IntComp);
 | 
| 677 | } | 
| 678 |  | 
| 679 | Proc4 : call=500000 Proc4()
 | 
| 680 | { | 
| 681 | REG boolean    BoolLoc; | 
| 682 |  | 
| 683 | BoolLoc : dhrystone.c line=681 column=14 BoolLoc = : pass=500000
 = Char1Glob : dhrystone.c line=481 column=7
 Char1Glob == : true=500000, false=0
 == 'A';
 | 
| 684 | BoolLoc : dhrystone.c line=681 column=14 BoolLoc |= : pass=500000
 |= BoolGlob : dhrystone.c line=480 column=10
 BoolGlob;
 | 
| 685 | Char2Glob : dhrystone.c line=482 column=7 Char2Glob = : pass=500000
 = 'B';
 | 
| 686 | } | 
| 687 |  | 
| 688 | Proc5 : call=500000 Proc5()
 | 
| 689 | { | 
| 690 | Char1Glob : dhrystone.c line=481 column=7 Char1Glob = : pass=500000
 = 'A';
 | 
| 691 | BoolGlob : dhrystone.c line=480 column=10 BoolGlob = : pass=500000
 = FALSE;
 | 
| 692 | } | 
| 693 |  | 
| 694 | extern boolean Func3(); | 
| 695 |  | 
| 696 | Proc6 : call=500000 Proc6(EnumParIn, EnumParOut)
 | 
| 697 | REG Enumeration    EnumParIn; | 
| 698 | REG Enumeration    *EnumParOut; | 
| 699 | { | 
| 700 | *EnumParOut : dhrystone.c line=698 column=18 EnumParOut = : enter=500000, leave=500000
 = EnumParIn : dhrystone.c line=697 column=17
 EnumParIn;
 | 
| 701 | if : true=0, false=500000 if (! : true=0, false=500000
 ! Func3 : enter=500000, leave=500000
 
 Func3 : dhrystone.c line=694 column=16
 Func3(EnumParIn : dhrystone.c line=697 column=17
 EnumParIn) )
 | 
| 702 | *EnumParOut : dhrystone.c line=698 column=18 EnumParOut = : enter=0, leave=0
 = Ident4 : dhrystone.c line=426 column=39
 Ident4;
 | 
| 703 | switch : pass=500000 switch (EnumParIn : dhrystone.c line=697 column=17
 EnumParIn)
 | 
| 704 | { | 
| 705 | case : true=0, false=500000 case Ident1:    *EnumParOut : dhrystone.c line=698 column=18
 EnumParOut = : enter=0, leave=0
 = Ident1 : dhrystone.c line=426 column=15
 Ident1; break : pass=0
 break;
 | 
| 706 | case : true=0, false=500000 case Ident2:    if : true=0, false=0
 if (IntGlob : dhrystone.c line=479 column=6
 IntGlob > : true=0, false=0
 > 100) *EnumParOut : dhrystone.c line=698 column=18
 EnumParOut = : enter=0, leave=0
 = Ident1 : dhrystone.c line=426 column=15
 Ident1;
 | 
| 707 | else *EnumParOut : dhrystone.c line=698 column=18 EnumParOut = : enter=0, leave=0
 = Ident4 : dhrystone.c line=426 column=39
 Ident4;
 | 
| 708 | break : pass=0 break;
 | 
| 709 | case : true=500000, false=0 case Ident3:    *EnumParOut : dhrystone.c line=698 column=18
 EnumParOut = : enter=500000, leave=500000
 = Ident2 : dhrystone.c line=426 column=23
 Ident2; break : pass=500000
 break;
 | 
| 710 | case : true=0, false=500000 case Ident4:    break : pass=0
 break;
 | 
| 711 | case : true=0, false=500000 case Ident5:    *EnumParOut : dhrystone.c line=698 column=18
 EnumParOut = : enter=0, leave=0
 = Ident3 : dhrystone.c line=426 column=31
 Ident3;
 | 
| 712 | } | 
| 713 | } | 
| 714 |  | 
| 715 | Proc7 : call=1500000 Proc7(IntParI1, IntParI2, IntParOut)
 | 
| 716 | OneToFifty    IntParI1; | 
| 717 | OneToFifty    IntParI2; | 
| 718 | OneToFifty    *IntParOut; | 
| 719 | { | 
| 720 | REG OneToFifty    IntLoc; | 
| 721 |  | 
| 722 | IntLoc : dhrystone.c line=720 column=17 IntLoc = : pass=1500000
 = IntParI1 : dhrystone.c line=716 column=12
 IntParI1 + : pass=1500000
 + 2;
 | 
| 723 | *IntParOut : dhrystone.c line=718 column=13 IntParOut = : enter=1500000, leave=1500000
 = IntParI2 : dhrystone.c line=717 column=12
 IntParI2 + : pass=1500000
 + IntLoc : dhrystone.c line=720 column=17
 IntLoc;
 | 
| 724 | } | 
| 725 |  | 
| 726 | Proc8 : call=500000 Proc8(Array1Par, Array2Par, IntParI1, IntParI2)
 | 
| 727 | Array1Dim    Array1Par; | 
| 728 | Array2Dim    Array2Par; | 
| 729 | OneToFifty    IntParI1; | 
| 730 | OneToFifty    IntParI2; | 
| 731 | { | 
| 732 | REG OneToFifty    IntLoc; | 
| 733 | REG OneToFifty    IntIndex; | 
| 734 |  | 
| 735 | IntLoc : dhrystone.c line=732 column=17 IntLoc = : pass=500000
 = IntParI1 : dhrystone.c line=729 column=12
 IntParI1 + : pass=500000
 + 5;
 | 
| 736 | Array1Par : dhrystone.c line=727 column=11 Array1Par[IntLoc : dhrystone.c line=732 column=17
 IntLoc] = : enter=500000, leave=500000
 = IntParI2 : dhrystone.c line=730 column=12
 IntParI2;
 | 
| 737 | Array1Par : dhrystone.c line=727 column=11 Array1Par[IntLoc : dhrystone.c line=732 column=17
 IntLoc+ : pass=500000
 +1] = : enter=500000, leave=500000
 = Array1Par : dhrystone.c line=727 column=11
 Array1Par[] : enter=500000, leave=500000
 [IntLoc : dhrystone.c line=732 column=17
 IntLoc];
 | 
| 738 | Array1Par : dhrystone.c line=727 column=11 Array1Par[IntLoc : dhrystone.c line=732 column=17
 IntLoc+ : pass=500000
 +30] = : enter=500000, leave=500000
 = IntLoc : dhrystone.c line=732 column=17
 IntLoc;
 | 
| 739 | for : true=1000000, false=500000 for (IntIndex : dhrystone.c line=733 column=17
 IntIndex = : pass=500000
 = IntLoc : dhrystone.c line=732 column=17
 IntLoc; IntIndex : dhrystone.c line=733 column=17
 IntIndex <= : true=1000000, false=500000
 <= (IntLoc : dhrystone.c line=732 column=17
 IntLoc+ : pass=1500000
 +1); ++ : pass=1000000
 ++IntIndex : dhrystone.c line=733 column=17
 IntIndex)
 | 
| 740 | Array2Par : dhrystone.c line=728 column=11 Array2Par[] : enter=1000000, leave=1000000
 [IntLoc : dhrystone.c line=732 column=17
 IntLoc][IntIndex : dhrystone.c line=733 column=17
 IntIndex] = : enter=1000000, leave=1000000
 = IntLoc : dhrystone.c line=732 column=17
 IntLoc;
 | 
| 741 | ++ : pass=500000 ++Array2Par : dhrystone.c line=728 column=11
 Array2Par[] : enter=500000, leave=500000
 [IntLoc : dhrystone.c line=732 column=17
 IntLoc][] : enter=500000, leave=500000
 [IntLoc : dhrystone.c line=732 column=17
 IntLoc- : pass=500000
 -1];
 | 
| 742 | Array2Par : dhrystone.c line=728 column=11 Array2Par[] : enter=500000, leave=500000
 [IntLoc : dhrystone.c line=732 column=17
 IntLoc+ : pass=500000
 +20][IntLoc : dhrystone.c line=732 column=17
 IntLoc] = : enter=500000, leave=500000
 = Array1Par : dhrystone.c line=727 column=11
 Array1Par[] : enter=500000, leave=500000
 [IntLoc : dhrystone.c line=732 column=17
 IntLoc];
 | 
| 743 | IntGlob : dhrystone.c line=479 column=6 IntGlob = : pass=500000
 = 5;
 | 
| 744 | } | 
| 745 |  | 
| 746 | Enumeration Func1 : call=1500000 Func1(CharPar1, CharPar2)
 | 
| 747 | CapitalLetter    CharPar1; | 
| 748 | CapitalLetter    CharPar2; | 
| 749 | { | 
| 750 | REG CapitalLetter    CharLoc1; | 
| 751 | REG CapitalLetter    CharLoc2; | 
| 752 |  | 
| 753 | CharLoc1 : dhrystone.c line=750 column=20 CharLoc1 = : pass=1500000
 = CharPar1 : dhrystone.c line=747 column=15
 CharPar1;
 | 
| 754 | CharLoc2 : dhrystone.c line=751 column=20 CharLoc2 = : pass=1500000
 = CharLoc1 : dhrystone.c line=750 column=20
 CharLoc1;
 | 
| 755 | if : true=1500000, false=0 if (CharLoc2 : dhrystone.c line=751 column=20
 CharLoc2 != : true=1500000, false=0
 != CharPar2 : dhrystone.c line=748 column=15
 CharPar2)
 | 
| 756 | return : pass=1500000 return (Ident1 : dhrystone.c line=426 column=15
 Ident1);
 | 
| 757 | else | 
| 758 | return : pass=0 return (Ident2 : dhrystone.c line=426 column=23
 Ident2);
 | 
| 759 | } | 
| 760 |  | 
| 761 | boolean Func2 : call=500000 Func2(StrParI1, StrParI2)
 | 
| 762 | String30    StrParI1; | 
| 763 | String30    StrParI2; | 
| 764 | { | 
| 765 | REG OneToThirty        IntLoc; | 
| 766 | REG CapitalLetter    CharLoc; | 
| 767 |  | 
| 768 | IntLoc : dhrystone.c line=765 column=19 IntLoc = : pass=500000
 = 1;
 | 
| 769 | while : true=500000, false=500000 while (IntLoc : dhrystone.c line=765 column=19
 IntLoc <= : true=500000, false=500000
 <= 1)
 | 
| 770 | if : true=500000, false=0 if (Func1 : enter=500000, leave=500000
 
 Func1 : dhrystone.c line=746 column=13
 Func1(StrParI1 : dhrystone.c line=762 column=10
 StrParI1[] : enter=500000, leave=500000
 [IntLoc : dhrystone.c line=765 column=19
 IntLoc], StrParI2 : dhrystone.c line=763 column=10
 StrParI2[] : enter=500000, leave=500000
 [IntLoc : dhrystone.c line=765 column=19
 IntLoc+ : pass=500000
 +1]) == : true=500000, false=0
 == Ident1 : dhrystone.c line=426 column=15
 Ident1)
 | 
| 771 | { | 
| 772 | CharLoc : dhrystone.c line=766 column=20 CharLoc = : pass=500000
 = 'A';
 | 
| 773 | ++ : pass=500000 ++IntLoc : dhrystone.c line=765 column=19
 IntLoc;
 | 
| 774 | } | 
| 775 | if : true=0, false=500000 if (CharLoc : dhrystone.c line=766 column=20
 CharLoc >= : true=0, false=500000
 MC/DC independently affect : true=0, false=500000
 >= 'W' && : true=0, false=500000
 && CharLoc : dhrystone.c line=766 column=20
 CharLoc <= : true=0, false=0
 MC/DC independently affect : true=0, false=0
 <= 'Z')
 | 
| 776 | IntLoc : dhrystone.c line=765 column=19 IntLoc = : pass=0
 = 7;
 | 
| 777 | if : true=0, false=500000 if (CharLoc : dhrystone.c line=766 column=20
 CharLoc == : true=0, false=500000
 == 'X')
 | 
| 778 | return : pass=0 return(TRUE);
 | 
| 779 | else | 
| 780 | { | 
| 781 | if : true=0, false=500000 if (function : enter=500000, leave=500000
 strcmp(StrParI1 : dhrystone.c line=762 column=10
 StrParI1, StrParI2 : dhrystone.c line=763 column=10
 StrParI2) > : true=0, false=500000
 > 0)
 | 
| 782 | { | 
| 783 | IntLoc : dhrystone.c line=765 column=19 IntLoc += : pass=0
 += 7;
 | 
| 784 | return : pass=0 return (TRUE);
 | 
| 785 | } | 
| 786 | else | 
| 787 | return : pass=500000 return (FALSE);
 | 
| 788 | } | 
| 789 | } | 
| 790 |  | 
| 791 | boolean Func3 : call=500000 Func3(EnumParIn)
 | 
| 792 | REG Enumeration    EnumParIn; | 
| 793 | { | 
| 794 | REG Enumeration    EnumLoc; | 
| 795 |  | 
| 796 | EnumLoc : dhrystone.c line=794 column=18 EnumLoc = : pass=500000
 = EnumParIn : dhrystone.c line=792 column=17
 EnumParIn;
 | 
| 797 | if : true=500000, false=0 if (EnumLoc : dhrystone.c line=794 column=18
 EnumLoc == : true=500000, false=0
 == Ident3 : dhrystone.c line=426 column=31
 Ident3) return : pass=500000
 return (TRUE);
 | 
| 798 | return : pass=0 return (FALSE);
 | 
| 799 | } | 
| 800 |  | 
| 801 | #ifdef    NOSTRUCTASSIGN | 
| 802 | memcpy(d, s, l) | 
| 803 | register char    *d; | 
| 804 | register char    *s; | 
| 805 | register int    l; | 
| 806 | { | 
| 807 | while (l--) *d++ = *s++; | 
| 808 | } | 
| 809 | #endif | 
| 810 | /* ---------- */ | 
| 811 | [EOF] |