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] |