home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / source / dhrys.zoo / dhrys.1 next >
Encoding:
Text File  |  1990-02-21  |  30.0 KB  |  869 lines

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