home *** CD-ROM | disk | FTP | other *** search
/ Garbo / Garbo.cdr / pc / source / dhrys.zoo / dhrys.2 < prev    next >
Encoding:
Text File  |  1990-02-21  |  39.6 KB  |  1,019 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 RATIONALE README README.RER clarify.doc
  10. #   pure2_1.dif submit.frm
  11. # Wrapped by web@kivax on Mon Feb 12 07:45:32 1990
  12. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  13. if test -f Makefile -a "${1}" != "-c" ; then 
  14.   echo shar: Will not over-write existing file \"Makefile\"
  15. else
  16. echo shar: Extracting \"Makefile\" \(3956 characters\)
  17. sed "s/^X//" >Makefile <<'END_OF_Makefile'
  18. X#
  19. X#    Adjust for your system!
  20. X#
  21. X#    Common options for generic UNIX and Microsoft C (under DOS)
  22. X#    are listed here.  You can change them by switching the order,
  23. X#    placing the ones you want last.  Pay particular attention to
  24. X#    the HZ parameter, which may or may not be listed in some
  25. X#    header file on your system, such as <sys/param.h> or <limits.h>
  26. X#    (as CLK_TCK).  Even if it is listed, it may be incorrect.
  27. X#    Also, some operating systems (notably some (all?) versions
  28. X#    of Microport UNIX) lie about the time.  Sanity check with a
  29. X#    stopwatch.
  30. X#
  31. X#    For Microsoft C under DOS, you need a real make, not MSC make,
  32. X#    to run this Makefile.  The public domain "ndmake" will suffice.
  33. X#
  34. XCC=        cl            # C compiler name goes here (MSC)
  35. XCC=        cc            # C compiler name goes here (UNIX)
  36. X
  37. XPROGS=        msc            # Programs to build (MSC)
  38. XPROGS=        unix            # Programs to build (UNIX)
  39. X
  40. XTIME_FUNC=    -DMSC_CLOCK        # Use Microsoft clock() for measurement
  41. XTIME_FUNC=    -DTIME            # Use time(2) for measurement
  42. XTIME_FUNC=    -DTIMES            # Use times(2) for measurement
  43. XHZ=        50            # Frequency of times(2) clock ticks
  44. XHZ=        60            # Frequency of times(2) clock ticks
  45. XHZ=        100            # Frequency of times(2) clock ticks
  46. XHZ=        1            # Give bogus result unless changed!
  47. X
  48. XSTRUCTASSIGN=    -DNOSTRUCTASSIGN    # Compiler cannot assign structs
  49. XSTRUCTASSIGN=                # Compiler can assign structs
  50. X
  51. XENUMS=        -DNOENUMS        # Compiler doesn't have enum type
  52. XENUMS=                    # Compiler does have enum type
  53. X
  54. XOPTIMIZE=    -Ox -G2            # Optimization Level (MSC, 80286)
  55. XOPTIMIZE=    -O            # Optimization Level (generic UNIX)
  56. X
  57. XLFLAGS=                    #Loader Flags
  58. X
  59. XCFLAGS=    $(OPTIMIZE) $(TIME_FUNC) -DHZ=$(HZ) $(ENUMS) $(STRUCTASSIGN) $(CFL)
  60. X
  61. X#
  62. X#        You shouldn't need to touch the rest
  63. X#
  64. XSRC=        dhry_1.c dhry_2.c
  65. XHDR=        dhry.h
  66. X
  67. XUNIX_PROGS=    dry2 dry2reg
  68. XMSC_PROGS=    sdry2.exe sdry2reg.exe mdry2.exe mdry2reg.exe \
  69. X        ldry2.exe ldry2reg.exe cdry2.exe cdry2reg.exe \
  70. X        hdry2.exe hdry2reg.exe
  71. X
  72. X# Files added by rer:
  73. XFILES1=        README.RER clarify.doc Makefile submit.frm pure2_1.dif \
  74. X        dhry_c.dif
  75. X# Reinhold's files:
  76. XFILES2=        README RATIONALE $(HDR) $(SRC)
  77. XFILES3=        dhry.p
  78. X
  79. Xall:    $(PROGS)
  80. X
  81. Xunix:    $(UNIX_PROGS)
  82. X
  83. Xmsc:    $(MSC_PROGS)
  84. X
  85. Xdry2:        $(SRC) $(HDR)
  86. X        $(CC) $(CFLAGS) $(SRC) $(LFLAGS) -o $@
  87. X
  88. Xdry2reg:    $(SRC) $(HDR)
  89. X        $(CC) $(CFLAGS) -DREG=register $(SRC) $(LFLAGS) -o $@
  90. X
  91. Xsdry2.exe:    $(SRC) $(HDR)
  92. X        $(CC) -AS $(CFLAGS) $(SRC) $(LFLAGS) -o $@
  93. X
  94. Xsdry2reg.exe:    $(SRC) $(HDR)
  95. X        $(CC) -AS $(CFLAGS) -DREG=register $(SRC) $(LFLAGS) -o $@
  96. X
  97. Xmdry2.exe:    $(SRC) $(HDR)
  98. X        $(CC) -AM $(CFLAGS) $(SRC) $(LFLAGS) -o $@
  99. X
  100. Xmdry2reg.exe:    $(SRC) $(HDR)
  101. X        $(CC) -AM $(CFLAGS) -DREG=register $(SRC) $(LFLAGS) -o $@
  102. X
  103. Xldry2.exe:    $(SRC) $(HDR)
  104. X        $(CC) -AL $(CFLAGS) $(SRC) $(LFLAGS) -o $@
  105. X
  106. Xldry2reg.exe:    $(SRC) $(HDR)
  107. X        $(CC) -AL $(CFLAGS) -DREG=register $(SRC) $(LFLAGS) -o $@
  108. X
  109. Xcdry2.exe:    $(SRC) $(HDR)
  110. X        $(CC) -AC $(CFLAGS) $(SRC) $(LFLAGS) -o $@
  111. X
  112. Xcdry2reg.exe:    $(SRC) $(HDR)
  113. X        $(CC) -AC $(CFLAGS) -DREG=register $(SRC) $(LFLAGS) -o $@
  114. X
  115. Xhdry2.exe:    $(SRC) $(HDR)
  116. X        $(CC) -AH $(CFLAGS) $(SRC) $(LFLAGS) -o $@
  117. X
  118. Xhdry2reg.exe:    $(SRC) $(HDR)
  119. X        $(CC) -AH $(CFLAGS) -DREG=register $(SRC) $(LFLAGS) -o $@
  120. X
  121. Xshar:    dry2shar.1 dry2shar.2 dry2shar.3
  122. X
  123. Xdry2.arc:    $(FILES1) $(FILES2) $(FILES3)
  124. X    arc a dry2.arc $(FILES1) $(FILES2) $(FILES3)
  125. X
  126. Xdry2shar.1: $(FILES1)
  127. X    shar -vc -p X $(FILES1) >$@
  128. X
  129. Xdry2shar.2: $(FILES2)
  130. X    shar -vc -p X $(FILES2) >$@
  131. X
  132. Xdry2shar.3: $(FILES3)
  133. X    shar -v -p X $(FILES3) >$@
  134. X
  135. Xclean:
  136. X    -rm -f *.o *.obj
  137. X
  138. Xclobber: clean
  139. X    -rm -f $(UNIX_PROGS) $(MSC_PROGS) dry2shar.* dry2.arc
  140. X
  141. Xpost:    dry2shar.1    dry2shar.2    dry2shar.3
  142. X    for i in 1 2 3;\
  143. X    do\
  144. X        cat HEADERS BOILER.$$i dry2shar.$$i |\
  145. X        inews -h -t "Dhrystone 2.1 ($$i of 3)" -n comp.arch;\
  146. X    done
  147. X
  148. Xrepost:    dry2shar.1    dry2shar.2    dry2shar.3
  149. X    for i in 3;\
  150. X    do\
  151. X        cat HEADERS BOILER.$$i dry2shar.$$i |\
  152. X        inews -h -t "REPOST: Dhrystone 2.1 ($$i of 3)" -n comp.arch;\
  153. X    done
  154. X
  155. Xmail:    dry2shar.1    dry2shar.2    dry2shar.3
  156. X    for i in 1 2 3;\
  157. X    do\
  158. X        cat BOILER.$$i dry2shar.$$i |\
  159. X        mailx -s "Dhrystone 2.1 ($$i of 3)" $(ADDR);\
  160. X    done
  161. X
  162. Xdos:
  163. X    doscopy -a $(FILES1) $(FILES2) $(FILES3) dos!a:
  164. END_OF_Makefile
  165. if test 3956 -ne `wc -c <Makefile`; then
  166.     echo shar: \"Makefile\" unpacked with wrong size!
  167. fi
  168. # end of overwriting check
  169. fi
  170. if test -f RATIONALE -a "${1}" != "-c" ; then 
  171.   echo shar: Will not over-write existing file \"RATIONALE\"
  172. else
  173. echo shar: Extracting \"RATIONALE\" \(18793 characters\)
  174. sed "s/^X//" >RATIONALE <<'END_OF_RATIONALE'
  175. X
  176. X
  177. X    Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules
  178. X
  179. X
  180. X                 Reinhold P. Weicker
  181. X                 Siemens AG, E STE 35
  182. X                 Postfach 3240
  183. X                 D-8520 Erlangen
  184. X                 Germany (West)
  185. X
  186. X
  187. X
  188. X
  189. X1.  Why a Version 2 of Dhrystone?
  190. X
  191. XThe Dhrystone benchmark  program  [1]  has  become  a  popular  benchmark  for
  192. XCPU/compiler   performance   measurement,   in   particular  in  the  area  of
  193. Xminicomputers, workstations, PC's and microprocesors.  It apparently satisfies
  194. Xa  need  for  an  easy-to-use  integer benchmark; it gives a first performance
  195. Xindication which is more meaningful than MIPS numbers which, in their  literal
  196. Xmeaning  (million  instructions  per  second), cannot be used across different
  197. Xinstruction sets (e.g. RISC  vs.  CISC).   With  the  increasing  use  of  the
  198. Xbenchmark, it seems necessary to reconsider the benchmark and to check whether
  199. Xit can still fulfill this function.  Version 2 of Dhrystone is the  result  of
  200. Xsuch a re-evaluation, it has been made for two reasons:
  201. X
  202. Xo Dhrystone has been published in Ada [1], and Versions in Ada, Pascal  and  C
  203. X  have  been  distributed  by  Reinhold Weicker via floppy disk.  However, the
  204. X  version that was used most often for benchmarking has been the version  made
  205. X  by  Rick  Richardson  by another translation from the Ada version into the C
  206. X  programming language, this has been the version  distributed  via  the  UNIX
  207. X  network Usenet [2].
  208. X
  209. X  There is an obvious need for a common C version of Dhrystone, since C is  at
  210. X  present  the  most  popular  system  programming  language  for the class of
  211. X  systems (microcomputers, minicomputers,  workstations)  where  Dhrystone  is
  212. X  used  most.   There  should  be,  as  far as possible, only one C version of
  213. X  Dhrystone such that results can be compared  without  restrictions.  In  the
  214. X  past,  the  C  versions  distributed by Rick Richardson (Version 1.1) and by
  215. X  Reinhold Weicker had small (though not significant) differences.
  216. X
  217. X  Together with the new C version, the  Ada  and  Pascal  versions  have  been
  218. X  updated as well.
  219. X
  220. Xo As far as it is  possible  without  changes  to  the  Dhrystone  statistics,
  221. X  optimizing   compilers   should   be  prevented  from  removing  significant
  222. X  statements.  It has  turned  out  in  the  past  that  optimizing  compilers
  223. X  suppressed  code  generation for too many statements (by "dead code removal"
  224. X  or  "dead  variable  elimination").   This  has  lead  to  the  danger  that
  225. X  benchmarking  results obtained by a naive application of Dhrystone - without
  226. X  inspection of the code that was generated - could become meaningless.
  227. X
  228. XThe  overall  policiy  for  version  2  has  been  that  the  distribution  of
  229. Xstatements,  operand types and operand locality described in [1] should remain
  230. Xunchanged as much as possible.  (Very few changes were necessary; their impact
  231. Xshould be negligible.)  Also, the order of statements should remain unchanged.
  232. XAlthough I am aware of some critical remarks on the benchmark - I  agree  with
  233. Xseveral  of them - and know some suggestions for improvement, I didn't want to
  234. Xchange the benchmark into something different from what has  become  known  as
  235. X"Dhrystone"; the confusion generated by such a change would probably outweight
  236. Xthe benefits. If I were to write a new benchmark program, I wouldn't  give  it
  237. Xthe  name  "Dhrystone"  since  this  denotes  the  program  published  in [1].
  238. XHowever, I do recognize  the  need  for  a  larger  number  of  representative
  239. Xprograms  that can be used as benchmarks; users should always be encouraged to
  240. Xuse more than just one benchmark.
  241. X
  242. XThe new versions (version 2.1 for C, Pascal and Ada) will  be  distributed  as
  243. Xwidely as possible.  (Version 2.1 differs from version 2.0 distributed via the
  244. XUNIX Network Usenet in  March  1988  only  in  a  few  corrections  for  minor
  245. Xdeficiencies  found  by  users  of  version 2.0.)  Readers who want to use the
  246. Xbenchmark for their own measurements can obtain  a  copy  in  machine-readable
  247. Xform on floppy disk (MS-DOS or XENIX format) from the author.
  248. X
  249. X
  250. X2.  Overall Characteristics of Version 2
  251. X
  252. XIn general, version 2  follows  -  in  the  parts  that  are  significant  for
  253. Xperformance  measurement,  i.e.   within  the measurement loop - the published
  254. X(Ada) version and the C versions previously distributed.  Where  the  versions
  255. Xdistributed  by  Rick Richardson [2] and Reinhold Weicker have been different,
  256. Xit  follows  the  version  distributed  by  Reinhold  Weicker.  (However,  the
  257. Xdifferences  have  been  so  small  that their impact on execution time in all
  258. Xlikelihood has been negligible.)  The initialization and UNIX  instrumentation
  259. Xpart  -  which  had  been  omitted  in  [1] - follows mostly the ideas of Rick
  260. XRichardson [2].  However, any changes in the initialization part  and  in  the
  261. Xprinting  of  the  result have no impact on performance measurement since they
  262. Xare outside the measaurement loop.  As a concession to older compilers,  names
  263. Xhave been made unique within the first 8 characters for the C version.
  264. X
  265. XThe original publication of Dhrystone did not contain any statements for  time
  266. Xmeasurement  since  they  are necessarily system-dependent. However, it turned
  267. Xout that it is not enough just to inclose the main procedure of Dhrystone in a
  268. Xloop  and  to  measure the execution time.  If the variables that are computed
  269. Xare not used somehow, there is the danger that the compiler considers them  as
  270. X"dead  variables" and suppresses code generation for a part of the statements.
  271. XTherefore in version 2 all variables of "main" are printed at the end  of  the
  272. Xprogram.  This also permits some plausibility control for correct execution of
  273. Xthe benchmark.
  274. X
  275. XAt several places in the benchmark, code has been added, but only in  branches
  276. Xthat  are  not  executed. The intention is that optimizing compilers should be
  277. Xprevented from moving code out of the measurement loop, or from removing  code
  278. Xaltogether.  Statements that are executed have been changed in very few places
  279. Xonly.  In these cases, only the role of some operands has been changed, and it
  280. Xwas   made  sure  that  the  numbers  defining  the  "Dhrystone  distribution"
  281. X(distribution of statements, operand types and locality) still hold as much as
  282. Xpossible.   Except for sophisticated optimizing compilers, execution times for
  283. Xversion 2.1 should be the same as for previous versions.
  284. X
  285. XBecause of the self-imposed limitation that the order and distribution of  the
  286. Xexecuted  statements  should  not  be  changed,  there  are  still cases where
  287. Xoptimizing compilers may not generate code for some statements. To  a  certain
  288. Xdegree,  this  is  unavoidable  for  small synthetic benchmarks.  Users of the
  289. Xbenchmark are advised to check code listings whether code is generated for all
  290. Xstatements of Dhrystone.
  291. X
  292. XContrary to the suggestion in the published paper and its realization  in  the
  293. Xversions previously distributed, no attempt has been made to subtract the time
  294. Xfor the measurement loop overhead. (This calculation has proven  difficult  to
  295. Ximplement  in  a  correct  way,  and  its omission makes the program simpler.)
  296. XHowever, since the loop check is now part of the benchmark, this does have  an
  297. Ximpact  -  though a very minor one - on the distribution statistics which have
  298. Xbeen updated for this version.
  299. X
  300. X
  301. X3.  Discussion of Individual Changes
  302. X
  303. XIn this section, all changes are described that affect  the  measurement  loop
  304. Xand  that  are  not  just  renamings  of variables. All remarks refer to the C
  305. Xversion; the other language versions have been updated similarly.
  306. X
  307. XIn addition to adding  the  measurement  loop  and  the  printout  statements,
  308. Xchanges have been made at the following places:
  309. X
  310. Xo In procedure "main", three statements have been added  in  the  non-executed
  311. X  "then" part of the statement
  312. X
  313. X        if (Enum_Loc == Func_1 (Ch_Index, 'C'))
  314. X
  315. X  they are
  316. X
  317. X        strcpy (Str_2_Loc, "DHRYSTONE PROGRAM, 3'RD STRING");
  318. X        Int_2_Loc = Run_Index;
  319. X        Int_Glob = Run_Index;
  320. X
  321. X  The string assignment prevents  movement  of  the  preceding  assignment  to
  322. X  Str_2_Loc  (5'th  statement  of  "main")  out  of the measurement loop (This
  323. X  probably will not happen for the C version, but it did happen  with  another
  324. X  language   and  compiler.)   The  assignment  to  Int_2_Loc  prevents  value
  325. X  propagation for Int_2_Loc, and the assignment to Int_Glob makes the value of
  326. X  Int_Glob possibly dependent from the value of Run_Index.
  327. X
  328. Xo In the three arithmetic computations at the end of the measurement  loop  in
  329. X  "main  ",  the  role  of  some  variables has been exchanged, to prevent the
  330. X  division from just cancelling out the multiplication as it was  in  [1].   A
  331. X  very   smart  compiler  might  have  recognized  this  and  suppressed  code
  332. X  generation for the division.
  333. X
  334. Xo For Proc_2, no code has been changed, but the values of the actual parameter
  335. X  have changed due to changes in "main".
  336. X
  337. Xo In Proc_4, the second assignment has been changed from
  338. X
  339. X        Bool_Loc = Bool_Loc | Bool_Glob;
  340. X
  341. X  to
  342. X
  343. X        Bool_Glob = Bool_Loc | Bool_Glob;
  344. X
  345. X  It now assigns a value to a global variable  instead  of  a  local  variable
  346. X  (Bool_Loc);   Bool_Loc  would  be  a  "dead  variable"  which  is  not  used
  347. X  afterwards.
  348. X
  349. Xo In Func_1, the statement
  350. X
  351. X        Ch_1_Glob = Ch_1_Loc;
  352. X
  353. X  was added in the non-executed "else" part of the "if" statement, to  prevent
  354. X  the suppression of code generation for the assignment to Ch_1_Loc.
  355. X
  356. Xo In Func_2, the second character comparison statement has been changed to
  357. X
  358. X        if (Ch_Loc == 'R')
  359. X
  360. X  ('R' instead of 'X') because  a  comparison  with  'X'  is  implied  in  the
  361. X  preceding "if" statement.
  362. X
  363. X  Also in Func_2, the statement
  364. X
  365. X        Int_Glob = Int_Loc;
  366. X
  367. X  has been added in the non-executed part of the last "if" statement, in order
  368. X  to prevent Int_Loc from becoming a dead variable.
  369. X
  370. Xo In Func_3, a non-executed "else" part has been added to the "if"  statement.
  371. X  While  the  program  would  not be incorrect without this "else" part, it is
  372. X  considered bad programming practice if a function  can  be  left  without  a
  373. X  return value.
  374. X
  375. X  To compensate for this change, the (non-executed) "else" part  in  the  "if"
  376. X  statement of Proc_3 was removed.
  377. X
  378. XThe distribution statistics have been changed only  by  the  addition  of  the
  379. Xmeasurement loop iteration (1 additional statement, 4 additional local integer
  380. Xoperands) and by the change in Proc_4  (one  operand  changed  from  local  to
  381. Xglobal).  The distribution statistics in the comment headers have been updated
  382. Xaccordingly.
  383. X
  384. X
  385. X4.  String Operations
  386. X
  387. XThe string operations (string assignment and string comparison) have not  been
  388. Xchanged, to keep the program consistent with the original version.
  389. X
  390. XThere has been some concern that the string operations are over-represented in
  391. Xthe  program,  and that execution time is dominated by these operations.  This
  392. Xwas true in particular when optimizing compilers removed too much code in  the
  393. Xmain part of the program, this should have been mitigated in version 2.
  394. X
  395. XIt should be noted that this is a  language-dependent  issue:   Dhrystone  was
  396. Xfirst  published  in  Ada, and with Ada or Pascal semantics, the time spent in
  397. Xthe string operations is,  at  least  in  all  implementations  known  to  me,
  398. Xconsiderably smaller.  In Ada and Pascal, assignment and comparison of strings
  399. Xare operators defined in the language, and the upper  bounds  of  the  strings
  400. Xoccuring  in  Dhrystone  are part of the type information known at compilation
  401. Xtime.  The compilers can therefore generate  efficient  inline  code.   In  C,
  402. Xstring  assignemt  and comparisons are not part of the language, so the string
  403. Xoperations must be expressed in terms of the C library functions "strcpy"  and
  404. X"strcmp".   (ANSI  C  allows  an  implementation  to use inline code for these
  405. Xfunctions.)  In addition to the overhead caused by additional function  calls,
  406. Xthese  functions  are  defined for null-terminated strings where the length of
  407. Xthe strings is not known at compilation time; the function has to check  every
  408. Xbyte for the termination condition (the null byte).
  409. X
  410. XObviously, a C library which includes efficiently coded "strcpy" and  "strcmp"
  411. Xfunctions  helps to obtain good Dhrystone results. However, I don't think that
  412. Xthis is unfair since string  functions  do  occur  quite  frequently  in  real
  413. Xprograms  (editors, command interpreters, etc.).  If the strings functions are
  414. Ximplemented efficiently,  this  helps  real  programs  as  well  as  benchmark
  415. Xprograms.
  416. X
  417. XI admit that the  string  comparison  in  Dhrystone  terminates  later  (after
  418. Xscanning  20  characters)  than most string comparisons in real programs.  For
  419. Xconsistency with the original benchmark, I didn't change the  program  despite
  420. Xthis weakness.
  421. X
  422. X
  423. X5.  Intended Use of Dhrystone
  424. X
  425. XWhen Dhrystone is used, the following "ground rules" apply:
  426. X
  427. Xo Separate compilation (Ada and C versions)
  428. X
  429. X  As mentioned in [1], Dhrystone was written  to  reflect  actual  programming
  430. X  practice  in  systems  programming.   The  division into several compilation
  431. X  units (5 in the Ada version, 2 in the C version)  is  intended,  as  is  the
  432. X  distribution of inter-module and intra-module subprogram calls.  Although on
  433. X  many systems there will be no difference in execution time  to  a  Dhrystone
  434. X  version  where  all  compilation units are merged into one file, the rule is
  435. X  that separate compilation should  be  used.   The  intention  is  that  real
  436. X  programming  practice,  where  programs  consist  of  several  independently
  437. X  compiled units, should  be  reflected.   This  also  has  implies  that  the
  438. X  compiler,  while  compiling  one  unit,  has no information about the use of
  439. X  variables, register allocation etc.  occuring in  other  compilation  units.
  440. X  Although  in  real  life  compilation  units  will  probably  be larger, the
  441. X  intention is that these effects  of  separate  compilation  are  modeled  in
  442. X  Dhrystone.
  443. X
  444. X  A few language systems have post-linkage optimization available (e.g., final
  445. X  register allocation is performed after linkage).  This is a borderline case:
  446. X  Post-linkage  optimization  involves  additional  program  preparation  time
  447. X  (although  not  as  much  as  compilation in one unit) which may prevent its
  448. X  general use in practical programming.  I think that  since  it  defeats  the
  449. X  intentions given above, it should not be used for Dhrystone.
  450. X
  451. X  Unfortunately, ISO/ANSI  Pascal  does  not  contain  language  features  for
  452. X  separate  compilation.   Although  most  commercial Pascal compilers provide
  453. X  separate compilation in some way, we cannot use it for Dhrystone since  such
  454. X  a  version  would  not  be portable.  Therefore, no attempt has been made to
  455. X  provide a Pascal version with several compilation units.
  456. X
  457. Xo No procedure merging
  458. X
  459. X  Although Dhrystone contains some very short procedures where execution would
  460. X  benefit  from  procedure  merging (inlining, macro expansion of procedures),
  461. X  procedure merging is not to be used.  The reason is that the  percentage  of
  462. X  procedure  and  function  calls  is  part of the "Dhrystone distribution" of
  463. X  statements contained in [1].  This restriction does not hold for the  string
  464. X  functions  of  the  C  version  since ANSI C allows an implementation to use
  465. X  inline code for these functions.
  466. X
  467. Xo Other optimizations are allowed, but they should be indicated
  468. X
  469. X  It is often hard to draw an exact line between "normal code generation"  and
  470. X  "optimization"  in  compilers:  Some compilers perform operations by default
  471. X  that are invoked in other compilers only  when  optimization  is  explicitly
  472. X  requested.  Also, we cannot avoid that in benchmarking people try to achieve
  473. X  results that look as good as possible.  Therefore,  optimizations  performed
  474. X  by  compilers  -  other  than  those  listed  above - are not forbidden when
  475. X  Dhrystone execution times are measured.  Dhrystone is  not  intended  to  be
  476. X  non-optimizable  but  is  intended  to  be  similarly  optimizable as normal
  477. X  programs.   For  example,  there  are  several  places  in  Dhrystone  where
  478. X  performance   benefits   from   optimizations   like   common  subexpression
  479. X  elimination, value  propagation  etc.,  but  normal  programs  usually  also
  480. X  benefit  from  these  optimizations.   Therefore,  no  effort  was  made  to
  481. X  artificially  prevent  such  optimizations.   However,  measurement  reports
  482. X  should  indicate  which  compiler  optimization  levels  have been used, and
  483. X  reporting results with different levels of  compiler  optimization  for  the
  484. X  same hardware is encouraged.
  485. X
  486. Xo Default results are those without "register" declarations (C version)
  487. X
  488. X  When Dhrystone results are quoted  without  additional  qualification,  they
  489. X  should  be  understood  as  results  obtained  without use of the "register"
  490. X  attribute. Good compilers should be able to make good use of registers  even
  491. X  without explicit register declarations ([3], p. 193).
  492. X
  493. XOf course, for experimental  purposes,  post-linkage  optimization,  procedure
  494. Xmerging and/or compilation in one unit can be done to determine their effects.
  495. XHowever,  Dhrystone  numbers  obtained  under  these  conditions   should   be
  496. Xexplicitly  marked as such; "normal" Dhrystone results should be understood as
  497. Xresults obtained following the ground rules listed above.
  498. X
  499. XIn any case, for serious performance evaluation, users are advised to ask  for
  500. Xcode  listings  and  to  check  them carefully.  In this way, when results for
  501. Xdifferent systems are  compared,  the  reader  can  get  a  feeling  how  much
  502. Xperformance  difference is due to compiler optimization and how much is due to
  503. Xhardware speed.
  504. X
  505. X
  506. X6.  Acknowledgements
  507. X
  508. XThe C version 2.1 of Dhrystone has been developed  in  cooperation  with  Rick
  509. XRichardson  (Tinton  Falls,  NJ), it incorporates many ideas from the "Version
  510. X1.1" distributed previously by him over the UNIX network Usenet.  Through  his
  511. Xactivity with Usenet, Rick Richardson has made a very valuable contribution to
  512. Xthe dissemination of the benchmark.  I also thank  Chaim  Benedelac  (National
  513. XSemiconductor),  David Ditzel (SUN), Earl Killian and John Mashey (MIPS), Alan
  514. XSmith and Rafael  Saavedra-Barrera  (UC  at  Berkeley)  for  their  help  with
  515. Xcomments on earlier versions of the benchmark.
  516. X
  517. X
  518. X7.  Bibliography
  519. X
  520. X[1]
  521. X   Reinhold P. Weicker: Dhrystone: A Synthetic Systems Programming Benchmark.
  522. X   Communications of the ACM 27, 10 (Oct. 1984), 1013-1030
  523. X
  524. X[2]
  525. X   Rick Richardson: Dhrystone 1.1 Benchmark Summary (and Program Text)
  526. X   Informal Distribution via "Usenet", Last Version Known  to  me:  Sept.  21,
  527. X   1987
  528. X
  529. X[3]
  530. X   Brian W. Kernighan and Dennis M. Ritchie:  The C Programming Language.
  531. X   Prentice-Hall, Englewood Cliffs (NJ) 1978
  532. X
  533. END_OF_RATIONALE
  534. if test 18793 -ne `wc -c <RATIONALE`; then
  535.     echo shar: \"RATIONALE\" unpacked with wrong size!
  536. fi
  537. # end of overwriting check
  538. fi
  539. if test -f README -a "${1}" != "-c" ; then 
  540.   echo shar: Will not over-write existing file \"README\"
  541. else
  542. echo shar: Extracting \"README\" \(2308 characters\)
  543. sed "s/^X//" >README <<'END_OF_README'
  544. XThis floppy disk contains the source code of the Dhrystone benchmark
  545. X(version 2.1) in three languages:
  546. X
  547. XFiles containing the Ada version (*.s: Specifications, *.b: Bodies):
  548. X
  549. X  d_global.s
  550. X  d_main.b
  551. X  d_pack_1.b
  552. X  d_pack_1.s
  553. X  d_pack_2.b
  554. X  d_pack_2.s
  555. X
  556. X  (The file names have been abbreviated to 8 characters plus extension
  557. X   for MS-DOS)
  558. X
  559. XFiles containing the C version (*.h: Header File, *.c: C Modules)
  560. X
  561. X  dhry.h
  562. X  dhry_1.c
  563. X  dhry_2.c
  564. X  
  565. XFile containing the Pascal version:
  566. X
  567. X  dhry.p
  568. X
  569. XThe file RATIONALE contains the article 
  570. X
  571. X  "Dhrystone Benchmark: Rationale for Version 2 and Measurement Rules"
  572. X
  573. Xwhich has been published, together with the C source code (Version 2.0),
  574. Xin SIGPLAN Notices vol. 23, no. 8 (Aug. 1988), pp. 49-62.
  575. XThis article explains all changes that have been made for Version 2,
  576. Xcompared with the version of the original publication
  577. Xin Communications of the ACM vol. 27, no. 10 (Oct. 1984), pp. 1013-1030.
  578. XIt also contains "ground rules" for benchmarking with Dhrystone
  579. Xwhich should be followed by everyone who uses the program and publishes
  580. XDhrystone results.
  581. X
  582. XCompared with the Version 2.0 published in SIGPLAN Notices, Version 2.1
  583. Xcontains a few corrections that have been made after Version 2.0 was
  584. Xdistriobuted over the UNIX network Usenet. These small differences between
  585. XVersion 2.0 and 2.1 should not affect execution time measurements.
  586. XFor those who want to compare the exact contents of both versions,
  587. Xthe file "dhry_c.dif" contains the differences between the two versions,
  588. Xas generated by a file comparison of the corresponding files with the
  589. XUNIX utility "diff".
  590. X
  591. XRecipients of this floppy disk who perform measurements are asked
  592. Xto send measurement results to the author and/or to Rick Richardson.
  593. XRick Richardson publishes regularly Dhrystone results on the UNIX network
  594. XUsenet. For submissions of results to him (preferably by electronic mail,
  595. Xsee address in the program header), he has provided a form which is contained
  596. Xin the file "submit.frm".
  597. X
  598. XAugust 17, 1988
  599. X
  600. X                 Reinhold P. Weicker
  601. X                 Siemens AG, E STE 35
  602. X                 Postfach 3240
  603. X                 D-8520 Erlangen
  604. X                 Germany (West)
  605. X
  606. X                 Phone:  [xxx-49]-9131-7-20330  (8-17 Central European Time)
  607. X                 Usenet: ..!mcvax!unido!estevax!weicker
  608. END_OF_README
  609. if test 2308 -ne `wc -c <README`; then
  610.     echo shar: \"README\" unpacked with wrong size!
  611. fi
  612. # end of overwriting check
  613. fi
  614. if test -f README.RER -a "${1}" != "-c" ; then 
  615.   echo shar: Will not over-write existing file \"README.RER\"
  616. else
  617. echo shar: Extracting \"README.RER\" \(4419 characters\)
  618. sed "s/^X//" >README.RER <<'END_OF_README.RER'
  619. X12/04/88
  620. X
  621. XHere is Reinhold Weicker's DHRYSTONE 2.1 benchmark, slightly modified
  622. Xby me for instrumentation purposes only.  This is an integer CPU
  623. Xbenchmark.  The differences between 2.0 and 2.1 are minor, and
  624. XI believe that 2.0 and 2.1 results are comparable.
  625. X
  626. XFor purists, I've enclosed context diffs to turn what I'm posting
  627. Xas 2.1 back into what Reinhold sent me as 2.1.  The changes
  628. Xare in pure2_1.dif.  As you can see, it is only the instrumentation
  629. Xthat is slightly different.
  630. X
  631. XBoth the C and the Pascal versions are here.  The Ada version I
  632. Xhave is marked preliminary (not to be posted).
  633. X
  634. XI've enclosed a new submission form (note new address for mailings).
  635. XPlease deluge this mailbox (..!uunet!pcrat!dry2) with your results.
  636. XI'll summarize and repost when the dust clears.  Please do not
  637. Xassume that I will pull posted results off of the net (I won't, its
  638. Xtoo much work).
  639. X
  640. XI've attempted to include a Makefile for UNIX and Microsoft C (with ndmake).
  641. XPay particular attention to the HZ parameter, even though your power may
  642. Xbe 50 or 60 hertz, your computer may not be.  You may have to ask someone,
  643. Xread the manual, or check:
  644. X    /usr/include/sys/param.h
  645. X    /usr/include/limits.h        (CLK_TCK==HZ)
  646. Xfor this information.
  647. X
  648. XREPEAT: HZ IS NOT NECESSARILY THE FREQUENCY OF YOUR AC POWER !!!!!!
  649. X
  650. XThere are two versions to run, one with register variables, and one
  651. Xwithout.  Please let the benchmark run for 30,000 loops on sixteen
  652. Xbit machines, and for much longer (a minute or two) on faster machines.
  653. XPlease note that "time(2)" has a resolution of 1 second, and may give
  654. Xvariable results.  No matter how time is measured, a sanity check with
  655. Xa stopwatch is prudent.  We've run into systems that lie about time,
  656. Xand there is always the configuration error problem.  When it comes
  657. Xto time measurement on UNIX, there is no widely adhered to standard.
  658. X
  659. XFor segmented architectures, it is appropriate to submit results for
  660. Xall memory models, as shown below.
  661. X
  662. XI dropped the CODESIZE information that I attempted to add the last
  663. Xtime I posted this.  People couldn't follow directions, and the
  664. Xinformation wasn't very useful anyway.
  665. X
  666. XHere's a sample submission of results:
  667. X
  668. XDHRYSTONE 2.1 BENCHMARK REPORTING FORM
  669. XMANUF: IBM
  670. XMODEL: PC/AT
  671. XPROC: 80286
  672. XCLOCK: 8
  673. XOS: Venix
  674. XOVERSION: SVr2.3
  675. XCOMPILER: AT&T cc
  676. XCVERSION: 11/8/84
  677. XOPTIONS: -O
  678. XNOREG: 1450
  679. XREG: 1450
  680. XNOTES: HZ=60; Small Model
  681. XDATE: 03/04/88
  682. XSUBMITTER: pcrat!rick (Rick Richardson)
  683. XMAILTO: uunet!pcrat!dry2
  684. X
  685. XDHRYSTONE 2.1 BENCHMARK REPORTING FORM
  686. XMANUF: IBM
  687. XMODEL: PC/AT
  688. XPROC: 80286
  689. XCLOCK: 8
  690. XOS: Venix
  691. XOVERSION: SVr2.3
  692. XCOMPILER: AT&T cc
  693. XCVERSION: 11/8/84
  694. XOPTIONS: -O -Ml
  695. XNOREG: 1043
  696. XREG: 1043
  697. XNOTES: HZ=60; Large Model
  698. XDATE: 03/04/88
  699. XSUBMITTER: pcrat!rick (Rick Richardson)
  700. XMAILTO: uunet!pcrat!dry2
  701. X
  702. XThe program that processes submission forms is rather dumb.  Please
  703. Xdo not change the order, add or removes lines in the form.  If your
  704. XNOTES are longer than the space provided, then they are too long for
  705. Xthe summary.  Keep it terse, please.
  706. X
  707. XA form consists of all lines between:
  708. X    DHRYSTONE 2.1 BENCHMARK REPORTING FORM
  709. Xand
  710. X    MAILTO: uunet!pcrat!dry2
  711. Xboth lines must be present for the form to be processed.  If
  712. Xa field does not apply or is not known, leave it blank.  The fields
  713. Xare:
  714. X    MANUF:    Computer manufacturer, e.g. AT&T, IBM
  715. X    MODEL:    Model number of computer
  716. X    PROC:    If a microprocessor CPU, the part number, e.g. 68030
  717. X    CLOCK:    Clock in Mhz, if known.  Numeric only, e.g. 16.67
  718. X    OS:    Operating system, e.g. UNIX
  719. X    OVERSION: OS version, e.g. SVR3
  720. X    COMPILER: Compiler name, e.g. cc, Microsoft, or Green Hills
  721. X    CVERSION: Compiler version, e.g. 5.10
  722. X    OPTIONS: Relevant compiler options, e.g. -O3
  723. X    NOREG:    Dhrystones/second, no register attribute
  724. X    REG:    Dhrystones/second, with register attribute
  725. X    NOTES:    Additional, terse comments on one line
  726. X    DATE:    Date of test, US format MM/DD/YY
  727. X    SUBMITTER: uucp or domain address (full name)
  728. X
  729. X
  730. XHZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ
  731. X
  732. XPlease, if you are using times(2) to measure time, indicate
  733. Xthe HZ value you used in the NOTES field.  Something like this is OK:
  734. X
  735. X    NOTES: HZ=100; no inlining...
  736. X
  737. XHZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ HZ
  738. X
  739. X--
  740. X        Rick Richardson, President, PC Research, Inc.
  741. X
  742. X(201) 542-3734 (voice, nights)   OR     (201) 389-8963 (voice, days)
  743. Xuunet!pcrat!rick (UUCP)            rick%pcrat.uucp@uunet.uu.net (INTERNET)
  744. X        uunet!pcrat!dry2   (Dhrystone submission forms only)
  745. END_OF_README.RER
  746. if test 4419 -ne `wc -c <README.RER`; then
  747.     echo shar: \"README.RER\" unpacked with wrong size!
  748. fi
  749. # end of overwriting check
  750. fi
  751. if test -f clarify.doc -a "${1}" != "-c" ; then 
  752.   echo shar: Will not over-write existing file \"clarify.doc\"
  753. else
  754. echo shar: Extracting \"clarify.doc\" \(3195 characters\)
  755. sed "s/^X//" >clarify.doc <<'END_OF_clarify.doc'
  756. XCLARIFICATION
  757. XThere seems to have been a great deal of confusion over what this
  758. Xbenchmark measures, and how to use these results.  Let me try to clarify
  759. Xthis:
  760. X
  761. X    1) DHRYSTONE is a measure of processor+compiler efficiency in
  762. X       executing a 'typical' program.  The 'typical' program was
  763. X       designed by measuring statistics on a great number of
  764. X       'real' programs.  The 'typical' program was then written
  765. X       by Reinhold P. Weicker using these statistics.  The
  766. X       program is balanced according to statement type, as well
  767. X       as data type.
  768. X
  769. X    2) DHRYSTONE does not use floating point.  Typical programs don't.
  770. X
  771. X    3) DHRYSTONE does not do I/O.  Typical programs do, but then
  772. X       we'd have a whole can of worms opened up.
  773. X
  774. X    4) DHRYSTONE does not contain much code that can be optimized
  775. X       by vector processors.  That is why a CRAY doesn't look real
  776. X       fast, they weren't built to do this sort of computing.
  777. X
  778. X    5) DHRYSTONE does not measure OS performance, as it avoids
  779. X       calling the O.S.  The O.S. is indicated in the results only
  780. X       to help in identifying the compiler technology.
  781. X
  782. X    6) DHRYSTONE is not perfect, but is a hell of a lot better than
  783. X       the "sieve", or "SI".
  784. X
  785. X    7) DHRYSTONE gives results in dhrystones/second.  Bigger
  786. X       numbers are better.  As a baseline, the original IBM PC
  787. X       gives around 300-400 dhrystones/second with a good compiler.
  788. X       The fastest machines today are approaching 100,000.
  789. X
  790. XIf somebody asked me to pick out the best machine for the money, I
  791. Xwouldn't look at just the results of DHRYSTONE.  I'd probably:
  792. X
  793. X    1) Run DHRYSTONE to get a feel for the compiler+processor
  794. X       speed.
  795. X    2) Run any number of benchmarks to check disk I/O bandwidth,
  796. X       using both sequential and random read/writes.
  797. X    3) Run a multitasking benchmark to check multi-user response
  798. X       time.  Typically, these benchmarks run several types of
  799. X       programs such as editors, shell scripts, sorts, compiles,
  800. X       and plot the results against the number of simulated users.
  801. X    4) If appropriate for the intended use, run something like
  802. X       WHETSTONE, to determine floating point performance.
  803. X    5) If appropriate for intended use, run some programs which do
  804. X       vector and matrix computations.
  805. X    6) Figure out what the box will:
  806. X        - cost to buy
  807. X        - cost to operate and maintain
  808. X        - be worth when it is sold
  809. X        - be worth if the manufacturer goes out of business
  810. X    7) Having done the above, I probably have a hand-full of
  811. X       machines which meet my price/performance requirements.
  812. X       Now, I find out if the applications programs I'd like
  813. X       to use will run on any of these machines.  I also find
  814. X       out how much interest people have in writing new software
  815. X       for the machine, and look carefully at the migration path
  816. X       I will have to take when I reach the (inevitable) limits
  817. X       of the machine.
  818. X
  819. XTo summarize, DHRYSTONES by themselves are not anything more than
  820. Xa way to win free beers when arguing 'Box-A versus Box-B' religion.
  821. XThey do provide insight into Box-A/Compiler-A versus Box-A/Compiler-B
  822. Xcomparisons.
  823. X
  824. X            Rick Richardson
  825. X            PC Research, Inc.
  826. X            (201) 389-8963 (9-17 EST)
  827. X            (201) 542-3734 (7-9,17-24 EST)
  828. X            ...!uunet!pcrat!rick    (normal mail)
  829. X            ...!uunet!pcrat!dry2    (results only)
  830. END_OF_clarify.doc
  831. if test 3195 -ne `wc -c <clarify.doc`; then
  832.     echo shar: \"clarify.doc\" unpacked with wrong size!
  833. fi
  834. # end of overwriting check
  835. fi
  836. if test -f pure2_1.dif -a "${1}" != "-c" ; then 
  837.   echo shar: Will not over-write existing file \"pure2_1.dif\"
  838. else
  839. echo shar: Extracting \"pure2_1.dif\" \(3590 characters\)
  840. sed "s/^X//" >pure2_1.dif <<'END_OF_pure2_1.dif'
  841. X*** rer/dhry.h    Sun Dec  4 00:08:26 1988
  842. X--- weicker/dhry.h    Sun Dec  4 00:09:00 1988
  843. X***************
  844. X*** 38,45
  845. X   *              PC Research. Inc.
  846. X   *              94 Apple Orchard Drive
  847. X   *              Tinton Falls, NJ 07724
  848. X!  *                      Phone:  (201) 389-8963 (9-17 EST)               
  849. X!  *                      Usenet: ...!uunet!pcrat!rick
  850. X   *
  851. X   *      Please send results to Rick Richardson and/or Reinhold Weicker.
  852. X   *      Complete information should be given on hardware and software used.
  853. X
  854. X--- 38,45 -----
  855. X   *              PC Research. Inc.
  856. X   *              94 Apple Orchard Drive
  857. X   *              Tinton Falls, NJ 07724
  858. X!  *                      Phone:  (201) 834-1378 (9-17 EST)               
  859. X!  *                      Usenet: ...!seismo!uunet!pcrat!rick
  860. X   *
  861. X   *      Please send results to Rick Richardson and/or Reinhold Weicker.
  862. X   *      Complete information should be given on hardware and software used.
  863. X***************
  864. X*** 348,354
  865. X  /* Compiler and system dependent definitions: */
  866. X  
  867. X  #ifndef TIME
  868. X- #undef TIMES
  869. X  #define TIMES
  870. X  #endif
  871. X                  /* Use times(2) time function unless    */
  872. X
  873. X--- 348,353 -----
  874. X  /* Compiler and system dependent definitions: */
  875. X  
  876. X  #ifndef TIME
  877. X  #define TIMES
  878. X  #endif
  879. X                  /* Use times(2) time function unless    */
  880. X***************
  881. X*** 353,366
  882. X  #endif
  883. X                  /* Use times(2) time function unless    */
  884. X                  /* explicitly defined otherwise         */
  885. X- 
  886. X- #ifdef MSC_CLOCK
  887. X- #undef HZ
  888. X- #undef TIMES
  889. X- #include <time.h>
  890. X- #define HZ    CLK_TCK
  891. X- #endif
  892. X-         /* Use Microsoft C hi-res clock */
  893. X  
  894. X  #ifdef TIMES
  895. X  #include <sys/types.h>
  896. X
  897. X--- 352,357 -----
  898. X  #endif
  899. X                  /* Use times(2) time function unless    */
  900. X                  /* explicitly defined otherwise         */
  901. X  
  902. X  #ifdef TIMES
  903. X  #include <sys/types.h>
  904. X*** rer/dhry_1.c    Sun Dec  4 00:08:36 1988
  905. X--- weicker/dhry_1.c    Sun Dec  4 00:09:09 1988
  906. X***************
  907. X*** 47,53
  908. X  struct tms      time_info;
  909. X  extern  int     times ();
  910. X                  /* see library function "times" */
  911. X! #define Too_Small_Time (2*HZ)
  912. X                  /* Measurements should last at least about 2 seconds */
  913. X  #endif
  914. X  #ifdef TIME
  915. X
  916. X--- 47,53 -----
  917. X  struct tms      time_info;
  918. X  extern  int     times ();
  919. X                  /* see library function "times" */
  920. X! #define Too_Small_Time 120
  921. X                  /* Measurements should last at least about 2 seconds */
  922. X  #endif
  923. X  #ifdef TIME
  924. X***************
  925. X*** 56,65
  926. X  #define Too_Small_Time 2
  927. X                  /* Measurements should last at least 2 seconds */
  928. X  #endif
  929. X- #ifdef MSC_CLOCK
  930. X- extern clock_t    clock();
  931. X- #define Too_Small_Time (2*HZ)
  932. X- #endif
  933. X  
  934. X  long            Begin_Time,
  935. X                  End_Time,
  936. X
  937. X--- 56,61 -----
  938. X  #define Too_Small_Time 2
  939. X                  /* Measurements should last at least 2 seconds */
  940. X  #endif
  941. X  
  942. X  long            Begin_Time,
  943. X                  End_Time,
  944. X***************
  945. X*** 139,147
  946. X  #ifdef TIME
  947. X    Begin_Time = time ( (long *) 0);
  948. X  #endif
  949. X- #ifdef MSC_CLOCK
  950. X-   Begin_Time = clock();
  951. X- #endif
  952. X  
  953. X    for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
  954. X    {
  955. X
  956. X--- 135,140 -----
  957. X  #ifdef TIME
  958. X    Begin_Time = time ( (long *) 0);
  959. X  #endif
  960. X  
  961. X    for (Run_Index = 1; Run_Index <= Number_Of_Runs; ++Run_Index)
  962. X    {
  963. X***************
  964. X*** 199,207
  965. X  #endif
  966. X  #ifdef TIME
  967. X    End_Time = time ( (long *) 0);
  968. X- #endif
  969. X- #ifdef MSC_CLOCK
  970. X-   End_Time = clock();
  971. X  #endif
  972. X  
  973. X    printf ("Execution ends\n");
  974. X
  975. X--- 192,197 -----
  976. X  #endif
  977. X  #ifdef TIME
  978. X    End_Time = time ( (long *) 0);
  979. X  #endif
  980. X  
  981. X    printf ("Execution ends\n");
  982. END_OF_pure2_1.dif
  983. if test 3590 -ne `wc -c <pure2_1.dif`; then
  984.     echo shar: \"pure2_1.dif\" unpacked with wrong size!
  985. fi
  986. # end of overwriting check
  987. fi
  988. if test -f submit.frm -a "${1}" != "-c" ; then 
  989.   echo shar: Will not over-write existing file \"submit.frm\"
  990. else
  991. echo shar: Extracting \"submit.frm\" \(170 characters\)
  992. sed "s/^X//" >submit.frm <<'END_OF_submit.frm'
  993. XDHRYSTONE 2.1 BENCHMARK REPORTING FORM
  994. XMANUF:
  995. XMODEL:
  996. XPROC:
  997. XCLOCK:
  998. XOS:
  999. XOVERSION:
  1000. XCOMPILER:
  1001. XCVERSION:
  1002. XOPTIONS:
  1003. XNOREG:
  1004. XREG:
  1005. XNOTES:
  1006. XDATE:
  1007. XSUBMITTER:
  1008. XMAILTO: uunet!pcrat!dry2
  1009. END_OF_submit.frm
  1010. if test 170 -ne `wc -c <submit.frm`; then
  1011.     echo shar: \"submit.frm\" unpacked with wrong size!
  1012. fi
  1013. # end of overwriting check
  1014. fi
  1015. echo shar: End of shell archive.
  1016. exit 0
  1017.  
  1018.  
  1019.