PVOL1TOOLS 3PHDR1TOOLS.BCK TOOLS 00010001000100000220000220 000000DECVMSBACKUP PXHDR2F0819208192 M 00  3' TOOLS.BCKuh TOOLS.BCKFBACKUP/REW/LOG $1$DIA0:[000000.TOOLS...] $1$MIA5:TOOLS.BCK/LABEL=TOOLS SYSTEM @NV6.2 _CECMOW::  _$1$MIA5: V6.2  W*[TOOLS]DHRYSTONE.C;1+,m .8/ 4P88,-o0123KPWO956@ ٞ7`[89GHJA/***** hpda:net.sources / homxb!gemini / 1:58 am Apr 1, 1986*/8/* EVERBODY: Please read "APOLOGY" below. -rick 01/06/85/ * See introduction in net.arch, or net.micro * * "DHRYSTONE" Benchmark Program * * Version: C/1.1, 12/01/84 *< * Date: PROGRAM updated 01/06/86, RESULTS updated 03/31/86 *D * Author: Reinhold P. Weicker, CACM Vol 27, No 10, 10/84 pg. 1013+ * Translated from ADA by Rick Richardson9 * Every method to preserve ADA-likeness has been used, * at the expense of C-ness. *1 * Compile: cc -O dry.c -o drynr : No registersK * cc -O -DREG=register dry.c -o dryr : Registers *5 * Defines: Defines are provided for old C compiler's9 * which don't have enums, and can't assign structures.4 * The time(2) function is library dependant; Most9 * return the time in seconds, but beware of some, like' * Aztec C, which return other units.7 * The LOOPS define is initially set for 50000 loops.5 * If you have a machine with large integers and is6 * very fast, please change this number to 500000 to3 * get better accuracy. Please select the way to6 * measure the execution time using the TIME define.7 * For single user machines, time(2) is adequate. For9 * multi-user machines where you cannot get single-user4 * access, use the times(2) function. If you have3 * neither, use a stopwatch in the dead of night.5 * Use a "printf" at the point marked "start timer"9 * to begin your timings. DO NOT use the UNIX "time(1)"4 * command, as this will measure the total time to7 * run this program, which will (erroneously) include5 * the time to malloc(3) storage and to compute the! * time it takes to do nothing. * * Run: drynr; dryr *B * Results: If you get any new machine/OS results, please send to: * * ihnp4!castor!pcrat!rick *7 * and thanks to all that do. Space prevents listing7 * the names of those who have provided some of these2 * results. I'll be forwarding these results to * Rheinhold Weicker. *; * Note: I order the list in increasing performance of the9 * "with registers" benchmark. If the compiler doesn't3 * provide register variables, then the benchmark( * is the same for both REG and NOREG. *= * PLEASE: Send complete information about the machine type,4 * clock speed, OS and C manufacturer/version. If4 * the machine is modified, tell me what was done.: * On UNIX, execute uname -a and cc -V to get this info. *A * 80x8x NOTE: 80x8x benchers: please try to do all memory models * for a particular compiler. * * APOLOGY (1/30/86):> * Well, I goofed things up! As pointed out by Haakon Bugge,= * the line of code marked "GOOF" below was missing from the; * Dhrystone distribution for the last several months. It= * *WAS* in a backup copy I made last winter, so no doubt it2 * was victimized by sleepy fingers operating vi! *B * The effect of the line missing is that the reported benchmarks> * are 15% too fast (at least on a 80286). Now, this creates; * a dilema - do I throw out ALL the data so far collected: * and use only results from this (corrected) version, or7 * do I just keep collecting data for the old version? *< * Since the data collected so far *is* valid as long as it6 * is compared with like data, I have decided to keep9 * TWO lists- one for the old benchmark, and one for the: * new. This also gives me an opportunity to correct one> * other error I made in the instructions for this benchmark.7 * My experience with C compilers has been mostly with> * UNIX 'pcc' derived compilers, where the 'optimizer' simply9 * fixes sloppy code generation (peephole optimization).C * But today, there exist C compiler optimizers that will actuallyC * perform optimization in the Computer Science sense of the word,= * by removing, for example, assignments to a variable whose< * value is never used. Dhrystone, unfortunately, provides8 * lots of opportunities for th is sort of optimization. *: * I request that benchmarkers re-run this new, corrected= * version of Dhrystone, turning off or bypassing optimizers: * which perform more than peephole optimization. Please= * indicate the version of Dhrystone used when reporting the * results to me. *  * RESULTS BEGIN HERE *O *----------------DHRYSTONE VERSION 1.1 RESULTS BEGIN-------------------------- *< * MACHINE MICROPROCESSOR OPERATING COMPILER DHRYSTONES/SEC. * TYPE SYSTEM NO REG REGSF * -------------------------- ------------ ----------- ---------------= * Apple IIe 65C02-1.02Mhz DOS 3.3 Aztec CII v1.05i 37 376 * - Z80-2.5Mhz CPM-80 v2.2 Aztec CII v1.05g 91 916 * - 8086-8Mhz RMX86 V6 Intel C-86 V2.0 197 203LM??A * IBM PC/XT 8088-4.77Mhz COHERENT 2.3.43 Mark Wiiliams 259 2755 * - 8086-8Mhz RMX86 V6 Intel C-86 V2.0 287 304 ??9 * Fortune 32:16 68000-6Mhz V7+sys3+4.1BSD cc 360 346- * PDP-11/34A w/FP-11C UNIX V7m cc 406 449A * Macintosh512 68000-7.7Mhz Mac ROM O/S DeSmet(C ware) 625 625. * VAX-11/750 w/FPA UNIX 4.2BSD cc 831 8524 * DataMedia 932 68000-10Mhz UNIX sysV cc 837 8885 * Plexus P35 68000-12.5Mhz UNIX sysIII cc 835 8942 * ATT PC7300 68010-10Mhz UNIX 5.0.3 cc 973 10348 * Compaq II 80286-8Mhz MSDOS 3.1 MS C 3.0 1086 1140 LMP * IBM PC/AT 80286-7.5Mhz Venix/286 SVR2 cc 1159 1254 *158 * Compaq II 80286-8Mhz MSDOS 3.1 MS C 3.0 1190 1282 MM( * MicroVAX II - Mach/4.3 cc 1361 1385/ * DEC uVAX II - Ultrix-32m v1.1 cc 1385 13995 * Compaq II 80286-8Mhz MSDOS 3.1 MS C 3.0 1351 1428* * VAX 11/780 - UNIX 4.2BSD cc 1417 1441( * VAX-780/MA780 Mach/4.3 cc 1428 14701 * VAX 11/780 - UNIX 5.0.1 cc 4.1.1.31 1650 16405 * Ridge 32C V1 - ROS 3.3 Ridge C (older) 1628 16950 * Gould PN6005 - UTX 1.1c+ (4.2) cc 1732 18844 * Gould PN9080 custom ECL UTX-32 1.1C cc 4745 4992' * VAX-784 - Mach/4.3 cc 5263 5555 &4% * VAX 8600 - 4.3 BSD cc 6329 64237 * Amdahl 5860 - UTS sysV cc 1.22 28735  28846+ * IBM3090/200 - ? ? 31250 31250 * *O *----------------DHRYSTONE VERSION 1.0 RESULTS BEGIN-------------------------- *< * MACHINE MICROPROCESSOR OPERATING COMPILER DHRYSTONES/SEC. * TYPE SYSTEM NO REG REGSF * -------------------------- ------------ ----------- ---------------8 * Commodore 64 6510-1MHz C64 ROM C Power 2.8 36 368 * HP-110 8086-5.33Mhz MSDOS 2.11 Lattice 2.14 284 284. * IBM PC/XT 8088-4.77Mhz PC/IX cc 271 294) * CCC 3205 - Xelos(SVR2) cc 558 5927 * Perq-II 2901 bitslice Accent S5c cc (CMU) 301 301C * IBM PC/XT 8088-4.77Mhz COHERENT 2.3.43 MarkWilliams cc 296 317+ * Cosmos 68000-8Mhz UniSoft cc 305 3224 * IBM PC/XT 8088-4.77Mhz Venix/86 2.0 cc 297 324L * DEC PRO 350 11/23 Venix/PRO SVR2 cc 299 3254 * IBM PC 8088-4.77Mhz MSDOS 2.0 b16cc 2.0 310 340H * PDP11/23 11/23 Venix (V7) cc 320 358- * Commodore Amiga ? Lattice 3.02 368 371L * PC/XT 80 ( TOOLS.BCKm o[TOOLS]DHRYSTONE.C;1P8K88-4.77Mhz Venix/86 SYS V cc 339 3777 * IBM PC 8088-4.77Mhz MSDOS 2.0 CI-C86 2.20M 390 3908 * IBM PC/XT 8088-4.77Mhz PCDOS 2.1 Wizard 2.1 367 403< * IBM PC/XT 8088-4.77Mhz PCDOS 3.1 Lattice 2.15 403 403 @3 * Colex DM-6 68010-8Mhz Unisoft SYSV cc 378 4109 * IBM PC 8088-4.77Mhz PCDOS 3.1 Datalight 1.10 416 4166 * IBM PC NEC V20-4.77Mhz MSDOS 3.1 MS 3.1 387 420; * IBM PC/XT 8088-4.77Mhz PCDOS 2.1 Microsoft 3.0 390 427; * IBM PC NEC V20-4.77Mhz MSDOS 3.1 MS 3.1 (186) 393 427& * PDP-11/34 - UNIX V7M cc 387 438: * IBM PC 8088, 4.77mhz PC-DOS 2.1 Aztec C v3.2d 423 454> * Tandy 1000 V20, 4.77mhz MS-DOS 2.11 Aztec C v3.2d 423 4585 * Tandy TRS-16B 68000-6Mhz Xenix 1.3.5 cc 438 458* * PDP-11/34 - RSTS/E decus c 438 4954 * Onyx C8002 Z8000-4Mhz IS/1 1.1 (V7) cc 476 511= * Tandy TRS-16B 68000-6Mhz Xenix 1.3.5 Green Hills 609 617L * DEC PRO 380 11/73 Venix/PRO SVR2 cc 577 6289 * FHL QT+ 68000-10Mhz Os9/68000 version 1.3 603 649 FH9 * Apollo DN550 68010-?Mhz AegisSR9/IX cc 3.12 666 6665 * HP-110 8086-5.33Mhz MSDOS 2.11 Aztec-C 641 676 6 * ATT PC6300 8086-8Mhz MSDOS 2.11 b16cc 2.0 632 6846 * IBM PC/AT 80286-6Mhz PCDOS 3.0 CI-C86 2.1 666 6840 * Tandy 6000 68000-8Mhz Xenix 3.0 cc 694 6942 * IBM PC/AT 80286-6Mhz Xenix 3.0 cc 684 704 MM? * Macintosh 68000-7.8Mhz 2M Mac Rom Mac C 32 bit int 694 7044 * Macintosh 68000-7.7Mhz - MegaMax C 2.0 661 709A * Macintosh512 68000-7.7Mhz Mac ROM O/S DeSmet(C ware) 714 7142 * IBM PC/AT 80286-6Mhz Xenix 3.0 cc 704 714 LM5 * Codata 3300 68000-8Mhz UniPlus+ (v7) cc 678 7257 * WICAT MB 68000-8Mhz System V WICAT C 4.1 585 731 ~. * Cadmus 9000 68010-10Mhz UNIX cc 714 735L * AT&T 6300 8086-8Mhz Venix/86 SVR2 cc 668 743; * Cadmus 9790 68010-10Mhz 1MB SVR0,Cadmus3.7 cc 720 747< * NEC PC9801F 8086-8Mhz PCDOS 2.11 Lattice 2.15 768 - @9 * ATT PC6300 8086-8Mhz MSDOS 2.11 CI-C86 2.20M 769 769< * Burroughs XE550 68010-10Mhz Centix 2.10 cc 769 769 CT1L * EAGLE/TURBO 8086-8Mhz Venix/86 SVR2 cc 696 7791 * ALTOS 586 8086-10Mhz Xenix 3.0b cc 724 7934 * DEC 11/73 J-11 micro Ultrix-11 V3.0 cc 735 7934 * ATT 3B2/300 WE32000-?Mhz UNIX 5.0.2 cc 735 8069 * Apollo DN320 68010-?Mhz AegisSR9/IX cc 3.12 806 8064 * IRIS-2400 68010-10Mhz UNIX System V cc 772 829L * Atari 520ST 68000-8Mhz TOS DigResearch 839 846< * IBM PC/AT 80286-6Mhz PCDOS 3.0 MS 3.0(large) 833 847 LM8 * WICAT MB 68000-8Mhz System V WICAT C 4.1 675 853 S~/ * VAX 11/750 - Ultrix 1.1 4.2BSD cc 781 8622 * CCC 7350A 68000-8MHz UniSoft V.2 cc 821 875* * VAX 11/750 - UNIX 4.2bsd cc 862 8775 * Fast Mac 68000-7.7Mhz - MegaMax C 2.0 839 904 +> * IBM PC/XT 8086-9.54Mhz PCDOS 3.1 Microsoft 3.0 833 909 C1+ * DEC 11/44 Ultrix-11 V3.0 cc 862 909A * Macintosh 68000-7.8Mhz 2M Mac Rom Mac C 16 bit int 877 909 S, * CCC 3210 - Xelos R01(SVR2) cc 849 9249 * CCC 3220 - Ed. 7 v2.3 cc 892 9252 * IBM PC/AT 80286-6Mhz Xenix 3.0 cc -i 909 925; * AT&T 6300 8086, 8mhz MS-DOS 2.11 Aztec C v3.2d 862 943/ * IBM PC/AT 80286-6Mhz Xenix 3.0 cc 892 961- * VAX 11/750 w/FPA Eunice 3.2 cc 914 976; * IBM PC/XT 8086-9.54Mhz PCDOS 3.1 Wizard 2.1 892 980 C1= * IBM PC/XT 8086-9.54Mhz PCDOS 3.1 Lattice 2.15 980 980 C17 * Plexus P35 68000-10Mhz UNIX System III cc 984 9809 * PDP-11/73 KDJ11-AA 15Mhz UNIX V7M 2.1 cc 862 981. * VAX 11/750 w/FPA UNIX 4.3bsd cc 994 9974 * IRIS-1400 68010-10Mhz UNIX System V cc 909 10002 * IBM PC/AT 80286-6Mhz Venix/86 2.1 cc 961 10005 * IBM PC/AT 80286-6Mhz PCDOS 3.0 b16cc 2.0 943 10635 * Zilog S8000/11 Z8001-5.5Mhz Zeus 3.2 cc 1011 10847 * NSC ICM-3216 NSC 32016-10Mhz UNIX SVR2 cc 1041 10849 * IBM PC/AT 80286-6Mhz PCDOS 3.0 MS 3.0(small) 1063 10860 * VAX 11/750 w/FPA VMS VAX-11 C 2.0 958 1091/ * Stride 68000-10Mhz System-V/68 cc 1041 1111= * Plexus P/60 MC68000-12.5Mhz UNIX SYSIII Plexus 1111 11112 * ATT PC7300 68010-10Mhz UNIX 5.0.2 cc 1041 1111, * CCC 3230 - Xelos R01(SVR2) cc 1040 1126/ * Stride 68000-12Mhz System-V/68 cc 1063 1136L * IBM PC/AT 80286-6Mhz Venix/286 SVR2 cc 1056 1149? * Plexus P/60 MC68000-12.5Mhz UNIX SYSIII Plexus 1111 1163 T: * IBM PC/AT 80286-6Mhz PCDOS 3.0 Datalight 1.10 1190 11907 * ATT PC6300+ 80286-6Mhz MSDOS 3.1 b16cc 2.0 1111 12196 * IBM PC/AT 80286-6Mhz PCDOS 3.1 Wizard 2.1 1136 12190 * Sun2/120 68010-10Mhz Sun 4.2BSD cc 1136 12198 * IBM PC/AT 80286-6Mhz PCDOS 3.0 CI-C86 2.20M 1219 12197 * WICAT PB 68000-8Mhz System V WICAT C 4.1 998 1226 ~8 * MASSCOMP 500 68010-10MHz RTU V3.0 cc (V3.2) 1156 1238H * Alliant FX/8 IP (68012-12Mhz) Concentrix cc -ip;exec -i 1170 1243 FX> * Cyb DataMate 68010-12.5Mhz Uniplus 5.0 Unisoft cc 1162 1250& * PDP 11/70 - UNIX 5.2 cc 1162 12508 * IBM PC/AT 80286-6Mhz PCDOS 3.1 Lattice 2.15 1250 12508 * IBM PC/AT 80286-7.5Mhz Venix/86 2.1 cc 1190 1315 *150 * Sun2/120 68010-10Mhz Standalone cc 1219 13157 * Intel 380 80286-8Mhz Xenix R3.0up1 cc 1250 1315 *16@ * Sequent Balance 8000 NS32032-10MHz Dynix 2.0 cc 1250 1315 N12C * IBM PC/DSI-32 32032-10Mhz MSDOS 3.1 GreenHills 2.14 1282 1315 C32 * ATT 3B2/400 WE32100-?Mhz UNIX 5.2 cc 1315 1315. * CCC 3250XP - Xelos R01(SVR2) cc 1215 1318O * IBM PC/RT 032 RISC(801?)?Mhz BSD 4.2 cc 1248 1333 RT) * DG MV4000 - AOS/VS 5.00 cc 1333 13336 * IBM PC/AT 80286-8Mhz Venix/86 2.1 cc 1275 1380 *169 * IBM PC/AT 80286-6Mhz MSDOS 3.0 Microsoft 3.0 1250 1388: * ATT PC6300+ 80286-6Mhz MSDOS 3.1 CI-C86 2.20M 1428 1428L * COMPAQ/286 80286-8Mhz Venix/286 SVR2 cc 1326 1443P * IBM PC/AT 80286-7.5Mhz Venix/286 SVR2 cc 1333 1449 *158 * WICAT PB 68000-8Mhz System V WICAT C 4.1 1169 1464 S~8 * Tandy II/6000 68000-8Mhz Xenix 3.0 cc 1384 1477( * MicroVAX II - Mach/4.3 cc 1513 1536: * WICAT MB 68000-12.5Mhz System V WICAT C 4.1 1246 1537 ~P * IBM PC/AT 80286-9Mhz SCO Xenix V cc 1540 1556 *18@ * Cyb DataMate 68010-12.5Mhz Uniplus 5.0 Unisoft cc 1470 1562 S' * VAX 11/780 - UNIX 5.2 cc 1515 1562! * MicroVAX-II - - - 1562 1612( * VAX-780/MA780 Mach/4.3 cc 1587 1612* * VAX 11/780 - UNIX 4.3bsd cc 1646 16621 * Apollo DN660 - AegisSR9/IX cc 3.12 1666 1666% * ATT 3B20 - UNIX 5.2 cc 1515 1724< * NEC PC-98XA 80286-8Mhz PCDOS 3.1 Lattice 2.15 1724 1724 @0 * HP9000-500 B series CPU HP-UX 4.02 cc 1724 -2 * Ridge 32C V1 - ROS 3.3 Ridge C (older) 1776 -> * IBM PC/STD 80286-8Mhz MSDOS 3.0 Microsoft 3.0 1724 1785 C2; * WICAT MB 68000-12.5Mhz System V WICAT C 4.1 1450 1814 S~: * WICAT PB 68000-12.5Mhz System V WICAT C 4.1 1530 1898 ~? * DEC-2065 KL10-Model B TOPS-20 6.1FT5 Port. C Comp. 1937 19460 * Gould PN6005 - UTX 1.1(4.2BSD) cc 1675 1964+ * DEC2060 KL-10 TOPS-20 cc 2000 2000 NM1 * Intel 310AP 80286-8Mhz Xenix 3.0 cc 1893 2009' * VAX 11/785 - UNIX 5.2 cc 2083 2083, * VAX 11/785 - VMS VAX-11 C 2.0 2083 2083( * VAX 11/785 - UNIX SVR2 cc 2123 2083A * VAX 11/785 - ULTRIX-32 1.1 cc 2083 2091 * * VAX 11/785 - UNIX 4.3bsd cc 2135 2136; * WICAT PB 68000-12.5Mhz System V WICAT C 4.1 1780 2233 S~( * Pyramid 90x - OSx 2.3 cc 2272 22728 * Pyramid 90x FPA,cache,4Mb OSx 2.5 cc no -O 2777 27773 * Pyramid 90x w/cache OSx 2.5 cc w/-O 3333 33333 * IBM-4341-II - VM/SP3 Waterloo C 1.2 3333 33338 * IRIS-2400T 68020-16.67Mhz UNIX System V c !U TOOLS.BCKm o[TOOLS]DHRYSTONE.C;1P8yc 3105 3401/ * Celerity C-1200 ? UNIX 4.2BSD cc 3485 34683 * SUN 3/75 68020-16.67Mhz SUN 4.2 V3 cc 3333 3571* * IBM-4341 Model 12 UTS 5.0 ? 3685 3685@ * SUN-3/160 68020-16.67Mhz Sun 4.2 V3.0A cc 3381 37642 * Sun 3/180 68020-16.67Mhz Sun 4.2 cc 3333 3846- * IBM-4341 Model 12 UTS 5.0 ? 3910 3910 MN6 * MC 5400 68020-16.67MHz RTU V3.0 cc (V4.0) 3952 4054D * Intel 386/20 80386-12.5Mhz PMON debugger Intel C386v0.2 4149 4386I * NCR Tower32 68020-16.67Mhz SYS 5.0 Rel 2.0 cc 3846 4545= * MC 5600/5700 68020-16.67MHz RTU V3.0 cc (V4.0) 4504 4746 %G * Intel 386/20 80386-12.5Mhz PMON debugger Intel C386v0.2 4534 4794 i1B * Intel 386/20 80386-16Mhz PMON debugger Intel C386v0.2 5304 56074 * Gould PN9080 custom ECL UTX-32 1.1C cc 5369 5676O * Gould 1460-342 ECL proc UTX/32 1.1/c cc 5342 5677 G1' * VAX-784 - Mach/4.3 cc 5882 5882 &4E * Intel 386/20 80386-16Mhz PMON debugger Intel C386v0.2 5801 6133 i1( * VAX 8600 - UNIX 4.3bsd cc 7024 7088* * VAX 8600 - VMS VAX-11 C 2.0 7142 7142; * Alliant FX/8 CE Concentrix cc -ce;exec -c 6952 7655 FX, * CCI POWER 6/32 COS(SV+4.2) cc 7500 7800/ * CCI POWER 6/32 POWER 6 UNIX/V cc 8236 8498. * CCI POWER 6/32 4.2 Rel. 1.2b cc 8963 95441 * Sperry (CCI Power 6) 4.2BSD cc 9345 10000? * CRAY-X-MP/12 105Mhz COS 1.14 Cray C 10204 102044 * IBM-3083 - UTS 5.0 Rel 1 cc 16666 125007 * CRAY-1A 80Mhz CTSS Cray C 2.0 12100 13888: * IBM-3083 - VM/CMS HPO 3.4 Waterloo C 1.2 13889 13889@ * Amdahl 470 V/8 UTS/V 5.2 cc v1.23 15560 15560< * CRAY-X-MP/48 105Mhz CTSS Cray C 2.0 15625 17857= * Amdahl 580 - UTS 5.0 Rel 1.2 cc v1.5 23076 23076*> * Amdahl 5860 UTS/V 5.2 cc v1.23 28970 28970 * * NOTEp6 * * Crystal changed from 'stock' to listed value.I * + This Macintosh was upgraded from 128K to 512K in such a way thatoO * the new 384K of memory is not slowed down by video generator accesses.s) * % Single processor; MC == MASSCOMPo; * NM A version 7 C compiler written at New Mexico Tech.=E * @ vanilla Lattice compiler used with MicroPro standard libraryr$ * S Shorts used instead of ints7 * T with Chris Torek's patches (whatever they are).T; * ~ For WICAT Systems: MB=MultiBus, PB=Proprietary BushK * LM Large Memory Model. (Otherwise, all 80x8x results are small model)rL * MM Medium Memory Model. (Otherwise, all 80x8x results are small model)@ * C1 Univation PC TURBO Co-processor; 9.54Mhz 8086, 640K RAM& * C2 Seattle Telecom STD-286 board% * C3 Definicon DSI-32 coprocessore$ * C? Unknown co-processor board?8 * CT1 Convergent Technologies MegaFrame, 1 processor.: * MN Using Mike Newtons 'optimizer' (see net.sources).L * G1 This Gould machine has 2 processors and was able to run 2 dhrystone1 * Benchmarks in parallel with no slowdown.gD * FH FHC == Frank Hogg Labs (Hazelwood Uniquad 2 in an FHL box).H * FX The Alliant FX/8 is a system consisting of 1-8 CEs (computationD * engines) and 1-12 IPs (interactive processors). Note N8 applies.I * RT This is one of the RT's that CMU has been using for awhile. I'mF * not sure that this is identical to the machine that IBM is selling * to the public.G * i1 Normally, the 386/20 starter kit has a 16k direct mapped cachecD * which inserts 2 or 3 wait states on a write thru. These resultsE * were obtained by disabling the write-thru, or essentially turningl' * the cache into 0 wait state memory.eJ * Nnn This machine has multiple processors, allowing "nn" copies of the0 * benchmark to run in the same time as 1 copy.I * &nn This machine has "nn" processors, and the benchmark results were J * obtained by having all "nn" processors working on 1 copy of dhrystone.C * (Note, this is different than Nnn. Salesmen like this measure)./K * ? I don't trust results marked with '?'. These were sent to me withNJ * either incomplete info, or with times that just don't make sense.D * ?? means I think the performance is too poor, ?! means too good.> * If anybody can confirm these figures, please respond. * * ABBREVIATIONSH3 * CCC Concurrent Computer Corp. (was Perkin-Elmer)w * MC Masscomp *O *--------------------------------RESULTS END----------------------------------b *H * The following program contains statements of a high-level programming< * language (C) in a distribution considered representative: * * assignments 53% * control statements 32% * procedure, function calls 15% *I * 100 statements are dynamically executed. The program is balanced withs * respect to the three aspects: * - statement type* * - operand type (for simple data types) * - operand access3 * operand global, local, parameter, or constant.* *I * The combination of these three aspects is balanced only approximately.e *? * The program does not compute anything meaningfull, but it iso* * syntactically and semantically correct. * */ H/* Accuracy of timings and human fatigue controlled by next two lines */@/*#define LOOPS 5000 /* Use this for slow or 16 bit machines */@#define LOOPS 100000 /* Use this for slow or 16 bit machines */;/*#define LOOPS 5000000 /* Use this for faster machines */ /* Compiler dependent options */6#undef NOENUM /* Define if compiler has no enum's */G#undef NOSTRUCTASSIGN /* Define if compiler can't assign structures */v-/* define only one of the next two defines */ 2/*#define TIMES /* Use times(2) time function */.#define TIME /* Use time(2) time function */B/* define the granularity of your times(2) function (when used) */I#define HZ 100 /* times(2) returns 1/60 second (most) */ ./* for compatibility with goofed up version */?/*#define GOOF /* Define if you want the goofed up version */* #ifdef GOOF-char Version[] = "1.0";U#elseIchar Version[] = "1.1";-#endif#ifdef NOSTRUCTASSIGN 8#define structassign(d, s) memcpy(&(d), &(s), sizeof(d))#elseE #define structassign(d, s) d = s#endif #ifdef NOENUM-#define Ident1 1#define Ident2 2#define Ident3 3#define Ident4 4#define Ident5 5typedef int Enumeration;#else5Btypedef enum {Ident1, Ident2, Ident3, Ident4, Ident5} Enumeration;#endiftypedef int OneToThirty;typedef int OneToFifty; typedef char CapitalLetter;6typedef char String30[31];typedef int Array1Dim[51];typedef int Array2Dim[51][51]; struct Record {P struct Record *PtrComp; Enumeration Discr; Enumeration EnumComp;e OneToFifty IntComp;* String30 StringComp;};"typedef struct Record RecordType;typedef RecordType * RecordPtr;typedef int boolean;5#define NULL 0 #define TRUE 1T#define FALSE 0 #ifndef REG #define REG*#endifextern Enumeration Func1();0extern boolean Func2(); #ifdef TIMES#include #include #endifmain(){8 Proc0();S exit(0);C}0/* * Package 1 */A int IntGlob;3boolean BoolGlob;char Char1Glob;char Char2Glob;Array1Dim Array1Glob;8Array2Dim Array2Glob;CRecordPtr PtrGlb;*RecordPtr PtrGlbNext;BProc0() {1 OneToFifty IntLoc1;h REG OneToFifty IntLoc2;1 OneToFifty IntLoc3;4 REG char CharLoc;* REG char CharIndex;3 Enumeration EnumLoc;9 String30 String1Loc; String30 String2Loc; extern char *malloc(); register unsigned int i;9 #ifdef TIME4 long time();5 long starttime; long benchtime; long nulltime;d starttime = time( (long *) 0);  for ( A  TOOLS.BCKm o[TOOLS]DHRYSTONE.C;1P8-i = 0; i < LOOPS; ++i);-H nulltime = time( (long *) 0) - starttime; /* Computes o'head of loop */#endif #ifdef TIMES time_t starttime; time_t benchtime; time_t nulltime;O struct tms tms;E( times(&tms); starttime = tms.tms_utime; for (i = 0; i < LOOPS; ++i);- times(&tms);-I nulltime = tms.tms_utime - starttime; /* Computes overhead of looping */#endif5 PtrGlbNext = (RecordPtr) malloc(sizeof(RecordType));P1 PtrGlb = (RecordPtr) malloc(sizeof(RecordType));  PtrGlb->PtrComp = PtrGlbNext; PtrGlb->Discr = Ident1; PtrGlb->EnumComp = Ident3; PtrGlb->IntComp = 40;> strcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING"); #ifndef GOOF? strcpy(String1Loc, "DHRYSTONE PROGRAM, 1'ST STRING"); /*GOOF*/3#endif> Array2Glob[8][7] = 10; /* Was missing in published program *//*****************-- Start Timer --0*****************/ #ifdef TIME  starttime = time( (long *) 0);c#endif #ifdef TIMES( times(&tms); starttime = tms.tms_utime;#endif for (i = 0; i < LOOPS; ++i) { Proc5(); Proc4(); IntLoc1 = 2; IntLoc2 = 3;7 strcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");/ EnumLoc = Ident2; - BoolGlob = ! Func2(String1Loc, String2Loc);7 while (IntLoc1 < IntLoc2)0 {3# IntLoc3 = 5 * IntLoc1 - IntLoc2;S% Proc7(IntLoc1, IntLoc2, &IntLoc3);M ++IntLoc1;t }t2 Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3); Proc1(PtrGlb);< for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)( if (EnumLoc == Func1(CharIndex, 'C')) Proc6(Ident1, &EnumLoc); IntLoc3 = IntLoc2 * IntLoc1; IntLoc2 = IntLoc3 / IntLoc1;. IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1; Proc2(&IntLoc1); }/*****************-- Stop Timer --*****************/ #ifdef TIME6 benchtime = time( (long *) 0) - starttime - nulltime;4 printf("Dhrystone(%s) time for %ld passes = %ld\n", Version, (long) LOOPS, benchtime); = printf("This machine benchmarks at %ld dhrystones/second\n",  ((long) LOOPS) / benchtime);#endif #ifdef TIMES times(&tms);32 benchtime = tms.tms_utime - starttime - nulltime;4 printf("Dhrystone(%s) time for %ld passes = %ld\n", Version, (long) LOOPS, benchtime/HZ);= printf("This machine benchmarks at %ld dhrystones/second\n",C# ((long) LOOPS) * HZ / benchtime);y#endif}MProc1(PtrParIn)9REG RecordPtr PtrParIn;6{h)#define NextRecord (*(PtrParIn->PtrComp))6# structassign(NextRecord, *PtrGlb);t PtrParIn->IntComp = 5;6( NextRecord.IntComp = PtrParIn->IntComp;( NextRecord.PtrComp = PtrParIn->PtrComp; Proc3(NextRecord.PtrComp);M if (NextRecord.Discr == Ident1) { NextRecord.IntComp = 6;02 Proc6(PtrParIn->EnumComp, &NextRecord.EnumComp);' NextRecord.PtrComp = PtrGlb->PtrComp;5 Proc7(NextRecord.IntComp, 10, &NextRecord.IntComp);  } else6& structassign(*PtrParIn, NextRecord);#undef NextRecordC}uProc2(IntParIO)1OneToFifty *IntParIO;7{  REG OneToFifty IntLoc; REG Enumeration EnumLoc; IntLoc = *IntParIO + 10;0 for(;;) { if (Char1Glob == 'A')6 {* --IntLoc; *IntParIO = IntLoc - IntGlob; EnumLoc = Ident1; }  if (EnumLoc == Ident1) break;  }} Proc3(PtrParOut)RecordPtr *PtrParOut;i{. if (PtrGlb != NULL) *PtrParOut = PtrGlb->PtrComp;3 else  IntGlob = 100;& Proc7(10, IntGlob, &PtrGlb->IntComp);}6Proc4() {2 REG boolean BoolLoc;X BoolLoc = Char1Glob == 'A'; BoolLoc |= BoolGlob;t Char2Glob = 'B';}AProc5() {0 Char1Glob = 'A';  BoolGlob = FALSE;} extern boolean Func3();8Proc6(EnumParIn, EnumParOut)REG Enumeration EnumParIn;REG Enumeration *EnumParOut;{6 *EnumParOut = EnumParIn;  if (! Func3(EnumParIn) )  *EnumParOut = Ident4;- switch (EnumParIn)  {* case Ident1: *EnumParOut = Ident1; break;6 case Ident2: if (IntGlob > 100) *EnumParOut = Ident1; else *EnumParOut = Ident4; break;i* case Ident3: *EnumParOut = Ident2; break; case Ident4: break;# case Ident5: *EnumParOut = Ident3;c }}a$Proc7(IntParI1, IntParI2, IntParOut)OneToFifty IntParI1;5OneToFifty IntParI2;OneToFifty *IntParOut;{3 REG OneToFifty IntLoc;I IntLoc = IntParI1 + 2;. *IntParOut = IntParI2 + IntLoc;},/Proc8(Array1Par, Array2Par, IntParI1, IntParI2)PArray1Dim Array1Par;Array2Dim Array2Par;OneToFifty IntParI1;OneToFifty IntParI2;{* REG OneToFifty IntLoc;C REG OneToFifty IntIndex;0 IntLoc = IntParI1 + 5;4 Array1Par[IntLoc] = IntParI2;) Array1Par[IntLoc+1] = Array1Par[IntLoc];s Array1Par[IntLoc+30] = IntLoc;/< for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)' Array2Par[IntLoc][IntIndex] = IntLoc;I ++Array2Par[IntLoc][IntLoc-1];c2 Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc]; IntGlob = 5;*}M%Enumeration Func1(CharPar1, CharPar2)3CapitalLetter CharPar1; CapitalLetter CharPar2; {1 REG CapitalLetter CharLoc1; REG CapitalLetter CharLoc2; CharLoc1 = CharPar1;6 CharLoc2 = CharLoc1;a if (CharLoc2 != CharPar2) return (Ident1); else  return (Ident2);}0!boolean Func2(StrParI1, StrParI2)*String30 StrParI1;String30 StrParI2;{l REG OneToThirty IntLoc;7 REG CapitalLetter CharLoc; IntLoc = 1; while (IntLoc <= 1)< if (Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1) { CharLoc = 'A';0 ++IntLoc; }/& if (CharLoc >= 'W' && CharLoc <= 'Z') IntLoc = 7;  if (CharLoc == 'X') return(TRUE);1 else {% if (strcmp(StrParI1, StrParI2) > 0)h {0 IntLoc += 7;T return (TRUE);  }  else return (FALSE); }}/boolean Func3(EnumParIn)REG Enumeration EnumParIn;{8 REG Enumeration EnumLoc;3 EnumLoc = EnumParIn;6& if (EnumLoc == Ident3) return (TRUE); return (FALSE);}z#ifdef NOSTRUCTASSIGN8memcpy(d, s, l)Cregister char *d; register char *s;1register int l;a{F while (l--) *d++ = *s++;t} #endif/* ---------- */*[TOOLS]DHRYSTONE.EXE;1+,n . / 4 -o0123 KPWO 56Rٞ7 89GHJ0D`0205!Y4h, DHRYSTONEV1.0!ٞ05-13   ?!! DECC$SHR_001Q! MTHRTL_001! LIBRTL_001$+CMA$TIS_SHR_0011.1 a(; TOOLS.BCKn o[TOOLS]DHRYSTONE.EXE;1 YDHRYSTONE PROGRAM, SOME STRINGDHRYSTONE PROGRAM, 1'ST STRINGDHRYSTONE PROGRAM, 2'ND STRINGDhrystone(%s) time for %ld passes = %ld This machine benchmarks at %ld dhrystones/second ^R^R\oR \b\PPΨ^[pXeYZZ_V-PS\\\SPn/P0/PkkRԢkRkR( πkRώ P\AijBhTu🭲RPRRjѭT%TRPTPЭPޭQPRPa֭ѭTݭݭ9k8ASSPhRPR12CUSPPPPUPPѭPfRޭQRaRPPPPPaRPP08<3Z?Pa'fdaPaPa PPaSPPPSSQhPQP1kŭTǭTTPPíPTޭQ RiPPARfRaWWP\\1~®PnPSSݏ3S~WYЬV(/ fRЦ fRRbжXgRbhPdiiSgR R SbfUե1 ЦTfRSTcTRRRRRcTPP08<3?Pc'idcPcPc PPcЬRзbRТ S RS Sb(/efP R T QbPPA QdQSSPQ a PdQP P Q3BAЬRЬQQbQPPPPPPbQPP48<?PԼFdԼPPPPQQ < UЬSЬEcЬEUExURUTRTSŏUQAcPUB`RRTЬSŏUP@cPEURďRBcS޼REbEcQPQPPPP|^TЬUЬSDePDRPQRPPPQPPPPAVTTҘVRRW RZTVRRXRݬݬP TRPRRPPЬPPPP@@htH(h2 @DECC$SHRMTHRTLLIBRTL CMA$TIS_SHR DHRYSTONE ,main: ,Proc0 t/Proc1 `0Proc25 0Proc34 0Proc4 0Proc5 0Proc6m \1Proc7 l1Proc8x 1Func1 1Func2 2Func3 ,=   ".n *. */  10 52#*[TOOLS]MKIMAGE.EXE;1+,p ./ 4-o0123 KPWO56ZW 7@}89GHJ0D`0205 W dhMKIMAGE1.0 W 05-13    ? 0@P LNM$FILE_DEV@P!dx`D SYS$INPUT 9SYS$OUTPUTC3 INPUT NAME OF SOURCE DEVICE (DEV:): INPUT DESTINATION FILENAME (DEV:): BLOCK WRITTEN STARTUP WITH DEVICE NAME: NODE NAME: MEDIA NAME (DISK TYPE): HOST NAME: VOLUME SIZE (IN BLOCKS): VOLUME SERIAL NUMBER: VOLUME LABEL: END OF DISK DUMP COPY SOURCE DISK NAME: OUTPUT FILE NAME: ILLEGAL DEVICE NAME ILLEGAL NODE NAME ILLEGAL DISK MOUNT ILLEGAL DISK SIZE ILLEGAL DISK SERIAL NUMBER ILLEGAL VOLUME LABEL ILLEGAL DISK MEDIA LABEL CANNOT ASSIGN (ATTACH) SOURCE DEVICE CANNOT ASSIGN (ATTACH) DESTINATION FILE CANNOT SETUP PRIVILEGE(PHY_IO) ILLEGAL BLOCK NUMBER ILLEGAL BLOCK NUMBER READ ERROR WRITE ERROR *** SYSTEM ERROR: ****************  0%K TOOLS.BCKp o[TOOLS]MKIMAGE.EXE;1ORЏh SЬTcR,R#dd d  dR֐ RR|~|~R|~<0~<~ P@Ԫ Yj'P/ ( Yݏ ω1(p{>|~j0Pݏ 21Rj>|~jf<~Pݏ 1p小d|~j(<~PCB|~j<~Pݏ r1>|~j<~Pݏ1 91Yj"y>|~jy<~PݏM 1>N|~j6<~Pݏc ϲ1>|~j<~Pݏ o1|~PP&ݏ} E1WP ݏ 118ݏ ;L_TSFBYTE: .LONG BUF_LEN ; transfer byte size from block size&;RD_DATA: .BLKB BUF_LEN ; data buffer & ; DATA STRUCTURES FOR THE RMS SERVICE .ALIGN LONG FAB_DSTBLK:% $FAB ALQ = 2, - ; Initial file size' FAC = , - ; File access type" FNA = DEST, - ; File name string) FNS = FN_LEN, - ; File name string size+ FOP = CTG, - ; File is to be contigunous1 MRS = BLKSIZE, - ; Max record size = 512 bytes- NAM = NAM_BLK_DST, - ; File name block addr- ORG = SEQ, - ; Sequential file organization+ RFM = FIX ; Record format is fixed lengthNAM_BLK_DST: $NAM"RAB_BLK_DST: ; Record access blk  $RAB FAB  8̋c TOOLS.BCKr'o[TOOLS]MKIMAGE.MAR;1Q,p= FAB_DSTBLK, - RAC = SEQ, - BKT = 0, -* RBF = RD_DATA, - ; Record buffer address% RSZ = MAXBUFF ; Record buffer size ; Terminal I/O variablesSYNC_EFN: .BLKL 1IN_IOSB: .BLKL 2TT_CHAN_IN: .BLKW 1INBUF: .BLKB BUF_LENSYSINPUT: .ASCID /SYS$INPUT/OUT_IOSB: .BLKL 2TT_CHAN_OUT: .BLKW 1OUTBUF: .BLKB BUF_LENSYSOUT: .ASCID /SYS$OUTPUT/SRC: .BLKB FN_LENDEST: .BLKB FN_LENDEVDST: .BLKB FN_LEN(D_SRC: .LONG 0 ; device name descriptor .ADDRESS SRC (D_DST: .LONG 0 ; device name descriptor .ADDRESS DEST +D_DEVDST: .LONG 0 ; device name descriptor .ADDRESS DEVDST 7PROMPT_IN: .ASCIZ/INPUT NAME OF SOURCE DEVICE (DEV:): /PROMPT_IN_LEN = .- PROMPT_IN=PROMPT_OUT: .ASCIZ/INPUT DESTINATION FILENAME (DEV:): /PROMPT_OUT_LEN = .- PROMPT_OUT ; Error report messages$MSGCBL: .ASCII/ BLOCK WRITTEN/<13>MSGCBL_LEN =.-MSGCBL+MSGDEV: .ASCII/STARTUP WITH DEVICE NAME: /MSGDEV_LEN =.-MSGDEVMSGNODE: .ASCII/NODE NAME: /MSGNODE_LEN =.-MSGNODE )MSGMNA: .ASCII/MEDIA NAME (DISK TYPE): /MSGMNA_LEN =.-MSGMNAMSGHOST: .ASCII/HOST NAME: /MSGHOST_LEN =.-MSGHOST*MSGVSIZ: .ASCII/VOLUME SIZE (IN BLOCKS): /MSGVSIZ_LEN =.-MSGVSIZ'MSGSRN: .ASCII/VOLUME SERIAL NUMBER: /MSGSRN_LEN =.-MSGSRNMSGVOL: .ASCII/VOLUME LABEL: /MSGVOL_LEN =.-MSGVOL.MSGEND: .ASCII/END OF DISK DUMP COPY/<13><10>MSGEND_LEN =.-MSGEND#MSGSRC: .ASCII/SOURCE DISK NAME: /MSGSRC_LEN =.-MSGSRC#MSGDST: .ASCII/OUTPUT FILE NAME: /MSGDST_LEN =.-MSGDST,ILLDEV: .ASCII/ILLEGAL DEVICE NAME/<13><10>ILLDEV_LEN = .-ILLDEV*ILLNODE: .ASCII/ILLEGAL NODE NAME/<13><10>ILLNODE_LEN = .-ILLNODE+ILLMNT: .ASCII/ILLEGAL DISK MOUNT/<13><10>ILLMNT_LEN = .-ILLMNT*ILLSIZ: .ASCII/ILLEGAL DISK SIZE/<13><10>ILLSIZ_LEN = .-ILLSIZ3ILLSRN: .ASCII/ILLEGAL DISK SERIAL NUMBER/<13><10>ILLSRN_LEN = .-ILLSRN-ILLVOL: .ASCII/ILLEGAL VOLUME LABEL/<13><10>ILLVOL_LEN = .-ILLVOL2ILLMEDIA: .ASCII/ILLEGAL DISK MEDIA LABEL/<13><10>ILLMEDIA_LEN = .-ILLMEDIA=ILLASN: .ASCII/CANNOT ASSIGN (ATTACH) SOURCE DEVICE/<13><10>ILLASN_LEN = .-ILLASNCILLASNDST: .ASCII/CANNOT ASSIGN (ATTACH) DESTINATION FILE/<13><10>ILLASNDST_LEN = .-ILLASNDST7ILLPRIV: .ASCII/CANNOT SETUP PRIVILEGE(PHY_IO)/<13><10>ILLPRIV_LEN = .-ILLPRIV-ILLBLK: .ASCII/ILLEGAL BLOCK NUMBER/<13><10>ILLBLK_LEN = .-ILLBLK.ILLHOST: .ASCII/ILLEGAL BLOCK NUMBER/<13><10>ILLHOST_LEN = .-ILLHOST"RDERR: .ASCII/READ ERROR/<13><10>RDERR_LEN = .-RDERR#WRERR: .ASCII/WRITE ERROR/<13><10>WRERR_LEN = .-WRERRPNUMBUF: .BLKB 10CRLF: .ASCIZ<13><10>"SYSTTL: .ASCIZ/*** SYSTEM ERROR: /SYSTTL_LEN=.-SYSTTL%MSG: .ASCIZ/****************/<13><10>MSG_LEN = .-MSG .align quadSYSMSG: .BLKB 256MSGTXT: .BLKB BUF_LEN0; L_TSFBYTE - LENGTH OF RECORD IN BYTES FOR QIO 2L_TSFBYTE: .long MAXBUFF ; transfer size in bytes3L_TSBLOCK: .long MAXBLKS ; transfer size in blocks .align page&RD_DATA: .BLKB MAXBUFF ; data buffer ;;********************************************************** .PSECT CODE,EXE,NOWRT,LONG;; ---------------------------------------------------------; TYPEMSG Procedure;; ---------------------------------------------------------; INPUT:; 4(AP) - MSG ADDR; 8(AP) - MSG LEN.GLOBL TYPEMSG.ENTRY TYPEMSG, ^M CLRL R2 MOVL #MSGTXT, R3 MOVL 4(AP), R4112$: CLRB (R3) CMPL R2, 8(AP) BGEQ 11$ CMPL R2, #BUF_LEN -2 BGEQ 11$ TSTB (R4) BEQL 11$ CMPB (R4), #10 BEQL 12$ CMPB (R4), #13 BEQL 12$ TSTB (R4) BEQL 11$ MOVB (R4)+,(R3)+ INCL R2 BRB 112$12$: MOVB #13,(R3)+ MOVB #10,(R3)+ INCL R2 INCL R211$: $QIOW_S EFN = SYNC_EFN, - CHAN = TT_CHAN_OUT, -) FUNC = #, -  IOSB = OUT_IOSB, - p1 = MSGTXT, -  p2 = R2 BLBC R0, 10$ MOVZWL OUT_IOSB,R0 BLBC R0, 10$ MOVL #1, R0 RET10$:  CLRL R0 ; ERROR RET;; ---------------------------------------------------------; TYPENUM Procedure;; ---------------------------------------------------------; INPUT:; 4(AP) - SOURCE LONG INT.GLOBL TYPENUM".ENTRY TYPENUM, ^M CVTLP 4(AP), #10, @#PNUMBUF MOVL #PNUMBUF+5, R3 CLRL R2 ; LEN MOVL #PNUMBUF, R4 MOVL #SYSMSG,R5 MOVB (R3), R0 BICB2 #^XF0, R0 CMPB #^XD, R0 BNEQU 10$ MOVB #^A/-/, (R5)+ ; MINUS INCL R210$: MOVB (R4), R0 ASHL #-4, R0 ,R1 BICB2 #^XF0, R1 ADDB2 #^X30, R1 MOVB R1,(R5)+ INCL R2 CMPL R4, R3 BGEQ 20$ MOVB (R4)+, R0 BICB2 #^XF0,R0 ADDB2 #^X30, R0 MOVB R0, (R5)+ INCL R2 BRB 10$ 20$: PUSHL R2 PUSHL #SYSMSG CALLS #2,TYPEMSG RET;; ---------------------------------------------------------; COPYRAW - Procedure;; ---------------------------------------------------------..ENTRY COPYRAW,^M; Input Source device name MOVL D_SRC, D_VALUE MOVC3 D_SRC,@,S_VALUE3 MOVAL SETUP_BLK,R10 ; setup pointer to item list? MOVW #K_GENSIZE,(R10) ; >buffer length - same for next 2 calls& MOVW #LNM$_STRING,2(R10) ; >item code) MOVAB S_DEVNAME,4(R10) ; >buffer address0 MOVAW D_DEVNAME,8(R10) ; >return length address8 CLRL 12(R10) ; >end of list descriptor - next 3 calls0 CLRL R9 ; use as recursive logical protection=NXLOG: $TRNLNM_S - ; translate logical device into physical1 tabnam=D_LNMTAB, - ; >use normal process tables< lognam=D_VALUE, - ; >source logical name is inputted value$ itmlst=(R10) ; >stacked item list2 BLBC R0, 1$ ; confirm valid device name returned8 MOVW D_DEVNAME,D_VALUE ; then transfer translated value5 MOVC3 D_DEVNAME,S_DEVNAME, - ; into input descriptor S_VALUE ; > AOBLEQ #10,R9,NXLOG ; try another translation until too many9 PUSHL #ILLDEV_LEN ; **** error msg - iilegal device name PUSHL #ILLDEV CALLS #2, TYPEMSG BRW ONERROR=1$: MOVW D_VALUE,D_DEVNAME ; use specified device as physical< MOVC3 D_VALUE,S_VALUE,S_DEVNAME ; ...release generic buffer; Get node name8 MOVW #SYI$_NODENAME,2(R10) ; >item code - get node name* MOVAB S_NODENAME,4(R10) ; >buffer addressA MOVAW D_NODENAME,8(R10) ; >return length address, eol already ok& $GETSYIW_S - ; get system node name$ itmlst=(R10) ; >stacked item list' BLBS R0,2$ ; confirm operation status8 PUSHL #ILLNODE_LEN ; **** error msg - iilegal NODE name PUSHL #ILLNODE CALLS #2, TYPEMSG BRW ONERROR:2$: CLRL L_LOWLIM ; low seek limit at beginning of volume! CLRL L_SEEK ; the whole volumeL; verify that device is a mounted disk & get its type, host, label & size...6 MOVW #4,(R10) ; >buffer length - good for next calls( MOVW #DVI$_DEVCLASS,2(R10) ; >item code> MOVAL L_DEVGEN,4(R10) ; >buffer address - for next DVI calls@ MOVAW W_DEVGEN_SIZ,8(R10) ; >return length address - don't care- $GETDVIW_S - ; check that device is a disk/ devnam=D_DEVNAME, - ; >device name descriptor+ itmlst=(R10) ; >item list - device class' BLBS R0,3$ ; confirm operation status>20$: PUSHL #ILLMNT_LEN ; **** error msg - iilegal mountOF DISK PUSHL #ILLMNT CALLS #2, TYPEMSG BRW ONERROR; Check Device Class03$: CMPL #DC$_DISK,L_DEVGEN ; check device class BEQL 12$ ; if not a disk...1 BRB 20$ ; error msg - illegal mount par of disk ; Check Mount912$: MOVW #DVI$_MNT,2(R10) ; >else, load new item in list) $GETDVIW_S - ; get disk mounted status/ devnam=D_DEVNAME, - ; >device name descriptor, itmlst=(R10) ; >item list - device status% BLBC R0,4$ ; validate call success7 BLBS L_DEVGEN,5$ ; check that device is mounted, else04$: BRB 20$ ; err @[̓ TOOLS.BCKr'o[TOOLS]MKIMAGE.MAR;1Q,AAor msg - problem of mount disk; Get volume size >5$: MOVW #DVI$_MAXBLOCK,2(R10) ; >load new item code into list; MOVAL L_MAXBLK,4(R10) ; >buffer address - device capacity% $GETDVIW_S - ; get disk block size/ devnam=D_DEVNAME, - ; >device name descriptor. itmlst=(R10) ; >item list - device capacity( BLBS R0,6$ ; confirm operation status2 PUSHL #ILLSIZ_LEN ; error msg - iilegal disk size PUSHL #ILLSIZ CALLS #2, TYPEMSG BRW ONERROR?6$: MOVW #DVI$_SERIALNUM,2(R10) ; >load new item code into list9 MOVAL L_SERIAL,4(R10) ; >buffer address - serial number( $GETDVIW_S - ; get disk serial number/ devnam=D_DEVNAME, - ; >device name descriptor, itmlst=(R10) ; >item list - device serial' BLBS R0,7$ ; confirm operation status; PUSHL #ILLSRN_LEN ; error msg - iilegal disk serial number PUSHL #ILLSRN CALLS #2, TYPEMSG BRW ONERROR; Get volume label@7$: MOVW #K_GENSIZE,(R10) ; >buffer length - good for next calls& MOVW #DVI$_VOLNAM,2(R10) ; >item code0 MOVAB S_LABEL,4(R10) ; >buffer address - label= MOVAW D_LABEL,8(R10) ; >return length address in descriptor" $GETDVIW_S - ; get device label/ devnam=D_DEVNAME, - ; >device name descriptor+ itmlst=(R10) ; >item list - device label) BLBS R0,10$ ; confirm operation status5 PUSHL #ILLVOL_LEN ; error msg - iilegal volume label PUSHL #ILLVOL CALLS #2, TYPEMSG BRW ONERROR.10$: MOVW #DVI$_MEDIA_NAME,2(R10) ; >item code7 MOVAB S_DEVTYPE,4(R10) ; >buffer address - device type> MOVAW D_DEVTYPE,8(R10) ; >return length address in descriptor! $GETDVIW_S - ; get device type/ devnam=D_DEVNAME, - ; >device name descriptor+ itmlst=(R10) ; >item list - device label( BLBS R0,11$ ; confirm operation status: PUSHL #ILLMEDIA_LEN ; error msg - iilegal disk media name PUSHL #ILLMEDIA CALLS #2, TYPEMSG BRW ONERROR; Get host name-11$: MOVW #DVI$_HOST_NAME,2(R10) ; >item code9 MOVAB S_HOSTNAME,4(R10) ; >buffer address - serving node? MOVAW D_HOSTNAME,8(R10) ; >return length address in descriptor" $GETDVIW_S - ; get device label/ devnam=D_DEVNAME, - ; >device name descriptor+ itmlst=(R10) ; >item list - serving node, BLBS R0,OPENSRC ; confirm operation status3 PUSHL #ILLHOST_LEN ; error msg - iilegal host name PUSHL #ILLHOST CALLS #2, TYPEMSG BRW ONERROR2; attach device & boost privileges for physical IOOPENSRC:/ $ASSIGN_S - ; assign a channel to the device7 devnam=D_DEVNAME, - ; >input descriptor - device name% chan=SRC_CHAN ; >resulting channel BLBS R0,1$ ; validate status@ PUSHL #ILLASN_LEN ; error msg - cannot aasign (attach) disk dev PUSHL #ILLASN CALLS #2, TYPEMSG BRW SRCERROR; Set privileges (PHY_IO)21$: $SETPRV_S - ; test/boost privileges (PHY_IO)+ enbflg=#1, - ; >enable masked privileges3 prvadr=Q_NEWPRIV ; >address of new privilege mask3 BLBS R0,2$ ; check successful completion, else...A PUSHL #ILLPRIV_LEN ; error msg - cannot setup privilege (PHY_IO) PUSHL #ILLPRIV CALLS #2, TYPEMSG BRW SRCERROR@2$: SUBL3 #1,L_MAXBLK,L_HILIM ; make high limit the volume limitC SUBL3 L_LOWLIM,L_HILIM, L_SEEK ; compute seek coverage from limits* INCL L_SEEK ; make that limit-inclusive8 BGTR OPENDST ; check that seek is positive, otherwiseD PUSHL #ILLBLK_LEN ; illegal high limit block - must be th whole vol PUSHL #ILLBLK CALLS #2, TYPEMSG SRCERROR: $DASSGN_S chan=SRC_CHANONERROR: RETIOERROR: $DASSGN_S chan=SRC_CHAN $CLOSE FAB = FAB_DSTBLK RETOPENDST:(;### MOVL L_MAXBLK, FAB_DSTBLK+FAB$L_ALQ MOVL #100, FAB_DSTBLK+FAB$L_ALQ CLRB FAB_DSTBLK+FAB$B_RAT# MOVL D_DST+4, FAB_DSTBLK+FAB$L_FNA! MOVB D_DST, FAB_DSTBLK+FAB$B_FNS $CREATE FAB = FAB_DSTBLK BLBC R0, 14$ $CONNECT RAB=RAB_BLK_DST BLBC R0, 14$ BRB SETUPG14$: PUSHL #ILLASNDST_LEN ; error msg - cannot aasign (attach) disk dev PUSHL #ILLASNDST CALLS #2, TYPEMSG $DASSGN_S chan=SRC_CHAN $CLOSE FAB = FAB_DSTBLK RETSETUP: ( $GETTIM_S - ; get current system time timadr=Q_GTIME ; >start time7 CLRQ RD_IOSB ; initialize (zero) stream status blocks; startup report before loop PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGDEV_LEN PUSHL #MSGDEV CALLS #2, TYPEMSG PUSHL D_DEVNAME PUSHL D_DEVNAME+4 CALLS #2, TYPEMSG PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGNODE_LEN PUSHL #MSGNODE CALLS #2, TYPEMSG PUSHL D_NODENAME PUSHL D_NODENAME+4 CALLS #2, TYPEMSG PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGVSIZ_LEN PUSHL #MSGVSIZ CALLS #2, TYPEMSG PUSHL L_MAXBLK CALLS #1, TYPENUM PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGSRN_LEN PUSHL #MSGSRN CALLS #2, TYPEMSG PUSHL L_SERIAL CALLS #1, TYPENUM PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGMNA_LEN PUSHL #MSGMNA CALLS #2, TYPEMSG PUSHL D_DEVTYPE PUSHL D_DEVTYPE+4 CALLS #2, TYPEMSG PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGVOL_LEN PUSHL #MSGVOL CALLS #2, TYPEMSG PUSHL D_LABEL PUSHL D_LABEL+4 CALLS #2, TYPEMSG PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGHOST_LEN PUSHL #MSGHOST CALLS #2, TYPEMSG PUSHL D_HOSTNAME PUSHL D_HOSTNAME+4 CALLS #2, TYPEMSG PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGSRC_LEN PUSHL #MSGSRC CALLS #2, TYPEMSG PUSHL D_SRC PUSHL D_SRC+4 CALLS #2, TYPEMSG PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG PUSHL #MSGDST_LEN PUSHL #MSGDST CALLS #2, TYPEMSG PUSHL D_DST PUSHL D_DST+4 CALLS #2, TYPEMSG PUSHL #2 PUSHL #CRLF CALLS #2, TYPEMSG CLRL R4 ; REPORT COUNTER CLRL RD_COUNT ; initial LBN $ CLRL R5 ; count of blocks written; Read Block dataEXER:2 movl #MAXBLKS,L_TSBLOCK ; transfer size in blocks1 movl #MAXBUFF,L_TSFBYTE ; transfer size in bytes2 addl3 #maxblks,r5,r0 ; count blocks to be copied cmpl r0,l_seek ; over the top? blss 100$ ; - go if OKB; blocks to copy this time = size in blocks - blocks copied so far5 subl3 r5,l_seek,l_tsblock ; blocks to copy this time< mull3 l_tsblock,#blksize,L_TSFBYTE ; transfer size in bytes;(100$: $QIOW_S - ; perform IO operation chan=SRC_CHAN, - ; >channel- func=#IO$_READLBLK, - ; >read logical block+ iosb=RD_IOSB, - ; >iosb at current index- p1=RD_DATA, - ; >data storage for transfer# p2=L_TSFBYTE, - ; >transfer size, p3=RD_COUNT ; >device block address (LBN)2 BLBS R0,10$ ; validate proper queuing operation511$: PUSHL #RDERR_LEN ; **** error msg - error in IO PUSHL #RDERR CALLS #2, TYPEMSG BRW IOERROR10$: & MOVZWL RD_IOSB,R0 ; load error code+ BLBS R0,1$ ; if previous IO status faulty1 BRB 11$ ; IO error, shut down stream operations3$:1 PUSHL #WRERR_LEN ; **** error msg - error in IO PUSHL #WRERR CALLS #2, TYPEMSG BRW IOERROR; **** Write block data)1$: MOVW L_TSFBYTE, RAB_BLK_DST+RAB$W_RSZ $WRITE RAB=RAB_BLK_DST BLBC R0, 3$0 addl2 l_tsblock,r5 ; tally blocks copied so far! incl r4 ; count copy operations cmpl r4,#100) blss 30$ ; report every 100th operation) PUSHL R5 ; report blocks written so far CALLS #1,TYPENUM PUSHL #MSGCBL_LEN PUSHL #MSGCBL CALLS #2, TYPEMSG CLRL R4'; Check for the Next Block IO operation430$: addl2 L_TSBLOCK,RD_COUNT ; advance block number0 CMPL L_HILIM,RD_COUNT ; check for scan boundary BLSS 40$ ; - go if all done BRW EXER+40$: PUSHL R5 ; report last written block CALLS #1, TYPENUM PUSHL #MSGCBL_LEN PUSHL #MSGCBL CALLS #2, TYPEMSG PUSHL H B TOOLS.BCKr'o[TOOLS]MKIMAGE.MAR;1Q, % #MSGEND_LEN PUSHL #MSGEND CALLS #2, TYPEMSG RET ; that's it;; ---------------------------------------------------------; MKIMAGE - MAIN Procedure;; ---------------------------------------------------------.ENTRY MKIMAGE, ^M<> $ASSIGN_S -  CHAN = TT_CHAN_OUT -  DEVNAM = SYSOUT BLBC R0, 32$ $ASSIGN_S -  CHAN = TT_CHAN_IN -  DEVNAM = SYSINPUT BLBS R0, 30$ BRW ERROR; Input source file name30$: $QIOW_S EFN = SYNC_EFN, - CHAN = TT_CHAN_OUT, - FUNC = #IO$_WRITEVBLK, -  IOSB = OUT_IOSB, - p1 = PROMPT_IN, - & p2 = #PROMPT_IN_LEN, -) p4 = #0 ; already on the correct line BLBS R0, 31$ 32$:BRW ERROR31$:MOVZWL OUT_IOSB,R0 BLBC R0,32$ $QIOW_S EFN = SYNC_EFN, - CHAN = TT_CHAN_IN, - FUNC = #IO$_READVBLK, -  IOSB = IN_IOSB, - p1 = SRC, -  p2 = #FN_LEN, - p4 = #0 BLBC R0, 32$ MOVZWL IN_IOSB,R0 BLBC R0,32$; Input destination file name $QIOW_S EFN = SYNC_EFN, - CHAN = TT_CHAN_OUT, - FUNC = #IO$_WRITEVBLK, -  IOSB = OUT_IOSB, - p1 = PROMPT_OUT, - ' p2 = #PROMPT_OUT_LEN, -- p4 = #^X00010000 ; advance to the next line BLBS R0, 33$34$: BRW ERROR33$: MOVZWL OUT_IOSB,R0 BLBC R0,34$ $QIOW_S EFN = SYNC_EFN, - CHAN = TT_CHAN_IN, - FUNC = #IO$_READVBLK, -  IOSB = IN_IOSB, - p1 = DEST, -  p2 = #FN_LEN, - p4 = #0 BLBC R0, 34$ MOVZWL IN_IOSB,R0 BLBC R0,34$7; setup source and destination dev/file name descriptor MOVAL SRC, R0 CLRL R110$: TSTB (R0) BEQL 1$ ; END OF STRING CMPB #13,(R0) BEQL 1$ ; END OF STRING CMPB #10,(R0) BEQL 1$ ; END OF STRING CMPL #FN_LEN, R1 BLEQ 1$ INCL R0 INCL R1 BRB 10$1$: MOVL R1, D_SRC  MOVAL DEST, R0 CLRL R120$: TSTB (R0) BEQL 2$ ; END OF STRING CMPB #13,(R0) BEQL 2$ ; END OF STRING CMPB #10,(R0) BEQL 2$ ; END OF STRING CMPL #FN_LEN, R1 BLEQ 2$ INCL R0 INCL R1 BRB 20$2$: MOVL R1, D_DST!;********************************; THIS IS THE CHECK SECTION!;******************************** CALLS #0, COPYRAW BLBC R0, ERROR $DASSGN_S CHAN=TT_CHAN_OUT $DASSGN_S CHAN=TT_CHAN_IN RETERROR: movl r0,-(sp) $DASSGN_S CHAN=TT_CHAN_OUT $DASSGN_S CHAN=TT_CHAN_IN movl (sp)+,r0 RET .END MKIMAGE*[TOOLS]MTD.EXE;1+,s./ 4-o0123 KPWO56@)pٞ7`O89GHJ0D`0205pYh@MTDV1.0:pٞ05-13 `ae  ?!! DECC$SHR_001Q! MTHRTL_001$+CMA$TIS_SHR_001! LIBRTL_001wbrbMTD:%d: %s: rewind failed, continue with care MTD:%d: %s: unexpected end-of-file Magnetic Tape Dump/Restore utility. (C) Copyright 2000 Software Resources International. Usage: mtd or: mtd stands for tape device stands for name of file to dump to mtd: wrong argument(s) detected Usage: mtd or: mtd stands for tape device stands for name of file to dump to ^RެPPSSݬRPRPݠPPR~ ^RެPPSSݬR~PRPݠPPR~u|$^=VЬݭmP|~߭ܟPPRR R@|~|~|~|~$ݭ PRR R@ϡݬPT #w_$` WJ,-'U#޲Uz:r"r?FxN_w/KݳEѤAuo晬Č-|qtqnR(K8Wc!Vؒ;z(W_DѢr8`ca@G$d&dMjIP颭M$"&pcԴo'ֆs8,ʃ)I輍r6ׇq|u!hXu~5O_'&B!|kR0ֶyK:%F.= g/3*՚%Bkatq0Ӷ2tY'MT<6 `^9ykamzi` Ct.igIUQ aYd|x$>'zJN\A޽zRQ#jѫ(Z˨CZ6} `q 4nfYqUIjYYө̀)M'{{H*BQjD\?̝='ng D`דɒ+]^[w9y1h\{R~L#G\F먯~ei  t7لR{$hSf7*c-$i4ә!QG0Y ,4ţG;еjH&{ZTǸN?E&hAzSfU:VcĚeOCz0+FքMg01ASƀK׭^-#fU{sԍό9DiS}01>w֘Ӂ: gLy\i^ӕ[,%&/wUv GVٛÛʸCk T9Xֆ#;yqbޖDL.~,-[ =cm^>RlC{q7^μ 13Wͨ ЊOe#G[# yad߂K]CsÕhG[$Ol&ȴ%Rid$<hQFKtMM줉$4Ry^4/dÆ}uЯg.-:DzB Jmञ^"@B 'V2#j- EM^Cl ooUuc3J@J,3M)X Yg 5s??]%]d)LgOg[}5Wk6s /&eKj jqBs pCpp93}meV3g #V:ZWMi*.Z\fmyCNby)2d(Snc?9I= gdrz94_ QEPLiwu=u&E|['1k_/) \5C|O/&2(*<$OA`M&^B&kH4Z7/J?wCDP(}f~{er6=EX[1UB> 2 :P3Ua^z9wh<6m/gFb}U4 ?}[x EzEN`#kXH ×)Eiw 8#]I2- qhn$P_FH-?WG y|~b0:By|"([+"0})r ^S*>):kTEh5s`EmO3?$mxgy`2F{ڣڄ+1\%+V <2U>1V> k[w+ @P# ~d5NkK=@:n;QC;a]R'u! l86E61!RueȥWtmwq0ςOCr -ɎЩ~Tl"a%d(P' YyG$jv6=/VFl]6|rd]\ѕu\BuZ@qd/rU+,=2,$^eĦY-;lW@;@)]G CU^v'R]He-b5- RXW#2ۊ &59'JJuOFȁ%xU+E0(H&2|a:gyZ扖L LÝ~0jztq/#x꒾*\CA,˖P#Bd29݄Y|ZBFhNOT H= BGzFFhYXd'+jI`:0~Q#پqQD]=>#Ge쁜<#FB0M!@E^=VNˑBsa؂okU~IMZuuhc9dp #Imzhá6m3ICkdUPIqɿF:WטOn| xZ g)uB w VMu' gT95g`('4M\"=-)`V{Is_Xs~.OS'_]?G`tv ^RoQS:^+[dd.KdYs $ %"'Utn9pC=75s|M+T^'K(+z[#ZAFVJяf!/5xY%ad߻!7}W; {8I2+(;@ߤ~`Vؾ:H\igi`F~;6,SiRP@[LE]Kw>v8KhNJ<uGc,+D>q#I O۠Qؤ=E|p[ߤ x:IL)'y3>g `A8|C>~7bI91>2So}צ}< nu&I]ܪDwx$I\)9ír0lf@5| L/6#d)aI>5G>zʒoJ;St#޽(m8cix~a\D S'y)v;I/ťnB]}ςSά9jH#@!gƜݎ~Z-'௥ў\u{^t_j2q`W y gui lMvg{>\H=Z3<}seyuA6 hl ]J ,Mz7VH=@'Qs>T"* HI4&\SbPQ\%S$?Gam0IjydIj 2(;ND{E% rn(jePUB^? a;V; XRW#@y>)n"HnI\^NK ri=K&`m=q h\E#u.tM6 Z=-M0WAP?6,XCzM2MO %aa.4}HF}X;` VU~IGDYG%|$7'5.I0ko;gqiId=ShSYfd9#I~.{J"- &mTk-1= pqP)nVS&_#| w4=qdY',~2b>;4GZ%Z,$7/ThKAj#c5:`u{A<; e em_s<0KjN>k3? W.G|q8DMS! B'jq=/ h% zmTGb"If.$<0t {j5Q:4VwW.q4mvꗜ_7k@9驈Q]7d;V[0B.C0:va_jnNzrÈW; cv$\B,?wHSmigCTuM+,u!n,_7.|J,T;Liw?Q+3:{)Po{YoDIvLf78O;Ѽo=WX34P*DXqPZzDPL9iRX\PC@q 8k"L 1~zfÞ69D8RsrMTߺU=V` 8sir xRX .y0|DMK5~xY~LU`wDf[#6&HFş=kWZC9_lh+/!~WQ-Pcd|k4c~wK`f~I9Npg@ NPY~B@|GoQS[6GL`zaJ&4kP<=ET8QX'/ j$>>_$E?>Jv];bH2g2ZFUnV L:0!&@Y2)l zIB6G<xn]yd?_x+_MnwT QTD[|*%_`Xfbb%P ]G)4+"tnO[%vnp1:#L XPDYH[ Uzk;<`"q4y&c` <.}>BXpgz}[fmgTL^R4dQW6|W=xKB2P6<<?<\4oHXJY  2MGd\ak"0tgiDRj>>[HDd'?%VM"p=B"8? tbdoJ^];E IO+-:"TAR|;zGqk23K) >o>Ymnl1>)=$2x- 4 j]x}^KcbuM  SR[ gB]TH]EK6M\^3\ )aIW}lV3{!XPA`EOF1TOOLS.BCK TOOLS 00010001000100000220000220 000010DECVMSBACKUP PAhEOF2F0819208192 M 00 AB