| 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=5000000, leave=5000000 *(PtrParIn : dhrystone.c line=627 column=15
PtrParIn-> : enter=5000000, leave=5000000 ->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] |