Initial commit of Smalltalk/X benchmark set.
authorJan Vrany <jan.vrany@fit.cvut.cz>
Mon, 10 Mar 2014 11:40:06 +0000
changeset 212 44e0b30db8c0
parent 206 29602f0696d8
child 213 918f0c6191c2
Initial commit of Smalltalk/X benchmark set. Not all benchmarks are updated for CalipeL. Benchmarks taken from package stx:goodies/benchmarks & stx:goodies/benchmarks/misc
s/benchmarks/stx/BenchmarkCollection.st
s/benchmarks/stx/BenchmarkDictionaryLike.st
s/benchmarks/stx/BenchmarkLinkedList.st
s/benchmarks/stx/BenchmarkSTX1.st
s/benchmarks/stx/BenchmarkSTX2.st
s/benchmarks/stx/BenchmarkSTX3.st
s/benchmarks/stx/BenchmarkSimpleHanoi.st
s/benchmarks/stx/BenchmarkSlopstone.st
s/benchmarks/stx/BenchmarkSmopstone.st
s/benchmarks/stx/BenchmarkSortedCollectionLike.st
s/benchmarks/stx/BenchmarkSpeedTester.st
s/benchmarks/stx/Make.proto
s/benchmarks/stx/Make.spec
s/benchmarks/stx/abbrev.stc
s/benchmarks/stx/bc.mak
s/benchmarks/stx/jv_calipel_s_benchmarks_stx.st
s/benchmarks/stx/libInit.cc
s/benchmarks/stx/stx.rc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkCollection.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,131 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkCollection
+	instanceVariableNames:'collectionClass collectionDatasetSize collectionDataset1
+		collectionDataset2 collectionDataset3 collection
+		collectionDataset1OrderedAsc collectionDataset1OrderedDesc'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkCollection class methodsFor:'running'!
+
+run
+    ^ (BenchmarkSuite class:self) run
+
+    "Created: / 10-06-2013 / 21:53:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+run: benchmark
+    ^ (BenchmarkInstance class:self selector:benchmark) run
+
+    "Created: / 31-05-2013 / 10:39:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-06-2013 / 21:53:44 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+run: benchmark with: parameters
+    ^ (BenchmarkInstance class:self selector:benchmark) runWith: parameters
+
+    "Created: / 10-03-2014 / 00:12:07 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkCollection class methodsFor:'testing'!
+
+isAbstract
+    ^ self == BenchmarkCollection
+
+    "Created: / 09-03-2014 / 10:34:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkCollection methodsFor:'parameters'!
+
+collectionClassName
+    ^ collectionClass name
+
+    "Modified (format): / 09-03-2014 / 10:00:45 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+collectionClassName:aSymbol
+    <parameter: 'Collection class name to benchmark' type: #Symbol values: #(#' * must be defined in subclass *')>
+
+    collectionClass := Smalltalk at: aSymbol asSymbol.
+    collectionClass isNil ifTrue:[ 
+        self error:'No such class: ', aSymbol
+    ].
+
+    "Created: / 09-03-2014 / 11:07:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+collectionDatasetSize
+    ^ collectionDatasetSize
+
+    "Created: / 10-03-2014 / 00:13:04 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+collectionDatasetSize:anInteger
+    <parameter: 'Size of a collection' type: #Integer default: 100000>
+    collectionDatasetSize := anInteger.
+
+    "Created: / 10-03-2014 / 00:13:08 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkCollection methodsFor:'running'!
+
+setUp
+    <setup>
+
+    | random seen generator |
+
+    random := Random new setSeed: 12345.
+    seen := Set new.
+    generator := [ 
+        | x |
+
+        x := random nextInteger.
+        [ seen includes: x ] whileTrue:[ 
+            x := random nextInteger.
+        ].
+        seen add: x.
+        x
+    ].
+
+
+    collectionDataset1 := (1 to: collectionDatasetSize) collect:[:i | generator value ].
+    self assert: seen size = collectionDatasetSize.        
+    collectionDataset2 := nil. "/ unused.
+    collectionDataset3 := nil. "/ unused.
+    Smalltalk garbageCollect.
+    collection := nil.
+
+    "Created: / 09-03-2014 / 10:10:49 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-03-2014 / 00:17:42 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+tearDown
+    <teardown>
+
+    collectionDataset1 := nil.
+    collectionDataset2 := nil.
+    collectionDataset3 := nil.
+    Smalltalk garbageCollect.
+    collection := nil.
+
+    "Created: / 09-03-2014 / 10:12:34 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-03-2014 / 00:17:31 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkCollection methodsFor:'setup'!
+
+setUpCollectionDataset1OrderedAsc
+    collectionDataset1OrderedAsc := collectionDataset1 copy sort.
+
+    "Created: / 09-03-2014 / 10:28:55 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+setUpCollectionDataset1OrderedDesc
+    collectionDataset1OrderedDesc := collectionDataset1 copy sort reverse
+
+    "Created: / 09-03-2014 / 10:29:13 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkDictionaryLike.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,87 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+BenchmarkCollection subclass:#BenchmarkDictionaryLike
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkDictionaryLike methodsFor:'benchmarks'!
+
+benchmarkOrderedAscAddIndividually
+    <benchmark: 'Insert ordered (asc) data individually'>
+
+    collection := collectionClass new.
+    1 to: collectionDatasetSize do:[:each | collection at:each put: each printString]
+
+    "Created: / 09-03-2014 / 10:20:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedAscRemoveIndividually
+    <benchmark: 'Remove ordered (asc) data individually'>
+    <setup: #(#setUpCollectionDataset1 #setUpCollectionDataset1OrderedAsc)>
+
+    collectionDataset1OrderedAsc do:[:each | collection removeKey:each]
+
+    "Created: / 09-03-2014 / 10:32:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-03-2014 / 10:34:10 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescAddIndividually
+    <benchmark: 'Insert ordered (desc) data individually'>
+
+    collection := collectionClass new.
+    collectionDatasetSize downTo: 1 do:[:each | collection at:each put: each printString]
+
+    "Created: / 09-03-2014 / 10:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescRemoveIndividually
+    <benchmark: 'Remove ordered (desc) data individually'>
+    <setup: #(#setUpCollectionDataset1 #setUpCollectionDataset1OrderedDesc)>
+
+    collectionDataset1OrderedDesc do:[:each | collection removeKey:each]
+
+    "Created: / 09-03-2014 / 10:32:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-03-2014 / 23:45:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomAddIndividually
+    <benchmark: 'Insert random data individually'>
+
+    collection := collectionClass new.
+    collectionDataset1 do:[:each | collection at:each put: each printString]
+
+    "Created: / 09-03-2014 / 10:17:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomRemoveIndividually
+    <benchmark: 'Remove random data individually'>
+    <setup: #setUpCollectionDataset1>
+
+    collectionDataset1 do:[:each | collection removeKey:each]
+
+    "Created: / 09-03-2014 / 10:30:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-03-2014 / 23:44:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkDictionaryLike methodsFor:'parameters'!
+
+collectionClassName:aSymbol
+    <parameter: 'Collection class name to benchmark' type: #Symbol values: #(Dictionary BTree)>
+
+    super collectionClassName:aSymbol
+
+    "Created: / 09-03-2014 / 10:42:43 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkDictionaryLike methodsFor:'running'!
+
+setUpCollectionDataset1
+    collection := collectionClass new.
+    collectionDataset1 do:[:each | collection at: each put: each printString ]
+
+    "Created: / 09-03-2014 / 22:26:46 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkLinkedList.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,37 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkLinkedList
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkLinkedList class methodsFor:'benchmarking'!
+
+buildList
+    "build a linked list with 1000 elements ..."
+
+    |anchor link|
+
+    anchor := nil.
+    1 to:1000 do:[:i |
+        link := ValueLink basicNew value:i.
+        link nextLink:anchor.
+        anchor := link.
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:(
+             Time millisecondsToRun:[
+                1000 timesRepeat:[LinkedListBenchmark buildList]
+             ]
+         )
+     ]
+    "
+
+    "Created: 13.5.1997 / 18:39:54 / cg"
+    "Modified: 13.5.1997 / 18:46:55 / cg"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSTX1.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,6448 @@
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+              All Rights Reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. The name of the above contributor may not be
+    used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+"
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSTX1
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSTX1 class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1995 by Claus Gittinger
+              All Rights Reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. The name of the above contributor may not be
+    used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+"
+!
+
+documentation
+"
+    some benchmarks from various sources.
+    More is avaliable in the goodies/Benchmarks directory, but those
+    are not compiled into the (demo) system. 
+
+    In production code, this class is not included.
+
+    some notes on benchmarking:
+
+      for some benchmarks (especially, micro benchmarks) it may be hard
+      to get reproducable results. There are many external factors, which
+      have an influence on the run times.
+      For example, the simple send benchmarks may show a variation of up
+      to 30%, depdending on where the linker locates the code physically
+      in memory (due to branches being on page boundaries, cache replacement
+      strategy etc.). Especially on machines with direct mapped caches
+      (i.e. SPARC-2), cache variations are pretty hard to get rid of.
+
+      For the memory benchmarks, the result often depends on the newSpace
+      contents at the time the benchmark is started: if there are many surviving
+      objects there (for example, if you recently opened a fileBrowser),
+      those objects will stay in newspace for a while and be copied around.
+      Thereby slowing down the allocation rate of the benchmark.
+      Try to do an 'ObjectMemory tenure' before running the micro allocation
+      benchmarks, to see the difference.
+
+      Dont expect your numbers to be the same as those noted below;
+      slight differences in the machines memory interface may have quite
+      an impact; especially on the memory benchmarks, where caches are almost
+      useless, and every ns of delay in your memory interface accounts for
+      more than a percent in runtime variation.
+
+      BTW: it is very interesting that 'fast' machines' speed does not scale
+      according their raw CPU power in the memory benches. For example,
+      the INDY (which is otherwise roughly twice as fast compared to a 486/50)
+      is only about 20% faster in the memory benchmark.
+      The reason: memory allocation is mostly limited by the memory bandwidth;
+      (nilling, finding refs etc.) Since most systems use RAM chips with
+      access time in the order of 60-80ns, AND the memory does not fit into 
+      typical CPU caches, fast machines cannot make use of their fast CPUs in those
+      tests. It would be nice to have uncached access functionality, or
+      machines with (say) 1Mb of cache .... 
+      2nd level cache sizes of Zero (as on my INDY) or 256k as on typical PCs,
+      are definitely not enough cache for best performance.
+      (however, as noted above, even 512k does not help - you need enough 
+       cache to have the whole new-spaces in cache. If your machine has 512k 
+       caches, it may be worthwhile to start ST/X with a smaller newSpace;
+       to have it fit into the cache i.e. smalltalk -Mnew 200)
+
+      The best proof of the above statement is the result of the
+      'byteFloatBench1' (which is actually a memory benchmark).
+      Our P5/133 with a good memory interface, is much faster than
+      our P5/200 Prostar notebook (with a lousy memory interface).
+      You get what you deserve when saving a few bucks on memory ... ;-)
+
+      In addition, machines with separate data/instruction caches usually look
+      better in those benchmarks, than machines with combined caches.
+
+      Also, running those benchmarks at prio >= 24 prevents other smalltalk
+      processes from interrupting the benchmark. Running at highestPrio will
+      even lock out the scheduler.
+      This will give slightly better numbers.
+      I ran those benchmarks 5 times (at normal prio8) and took the best number.
+
+      Finally, UNIX activities (such as network packages arriving, sync
+      running etc.) will also influence the result.
+      Run the benchmarks a few times and take the BEST value, to compensate
+      for these effects.
+      External effects (such as network packets arriving, interrupts from 
+      serial line interfaces etc.) may also lead to runtime variations.
+      Make certain that your machine is completely load-free, and no
+      external events are making your CPU busy. Also, monitors (like top,
+      gr_osview, xload, xclock etc. may steal some %% of your CPU time)
+      Typically, expect runtime variations of some 10-20%.
+
+      Another note: be careful with micro benchmarks in what you measure.
+      If a specific operation (for example: a message send) is to be
+      measured, you should avoid any other overhead.
+      For example, see the difference between #instAccess1: and #instAccess2:
+      the first one uses #timesRepeat: with a variable loop count,
+      the second with a constant. Currently, the stc compiler creates a true
+      message-send in the first case, while the timesRepeat: loop is inlined
+      in the second case (because the receiver is an integer constant). 
+      Therefore, #instAccess1: measures a send AND a block evaluation, 
+      while the second really measures the send alone.
+      This may give wrong impressions if you really want to measure the pure
+      send time, or memory allocation time.
+      (especially, since some other systems silently translate a timesRepeat 
+       into an open coded loop ...)
+      Future versions of the compiler may rewrite the timesRepeat: to an
+      open coded loop (incrementing a temporary). Then, you will get 
+      comparable results. (this was not done up to now, since timesRepeat:
+      is relatively seldom used in the system; making this optimization
+      a benchmark cheater ;-) ).
+      For some benchmarks (benchNew/benchBasicNew/instAccess etc.
+      I have provided two versions, one with a timesRepeat send and another
+      one where this loop is inlined.
+
+    More benchmarks are found in goodies/Benchmarks; on systems which support
+    dynamic loading, you can file in the binaries of those benchmarks.
+    Do not run benchmarks with the interpreter,
+    - doing so would be quite unfair to ST/X ;-)
+    however, some benchmarks are faster in ST/X's interpreter than other
+    systems compiled versions.
+
+    To see the difference between compiled and interpreted code,
+    run the benchmarks here in a fresh image and remember the results. 
+    Then accept the methods (in the browser) and rerun the benchmark (now
+    interpreted).
+
+    The speed ratio between interpreted code and compiled code
+    varies a lot with the different benchmarks:
+    in low level loops (see self-benchmarks), compiled code runs a lot faster 
+    (up to 40 times faster), while in memory allocation benchmarks (where the 
+    time is really not spent in the loop) the ratio goes down to almost 1.
+    Typical methods use quite a lot of the underlying functionality,
+    expect roughly a factor of 2-5 on the average (see setCreation benchmarks).
+
+    From that, it should be clear, that for high-level methods (for example:
+    instance creation of a view) the difference between compiled and interpreted
+    code is pretty small. Thus, a system where high level methods are purely
+    interpreted and only low level stuff (collections, numeric etc) is compiled,
+    will not show too bad of an overall performance.
+
+    The numbers given in the comments may not be up-to-date;
+    I do not rerun the benchmarks for every change; if multiple numbers are given,
+    these correspond to various stages during development. In general, the last number
+    is the actual one at the time of delivery.
+    For some machines, you will see a big performance boost in the interpreted column
+    (for example, the recur numbers in the P5/133 column from 1076 to 127).
+    This boost came from the introduction of the just in time compiler.
+    Thus, to be correct, these numbers are not really comparable to corresponding
+    numbers from architectures which do no just in time compilation.
+
+    Note to IBM: 
+        what is the AIX320H cc optimizer doing ?
+        It takes more than an hour to compile this, 
+        and some methods run slower with -O  (:-o).
+        BTW: a 320H shows roughly the speed of a 25-33Mhz 486
+
+    Note to HP: 
+        yours is even slower; if compiled with -O2,
+        the bytecode interpreter takes about 10 hours to compile this
+        (a small 40k binary). However, it runs a bit faster then; at least.
+
+    Note on ELF-based (shared-library) systems:
+        PIC (position independent) code is typically a bit slower;
+        first, an additional call is generated for every C-function to get
+        the pc; second, many calls are indirect via a global offset table.
+        Expect a few percent slowdown on sharedLib systems.
+
+
+    Rough relative Speed index (relative to 486/50):
+    (shared library systems are typically a few percent slower,
+     due to indirections via global offset tables ...)
+
+        Pentium-II/400Mhz linux gcc:                    ..-20
+        Pentium-II/266Mhz linux gcc:                    ..-15
+        Pentium-II/266Mhz WIN-NT:                       ..-12
+        alpha21164/433Mhz osf1 cc:                      ..-10
+        ULTRA-250 300Mhz solaris egcs:                  ..-9
+
+        P5 100Mhz 512k Cache; good memory interface:    2.2-5
+        Indy 100MhzR4600; 0k Cache:/cc                  2-3
+        P5 90Mhz 512k Cache/gcc2.5.8:                   1.8-3.1
+        SS10/40 solaris gcc2.7.1:                       1.5-2
+        Linux 486/50 256k Cache/gcc2.5.8:               1
+        88k realIX/gcc                                  0.4-0.8
+        Sun ELC (gcc2.7.0)                              0.4-0.7
+        IBM 320H ? Cache AIX3.2.5/cc                    0.4-0.6
+        HP 715/33/? Cache cc                            0.5-1.2
+        DEC DS3100 R2000                                0.25-0.3
+        Sun ELC (sun cc)                                0.2-0.4
+
+    [author:]
+        Self language group
+        Byte benchmarks
+        Claus Gittinger
+
+    [start with:]
+        10 timesRepeat:[STXBenchmarks1 sieve:1]
+        10 timesRepeat:[STXBenchmarks1 recur1]
+        STXBenchmarks1 loopTimes
+"
+! !
+
+!BenchmarkSTX1 class methodsFor:'arithmetic benchmarks'!
+
+arithmeticSeries:n
+    (n == 0) ifTrue:[
+        ^ 0
+    ].
+    ^ n + (self arithmeticSeries:n-1)
+
+    "
+     Transcript showCR:(
+        Time millisecondsToRun:[
+            10000 timesRepeat:[
+                Benchmarks::STXBenchmarks1 arithmeticSeries:100
+            ]
+        ]
+     )
+    "
+
+    "
+     Transcript showCR:(
+        Time millisecondsToRun:[
+            |b|
+
+            b := JAVA::BenchMark basicNew.
+            10000 timesRepeat:[
+                b arithmeticSeries:100
+            ]
+        ]
+     )
+    "
+
+    "Created: / 3.11.1998 / 22:39:33 / cg"
+    "Modified: / 3.11.1998 / 22:42:06 / cg"
+!
+
+floatAbs1
+    "evaluating 'float abs' of a positive number a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num|
+
+        num := 99.0.
+        1000000 timesRepeat:[num abs] 
+    ].
+    Transcript show:'floatAbs1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatAbs1
+     ]
+
+     Notice, that the JIT for i386 generates this code inline, while
+     all others perform a pure message send.
+
+     indy 150                   1404
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               78 
+     P5/200     
+     P6/266     linux-elf        
+     P6/200     NT4.0             40    
+     P6/400     linux-elf         32
+     ultra/250  solaris2.6       377  350
+     alpha 433  osf1             640  240
+    "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 10.8.1999 / 13:21:19 / cg"
+!
+
+floatAbs2
+    "evaluating 'float abs' of a negative number a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num|
+
+        num := -99.0.
+        1000000 timesRepeat:[num abs] 
+    ].
+    Transcript show:'floatAbs2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatAbs2
+     ]
+
+     indy 150                   1617
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             1285 
+     P5/200     
+     P6/266     linux-elf        563
+     P6/200     NT4.0            591      
+     P6/400     linux-elf        330
+     ultra/250  solaris2.6       625  561
+     alpha 433  osf1             836  538  439
+    "
+
+    "Created: / 3.11.1998 / 16:38:10 / cg"
+    "Modified: / 10.8.1999 / 13:21:33 / cg"
+    "Modified: / 27.10.1999 / 00:29:09 / stefan"
+!
+
+floatAdd1
+    "evaluating 'float + float' a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num1 num2|
+
+        num1 := 99.0.
+        num2 := 1.0.
+        1000000 timesRepeat:[num1 + num2] 
+    ].
+    Transcript show:'floatAdd1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatAdd1
+     ]
+
+
+     indy 150                   1890
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              973 
+     P5/200     
+     P6/266     linux-elf        
+     P6/200     NT4.0            390     
+     P6/400     linux-elf        205
+     ultra/250  solaris2.6       249 
+     alpha 433  osf1             245
+    "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 6.6.1999 / 15:22:35 / cg"
+!
+
+floatAdd2
+    "evaluating 'floatConst + float' a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num2|
+
+        num2 := 1.0.
+        1000000 timesRepeat:[99.0 + num2] 
+    ].
+    Transcript show:'floatAdd2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatAdd2
+     ]
+
+
+     indy 150                   1017
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              948 
+     P5/200     
+     P6/266     linux-elf        
+     P6/200     NT4.0            380    
+     P6/400     linux-elf        212  207
+     ultra/250  solaris2.6       249
+     alpha 433  osf1             266  250
+    "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 6.6.1999 / 15:22:06 / cg"
+    "Modified: / 27.10.1999 / 00:29:23 / stefan"
+!
+
+floatAdd3
+    "evaluating 'float + floatConst' a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num1|
+
+        num1 := 99.0.
+        1000000 timesRepeat:[num1 + 1.0] 
+    ].
+    Transcript show:'floatAdd3: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatAdd3
+     ]
+
+
+     indy 150                   1012
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               
+     P5/200     
+     P6/266     linux-elf        
+     P6/200     NT4.0            390   
+     P6/400     linux-elf        229  211
+     ultra/250  solaris2.6       248
+     alpha 433  osf1             261  241
+    "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 6.6.1999 / 15:21:31 / cg"
+    "Modified: / 27.10.1999 / 00:29:32 / stefan"
+!
+
+floatAdd4
+    "evaluating 'intConst + float' a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num1|
+
+        num1 := 99.
+        1000000 timesRepeat:[num1 + 1.0] 
+    ].
+    Transcript show:'floatAdd4: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatAdd4
+     ]
+
+     indy 150                    993
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               
+     P5/200     
+     P6/266     linux-elf        
+     P6/200     NT4.0            381  
+     P6/400     linux-elf        232  218
+     ultra/250  solaris2.6       248 
+     alpha 433  osf1             271  255
+    "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 6.6.1999 / 15:20:59 / cg"
+    "Modified: / 27.10.1999 / 00:29:41 / stefan"
+!
+
+floatAdd5
+    "evaluating 'intConst + float' a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num2|
+
+        num2 := 1.0.
+        1000000 timesRepeat:[99 + num2] 
+    ].
+    Transcript show:'floatAdd5: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatAdd5
+     ]
+
+     indy 150                   1114
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               
+     P5/200     
+     P6/266     linux-elf        
+     P6/200     NT4.0            370 
+     P6/400     linux-elf        211
+     ultra/250  solaris2.6       248
+     alpha 433  osf1             261  246
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 15.5.1999 / 03:14:31 / cg"
+    "Modified: / 27.10.1999 / 00:29:48 / stefan"
+!
+
+floatMul1
+    "evaluating 'floatConst * float' a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num2|
+
+        num2 := 1.0.
+        1000000 timesRepeat:[99.0 * num2] 
+    ].
+    Transcript show:'floatMul1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatMul1
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               
+     P5/200     
+     P6/266     linux-elf        
+     P6/200     NT4.0              
+     P6/400     linux-elf    211    
+     ultra/250  solaris2.6       
+     alpha 433  osf1         241  230   
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 10.8.1999 / 13:22:08 / cg"
+    "Modified: / 27.10.1999 / 00:29:56 / stefan"
+!
+
+floatMul2
+    "evaluating 'float * floatConst' a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num2|
+
+        num2 := 1.0.
+        1000000 timesRepeat:[num2 * 99.0] 
+    ].
+    Transcript show:'floatMul2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 floatMul2
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               
+     P5/200     
+     P6/266     linux-elf        
+     P6/200     NT4.0              
+     P6/400     linux-elf    236    
+     ultra/250  solaris2.6       
+     alpha 433  osf1         240  224  
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 10.8.1999 / 13:22:17 / cg"
+    "Modified: / 27.10.1999 / 00:30:05 / stefan"
+!
+
+integerAbs1
+    "evaluating 'smallInteger abs' of a positive number a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num|
+
+        num := 99.
+        1000000 timesRepeat:[num abs] 
+    ].
+    Transcript show:'integerAbs1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerAbs1
+     ]
+
+     indy 150                    347
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               48
+     P5/200     
+     P6/266     linux-elf         30
+     P6/266     NT4.0             30
+     P6/400     linux-elf         22
+     ultra/250  solaris2.6        83
+     alpha 433  osf1             467 51 36
+     "
+
+    "Created: / 3.11.1998 / 16:37:17 / cg"
+    "Modified: / 10.8.1999 / 13:22:28 / cg"
+!
+
+integerAbs2
+    "evaluating 'smallInteger abs' of a negative number a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num|
+
+        num := -99.
+        1000000 timesRepeat:[num abs] 
+    ].
+    Transcript show:'integerAbs2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerAbs2
+     ]
+
+     indy 150                    374
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               67
+     P5/200     
+     P6/266     linux-elf         41
+     P6/266     NT4.0             40
+     P6/400     linux-elf         30  28
+     ultra/250  solaris2.6        86
+     alpha 433  osf1             473  66  49
+
+     "
+
+    "Created: / 3.11.1998 / 16:37:24 / cg"
+    "Modified: / 10.8.1999 / 13:22:35 / cg"
+!
+
+integerAdd1
+    "adding two smallintegers - no overflow"
+
+    |t n1 n2|
+
+    n1 := 100.
+    n2 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 + n2
+        ]
+    ].
+
+    Transcript show:'integerAdd1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerAdd1
+     ]
+
+     indy 150                    490
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        128
+     P6/266     NT4.0            130
+     P6/400     linux-elf         93
+     ultra/250  solaris2.6       111
+     alpha 433  osf1             125 121 105
+
+     "
+
+    "Modified: / 10.8.1999 / 13:22:43 / cg"
+    "Modified: / 26.10.1999 / 21:23:26 / stefan"
+!
+
+integerAdd2
+    "adding two smallintegers - overflow into largeInteger"
+
+    |t n1 n2|
+
+    n1 := SmallInteger maxVal.
+    n2 := 1.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 + n2
+        ]
+    ].
+
+    Transcript show:'integerAdd2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerAdd2
+     ]
+
+     indy 150                   1702
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        418
+     P6/266     NT4.0            461
+     P6/400     linux-elf        358
+     ultra/250  solaris2.6       555  530
+     alpha 433  osf1             508  475
+
+     "
+
+    "Modified: / 5.6.1999 / 02:22:42 / cg"
+    "Modified: / 27.10.1999 / 00:30:28 / stefan"
+!
+
+integerAdd2b
+    "adding two smallintegers - overflow into largeInteger"
+
+    |t n1 n2|
+
+    n1 := SmallInteger maxVal.
+    n2 := 2.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 + n2
+        ]
+    ].
+
+    Transcript show:'integerAdd2b: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerAdd2b
+     ]
+
+     indy 150                   2123
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        420
+     P6/266     NT4.0            461
+     P6/400     linux-elf        362
+     ultra/250  solaris2.6       554  527
+     alpha 433  osf1             500
+
+     "
+
+    "Modified: / 5.6.1999 / 02:22:57 / cg"
+!
+
+integerAdd2c
+    "adding two smallintegers - overflow into largeInteger"
+
+    |t n1|
+
+    n1 := SmallInteger maxVal.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 + n1
+        ]
+    ].
+
+    Transcript show:'integerAdd2c: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerAdd2c
+     ]
+
+     indy 150                   1741
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        428
+     P6/266     NT4.0            460
+     P6/400     linux-elf        340
+     ultra/250  solaris2.6       544  517
+     alpha 433  osf1             501
+
+     "
+
+    "Modified: / 5.6.1999 / 02:23:09 / cg"
+!
+
+integerDiv1
+    "dividing two smallintegers - overflow into largeInteger"
+
+    |t n1 n2|
+
+    n1 := SmallInteger maxVal.
+    n2 := 2.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 // n1
+        ]
+    ].
+
+    Transcript show:'integerDiv1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerDiv1
+     ]
+
+     indy 150                    951
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        324
+     P6/266     NT4.0            300
+     P6/400     linux-elf        218
+     ultra/250  solaris2.6       324
+     alpha 433  osf1             524 499
+
+     "
+
+    "Modified: / 10.8.1999 / 13:23:20 / cg"
+!
+
+integerMul1
+    "multiplying two smallintegers - no overflow into largeInteger"
+
+    |t n1 n2|
+
+    n1 := 100.
+    n2 := 200.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * n1
+        ]
+    ].
+
+    Transcript show:'integerMul1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul1
+     ]
+
+     indy 150                    596
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        192
+     P6/266     NT4.0            180
+     P6/400     linux-elf        140 135
+     ultra/250  solaris2.6       209
+     alpha 433  osf1             153 130
+     "
+
+    "Modified: / 10.8.1999 / 13:23:29 / cg"
+!
+
+integerMul1b
+    "multiplying two smallintegers - overflow into largeInteger"
+
+    |t n1 n2|
+
+    n1 := 16rFFFF.
+    n2 := 16rFFFF.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * n1
+        ]
+    ].
+
+    Transcript show:'integerMul1b: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul1b
+     ]
+
+     indy 150                    588
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        549
+     P6/266     NT4.0            560
+     P6/400     linux-elf        512 502
+     ultra/250  solaris2.6       228
+     alpha 433  osf1             153 131
+
+     "
+
+    "Modified: / 10.8.1999 / 13:23:38 / cg"
+!
+
+integerMul1c
+    "multiplying two smallintegers - overflow into largeInteger"
+
+    |t n1 n2|
+
+    n1 := SmallInteger maxVal.
+    n2 := 2.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * n1
+        ]
+    ].
+
+    Transcript show:'integerMul1c: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul1c
+     ]
+
+     indy 150                   2756
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        552
+     P6/266     NT4.0            581
+     P6/400     linux-elf        546
+     ultra/250  solaris2.6       861
+     alpha 433  osf1            1037  1009
+
+     "
+
+    "Modified: / 5.6.1999 / 02:23:59 / cg"
+    "Modified: / 27.10.1999 / 00:31:10 / stefan"
+!
+
+integerMul2
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 2
+        ]
+    ].
+
+    Transcript show:'integerMul2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      30  27
+     ultra/250  solaris2.6     55
+     alpha 433  osf1           63  54
+
+     "
+
+    "Modified: / 10.8.1999 / 13:23:54 / cg"
+!
+
+integerMul2b
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            2 * n1
+        ]
+    ].
+
+    Transcript show:'integerMul2b: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2b
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      143  30  27
+     ultra/250  solaris2.6     349  55
+     alpha 433  osf1           136  64  54
+
+     "
+
+    "Modified: / 10.8.1999 / 13:24:02 / cg"
+!
+
+integerMul2c
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 10
+        ]
+    ].
+
+    Transcript show:'integerMul2c: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2c
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      141  35  30
+     ultra/250  solaris2.6     358  65
+     alpha 433  osf1           136  74  64
+
+     "
+
+    "Modified: / 10.8.1999 / 13:24:09 / cg"
+!
+
+integerMul2d
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            10 * n1
+        ]
+    ].
+
+    Transcript show:'integerMul2d: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2d
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      143  35  30
+     ultra/250  solaris2.6     358  65
+     alpha 433  osf1           136  74  64
+
+     "
+
+    "Created: / 9.6.1999 / 18:13:26 / cg"
+    "Modified: / 10.8.1999 / 13:24:16 / cg"
+!
+
+integerMul2e
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 3
+        ]
+    ].
+
+    Transcript show:'integerMul2e: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2e
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      38  30
+     ultra/250  solaris2.6     58
+     alpha 433  osf1           74  61
+
+     "
+
+    "Modified: / 10.8.1999 / 13:24:23 / cg"
+!
+
+integerMul2f
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 4
+        ]
+    ].
+
+    Transcript show:'integerMul2f: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2f
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      35  30
+     ultra/250  solaris2.6     55
+     alpha 433  osf1           64  54
+
+     "
+
+    "Modified: / 10.8.1999 / 13:24:31 / cg"
+!
+
+integerMul2g
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 5
+        ]
+    ].
+
+    Transcript show:'integerMul2g: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2g
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      35  30
+     ultra/250  solaris2.6     58
+     alpha 433  osf1           73  58
+
+     "
+
+    "Modified: / 10.8.1999 / 13:24:38 / cg"
+!
+
+integerMul2h
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 6
+        ]
+    ].
+
+    Transcript show:'integerMul2h: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2h
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      137  35  30
+     ultra/250  solaris2.6     353  65
+     alpha 433  osf1                73  63
+
+     "
+
+    "Modified: / 10.8.1999 / 13:24:46 / cg"
+!
+
+integerMul2i
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 7
+        ]
+    ].
+
+    Transcript show:'integerMul2i: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2i
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      35  30
+     ultra/250  solaris2.6     62
+     alpha 433  osf1           70  61
+
+     "
+
+    "Modified: / 10.8.1999 / 13:24:53 / cg"
+!
+
+integerMul2j
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 9
+        ]
+    ].
+
+    Transcript show:'integerMul2j: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2j
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf     30 
+     ultra/250  solaris2.6    58
+     alpha 433  osf1          58 
+
+     "
+
+    "Modified: / 10.8.1999 / 13:25:03 / cg"
+!
+
+integerMul2k
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 11
+        ]
+    ].
+
+    Transcript show:'integerMul2k: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2k
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf    136  30
+     ultra/250  solaris2.6     
+     alpha 433  osf1         126  
+
+     "
+
+    "Modified: / 10.8.1999 / 13:25:11 / cg"
+!
+
+integerMul2l
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 128
+        ]
+    ].
+
+    Transcript show:'integerMul2l: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2l
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf    25 
+     ultra/250  solaris2.6     
+     alpha 433  osf1         54 
+
+     "
+
+    "Modified: / 10.8.1999 / 13:25:20 / cg"
+    "Modified: / 26.10.1999 / 21:26:05 / stefan"
+!
+
+integerMul2m
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 131
+        ]
+    ].
+
+    Transcript show:'integerMul2l: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2m
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf     28 
+     ultra/250  solaris2.6     
+     alpha 433  osf1         128  
+
+     "
+
+    "Modified: / 10.8.1999 / 13:25:20 / cg"
+    "Created: / 26.10.1999 / 21:25:48 / stefan"
+!
+
+integerMul2n
+    "multiplying two smallintegers - one is constant"
+
+    |t n1|
+
+    n1 := 100.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 127
+        ]
+    ].
+
+    Transcript show:'integerMul2l: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul2n
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf    30 
+     ultra/250  solaris2.6     
+     alpha 433  osf1         64 
+
+     "
+
+    "Modified: / 10.8.1999 / 13:25:20 / cg"
+    "Modified: / 27.10.1999 / 00:31:46 / stefan"
+!
+
+integerMul3
+    "multiplying two smallintegers - one is constant; overflow into large"
+
+    |t n1|
+
+    n1 := SmallInteger maxVal // 2 + 1.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 * 2
+        ]
+    ].
+
+    Transcript show:'integerMul3: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul3
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      501  
+     ultra/250  solaris2.6     716
+     alpha 433  osf1           737  690 666
+
+     "
+
+    "Modified: / 9.6.1999 / 18:11:08 / cg"
+    "Modified: / 27.10.1999 / 00:32:04 / stefan"
+!
+
+integerMul3b
+    "multiplying two smallintegers - one is constant; overflow into large"
+
+    |t n1|
+
+    n1 := SmallInteger maxVal // 2 + 1.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            2 * n1
+        ]
+    ].
+
+    Transcript show:'integerMul3b: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 integerMul3b
+     ]
+
+     indy 150                   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              
+     P5/200     
+     P6/266     linux-elf        
+     P6/266     NT4.0            
+     P6/400     linux-elf      536  
+     ultra/250  solaris2.6    1017  820
+     alpha 433  osf1           802  746  692
+
+     "
+
+    "Modified: / 10.8.1999 / 13:25:53 / cg"
+    "Modified: / 26.10.1999 / 21:26:34 / stefan"
+!
+
+largeAbs1
+    "evaluating 'largeInteger abs' of a positive number a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num|
+
+        num := 9999999999999999999999999.
+        1000000 timesRepeat:[num abs] 
+    ].
+    Transcript show:'largeAbs1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeAbs1
+     ]
+
+     indy 150                   1140
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              635
+     P5/200     
+     P6/266     linux-elf        313
+     P6/266     NT4.0            381
+     P6/400     linux-elf        223  135
+     ultra250   solaris2.6       220
+     alpha 433  osf1             715  334  317  168
+    "
+
+    "Created: / 3.11.1998 / 16:37:17 / cg"
+    "Modified: / 10.8.1999 / 13:26:03 / cg"
+    "Modified: / 26.10.1999 / 21:28:17 / stefan"
+!
+
+largeAbs2
+    "evaluating 'largeInteger abs' of a negative number a million times."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |num|
+
+        num := -9999999999999999999999999.
+        1000000 timesRepeat:[num abs] 
+    ].
+    Transcript show:'largeAbs2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeAbs2
+     ]
+
+     indy 150                   8766
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             2856
+     P5/200     
+     P6/266     linux-elf       1260
+     P6/266     NT4.0           1552
+     P6/400     linux-elf        867   761   722
+     ultra250   solaris2.6      1365
+     alpha 433  osf1            1759  1268  1080
+     "
+
+    "Created: / 3.11.1998 / 16:37:24 / cg"
+    "Modified: / 5.6.1999 / 13:46:45 / cg"
+    "Modified: / 26.10.1999 / 21:28:33 / stefan"
+!
+
+largeAdd1
+    "adding two medium large numbers"
+
+    |t n1 n2|
+
+    n1 := 100 factorial.
+    n2 := 100 factorial.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 + n2
+        ]
+    ].
+
+    Transcript show:'largeAdd1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeAdd1
+     ]
+
+     indy 150                   1619 1570 1312
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             1272
+     P5/200     
+     P6/266     linux-elf        351  255
+     P6/266     NT4.0            601  521  330
+     P6/400     linux-elf        197  170
+     ultra250   solaris2.6       442  430  376
+     alpha 433  osf1             258  243
+    "
+
+    "Modified: / 5.6.1999 / 14:58:54 / cg"
+!
+
+largeAdd2
+    "adding two large numbers"
+
+    |t n1 n2|
+
+    n1 := 1000 factorial.
+    n2 := 1000 factorial.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 + n2
+        ]
+    ].
+
+    Transcript show:'largeAdd2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeAdd2
+     ]
+
+     indy 150                  12653 11584
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95            14944
+     P5/200     
+     P6/266     linux-elf       1616  1234
+     P6/266     NT4.0           6329  4967  2953
+     P6/400     linux-elf       1331  1325   855  1295
+     ultra250   solaris2.6      3014  2698  2620
+     alpha 433  osf1             776   640
+
+   "
+
+    "Modified: / 5.6.1999 / 14:59:21 / cg"
+    "Modified: / 26.10.1999 / 21:28:50 / stefan"
+!
+
+largeAdd3
+    "adding a smallInt to a large number"
+
+    |t n|
+
+    n := 1000 factorial.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n + 1
+        ]
+    ].
+
+    Transcript show:'largeAdd3: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeAdd3
+     ]
+
+     indy 150                  12979 11226 10715
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95            11717
+     P5/200     
+     P6/266     linux-elf       2850  1425
+     P6/266     NT4.0           2073  3264  3025
+     P6/400     linux-elf       1093  1195  1102  950  997
+     ultra250   solaris2.6      2205  2113  1833
+     alpha 433  osf1             855   770
+
+     "
+
+    "Modified: / 15.12.1999 / 23:07:17 / cg"
+!
+
+largeAdd4
+    "adding a small largeInt to a large numbers"
+
+    |t n1 n2|
+
+    n1 := 1000 factorial.
+    n2 := 30 factorial.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 + n2
+        ]
+    ].
+
+    Transcript show:'largeAdd4: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeAdd4
+     ]
+
+     indy 150                  10273  9407  8796
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95            
+     P5/200     
+     P6/266     linux-elf       8384  1928
+     P6/266     NT4.0          10885  9083  4356  3064
+     P6/400     linux-elf       4812  3324  3190  1340  2459
+     ultra250   solaris2.6      3006  2256
+     alpha 433  osf1            2718  1606
+
+     "
+
+    "Modified: / 5.6.1999 / 14:59:50 / cg"
+!
+
+largeAdd5
+    "adding a large largeInt to a small largeInt"
+
+    |t n1 n2|
+
+    n1 := 30 factorial.
+    n2 := 1000 factorial.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 + n2
+        ]
+    ].
+
+    Transcript show:'largeAdd5: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeAdd5
+     ]
+
+     indy 150                 9978 9473 9015
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95            
+     P5/200     
+     P6/266     linux-elf     1962  
+     P6/266     NT4.0         4356  2173
+     P6/400     linux-elf     1377  2412
+     ultra250   solaris2.6    2273
+     alpha 433  osf1          1609
+
+     "
+
+    "Modified: / 5.6.1999 / 15:00:08 / cg"
+!
+
+largeAddSubtract1
+    "adding & subtracting two small large ints"
+
+    |t n1 n2|
+
+    n1 := 123456789123456789.
+    n2 := 123456789123456789.
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            n1 + n2.
+            n1 - n2.
+        ]
+    ].
+
+    Transcript show:'largeAddSubtract1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeAddSubtract1
+     ]
+
+     indy 150               22703 20849   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf    5108    
+     P6/266     NT4.0        7781    
+     P6/400     linux-elf    3687  3905    
+     ultra250   solaris2.6   7278  6526  
+     alpha 433  osf1          200   185   - notice: SmallInteger here
+    "
+
+    "Modified: / 10.8.1999 / 13:27:08 / cg"
+    "Modified: / 26.10.1999 / 21:29:32 / stefan"
+!
+
+largeDiv1
+    "tests largeInt / smallInt division"
+
+    |t n1 n2|
+
+    n1 := 100 factorial.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 // 10 
+        ]
+    ].
+
+    Transcript show:'largeDiv1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeDiv1
+     ]
+
+     indy 150                   4700 3130 2884
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             2908
+     P5/200     
+     P6/266     linux-elf        863
+     P6/266     NT4.0           1582
+     P6/400     linux-elf        546  536
+     ultra250   solaris2.6      3171 1847
+     alpha 433  osf1            1422  884  862
+    "
+
+    "Modified: / 10.8.1999 / 13:27:24 / cg"
+    "Modified: / 26.10.1999 / 21:36:29 / stefan"
+!
+
+largeDiv2
+    "tests largeInt / largeInt division, where the divisor is small"
+
+    |t n1 n2|
+
+    n1 := 100 factorial.
+    n2 := 16rFFFFFFFF.
+    t := Time millisecondsToRun:[
+        100 timesRepeat:[
+            n1 // n2 
+        ]
+    ].
+
+    Transcript show:'largeDiv2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeDiv2
+     ]
+
+     Notice: for the alpha, this is a smallInt division, so the numbers cannot be compared.
+
+     indy 150                   2208 1402 2015
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             1937
+     P5/200     
+     P6/266     linux-elf        516
+     P6/266     NT4.0            851  931
+     P6/400     linux-elf        442  422
+     ultra250   solaris2.6       834  788
+     alpha 433  osf1             454  430
+    "
+
+    "Modified: / 5.6.1999 / 02:26:16 / cg"
+    "Modified: / 26.10.1999 / 21:36:42 / stefan"
+!
+
+largeDiv2b
+    "tests largeInt / largeInt division, where the divisor is small"
+
+    |t n1 n2|
+
+    n1 := 100 factorial.
+    n2 := 16rFFFFFFFFFFFFFFFF.
+    t := Time millisecondsToRun:[
+        100 timesRepeat:[
+            n1 // n2 
+        ]
+    ].
+
+    Transcript show:'largeDiv2b: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeDiv2b
+     ]                                       
+
+     indy 150                   1251 1841
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf        468
+     P6/266     NT4.0            781  851
+     P6/400     linux-elf        401  381
+     ultra250   solaris2.6       763  721
+     alpha 433  osf1             410  403  380
+
+     "
+
+    "Created: / 20.5.1999 / 09:58:12 / cg"
+    "Modified: / 5.6.1999 / 02:26:28 / cg"
+!
+
+largeDiv3
+    "tests largeInt / largeInt division, where the divisor is large"
+
+    |t n1 n2|
+
+    n1 := 100 factorial.
+    n2 := 99 factorial.
+    t := Time millisecondsToRun:[
+        1000 timesRepeat:[
+            n1 // n2 
+        ]
+    ].
+
+    Transcript show:'largeDiv3: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeDiv3
+     ]
+
+     indy 150                    572  454
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95              440
+     P5/200     
+     P6/266     linux-elf        151
+     P6/266     NT4.0            210
+     P6/400     linux-elf        112  109  83
+     ultra250   solaris2.6       201  195
+     alpha 433  osf1             122  108  
+
+     "
+
+    "Modified: / 5.6.1999 / 02:26:35 / cg"
+!
+
+largeMul1
+    "tests largeInt * smallInt multiplication"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        100 timesRepeat:[
+            1000 factorial
+        ]
+    ].
+
+    Transcript show:'largeMul1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeMul1
+     ]
+
+
+     indy 150                   6139 5983 5577
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             5272
+     P5/200     
+     P6/266     linux-elf        976
+     P6/266     NT4.0           1820
+     P6/400     linux-elf        801  793
+     ultra250   solaris2.6      3301 3267
+     alpha 433  osf1             750
+
+     "
+
+    "Modified: / 5.6.1999 / 02:26:48 / cg"
+!
+
+largeMul2
+    "tests largeInt * largeInt multiplication"
+
+    |t n1 n2|
+
+    n1 := 100 factorial.
+    n2 := 100 factorial.
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            n1 * n2 
+        ]
+    ].
+
+    Transcript show:'largeMul2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeMul2
+     ]
+
+
+     indy 150                   8372 3339
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             3901
+     P5/200     
+     P6/266     linux-elf        779
+     P6/266     NT4.0           2113 1812
+     P6/400     linux-elf        591  673  585  700  604
+     ultra250   solaris2.6      5596 2231 2164
+     alpha 433  osf1            1025  468  316  304
+
+     "
+
+    "Modified: / 5.6.1999 / 02:26:59 / cg"
+!
+
+largeMul3
+    "tests largeInt * smallInt multiplication"
+
+    |t |
+
+    t := Time millisecondsToRun:[
+        10000 factorial
+    ].
+
+    Transcript show:'largeMul3: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeMul3
+     ]
+
+
+     indy 150                   7392 7091 6632
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             6365
+     P5/200     
+     P6/266     linux-elf       1061
+     P6/266     NT4.0           2113
+     P6/400     linux-elf        887  904  880
+     ultra250   solaris2.6      4398 4287
+     alpha 433  osf1             673
+
+     "
+
+    "Modified: / 5.6.1999 / 02:27:09 / cg"
+!
+
+largeMul4
+    "tests largeInt * largeInt multiplication"
+
+    |t n1 n2|
+
+    n1 := 1000 factorial.
+    n2 := 1000 factorial.
+    t := Time millisecondsToRun:[
+        100 timesRepeat:[
+            n1 * n2 
+        ]
+    ].
+
+    Transcript show:'largeMul4: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeMul4
+     ]
+
+
+     indy 150                22448  8379 
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf     2066  
+     P6/266     NT4.0         4817  
+     P6/400     linux-elf     1733  1553  1822  1564 
+     ultra250   solaris2.6   14673  5900  5752
+     alpha 433  osf1           598       
+
+     "
+
+    "Modified: / 5.6.1999 / 02:27:20 / cg"
+!
+
+largeMul5
+    "tests largeInt * largeInt multiplication"
+
+    |t n1 n2|
+
+    n1 := 1000 factorial.
+    n2 := 30 factorial.
+    t := Time millisecondsToRun:[
+        1000 timesRepeat:[
+            n1 * n2 
+        ]
+    ].
+
+    Transcript show:'largeMul5: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeMul5
+     ]
+
+
+     indy 150                3029 1228  
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf     346  
+     P6/266     NT4.0         731
+     P6/400     linux-elf     296  266      
+     ultra250   solaris2.6    836  778
+     alpha 433  osf1          130         
+
+     "
+
+    "Modified: / 15.12.1999 / 23:10:00 / cg"
+!
+
+largeMul6
+    "tests largeInt * largeInt multiplication"
+
+    |t n1 n2|
+
+    n1 := 30 factorial.
+    n2 := 1000 factorial.
+    t := Time millisecondsToRun:[
+        1000 timesRepeat:[
+            n1 * n2 
+        ]
+    ].
+
+    Transcript show:'largeMul6: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeMul6
+     ]
+
+
+     indy 150                3011 1185  
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf     276  
+     P6/266     NT4.0         641
+     P6/400     linux-elf     244  208      
+     ultra250   solaris2.6    758  752 
+     alpha 433  osf1          116         
+
+     "
+
+    "Modified: / 15.12.1999 / 23:10:11 / cg"
+!
+
+largeSubtract1
+    "tests largeInt - largeInt subtraction with medium sized numbers"
+
+    |t n1 n2|
+
+    n1 := 100 factorial.
+    n2 := 99 factorial.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 - n2
+        ]
+    ].
+
+    Transcript show:'largeSubtract1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeSubtract1
+     ]
+
+
+     indy 150                   2578 1627 1464
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             2983
+     P5/200     
+     P6/266     linux-elf        405
+     P6/266     NT4.0            520  761
+     P6/400     linux-elf        343  386  349  263  297
+     ultra250   solaris2.6       630  520  505
+     alpha 433  osf1             469  625  367  340
+
+     "
+
+    "Modified: / 5.6.1999 / 02:27:53 / cg"
+    "Modified: / 26.10.1999 / 21:30:12 / stefan"
+!
+
+largeSubtract2
+    "tests largeInt - largeInt subtraction with big numbers"
+
+    |t n1 n2|
+
+    n1 := 1000 factorial.
+    n2 := 999 factorial.
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            n1 - n2
+        ]
+    ].
+
+    Transcript show:'largeSubtract2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeSubtract2
+     ]
+
+     indy 150                   1849 1232 1171
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             3446
+     P5/200     
+     P6/266     linux-elf        411
+     P6/266     NT4.0            520  811  771
+     P6/400     linux-elf        370  407  349  175  260
+     ultra250   solaris2.6       473  328
+     alpha 433  osf1             309  242  117
+
+     "
+
+    "Modified: / 5.6.1999 / 02:28:05 / cg"
+    "Modified: / 26.10.1999 / 21:30:23 / stefan"
+!
+
+largeSubtract3
+    "tests largeInt - smallInt subtraction"
+
+    |t n|
+
+    "/ tests absFastMinus
+    n := 1000 factorial.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n - 1
+        ]
+    ].
+
+    Transcript show:'largeSubtract3: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeSubtract3
+     ]
+
+     indy 150                  12507 10030  9244  8720
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             9382
+     P5/200     
+     P6/266     linux-elf       1864
+     P6/266     NT4.0           3996  4596
+     P6/400     linux-elf       1671  1716  1197  1900
+     ultra250   solaris2.6      2232  2173
+     alpha 433  osf1             880
+
+     "
+
+    "Modified: / 5.6.1999 / 02:28:18 / cg"
+!
+
+largeSubtract3b
+    "tests largeInt - smallInt subtraction"
+
+    |t n|
+
+    "/ tests absFastPlus
+    n := 1000 factorial negated.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n - 1
+        ]
+    ].
+
+    Transcript show:'largeSubtract3b: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeSubtract3b
+     ]
+
+     indy 150               10324   
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf       
+     P6/266     NT4.0              
+     P6/400     linux-elf    979            
+     ultra250   solaris2.6  1772       
+     alpha 433  osf1         929  883  
+
+     "
+
+    "Modified: / 10.8.1999 / 13:28:41 / cg"
+    "Modified: / 26.10.1999 / 21:31:05 / stefan"
+!
+
+largeSubtract4
+    "tests largeInt - largeInt subtraction with a small minuent"
+
+    |t n1 n2|
+
+    n1 := 1000 factorial.
+    n2 := 16rFFFFFFFFFFFF.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 - n2
+        ]
+    ].
+
+    Transcript show:'largeSubtract4: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeSubtract4
+     ]
+
+     Cannot compare numbers with alpha - its a smallint subtraction there ...
+
+     indy 150                   9772  9035  9000
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf       2076
+     P6/266     NT4.0           3705  4537  
+     P6/400     linux-elf       1559  1360  1657  1555
+     ultra250   solaris2.6      2009  2270
+     alpha 433  osf1             900
+
+     "
+
+    "Modified: / 5.6.1999 / 02:28:30 / cg"
+!
+
+largeSubtract4b
+    "tests largeInt - largeInt subtraction with a small minuent"
+
+    |t n1 n2|
+
+    n1 := 1000 factorial.
+    n2 := 16rFFFFFFFFFFFFFFFF.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 - n2
+        ]
+    ].
+
+    Transcript show:'largeSubtract4b: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeSubtract4b
+     ]
+
+     indy 150                   9587  9070  8805
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf       2078
+     P6/266     NT4.0           3716  4537
+     P6/400     linux-elf       1546  1709  1562  1360  1638  1607
+     ultra250   solaris2.6      2296  2270
+     alpha 433  osf1            2051  1947
+     "
+
+    "Modified: / 5.6.1999 / 02:28:40 / cg"
+!
+
+largeSubtract4c
+    "tests largeInt - largeInt subtraction with a small minuent (odd byte count)"
+
+    |t n1 n2|
+
+    n1 := 1000 factorial.
+    n2 := 16rFFFFFFFFFFFFFF.
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            n1 - n2
+        ]
+    ].
+
+    Transcript show:'largeSubtract4c: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 largeSubtract4c
+     ]
+
+     indy 150                   9693  9133 8847
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95             
+     P5/200     
+     P6/266     linux-elf       2795
+     P6/266     NT4.0           4076  7080
+     P6/400     linux-elf       2676  1943  1694
+     ultra250   solaris2.6      2340  2253
+     alpha 433  osf1             884
+
+     "
+
+    "Modified: / 5.6.1999 / 02:28:53 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'benchmarks helpers'!
+
+noopNil
+    ^ nil
+!
+
+noopSelf
+    ^ self
+!
+
+noopTrue
+    ^ true
+! !
+
+!BenchmarkSTX1 class methodsFor:'exception benchmarks'!
+
+exceptionBench1
+    "how long does it take to handle an exception."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000 timesRepeat:[
+            Object errorSignal handle:[:ex |
+                ex return
+            ] do:[
+                1 at:1
+            ]
+        ] 
+    ].
+    Transcript show:'exceptionBench1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 exceptionBench1
+     ]
+
+     indy 150                    
+     486/50     linux-elf
+     P5/133     linux-elf
+     P5/200     W95               
+     P5/200     
+     P6/266     linux-elf         
+     P6/266     NT4.0             
+     P6/400     linux-elf         
+     ultra/250  solaris2.6        
+     alpha 433  osf1               
+    "
+
+    "Modified: / 9.6.1999 / 13:25:29 / cg"
+
+
+! !
+
+!BenchmarkSTX1 class methodsFor:'graphics benchmarks'!
+
+lineDrawing1
+    |v t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            v displayLineFromX:0 y:0 toX:100 y:100
+        ]
+    ].
+
+    v destroy.
+
+    Transcript show:'lineDrawing1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 lineDrawing1
+     ]
+
+host:
+             P6/266       P6/266       P5/200
+             Linux-ELF    Linux-ELF    W95                    
+display:                                    
+             10Mb Ether   10Mb ether   local   
+             Indy         P5/200       P5/200
+             IRIX5.3      W95/exceed   W95
+     ---------------------------------------------------------------------------------------
+             5298         2626         8625
+                                       2433
+                                       2125
+                                       2348
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 3.5.1999 / 14:31:32 / cg"
+!
+
+lineDrawing2
+    |v t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            v paint:Color black.
+            v displayLineFromX:0 y:0 toX:100 y:100.
+            v paint:Color white.
+            v displayLineFromX:100 y:0 toX:0 y:100.
+        ].
+        v device sync
+    ].
+
+    v destroy.
+
+    Transcript show:'lineDrawing2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 lineDrawing2
+     ]
+
+host:
+             P6/266       P5/200
+             Linux-ELF    W95                    
+display:                                    
+             remote       local
+             10Mb ether
+
+             Indy         P5/200
+             IRIX5.3      W95
+     ---------------------------------------------------------------------------------------
+             2215         4505
+                          3676
+                          3145
+                          1140
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 3.5.1999 / 14:31:59 / cg"
+!
+
+lineDrawing3
+    |v t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            v paint:Color black.
+            v displayLineFromX:0 y:0 toX:100 y:100.
+            v paint:Color yellow.
+            v displayLineFromX:100 y:0 toX:0 y:100.
+        ].
+        v device sync
+    ].
+
+    v destroy.
+
+    Transcript show:'lineDrawing3: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 lineDrawing3
+     ]
+
+host:
+             P6/266       P6/400       P6/400       P5/200
+             Linux-ELF    Linux-ELF    Linux-ELF    W95                    
+display:                                    
+             remote       remote       remote       local
+             10Mb ether   10Mb ether   10Mb ether
+
+             Indy         Indy         P5/200       P5/200
+             IRIX5.3      IRIX5.3      W95/exceed   W95
+     ---------------------------------------------------------------------------------------
+                          2022         1736         2871
+                                                    2719    
+                                                    2582
+                                                    1675
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 3.5.1999 / 14:33:48 / cg"
+!
+
+lineDrawing4
+    |v t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            v paint:Color red.
+            v displayLineFromX:0 y:0 toX:100 y:100.
+            v paint:Color yellow.
+            v displayLineFromX:100 y:0 toX:0 y:100.
+        ].
+        v device sync
+    ].
+
+    v destroy.
+
+    Transcript show:'lineDrawing4: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 lineDrawing4
+     ]
+
+host:
+             P6/266       P6/400       P5/200
+             Linux-ELF    Linux-ELF    W95                    
+display:                                    
+             remote       remote       local
+             10Mb ether   10Mb ether
+
+             Indy         Indy         P5/200
+             IRIX5.3      IRIX5.3      W95
+     ---------------------------------------------------------------------------------------
+                          2033         3447
+                                       3360 
+                                       3268
+                                       1690
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 3.5.1999 / 14:34:42 / cg"
+!
+
+rectFilling1
+    |v t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            v fillRectangleX:10 y:10 width:80 height:80.
+            v fillRectangleX:10 y:10 width:80 height:80.
+        ]
+    ].
+
+    v destroy.
+
+    Transcript show:'rectFilling1: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 rectFilling1
+     ]
+
+host:
+             P6/266       P6/400       P5/200
+             Linux-ELF    Linux-ELF    W95                    
+display:                                    
+             remote       remote       local
+             10Mb ether   10Mb ether
+
+             Indy         Indy         P5/200
+             IRIX5.3      IRIX5.3      W95
+     ---------------------------------------------------------------------------------------
+                          137          2719
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 3.5.1999 / 14:39:17 / cg"
+!
+
+rectFilling2
+    |v t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            v paint:Color black.
+            v fillRectangleX:10 y:10 width:80 height:80.
+            v paint:Color white.
+            v fillRectangleX:10 y:10 width:80 height:80.
+        ]
+    ].
+
+    v destroy.
+
+    Transcript show:'rectFilling2: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 rectFilling2
+     ]
+
+host:
+             P6/266       P6/400       P5/200
+             Linux-ELF    Linux-ELF    W95                    
+display:                                    
+             remote       remote       local
+             10Mb ether   10Mb ether
+
+             Indy         Indy         P5/200
+             IRIX5.3      IRIX5.3      W95
+     ---------------------------------------------------------------------------------------
+                           815         2732
+     "
+
+    "Created: / 3.11.1998 / 16:38:01 / cg"
+    "Modified: / 3.5.1999 / 14:38:11 / cg"
+!
+
+rectFilling3
+    |v t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            v paint:Color red.
+            v fillRectangleX:10 y:10 width:80 height:80.
+            v paint:Color yellow.
+            v fillRectangleX:10 y:10 width:80 height:80.
+        ]
+    ].
+
+    v destroy.
+
+    Transcript show:'rectFilling3: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 rectFilling3
+     ]
+
+host:
+             P6/266       P6/400       P5/200
+             Linux-ELF    Linux-ELF    W95                    
+display:                                    
+             remote       remote       local
+             10Mb ether   10Mb ether
+
+             Indy         Indy         P5/200
+             IRIX5.3      IRIX5.3      W95
+     ---------------------------------------------------------------------------------------
+                           799         2760
+     "
+
+    "Created: / 3.5.1999 / 14:38:31 / cg"
+    "Modified: / 3.5.1999 / 14:40:09 / cg"
+!
+
+textDrawing
+    |v t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        30000 timesRepeat:[
+            v displayString:'hello' x:5 y:10.
+        ]
+    ].
+
+    v destroy.
+
+    Transcript show:'textDrawing: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 textDrawing
+     ]
+
+host:
+             P6/266       P6/400       P5/200
+             Linux-ELF    Linux-ELF    W95                    
+display:                                    
+             remote       remote       local
+             10Mb ether   10Mb ether
+
+             Indy         Indy         P5/200
+             IRIX5.3      IRIX5.3      W95
+     ---------------------------------------------------------------------------------------
+                           823         1180
+                                       1140 
+     "
+
+    "Created: / 3.5.1999 / 14:38:31 / cg"
+    "Modified: / 3.5.1999 / 16:35:43 / cg"
+!
+
+viewCreateAndDestroy
+    |v v2 t|
+
+    v := View new openAndWait.
+
+    t := Time millisecondsToRun:[
+        1000 timesRepeat:[
+            v2 := View origin:10@10 corner:50@50 in:v.
+            v2 realize.
+            v2 destroy.
+        ]
+    ].
+
+    v destroy.
+
+    Transcript show:'viewCreateAndDestroy: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 viewCreateAndDestroy
+     ]
+
+host:
+             P6/266       P6/400       P5/200
+             Linux-ELF    Linux-ELF    W95                    
+display:                                    
+             remote       remote       local
+             10Mb ether   10Mb ether
+
+             Indy         Indy         P5/200
+             IRIX5.3      IRIX5.3      W95
+     ---------------------------------------------------------------------------------------
+                           765         6408
+     "
+
+    "Created: / 3.5.1999 / 14:38:31 / cg"
+    "Modified: / 3.5.1999 / 16:35:43 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'memory benchmarks'!
+
+benchAllocAlone
+    |t1 t2 t3 n|
+
+    ObjectMemory tenure.
+
+    "with defaultSize of 400k, and object size of 16bytes,
+     this fits almost ..."
+
+    t1 := Time millisecondsToRun:[
+        100 timesRepeat:[
+            ObjectMemory scavenge
+        ]
+    ].
+
+    t2 := Time millisecondsToRun:[
+        100 timesRepeat:[
+            25000 timesRepeat:[Object new].
+            ObjectMemory scavenge
+        ]
+    ].
+
+    t3 := Time millisecondsToRun:[
+        100 timesRepeat:[
+            25000 timesRepeat:[Object new].
+        ]
+    ].
+
+    Transcript show:'b''GC only   : '; show:(t1 printString); cr; endEntry.
+    Transcript show:'b''combined  : '; show:(t2 printString); cr; endEntry.
+    Transcript show:'b''allocAlone: '; show:((t2-t1) printString); cr; endEntry.
+    Transcript show:'b''normal    : '; show:(t3 printString); cr; endEntry.
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 benchAllocAlone
+     ]
+
+      Indy    486/50              | interpreted           | competition1  competition2
+cache (none)  256k                | indy    486/50        | 486/50
+      --------------------------------------------------------------------------------
+      2550
+    "
+!
+
+benchArithmetic2
+    "arithmetic speed bench (comp.lang.smalltalk)
+     (actually, this is a GC benchmark, 
+      it allocates & collects about 20Mb during its run).
+     Since timesRepeat-block is inlined, all time is spent in
+     float-addition, allocation and gc. Compare the time with
+     the benchNew/benchBasicNew times.
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns.
+     (During its execution, about 50 newSpace collects are performed)"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |x|
+        x := 0.0.
+        1000000 timesRepeat:[x := x + 1.0]
+    ].
+    Transcript show:'b''arith2: '; show:(t printString); cr; endEntry
+
+    "
+     allocation:
+        creates 1 new float (about 20bytes) per iteration
+        --> 20Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchArithmetic2
+     ]
+
+      Indy    486/50  P5/100      | interpreted                         | competition1  competition2
+cache (none)  256k                | indy    486/50  P5/133  715/33      | 486/50
+      ----------------------------|-------------------------------------|----------------------
+min   1110    2730    701         |                         16470       | 13400         13457
+      1041    2611                |                         11390 (4)   |
+                                  |          4367     942               |
+                                  |          4023     854               |
+
+     notice, that ST/X uses double prec. floats, while most other ST-systems
+     use single prec. floats. 
+     (meaning that the float allocation is twice as high in ST/X)
+     Notice also, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:33:52 / cg"
+!
+
+benchArithmetic3:n 
+    "arithmetic speed bench
+     (actually, this is a GC, and block evaluation benchmark.
+      it allocates & collects about 20Mb during its run;
+      compare the time to benchBasicNew-time).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns.
+     (Here the run time includes a block evaluation)"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |x|
+        x := 0.0.
+        n timesRepeat:[x := x + 1.0]
+    ].
+    Transcript show:'b''arith3: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new float (about 20bytes) per iteration
+        --> 20Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchArithmetic3:1000000
+     ]
+
+      Indy    486/50    | interpreted
+cache (none)  256k      |         P5/133
+      ------------------|------------------------------------
+      1728    3999      |         1183
+      1591    3844      |          837
+
+
+     notice, that ST/X uses double prec. floats, while most other ST-systems
+     use single prec. floats. 
+     (meaning that the float allocation is twice as high in ST/X).
+     Notice also, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 13:53:07 / cg"
+!
+
+benchArithmetic4
+    "arithmetic speed bench
+     currently, the compiler does not really use the Float-hint, 
+     except that an added float-check is done in the store operation. 
+     Newer versions of stc will show much better performance here."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |x "{ Class: Float }" |
+        x := 0.0.
+        1000000 timesRepeat:[x := x + 1.0]
+    ].
+    Transcript show:'b''arith4: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new float (about 20bytes) per iteration
+        --> 20Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchArithmetic4
+     ]
+
+      Indy    486/50              | interpreted
+cache (none)  256k                | indy     486/50  P5/133  320H  715/33
+      ----------------------------|----------------------------------------
+min   1111    2730                |          12252          23722  16390
+      1041    2616                | 4091     11914          17614  15040 (2)
+                                  | 3994     11823                 11420 (3)
+                                  |
+                                  |-----------------------------------
+                                              4326     1177
+                                              3957      802
+(2) interpreter asm patch
+(4) both (2) and (3)
+
+     notice, that ST/X uses double prec. floats, while most other ST-systems
+     use single prec. floats. 
+     (meaning that the float allocation is twice as high in ST/X)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:34:21 / cg"
+!
+
+benchArithmetic:cnt 
+    "arithmetic speed bench 
+     (actually, this is a GC, and block evaluation benchmark.
+      it allocates & collects about 40Mb during its run).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns.
+     (During its execution, about 100 newSpace collects are performed)"
+
+    |p n m t|
+
+    n := 3.0.
+    m := 5.5.
+
+    t := Time millisecondsToRun:[
+        cnt timesRepeat:[
+            p := 5 / n + m
+        ]
+    ].
+    Transcript show:'b''arith: '; show:(t printString); cr; endEntry
+
+    "
+     allocation:
+        2 new floats (about 20bytes each) per iteration
+        --> 40Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchArithmetic:1000000
+     ]
+
+      Indy    486/50    P5/90  P5/100   | interpreted                              | competition1  competition2
+cache (none)  256k                      | indy    486/50  P5/133    320H  715/33   | 486/50
+      ----------------------------------|------------------------------------------|--------------------
+min   4043     9843     3459   2654     | 13430   35586    8205    51578  39060    | 46687         101391
+      3844     9480                     | 10178   30094    7998(#)        38050 (3)|
+                                        | 11241           10757           35790 (4)|
+                                        |         13361                            |
+                                        |                                          |
+                                        |------------------------------------------|
+                                        |         10788    3168                    |
+                                        |                  2285                    |
+
+     notice, that ST/X uses double prec. floats, while most other ST-systems
+     use single prec. floats. 
+     (meaning that the float allocation is twice as high in ST/X)
+     Notice also, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(#) ip rev.2
+    "
+
+    "Modified: 27.6.1997 / 20:34:53 / cg"
+!
+
+benchArrayBasicNew2
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 12Mb).
+     Inlined loop"
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            Array basicNew
+        ]
+    ].
+    Transcript show:'b''ArrayBasicNew2: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new array (about 12bytes) per iteration
+        --> 12Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchArrayBasicNew2
+     ]
+
+      Indy    486/50              | interpreted                 | competition1
+cache (none)  256k                | indy    486/50  P5/133      | 486/50
+      ----------------------------|-----------------------------|-------------
+min   1053    1761                | 4506                        |  
+       890    1656                | 4240                        |
+                                  | 3807                        |
+                                  |-----------------------------|
+                                            3152    851
+                                                    650
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:35:38 / cg"
+!
+
+benchArrayBasicNew:n
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 12Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns ..."
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            Array basicNew
+        ]
+    ].
+    Transcript show:'b''ArrayBasicNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new array (about 12bytes) per iteration
+        --> 12Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchArrayBasicNew:1000000
+     ]
+
+      Indy    486/50              | interpreted               | competition1
+cache (none)  256k                | indy    486/50  p5/133    | 486/50
+      ----------------------------|---------------------------|----------
+min   1464    3186                |                           | 6482
+      1316    2986                |                           |
+      1309                        |                           |
+      1280                        |                           |
+      1271                        |                           |
+                                  |---------------------------|
+                                             3045    670
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:36:09 / cg"
+!
+
+benchArrayNew2
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 12Mb).
+     Inlinable loop"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            Array new
+        ]
+    ].
+    Transcript show:'b''ArrayNew2: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new array (about 12bytes) per iteration
+        --> 12Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchArrayNew2
+     ]
+
+      Indy    486/50            88k   | interpreted                   | competition1
+cache (none)  256k                    | indy    486/50  P5/133   320H | 486/50
+      --------------------------------|-------------------------------|-----------------
+min   1053    1766              1234  | 5275    12178           23329 |  
+       893    1653                    | 4876                    21397 |
+                                      | 4788                          |
+                                      |-------------------------------|
+                                      |          5040    1170         |
+                                      |          4825     927         |
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:36:24 / cg"
+!
+
+benchArrayNew:n
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 12Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns ..."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            Array new
+        ]
+    ].
+    Transcript show:'b''ArrayNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new array (about 12bytes) per iteration
+        --> 12Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchArrayNew:1000000
+     ]
+
+      Indy    486/50           88k   68k/25 | interpreted                 | competition1
+cache (none)  256k                          | indy    486/50  P5/133      | 486/50
+      ---------------------------------------------------------------------------------
+min   1460    3187            1817    4249  |                  1317       | 2966
+      1318    2982                          |                             |
+      1270                                  |                             |
+                                            |-----------------------------|
+                                                       4738     946
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:37:09 / cg"
+!
+
+benchBasicNew2
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 12Mb).
+     Here an inlinable loop is used"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            Object basicNew
+        ]
+    ].
+    Transcript show:'b''basicNew2: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new object (about 12bytes) per iteration
+        --> 12Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchBasicNew2
+     ]
+
+      Indy    486/50            88k   68k/25| interpreted                              | competition1  competition2
+cache (none)  256k                          | indy    486/50  P5/133  320H  715/33     | 486/50
+      -----------------------------------------------------------------------------------------------------
+min   1960    2047             1416    4016 | 4200    10789    2784  19945   13490     |             
+      1479    1878                          | 3946    10211    2744  19766   10760 (3) |
+      1049    1851                          | 3858             2538  16146    9090 (4) |
+              1770                          |                  2500                    |
+                                            |                                          |
+                                            |                                          |
+                                            |------------------------------------------|
+                                                       3607     645
+                                                       3103
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:37:49 / cg"
+!
+
+benchBasicNew:n
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 12Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns ..."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            Object basicNew
+        ]
+    ].
+    Transcript show:'b''basicNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new object (about 12bytes) per iteration
+        --> 12Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchBasicNew:1000000
+     ]
+
+      Indy    486/50              | interpreted              | competition1  competition2
+cache (none)  256k                | indy    486/50  P5/133   | 486/50
+      ----------------------------|--------------------------|--------------------------
+min   2468    3366                | 6888    19572            | 1922          5163
+      1563    3223                | 6392    17312            |
+      1503    3138                |                          |
+      1466    3105                |                          |
+                                  |                          |
+                                  |--------------------------|
+                                  |          5033     677    |
+                                  |          3034            |
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:38:09 / cg"
+!
+
+benchByteArrayBasicNew2
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 10Mb).
+     inlinable loop"
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        10000 timesRepeat:[
+            ByteArray basicNew:1000
+        ]
+    ].
+    Transcript show:'b''ByteArrayBasicNew2: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 10000 new byteArrays (12+1000bytes) per iteration
+        --> about 10Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchByteArrayBasicNew2
+     ]
+
+      Indy    486/50              | interpreted                        | competition1  competition2
+cache (none)  256k                | indy  486/50  P5/133 320H  715/33  | 486/50
+      ----------------------------|------------------------------------|------------------------
+min   285      316                | 317    384            730   820    |             
+               290                | 306                   564   740 (3)|
+      268                         |                       518   750 (4)|
+                                  |                       513          |
+                                  |------------------------------------|
+                                  |                 157                |
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 13:57:22 / cg"
+!
+
+benchByteArrayBasicNew:n
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 10Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns ..."
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            ByteArray basicNew:1000
+        ]
+    ].
+    Transcript show:'b''ByteArrayBasicNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 10000 new byteArrays (12+1000bytes) per iteration
+        --> about 10Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchByteArrayBasicNew:10000
+     ]
+
+      Indy    486/50              | interpreted                       | competition1  competition2
+cache (none)  256k                | indy  486/50 P5/133 320H  715/33  | 486/50
+      ---------------------------------------------------------------------------------------
+min   299      324                | 360    484          1098   930    | 1428           29385 
+               296                | 340                  842   870 (3)|
+      274      303                |                      823   890 (4)|
+                                  |                      746          |
+                                  |-----------------------------------|
+                                  |        380     156                |
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:38:30 / cg"
+!
+
+benchByteArrayNew:n
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 10Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns ..."
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            ByteArray new:1000
+        ]
+    ].
+    Transcript show:'b''ByteArrayNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 10000 new byteArrays (12+1000bytes) per iteration
+        --> about 10Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchByteArrayNew:10000
+     ]
+
+      Indy    486/50              | interpreted                     | competition1
+cache (none)  256k                | indy    486/50   320H  715/33   | 486/50
+      -----------------------------------------------------------------
+min   306      350                |  399    717      1692   1050    | 1483
+      342      320                |  381    620      1127    910 (3)|
+               317                |         515       872   1000 (4)|
+      284                         |         406       828           |
+
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:38:50 / cg"
+!
+
+benchByteArrayUninitializedNew:n
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 10Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns.
+     Compare this time with benchByteArrayBasicNew-time; 
+     the difference is due to the clearing of the byteArrays.
+     This may make a difference, if you allocate many big byteArrays
+     temporarily (image processing, I/O buffers etc ...)"
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            ByteArray uninitializedNew:1000
+        ]
+    ].
+    Transcript show:'b''ByteArrayUninitializedNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 10000 new byteArrays (12+1000bytes) per iteration
+        --> about 10Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchByteArrayUninitializedNew:10000
+     ]
+
+      Indy    486/50              | interpreted     
+cache (none)  256k                | indy  486/50  320H  715/33
+      --------------------------------------------------------
+      59      106                 | 107   309     1216   380
+      82                                  262      801   350 (3)
+      44      71                          253      533   320 (4)
+              84                          144      529
+      48
+
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:38:59 / cg"
+!
+
+benchEmptyScavenge
+    "this benchmarks measures the time required to scavenge the new space
+     with (almost) no surviving objects (i.e. a scavenge after a lot of
+     garbage allocation)"
+
+    |t|
+
+    ObjectMemory tenure.
+    t := Time millisecondsToRun:[
+        1000 timesRepeat:[
+            ObjectMemory scavenge
+        ]
+    ].
+    Transcript show:'b''emptyScavenge: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 benchEmptyScavenge
+     ]
+
+      Indy    486/50   P5/100      SS10 | interpreted                  | competition1  competition2
+cache (none)  256k                      | indy   486/50  320H  715/33  | 486/50
+      -------------------------------------------------------------------------------------
+       563    1257                 1145          1309   3268  1260
+                                                        1824  1160 (3)
+                                                        1725  1160 (4)
+
+with 1000 weakArrays present:
+      4453    8468     2019                          3284
+      3247
+      3161
+
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+    "
+!
+
+benchLongStringBasicNew:n
+    "instance creation speed bench
+     (GC benchmark; allocating & collecting about 10Mb).
+     Run this benchmark a few times - its outcome depends on
+     newSpace fill-grade & cache patterns ..."
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            String basicNew:1000
+        ]
+    ].
+    Transcript show:'b''LongStringBasicNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 10000 new strings (12+1001bytes) per iteration
+        --> about 10Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchLongStringBasicNew:10000
+     ]
+
+      Indy    486/50              | interpreted                    | competition1 competition2
+cache (none)  256k                | indy   486/50  320H  715/33    | 486/50
+      ------------------------------------------------------
+min   283     315                   407    502
+      323     277                          385
+              287
+      267
+
+with 1000 WeakArrays present
+              464
+    "
+
+    "Modified: 27.6.1997 / 20:39:16 / cg"
+!
+
+benchLongStringNew:n
+    "instance creation speed bench
+     (GC benchmark; allocating & collecting about 10Mb).
+     Run this benchmark a few times - its outcome depends on
+     newSpace fill-grade & cache patterns ..."
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            String new:1000
+        ]
+    ].
+    Transcript show:'b''LongStringNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 10000 new strings (12+1001bytes) per iteration
+        --> about 10Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchLongStringNew:10000
+     ]
+
+      Indy    486/50              | interpreted                   | competition1  competition2
+cache (none)  256k                | indy   486/50  320H  715/33   | 486/50
+      --------------------------------------------------------------------------------
+min   285     315                    374    512     904   790 (3) | 1428          330
+      326     277                                   859   800 (4)
+              285                           424     808
+      267
+
+1000 WeakArrays:
+              463                    408
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+    "
+
+    "Modified: 27.6.1997 / 20:39:31 / cg"
+!
+
+benchMallocFree
+    "not really fair - there is some added overhead in ExternalBytes
+     when calling malloc/free"
+
+    |t1 t2 refs|
+
+    refs := Array new:250.
+    t1 := Time millisecondsToRun:[
+        50 timesRepeat:[
+            1 to:250 do:[:i | refs at:i put:(ExternalBytes new:100)].
+            1 to:250 do:[:i | (refs at:i) free].
+        ]
+    ].
+    t2 := Time millisecondsToRun:[
+        50 timesRepeat:[
+            1 to:250 do:[:i | refs at:i put:(ByteArray new:100)].
+            "/ automatically freed
+        ]
+    ].
+    Transcript show:'b''mallocFree: '; show:(t1 printString); cr; endEntry.
+    Transcript show:'b''automatic : '; show:(t2 printString); cr; endEntry.
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 benchMallocFree
+     ]
+
+      Indy    486/50              | interpreted           | competition1  competition2
+cache (none)  256k                | indy    486/50        | 486/50
+      --------------------------------------------------------------------------------
+      2641    3379
+        79     142
+    "
+!
+
+benchNew2
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 12Mb).
+     Here an inlinable loop is used"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            Object new
+        ]
+    ].
+    Transcript show:'b''new2: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new object (about 12bytes) per iteration
+        --> 12Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchNew2
+     ]
+
+      Indy    486/50    P5/90  P5/100  88k   68k/25  SS10 | interpreted                       | competition1  competition2
+cache (none)  256k                                        | indy    486/50   320H  715/33     | 486/50
+      ------------------------------------------------------------------------------------------
+min   2255    5040      767     568    1417    4003  1361 | 4857     12016  23674   21930     | 1813          5163
+      1098    1883                                        | 4739                    15810 (3) |
+      1046    1852                                        | 4612                    17250 (4) |
+              1766                                        |                                   |
+                                                          |                                   |
+                                                          |-----------------------------------|
+                                                                      5505
+                                                                      4785
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:41:31 / cg"
+!
+
+benchNew:n
+    "instance creation speed bench 
+     (GC benchmark; allocating & collecting about 12Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns ..."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            Object new
+        ]
+    ].
+    Transcript show:'b''new: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1 new object (about 12bytes) per iteration
+        --> 12Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchNew:1000000
+     ]
+
+      Indy    486/50  P5/100      | interpreted           | competition1  competition2
+cache (none)  256k                | indy    486/50        | 486/50
+      --------------------------------------------------------------------------------
+min   2661    5911    760         | 17326   29695         | 1813          5163
+      1561    3228                   7567   20325
+      1512    3146                   7417
+      1467                           7329
+
+1000 weakArrays       844
+                                  ------------------------
+                                             7064
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+!
+
+benchOCCreation1
+    "benchmark OrderedCollection add (from comp.lang.smalltalk).
+     The collection is growing (therefore, it is slow).
+     This benchmark will lead to background oldSpace collects to be
+     performed. Or, if you start it quickly again (so that the background
+     collect cannot keep up), to a blocking oldSpace collect."
+
+    |aColl t|
+
+    t := Time millisecondsToRun: [
+        aColl := OrderedCollection new.
+        1 to: 100000 do: [ :each | aColl add: each ]
+    ].
+
+    Transcript show:'b''OCCreation1: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         ObjectMemory markAndSweep.
+         STXBenchmarks1 benchOCCreation1
+     ]
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchOCCreation1
+     ]
+
+
+      Indy    486/50              | interpreted                          | competition1  competition2
+cache (none)  256k                | indy   486/50  P5/133  320H  715/33  | 486/50
+      -------------------------------------------------------------------|--------------------
+min   248      489                |        2333            8490   3360   |               5547
+               475                | 1037   2106            6448   3270(3)|
+                                  |  803                   6351   3720
+                                  |  775(5)                5069
+                                  |                        4787
+                                  ---------------------------------------
+                                  |                 147
+                                  |
+GC    586     1150                | 1218   3314                   6000
+                                  ---------------------------------------
+                                                    410
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix true/false
+    "
+
+    "Modified: 12.5.1997 / 21:27:25 / cg"
+!
+
+benchOCCreation2
+    "benchmark OrderedCollection add (from comp.lang.smalltalk).
+     The collection is preallocated.
+     This benchmark will lead to background oldSpace collects to be
+     performed. Or, if you start it quickly again (so that the background
+     collect cannot keep up), to a blocking oldSpace collect."
+
+    |aColl t|
+
+    t := Time millisecondsToRun: [
+        aColl := OrderedCollection new: 100000.
+        1 to: 100000 do: [ :each | aColl add: each ]
+    ].
+
+    Transcript show:'b''OCCreation2: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         ObjectMemory markAndSweep.
+         STXBenchmarks1 benchOCCreation2
+     ]
+
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchOCCreation2
+     ]
+
+      Indy    486/50              | interpreted                         | competition1  competition2
+cache (none)  256k                | indy   486/50  P5/133 320H  715/33    88k  | 486/50
+      -------------------------------------------------------------------------|----------------------------
+min   196      388                |  721    2016          4978   3180     3955 | 988           2691
+               385                |                       4717   3110 (3)      |
+                                  |                                            |
+GC    560      881                |                              5400     7042 |
+                                  |--------------------------------------------|
+                                  |                 113                        |
+                                  |                  85                        |
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+    "
+
+    "Modified: 27.6.1997 / 14:00:12 / cg"
+!
+
+benchOCCreation3
+    "modified OrderedCollection creation. 
+     The collection variable is withing the block 
+     (however, for 100000 accesses, this does not really make a difference).
+     This benchmark will lead to background oldSpace collects to be
+     performed. Or, if you start it quickly again (so that the background
+     collect cannot keep up), to a blocking oldSpace collect."
+
+    |t|
+
+    t := Time millisecondsToRun: [
+        |aColl|
+
+        aColl := OrderedCollection new: 100000.
+        1 to: 100000 do: [ :each | aColl add: each ]
+    ].
+
+    Transcript show:'b''OCCreation3: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         ObjectMemory markAndSweep.
+         STXBenchmarks1 benchOCCreation3
+     ]
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchOCCreation3
+     ]
+
+      Indy    486/50            SS10  | interpreted     
+cache (none)  256k                    | indy   486/50  P5/133 320H  715/33  88k
+      --------------------------------|-----------------------------------------
+min   200      397              310   | 867    2563           7978   3320   3991
+               385                    |        2280           6677          2845
+                                      | 770    2070           5410
+                                      |                       5307
+                                      |
+GC    534      893                    |                              7219
+                                      |-----------------------------------------
+                                                        107
+                                                         85
+(4) both (2) and (3)
+    "
+
+    "Modified: 27.6.1997 / 14:00:41 / cg"
+!
+
+benchSetCreation
+    "benchmark set grow (from comp.lang.smalltalk).
+     Slightly modified (the original added only 4500 elements, which
+     was too short for some machines with 20ms timer resolution)
+     The loop is inlined, but access to the set is via the
+     method local (s), which is outside the time-block."
+
+    |s t|
+
+    s := Set new.
+    t := Time millisecondsToRun:[
+        1 to:10000 do:[:i | s add:i]
+    ].
+
+    Transcript show:'b''setCreation: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchSetCreation
+     ]
+
+      Indy    486/50    P5/90  P5/100 P5/133  88k 68k/25 SS10 | interpreted                                               ELC   | competition1  competition2
+cache (none)  256k                                            | indy    486/50  P5/133 320H  715/33 DS3100 88k   SS10/40  gcc   | 486/50
+      --------------------------------------------------------------------------------------------------------------------------|--------------------------
+min   104     215       64     49      35     200   376  121  |  159    422      92    1620   570   1414   624     230    726   | 494           2087
+       80     168                                        119  |  171 ** 507      78    1333   650   1242   480                  | 549           2142
+       77     171 (i1)                                           192?   405      86(#) 1324                454(#)               |
+       75     168 (i2)                                           147    399     144     972                                     |
+              167 (i3)                                           141(5) 352             867                                     |
+                                                                                        825                                     |
+      --------------------------------------------------------------------------------------------------------------------------|--------------------------
+                                                                        213      44     388                384     142    336   |
+                                                                        209      40                                137    332   |
+                                                                        205      38                                134          |
+(i1) without commonSymbols                                                                                                      |
+(i2) without commonSymbols; awk asm optimizations
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev.2
+    "
+
+    "Modified: 27.6.1997 / 20:41:58 / cg"
+!
+
+benchSetCreation2
+    "benchmark set grow (from comp.lang.smalltalk).
+     Slightly modified (the original added only 4500 elements, which
+     was too short for some machines with 20ms timer resolution)
+     The set is kept in a block variable (which is slightly faster),
+     but for 10000 accesses, this does not really make a difference."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |s|
+        s := Set new.
+        1 to:10000 do:[:i | s add:i]
+    ].
+
+    Transcript show:'b''setCreation2: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchSetCreation2
+     ]
+
+      Indy    486/50   P5/133   88k 68k/25 SS10  | interpreted                                       ELC  | competition1  competition2
+cache (none)  256k                               | indy   486/50 P5/133 320H  715/33   88k   SS10/40 gcc  | 486/50
+      ----------------------------------------------------------------------------------------------------|----------------------------
+min    96     212        35     183   373  121   |  222    393           972   590     624           683  | 495           2143
+       79     167                                |  151    363           853   570 (3) 485                |
+       77     169 (i1)                           |  135(5)                     630     460(#)             |
+              165 (i2)                           |                                     447                |
+      ----------------------------------------------------------------------------------------------------|----------------------------
+                                                 |         210      44   430           381     134   336  |
+                                                 |         196      40                               329  |
+                                                 |                  38
+(3) interpreter with +O3 +Obb2000
+(i1) without commonSymbols
+(i2) without commonSymbols; awk asm optimizations
+(5) fix true/false
+(#) ip rev.2
+    "
+
+    "Modified: 27.6.1997 / 20:42:26 / cg"
+!
+
+benchSetCreation3
+    "benchmark set grow (from comp.lang.smalltalk).
+     Slightly modified (the original added only 4500 elements, which
+     was too short for some machines with 20ms timer resolution)
+     Compare the time with benchSetCreation2 - the set is preallocated,
+     thus no growing is needed in the loop."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |s|
+        s := Set new:10000.
+        1 to:10000 do:[:i | s add:i]
+    ].
+
+    Transcript show:'b''setCreation3: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchSetCreation3
+     ]
+
+      Indy    486/50   P5/100  88k 68k/25 SS10  | interpreted                                         ELC         | competition1  competition2
+cache (none)  256k                              | indy   486/50 P5/133 320H  715/33  DS3100  SS10/40  gcc  88k    | 486/50
+      ------------------------------------------------------------------------------------------------------------|----------------------------
+min   77      173       39     167   303    97  |  141   473     76    1581   520     1305                 571    | 220           769
+      62      134                                  206?  355     81(#) 1262   510 (3) 1066                 441    |     
+      61      137 (i1)                             135   325     72(#)  915   560                          416(#) |
+              133 (i2)                             119(5)       137     841                                402    |
+                                                                        804                                       |
+      ------------------------------------------------------------------------------------------------------------|----------------------------
+                                                         195     35     331                    108    273  319
+                                                         171     31
+                                                                 29
+
+(3) interpreter with +O3 +Obb2000
+(i1) without commonSymbols
+(i2) without commonSymbols; awk asm optimizations
+(5) fix true/false
+(#) ip rev.2
+    "
+
+    "Modified: 27.6.1997 / 14:01:08 / cg"
+!
+
+benchStringBasicNew2
+    "instance creation speed bench
+     (GC benchmark; allocating & collecting about 10Mb).
+     Inlined loop"
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            String basicNew:10
+        ]
+    ].
+    Transcript show:'b''StringBasicNew2: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1000000 new strings (12+11bytes) per iteration
+        --> about 23Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchStringBasicNew2
+     ]
+
+      Indy    486/50              | interpreted           | competition1  competition2
+cache (none)  256k                | indy    486/50        | 486/50
+      --------------------------------------------------------------------------------
+min   1358    2484                          14211         |                
+      1562    2360                |-----------------------|
+                                             4514
+      1294
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:43:00 / cg"
+!
+
+benchStringBasicNew:n
+    "instance creation speed bench
+     (GC benchmark; allocating & collecting about 10Mb).
+     Run this benchmark a few times - its outcome depends on
+     newSpace fill-grade & cache patterns ..."
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            String basicNew:10
+        ]
+    ].
+    Transcript show:'b''StringBasicNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1000000 new strings (12+11bytes) per iteration
+        --> about 23Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchStringBasicNew:1000000
+     ]
+
+      Indy    486/50              | interpreted           | competition1  competition2
+cache (none)  256k                | indy    486/50        | 486/50
+      --------------------------------------------------------------------------------
+min   1770    3891                | 7623    21823         |               6646
+      2005    3736                |-----------------------|
+      1894                                   4587
+      1708  
+
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:43:42 / cg"
+!
+
+benchStringNew2
+    "instance creation speed bench
+     (GC benchmark; allocating & collecting about 10Mb).
+     Inline loop"
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            String new:10
+        ]
+    ].
+    Transcript show:'b''StringNew2: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1000000 new strings (12+11bytes) per iteration
+        --> about 23Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchStringNew2
+     ]
+
+      Indy    486/50              SS10 | interpreted                    | competition1 competition2
+cache (none)  256k                     | indy   486/50  320H  715/33    | 486/50
+      ---------------------------------------------------------------------------------
+min   1361    2483                1782 | 8257   15870  32088   30720    |            
+      1559    2462                     |               25945   18940 (3)|
+      1299    2360                     |                       17340 (4)|
+                                       |--------------------------------|
+                                                 6580
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+    "
+
+    "Modified: 27.6.1997 / 20:44:27 / cg"
+!
+
+benchStringNew:n
+    "instance creation speed bench
+     (GC benchmark; allocating & collecting about 10Mb).
+     Run this benchmark a few times - its outcome depends on
+     newSpace fill-grade & cache patterns ..."
+
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            String new:10
+        ]
+    ].
+    Transcript show:'b''StringNew: '; show:(t printString); cr; endEntry
+
+    "
+      allocation:
+        creates 1000000 new strings (12+11bytes) per iteration
+        --> about 23Mb garbage
+
+     10 timesRepeat:[
+         STXBenchmarks1 benchStringNew:1000000
+     ]
+
+      Indy    486/50              | interpreted                    | competition1 competition2
+cache (none)  256k                | indy   486/50  320H  715/33    | 486/50
+      ---------------------------------------------------------------------------------
+min   1768    3884                | 8388   24873  65907  50300     | 9941         6701
+      2004    3815                | 8275          59973  33040 (3) |
+      1706    3734                |                      36000 (4) |
+                                  |--------------------------------|
+                                            6651
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:45:11 / cg"
+!
+
+memory2
+    "lots of memory allocation
+     (GC benchmark; allocates, nils & collects about 200Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns ...
+     Since timesRepeat-block is inlined here, all time is spent in
+     allocation & gc.
+     (During its execution, about 500 newSpace collects are performed;
+      almost all time is spent in the garbage collector here ...)"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        100000 timesRepeat:[
+            Array new:500
+        ].
+    ].
+    Transcript show:'memory2: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 memory2
+     ]
+
+      Indy    486/50              | interpreted
+cache (none)  256k                | indy   486/50  320H  715/33
+      -----------------------------------------------------------
+min   5062    5214                | 6056   7306   13487  10430
+      5093    4982                  5908   7255   10636  10320
+      4935                          5614   6418   10085
+                                    5589 **6381    8515
+                                    5640           7865
+
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:45:47 / cg"
+!
+
+memory:n
+    "lots of memory allocation 
+     (GC benchmark; allocates, nils & collects about 200Mb).
+     Run this benchmark a few times - its outcome depends on 
+     newSpace fill-grade & cache patterns ....
+     Here a block evaluation is performed, but its time is only
+     a very small fraction compared to allocation & gc-time (compare with memory2).
+     (During its execution, about 500 newSpace collects are performed;
+      almost all time is spent in the garbage collector here ...)"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            Array new:500
+        ].
+    ].
+    Transcript show:'memory: '; show:(t printString); cr; endEntry
+
+    "
+     allocation:
+         100000 * 500 * (4 bytes/object) -> 200000000
+
+
+     10 timesRepeat:[
+         STXBenchmarks1 memory:100000
+     ]
+
+      Indy    486/50   P5/100     | interpreted                    | competition1  competition2
+cache (none)  256k                | indy   486/50  320H  715/33    |  486/50        486/50
+      -------------------------------------------------------------|--------------------
+min   5144    5367     2596       | 6996   8835   15074   11980 (3)                 5382
+      5078    5181                  6813   8561   13335
+      5030                          6145   7920   11655
+                                    6350   7720   11386
+                                           7472
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+
+     Notice, that the times depend on the newSpace fill-grade.
+     If exeuted multiple times, objects are tenured to oldSpace and
+     the benchmark runs faster.
+     The above numbers are for a default 400k newSpace
+    "
+
+    "Modified: 27.6.1997 / 20:46:15 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'micro benchmarks'!
+
+arrayAt
+    "perform Array>>at: a million times.
+     Notice, currently, ST/X's JIT does not inline such a
+     synthetic array access. See also #arrayAt2:/#arrayAt3:"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := #(1).
+        1000000 timesRepeat:[
+            a at:1
+        ].
+    ].
+    Transcript show:'arrayAt: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 arrayAt
+     ]
+
+      Indy    486/50    P5/100  P5/133 88k  68k/25 SS10 | interpreted                                    ULTRA SS10   ELC    ELC  mc68k   alpha   | competition1  competition2
+cache (none)  256k                                 /40  | indy    486/50  P5/100 P5/133  320H  715/33     250   /40   gcc    cc    33   21064/233 | 486/50        486/50
+      --------------------------------------------------|-----------------------------------------------------------------------------------------|-----------------------------
+       703    2006      507     349                1073 | 3030    8554    2517   1818   10168  11390           4415   7403 17764                  |
+       690    1934 (i3)                                 | 2993    8213           1804(#)        9400           4003                               |
+                                                        | 2910    7558(5)        1775           7050 (4)                                          |
+                                                        | 2819                   1714           6990                                              |
+                                                        | 2627(2)                1546                                                             |
+                                                        | 2543(5)                1519                                                             |
+                                                        |                        1469                                                             |
+      --------------------------------------------------|-----------------------------------------------------------------------------------------|-----------------------------
+                                                        |         1942            386    3122             150  1331   2565  2662   3827    510    |
+                                                        |         1935            370    3370                  1305   2446         3758           |
+                                                        |         2056            363                          1276   2515         3659           |
+                                                        |                         359                          1208                               |
+                                                        |                         348                          1200                               |
+                                                        |
+(4) both (2) and (3)
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev2
+    "
+
+    "Modified: / 4.6.1998 / 10:50:46 / cg"
+!
+
+arrayAt2:a
+    "perform Array>>at: a million times.
+     Notice, this IS inline-coded by the ST/X JIT"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            a at:1
+        ].
+    ].
+    Transcript show:'arrayAt2: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 arrayAt2:#(1)
+     ]
+
+      Indy    486/50    P5/100  P5/133 88k  68k/25 SS10 | interpreted                                    SS10   ELC    ELC  mc68k   alpha   | competition1  competition2
+cache (none)  256k                                 /40  | indy    486/50  P5/100 P5/133  320H  715/33     gcc   gcc    cc    33   21064/233 | 486/50        486/50
+      --------------------------------------------------|-----------------------------------------------------------------------------------|-----------------------------
+      --------------------------------------------------|-----------------------------------------------------------------------------------|-----------------------------
+                                                        |                                3460                                        201
+(4) both (2) and (3)
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev2
+    "
+
+    "Modified: / 4.6.1998 / 10:48:48 / cg"
+!
+
+arrayAt3:idx
+    "perform Array>>at: a million times.
+     Notice, this IS inline-coded by the ST/X JIT"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            #('a' 'b' 'c' 'd' 'e') at:idx
+        ].
+    ].
+    Transcript show:'arrayAt3: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 arrayAt3:2
+     ]
+
+      Indy    486/50    P5/100  P5/133 88k  68k/25 SS10 | interpreted                                         ULTRA  SS10   ELC    ELC  mc68k   alpha   | competition1  competition2
+cache (none)  256k                                 /40  | indy    486/50  P5/100 P5/133  P6/400 320H  715/33   250    /40   gcc    cc    33   21064/233 | 486/50        486/50
+      --------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------
+      --------------------------------------------------|-----------------------------------------------------------------------------------------------|-----------------------------
+                                                        |                                 35                    61                     
+    "
+
+    "Modified: / 4.6.1998 / 10:48:48 / cg"
+!
+
+arrayAtPut
+    "perform Array>>at:put: a million times"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := Array with:1.
+        1000000 timesRepeat:[
+            a at:1 put:2
+        ].
+    ].
+    Transcript show:'arrayAtPut: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 arrayAtPut
+     ]
+
+      Indy    486/50  P5/100 P5/133   88k  68k/25 | interpreted                                     ULTRA SS10  ELC  mc68k   alpha   | competition1  competition2
+cache (none)  256k                                | indy    486/50  P5/100  P5/133 320H  715/33      250   /40  gcc   33   21064/233 | 486/50        486/50
+      --------------------------------------------|----------------------------------------------------------------------------------|---------------------------
+        83    304     80     60                   |  3234    9092    2720    1971  11189  12950           4929  8380                 |
+                                                  |  3212    8513            1933(#)      10840           4476                       |
+                                                  |  3155                    1739          8250 (4)                                  |
+                                                  |  3054                    1693          8150                                      |
+                                                  |  2880(2)                 1645                                                    |
+                                                  |  2773(5)                 1564                                                    |
+      --------------------------------------------|----------------------------------------------------------------------------------|-----------------------------
+                                                  |          2301             415   3444             72   1410  2732  4009    190    |
+                                                  |           784             408                         1406  2596          173    |
+                                                  |           665             401                         1355  4917?                |
+                                                  |                           144                          600                       |
+                                                  |                           153                          573                       |
+                                                  |                           138                                                    |
+                                                  |                           136                                                    |
+(4) both (2) and (3)
+(5) fix true/false
+(#) ip rev.2
+    "
+
+    "Modified: / 4.5.1998 / 20:31:54 / cg"
+!
+
+arraySize
+    "perform Array>>size a million times"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := #(1 2 3 4 5).
+        1000000 timesRepeat:[
+            a size
+        ].
+    ].
+    Transcript show:'arraySize '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 arraySize
+     ]
+
+      Indy    486/50    P5/100  P5/133 88k  68k/25 | interpreted                                           ULTRA         alpha/233 | competition1  competition2
+cache (none)  256k                                 | indy    486/50  P5/133  P5/200  P6/266  320H  715/33   250  SS10/40   osf1    | 486/50        486/50
+      ---------------------------------------------|-------------------------------------------------------------------------------|----------------------------
+                                                   |                          161     91                    110                    |
+      ---------------------------------------------|-------------------------------------------------------------------------------|----------------------------
+    "
+
+    "Modified: / 28.7.1998 / 17:22:12 / cg"
+!
+
+blockEvaluation0
+    "evaluating a stupid simple block a million times.
+     Notice, that this is typically optimized away by the C-compiler."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[99] 
+    ].
+    Transcript show:'blockEvaluation0: '; show:(t printString);cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation0
+     ]
+
+      Indy    486/50   P5/90  P5/100  P5/133 88k   68k/25 SS10 | interpreted                                                                    88k   DS3100   SS10  Ultra ELC  ELC  mc68k alpha     alpha     | competition1  competition1 competition2
+cache (none)  256k                                        /40  | indy    486/50   P5/100 P5/133 P5/200 P6/266 P6/400 320H     715/33   735/100        (R2000)  gcc   250   gcc  cc    33   21064/233 21164/433 | 486/50        SS10/40      486/50
+      ---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|----------------------------
+min   75      227      56     50      38     83     293   101  | 2122     4442    1274    997                       38754      6210     2562    3568  10890    2293  339  3748 8777  6023   1023               | 550           253          879
+      73      225                                              | 1854     4083            964                       19339      5610 (2) 1880    3282  10109(2) 2054                          686               |
+              223 (i2)                                         | 1717     4052            932                       11836      4750 (3)  831    3268                                         584               |
+                                                               | 1611(2)* 3729(5)         796                       10327      3620 (4)         3232                                                           |
+                                                               | 1656 *                   773                       10121      3580             1470                                                           |
+                                                               | 1595(2)                  720                        7413                       1407                                                           |
+                                                               | 1375(2)                                             5348 (O3)                                                                                 |
+                                                               | 1321(5)                                             5165                                                                                      |
+      ---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------|----------------------------
+                                                               |           423             68                         813                        580            333   41   817        865    113       36      |
+                                                               |                           61                         940                        335            328        757  757   801    105       30      |
+                                                               |           272             53    35     22      15    919                                       260        701               103               |
+                                                               |                                 26                                                                                           90               |
+* cache effects in interpreter
+  varies by 5% due to simple code-move
+
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i2) without commonSymbols; jno-to-jmp opt
+(5) fix true/false
+    "
+
+    "Modified: / 9.6.1999 / 13:25:29 / cg"
+!
+
+blockEvaluation1
+    "evaluating a simple block a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |b|
+
+        b := [99].
+        1000000 timesRepeat:b
+    ].
+    Transcript show:'blockEvaluation1: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation1
+     ]
+
+      Indy    486/50    P5/90  P5/100  P5/133 88k  68k/25 SS10 | interpreted                                                            ULTRA SS10   ELC    ELC  mc68k mc88k   alpha   | competition1  competition1  competition2
+cache (none)  256k                                        /40  | indy    486/50  P5/133 P5/200 P6/266 P6/400 320H     715/33   735/100   250   gcc   gcc    cc    33         21064/233 | 486/50        SS10/40       486/50
+      ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------
+min   162     535       135    120     100    200   887   344  | 2463     5831   1497                       10433      6360     5660          4303  9786  19952  13828  3657   2759    | 1320          1062          12139
+      159     531                                              | 2314     5542   1590                        9500 (O3) 6130 (2) 4096          4156                                     |
+      157     529 (i2)                                         | 2294 *   5519                                         7060 (3) 2967                                                   |
+      118                                                      | 2262     4195                                         6090 (2)                                                        |
+                                                               | 1853     3851(5)                                      6580 (4)                                                        |
+                                                               | 1795                                                                                                                  |
+                                                               | 1704 **                                                                                                               |
+                                                               | 1733 **                                                                                                               |
+                                                               | 1683                                                                                                                  |
+                                                               | 1744(5)                                                                                                               |
+      ---------------------------------------------------------|-----------------------------------------------------------------------------------------------------------------------|----------------------------
+                                                               |           492    101     46     27    15     782                        71    327   427           955   177     73    |
+                                                               |           430     99     67 (WIN)     20     828                              320   396    396    640           68    |
+                                                               |           395                                823                                                  635           66    |
+(2) interpreter asm patch                                                                                                                     
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i2) without commonSymbols; jno-to-jmp opt
+(5) fix true/false
+    "
+
+    "Modified: / 9.6.1999 / 13:36:02 / cg"
+!
+
+blockEvaluation10:aBlock
+    "evaluating a value a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[ aBlock value ]
+    ].
+    Transcript show:'blockEvaluation10: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation10:nil
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                   ULTRA SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H       250   gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                53 (WIN)      25                637                                             |
+                                                              /                                              23                 44 (value inline in JIT - shortCut for nil)                                            /
+    "
+
+    "Modified: / 26.4.1999 / 23:50:27 / cg"
+!
+
+blockEvaluation2
+    "evaluating a simple block a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |b|
+
+        b := [99].
+        1000000 timesRepeat:[b value]
+    ].
+    Transcript show:'blockEvaluation2: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation2
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                   ULTRA SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H       250   gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+min   405     1105       303     204        733    2033  690  | 6767   14679    3674    2840                       22582            8487       16480     24618  5909   6430    | 1264          1039          9777
+      400     1102                                            | 6398   14286                                       18248 (O3)       8006       15570 (2)               5887    |
+      377     1100 (i2)                                       | 5133 * 13350 *                                                                 15420 (3)                       |
+              1084                                            | 5007 **12842                                                                   13350 (4)                       |
+                                                              | 5238   11185                                                                                                   |
+                                                              | 4517   10669(5)                                                                                                |
+                                                              | 4456                                                                                                           |
+                                                              | 4350                                                                                                           |
+                                                              | 4170(2)                                                                                                        |
+                                                              | 4053(5)                                                                                                        |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |         1107             227    146    77    55     3972       218  1616  2930            2539  2437    438    |
+                                                              |         1045             220    135(WIN)            4374       140  1607                  2359          417    |
+                                                              |          968             214                                        1590                                       |
+                                                              |                                                                     1555                                       |
+                                                              |                                                                     1636                                       |
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i2) without commonSymbols; jno-to-jmp opt
+(5) fix true/false
+    "
+
+    "Modified: / 26.4.1999 / 23:51:16 / cg"
+!
+
+blockEvaluation3:aBlock
+    "evaluating a simple (byteCode) block a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:aBlock
+    ].
+    Transcript show:'blockEvaluation3: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation3:[99]
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                 ULTRA   SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H     250     gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                              467             743                                               |
+                                                              /                                                              718                                               /
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation3b:aBlock
+    "evaluating a simple (compiled) block a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:aBlock
+    ].
+    Transcript show:'blockEvaluation3b: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation3b:(self testBlock)
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                 ULTRA   SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H     250     gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                               22              92                                               |
+                                                              /                                                               85                                               /
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation4:aBlock
+    "evaluating a (byteCode) block a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[aBlock value]
+    ].
+    Transcript show:'blockEvaluation4: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation4:[ 99 ]
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                 ULTRA   SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H     250     gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                              579             782                                               |
+                                                              /                                                              818 (value inline in JIT - additional overhead)   /
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation4b:aBlock
+    "evaluating a (compiled) block a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[aBlock value]
+    ].
+    Transcript show:'blockEvaluation4b: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation4b:(self testBlock)
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                 ULTRA   SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H     250     gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                               58             223                                               |
+                                                              /                                               56             145 (value inline in JIT)                         /
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation5:aBlock
+    "evaluating a value holder a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:aBlock
+    ].
+    Transcript show:'blockEvaluation5: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation5:(false asValue)
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                 ULTRA   SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H     250     gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                              45              106                                               |
+                                                              /                                                              110                                               /
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation6:aBlock
+    "evaluating a value holder a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[ aBlock value ]
+    ].
+    Transcript show:'blockEvaluation6: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation6:(false asValue)
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                 ULTRA   SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H     250     gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                              63               69                                               |
+                                                              /                                                              114 (value inline in JIT - additional overhead)                                              /
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation7:aBlock
+    "evaluating a value a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:aBlock
+    ].
+    Transcript show:'blockEvaluation7: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation7:false 
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                 ULTRA   SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H      250    gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                              44               106                                              |
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation8:aBlock
+    "evaluating a value a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[ aBlock value ]
+    ].
+    Transcript show:'blockEvaluation8: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation8:false
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                 ULTRA  SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H     250    gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                               |
+      --------------------------------------------------------|---------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                              60               68                                              |
+                                                              /                                              58              108 (value inline in JIT - additional overhead)                                             /
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+blockEvaluation9:aBlock
+    "evaluating a value a million times"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:aBlock
+    ].
+    Transcript show:'blockEvaluation9: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 blockEvaluation9:nil 
+     ]
+
+      Indy    486/50     P5/100  P5/133     88k   68k/25 SS10 | interpreted                                                  ULTRA  SS10   ELC           mc68k  mc88k  alpha   | competition1  competition1  competition2
+cache (none)  256k                                       /40  | indy    486/50  P5/100 P5/133 P5/200 P6/266 P6/400  320H      250    gcc        715/33    33         21064/233 | 486/50        SS10/40       486/50
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|---------------------
+                                                              |                                                                                                                |
+      --------------------------------------------------------|----------------------------------------------------------------------------------------------------------------|-----------------------
+                                                              |                                              52               510                                              |
+                                                              /                                              55               483                                              /
+    "
+
+    "Modified: / 18.11.1998 / 18:38:39 / cg"
+!
+
+countDown
+    "count down - notice, that index is a method var"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        index := 1000000.
+        [index > 0] whileTrue:[
+            index := index - 1
+        ].
+    ].
+    Transcript show:'countDown: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 countDown
+     ]
+
+      Indy    486/50  P5/100  P5/133   88k  68k/25 SS10 | interpreted                                                                           SS10/40  Ultra ELC        mc68k  alpha     alpha     | competition1  competition1 competition2
+cache (none)  256k                                 /40  | indy   indy  486/50  P5/100 P5/133  P5/200 P6/266 P6/400  320H     715/33    735/100    gcc     250  gcc   88k   33    21064/233 21164/433 | 486/50        SS10/40      486/50
+                                                        |        200                                                                                                                                 |
+      --------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------
+min   164     388     141     105      500    887  307  | 3296        8722     1818   1381                         11210      7630      2610     2841         5380  4626   8486   2035               | 2033          1494         4669
+      159     386                                       | 3012        7668            1328                          8568      6860 (2)  1537 (6)                    2080          1020               |
+      157                                               | 2670        5147            1299(#)                       6977 (O3) 5720 (3)  1472                        2016          1009               |
+                                                        | 1878                        1199                                    6760 (2)                              2003           874               |
+                                                        | 1858                        1184                                    4900 (4)                                                               |
+                                                        | 1780(2)                     1068                                                                                                           |
+                                                        | 1726(5)                                                                                                                                    |
+      --------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------|-----------------------------
+                                                        |        212   634             114                          1351                          537     40  1207   974   1387    137       53      |
+                                                        |              594             107                          1247                          312         1177   439   1006    127       49      |
+                                                        |              381              69                          1238                          260          795          977                      |
+                                                        |              316                      46                  1225                                                    963                      |
+                                                        |              302              68      45     22     17     
+(2) interpreter asm patch                                                                                          
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix true/false
+(#) ip rev.2
+(6) gcc
+   "
+
+    "Modified: / 9.6.1999 / 13:23:01 / cg"
+!
+
+countDown2
+    "count down - notice, that index is a block var"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |index|
+
+        index := 1000000.
+        [index > 0] whileTrue:[
+            index := index - 1
+        ].
+    ].
+    Transcript show:'countDown2: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 countDown2
+     ]
+
+      Indy    486/50  P5/100 P5/133   88k   68k/25 SS10 | interpreted                                                                         mc68k   alpha     alpha   | competition1  competition1  competition2
+cache (none)  256k                                 /40  | indy  indy 486/50 P5/133 P5/200 P6/400 320H     715/33     SS10/40  Ultra ELC  88k    33  21064/233 21164/433 | 486/50        SS10/40       486/50
+                                                        |       200                                                            250                                      |
+      ------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------
+min   108     307     80     60       383     462  179  | 3319        9161  1323                 13648     10230                        5846  10102   1255              | 440           228           4559
+      107     304                                       | 3050        8135                       10798      9230 (2)                    2654          1070              |
+      105                                               | 2724        6550                        9314 (O3) 7860 (3)                    2565                            |
+                                                        | 2330                                              6750 (4)                                                    |
+                                                        | 2306                                                                                                          |
+                                                        | 2278                                                                                                          |
+                                                        | 2171(5)                                                                                                       |
+      --------------------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------------------
+                                                        |        186   543    76     36     15    1222                 434      41  991  791   1306    114       38     |
+                                                        |              534    68     35           1070                 260          701  356    809    104              |
+                                                        |              274    54                                                                800     95              |
+                                                        |                     53  
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix true/false
+   "
+
+    "Modified: / 9.6.1999 / 13:23:44 / cg"
+!
+
+countDown3
+    "count down - using timesRepeat"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |index|
+
+        index := 1000000.
+        1000000 timesRepeat:[
+            index := index - 1
+        ].
+    ].
+    Transcript show:'countDown3: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 countDown3
+     ]
+
+      Indy    486/50    P5/100    68k/25  SS10 | interpreted                                                                         mc68k   alpha     alpha   | competition1  competition1  competition2
+cache (none)  256k                        /40  | indy   indy 486/50 P5/133 P5/200 P6/400 320H    715/33     SS10/40  Ultra ELC  88k   33   21064/233 21164/433 | 486/50        ss10/40       486/50
+                                               |        200                                                           250                                      |
+      -----------------------------------------|---------------------------------------------------------------------------------------------------------------|---------------------------
+min   246     513       121        1397   307  | 3156        6591   1259                14227     10420                        5678  10035     975             | 659           380           3075
+      242     572 (i1)                         | 2874                                   14055      8120 (3)                    2497                            |
+      239     549 (i1)                         | 2633                                   11130      6520 (4)                    2358                            |
+                                               | 2477                                    9055 (O3)                                                             |
+                                               | 2276                                                                                                          |
+                                               | 2170(5)                                                                                                       |
+      -----------------------------------------|---------------------------------------------------------------------------------------------------------------|-------------
+                                               |        242   648     98    55     27    1297                 553     47  1239  946   1269     165       47    |
+                                               |              624     84           23                         441               525   1122     150             |
+                                               |              604     91                                                                       140             |
+                                               |              505     84                                                                                       |
+                                               |                      83
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(5) fix true/false
+    "
+
+    "Modified: / 9.6.1999 / 13:24:54 / cg"
+!
+
+emptyLoop 
+    "an empty loop (fully inlined)"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+        ].
+    ].
+    Transcript show:'emptyLoop: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 emptyLoop
+     ]
+
+      Indy    486/50  P5/100 P5/133    88k  68k/25 SS10 | interpreted                                                        SS10/40            mc68k  alpha    | competition1  competition1  competition2
+cache (none)  256k                                 /40  | indy   indy 486/50  P5/133 P5/133 P5/200 P6/400 320H      715/33     gcc    ELC  88k   33   21064/233 | 486/50        ss10/40       486/50
+                                                        |        200                                                                                            |
+      ----------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------
+min    76      228    50     37        83     336  101  | 1859                1273    956                 11818      6240      2058       3210   6065   674     |               253
+       73      225                                      | 1716        4430     720    932                 10320      5610 (2)             1468          582     |
+               224                                      | 1613        4083            796                 10125      4780 (3)             1405                  |
+                                                        | 1615        4052            774                  7392      4950 (2)             1389                  |
+                                                        | 1594        3727(5)                              5337 (O3) 3620 (4)                                   |
+                                                        | 1375                                                                                                  |
+                                                        | 1321(5)                                                                                               |
+      --------------------------------------------------|-------------------------------------------------------------------------------------------------------|----------------------------
+                                                        |         171  423      68            35     15     813                 332   757  580    867   114     |
+                                                        |                       61                          936                 328   702  336    802   105     |
+                                                        |                       68                          927                 260                     100     |
+                                                        |              274      54                                                                       90     |
+                                                        |              261      53                        
+(2) interpreter asm patch                                                                                                                                  
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix true/false
+    "
+
+    "Modified: / 4.6.1998 / 00:44:11 / cg"
+!
+
+instAccess1:n
+    "check simple send & instvar access time.
+     Here, a timesRepeat loop with variable count is used."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := 1 -> 2.
+        n timesRepeat:[a key].
+    ].
+    Transcript show:'inst1(n): '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 instAccess1:1000000
+     ]
+
+      Indy    486/50  P5/100   SS10   | interpreted                                                                  Ultra       mc68k  alpha    | competition1  competition1  competition2(*)
+cache (none)  256k             /40    | indy    486/50 P5/133  P5/200 P6/266 P6/400 320H  715/33     88k     SS10/40  250   ELC   33   21064/233 | 486/50        ss10/40       486/50
+      --------------------------------|----------------------------------------------------------------------------------------------------------|------------------------------
+min   818     2199    353      1243   | 5684    17871   3673                       63440   23950    30203                        36751   1240    | 880           604           4119
+      752     2101    509 ?    1061   | 6000 ** 16202   3753(#)                    66878   21620(4) 22916                                1092    |
+      726     2096                    | 5984    15427   7590                       40579            20635(#)                                     |
+                                      | 5640    15155   6845                       38403            19600                                        |
+                                      | 5436            6569                       30894             3835                                        |
+                                      |                 3686                                         3723                                        |
+      --------------------------------|----------------------------------------------------------------------------------------------------------|------------------------------
+                                      |          2785    470                  46    4897             5551     1700     68  4301   3215    246    |
+                                      |          2744    394                        2399             1773     1394         3008   2784    232    |
+                                      |          2624    388                                                  1388         4201?  1830    223    |
+                                      |          2210    381                                                   729         1561                  |
+                                      |          1010    406                                                   626
+                                      |                  383                       
+                                      |                  183     122               
+                                      |                  166     105    70         
+
+     (*) use 'Association key:1 value:2', since Object does not implement '->'
+(4) both (2) and (3)
+(#) ip rev.2
+    "
+
+    "Modified: / 8.9.1998 / 18:36:32 / cg"
+!
+
+instAccess1b:n
+    "check simple send & instvar access time.
+     Here, a timesRepeat loop with variable count is used."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := 1 @ 2.
+        n timesRepeat:[a x].
+    ].
+    Transcript show:'inst1b(n): '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 instAccess1b:1000000
+     ]
+
+      Indy    486/50  P5/100   SS10   | interpreted                                                                 mc68k  alpha    | competition1  competition1  competition2(*)
+cache (none)  256k             /40    | indy    486/50 P5/133  P5/200 P6/400 320H  715/33     88k     SS10/40  ELC   33   21064/233 | 486/50        ss10/40       486/50
+      --------------------------------|---------------------------------------------------------------------------------------------|------------------------------
+      --------------------------------|---------------------------------------------------------------------------------------------|------------------------------
+                                      |          1010    166     105   46    2375             1773      626   1561   1830    223    |
+
+    "
+
+    "Modified: / 4.6.1998 / 10:19:42 / cg"
+!
+
+instAccess2
+    "check simple send & instvar access time.
+     This tests the speed of a ^instVar method.
+     Here, a timesRepeat loop with constant count is used."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := 1 -> 2.
+        1000000 timesRepeat:[a key].
+    ].
+    Transcript show:'inst2(n): '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 instAccess2
+     ]
+
+      Indy    486/50   P5/100  SS10  ELC  ELC   | interpreted                                                                                         | competition1 competition1 competition2
+cache (none)  256k             /40  (cc)  gcc   | indy   486/50  P5/133 P5/200 P6/400 320H  SS10/40   ELC    ELC   715/33     88k     mc68k  alpha    | 486/50       ss10/40      486/50
+                               gcc              |                                           gcc       gcc     cc                       33   21064/233 |
+      ------------------------------------------|-----------------------------------------------------------------------------------------------------|--------------------------
+min   300     841      203     588   1215 1112  | 2599   7547    1711                38827   4134    17879  23459  11200     10418    11181   2879    | 880          578          3735
+      297     837              563              | 2830   7153    1637                35647   3835     7589          8890 (3)  8344            1241    |
+      294     956 (i1)                          | 2614   7073(5) 1630(#)             22201            7194          7130 (4)  6327(#)                 |
+              834 (i3)                          | 2643           1440                18391                                    6296                    |
+                                                | 2559           1431                16559                                    5884                    |
+                                                | 2336           1427                16443                                    3726                    |
+                                                | 2313(5)        1406                12973                                                            |
+      ------------------------------------------|-----------------------------------------------------------------------------------------------------|--------------------------
+                                                | 1086   1035     212    120     46   2190    804     1714                    3899     1880    247    |
+                                                |                 204    105                  780     1572   1572             3889     1795    230    |
+                                                |                 197                         729     1555                    1795             225    |
+                                                |                 189                         626                                                     |
+                                                |                 198                                                                                 |
+                                                |                 183                                                                                 |
+                                                |                 166                
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev.2
+    "
+
+    "Modified: / 4.5.1998 / 20:13:41 / cg"
+!
+
+instAccess3
+    "check simple send & instvar access time.
+     This tests the speed of a ^instVar method.
+     Here, an open coded loop is used."
+
+    |t count|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := 1->2.
+        count := 1000000.
+        [count > 0] whileTrue:[
+            a key.
+            count := count - 1.
+        ].
+    ].
+    Transcript show:'inst3(n): '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 instAccess3
+     ]
+
+      Indy    486/50      SS10  ELC   ELC     | interpreted                                  SS10  ELC  ELC  mc68k | competition1 competition2
+cache (none)  256k        /40   (cc)  gcc     | indy    486/50  P5/133  P5/200 P6/400  320H  /40   gcc  cc         | 486/50       486/50
+      ----------------------------------------|--------------------------------------------------------------------|---------------------------
+min   385     1020        797   1681  1641    | 3556    11011    2563                 55459                        |               
+      380     1099 (i1)                       | 2860     8194    2011(#)              23752                        |
+      377     1018 (i3)                       | 2844             1835                 17626                        |
+                                              | 2731             1878                 17391                        |
+                                              |                  1712                 14058                        |
+      ----------------------------------------|--------------------------------------------------------------------|---------------------------
+                                              |          1437     250     132    55    2780   996  1649 2014  2008 |
+                                              |          1254     245     130                 780                  |
+                                              |                   236     115                 679                  |
+                                              |          1033     196                         626                  |
+                                              |                   181
+(i1) without commonSymbols
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(#) ip rev.2
+    "
+
+    "Modified: / 13.3.1998 / 18:02:40 / cg"
+!
+
+perform1
+    "measure send vs. perform vs. performWithArguments speed."
+
+    |t o sel|
+
+    sel := #isSequenceable.
+    o := 1.2345.
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[ o isSequenceable] 
+    ].
+    Transcript show:'direct send: '; show:(t printString);cr; endEntry.
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[ o perform:sel] 
+    ].
+    Transcript show:'perform: '; show:(t printString);cr; endEntry.
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[ o perform:sel withArguments:#()] 
+    ].
+    Transcript show:'performWithArgs: '; show:(t printString);cr; endEntry.
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 perform1
+     ]
+    "
+!
+
+send2
+    "lots of dummy message sends. This tests the speed of a ^self method.
+     Here, a timesRepeat loop with constant count is used."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            self noopSelf
+        ].
+    ].
+    Transcript show:'send2: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 send2
+     ]
+
+      Indy    486/50   P5/90  P5/100  P5/133  68k/25  SS10 | interpreted                                                            ELC   ELC   SS10/40 ULTRA mc68k  alpha    | competition1  competition2
+cache (none)  256k                                    /40  | indy   486/50  P5/100 P5/133 P5/200 P6/400 320H    715/33     88k      gcc   cc     gcc     250   33   21064/233 | 486/50        486/50
+      -----------------------------------------------------|------------------------------------------------------------------------------------------------------------------|----------------------------
+min   301     943      247    222     189      1790   514  | 2962   7747    1941    1531                30095     10420    9529     6218  13679  3466         10302   1964    | 769           4999
+      283     938             242                     588  | 2523   6774            1455                28891      8370(3) 9010                                       1477    |
+      282     957 (i1)                                     | 2372   6749            1440                24924      8820(2) 7674                                               |
+              935 (i3)                                     | 2305   6281            1410                15145      6910(4) 5888(#)                                            |
+                                                           | 2312   6000(6)         1260                10551              5861                                               |
+                                                           | 2286                   1192                 8483 (O3)         5446                                               |
+                                                           | 2264                                                          2375                                               |
+                                                           | 2019                                                                                                             |
+                                                           | 1982(5)                                                                                                          |
+      -----------------------------------------------------|------------------------------------------------------------------------------------------------------------------|----------------------------
+                                                           |        1126             227   116     47    2352              1584     1782   1663   879    73    1980    315    |
+                                                           |        1045             219           46                       795     1661          854          1955    303    |
+                                                           |                         211                                                          808                  275    |
+                                                           |                         204                                                          732                  271    |
+                                                           |                         213                                                          677                         |
+                                                           |        1031             199                                                          675                         |
+                                                           |         924             181               
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(6) fix true/false; USE_SP
+(#) ip rev.2
+    "
+
+    "Modified: / 4.5.1998 / 20:14:09 / cg"
+!
+
+send:n
+    "lots of dummy message sends. This tests the speed of a ^self method.
+     Here, a timesRepeat loop with variable count is used."
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        n timesRepeat:[
+            self noopSelf
+        ].
+    ].
+    Transcript show:'send(n): '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 send:1000000
+     ]
+
+      Indy    486/50  P5/100   SS10   | interpreted                                      ULTRA  SS10       mc68k  alpha    | competition1  competition2
+cache (none)  256k             /40    | indy   indy 486/50 P5/133 P5/200 320H  715/33     250   /40   ELC   33   21064/233 | 486/50        486/50
+                                      |        200                                                                         |
+      --------------------------------|------------------------------------------------------------------------------------|--------------------
+min   828     2127    353      1290   | 5856        18067               31517   22230                              1974    | 823           4943
+      797     2070    539 ?           | 5189        15296                       22010 (3)                          1478    |
+      748     2052    509 ?           | 5462        14434                       22390 (4)                                  |
+      745     2048                    | 5547        14386                                                                  |
+      724                             | 5484        14162                                                                  |
+                                      | 5090                                                                               |
+                                      | 4940                                                                               |
+                                      | 4872                                                                               |
+                                      | 4844                                                                               |
+      --------------------------------|------------------------------------------------------------------------------------|--------------
+                                      |        339   2727    485   116   9735              91   1495  3115  2819    313    |
+                                      |        318   2665    426                                 808  1658  1856    303    |
+                                      |              2082    404                                 732                275    |
+                                      |              1029    421                                 677                270    |
+                                      |               924    395                                                           |
+                                      |                      200       
+                                      |                      181       
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+    "
+
+    "Modified: / 4.5.1998 / 20:14:22 / cg"
+!
+
+stringAt
+    "perform String>>at: a million times"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := 'a'.
+        1000000 timesRepeat:[
+            a at:1
+        ].
+    ].
+    Transcript show:'stringAt: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 stringAt
+     ]
+
+      Indy    486/50    P5/100  P5/133 88k  68k/25 | interpreted                                            Ultra alpha/233 | competition1  competition2
+cache (none)  256k                                 | indy    486/50  P5/133 P6/400 320H  715/33    SS10/40   250    osf1    | 486/50        486/50
+      ---------------------------------------------|------------------------------------------------------------------------|----------------------------
+       167    508       111       84               | 3081    8856     1879               11740                              |
+              488 (i3)                             | 3021    8168     1670                7260 (4)                          |
+                                                   | 2920             1611                7220                              |
+                                                   | 2703             1591                                                  |
+                                                   | 2646(5)                                                                |
+      ---------------------------------------------|------------------------------------------------------------------------|----------------------------
+                                                   |         2200      408   148   3613              1276     158     759   |
+                                                   |         2168      400   145                      758                   |
+                                                   |                   393                                                  |
+                                                   |                   389                                                  |
+                                                   |                   379
+(4) both (2) and (3)
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+    "
+
+    "Modified: / 4.6.1998 / 10:21:16 / cg"
+!
+
+stringAtPut
+    "perform String>>at:put: a million times"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := String with:$a.
+        1000000 timesRepeat:[
+            a at:1 put:$b 
+        ].
+    ].
+    Transcript show:'stringAtPut: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 stringAtPut
+     ]
+
+      Indy    486/50  P5/100 P5/133   88k  68k/25 | interpreted                                         Ultra alpha/233 | competition1  competition2
+cache (none)  256k                                | indy    486/50 P5/133 P6/400 320H  715/33  ss10/40   250    osf1    | 486/50        486/50
+      --------------------------------------------|---------------------------------------------------------------------|----------------------------
+       176             142     106                | 6926    11943   2537         11730                                  |
+                                                  | 6868            2504                                                |
+                                                  | 4094            2376                                                |
+                                                  | 3910            2245                                                |
+      --------------------------------------------|---------------------------------------------------------------------|----------------------------
+                                                  |          2424    498    146   3971           1612    182      639   |
+                                                  |                  483          4248                                  |
+                                                  |                  481                                                |
+                                                  |                  461                                                |
+    "
+
+    "Modified: / 4.6.1998 / 10:22:41 / cg"
+!
+
+stringBasicSize
+    "perform String>>basicSize a million times"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := 'abcdefghijkl'.
+        1000000 timesRepeat:[
+            a basicSize
+        ].
+    ].
+    Transcript show:'stringBasicSize '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 stringBasicSize
+     ]
+
+      Indy    486/50    P5/100  P5/133 88k  68k/25 | interpreted                                                  ULTRA          alpha/233 | competition1  competition2
+cache (none)  256k                                 | indy    486/50  P5/133  P5/200  P6/266  P6/400 320H  715/33   250   SS10/40   osf1    | 486/50        486/50
+      ---------------------------------------------|---------------------------------------------------------------------------------------|----------------------------
+                                                   |                                           62                  108                     |
+      ---------------------------------------------|---------------------------------------------------------------------------------------|----------------------------
+    "
+
+    "Modified: / 28.7.1998 / 17:22:24 / cg"
+!
+
+stringSize
+    "perform String>>size a million times"
+
+    |t index|
+
+    t := Time millisecondsToRun:[
+        |a|
+
+        a := 'abcdefghijkl'.
+        1000000 timesRepeat:[
+            a size
+        ].
+    ].
+    Transcript show:'stringSize '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         STXBenchmarks1 stringSize
+     ]
+
+      Indy    486/50    P5/100  P5/133 88k  68k/25 | interpreted                                                            Ultra alpha/233 | competition1  competition2
+cache (none)  256k                                 | indy    486/50  P5/133  P5/200  P6/266  P6/400 320H  715/33    SS10/40  250    osf1    | 486/50        486/50
+      ---------------------------------------------|----------------------------------------------------------------------------------------|----------------------------
+                                                   |                          150     90      63                             106            |
+      ---------------------------------------------|----------------------------------------------------------------------------------------|----------------------------
+    "
+
+    "Modified: / 28.7.1998 / 17:22:24 / cg"
+!
+
+testBlock
+    ^ [ 99 ]
+! !
+
+!BenchmarkSTX1 class methodsFor:'misc other benchmarks'!
+
+benchArrayDo
+    "loop over an item in an array 10000 times"
+
+    |t|
+
+    t := Time millisecondsToRun: [
+        |array|
+
+        array := (1 to:1000) asArray.
+        10000 timesRepeat:[
+            array do: [:each | 1].
+        ]
+    ].
+
+    Transcript show:'b''do: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchArrayDo
+     ]
+
+      Indy    486/50   P5/133     SS10 | interpreted                                                          Ultra  SS10/40   ELC
+cache (none)  256k                     | indy   486/50 P5/133 P5/200 P6/266 P6/400 320H  715/33   DS3100  88k  250     gcc     gcc
+                                       |                      WIN95                                                      
+      ---------------------------------|--------------------------------------------------------------------------------------------
+                       1382       5251 |        5971   1075    943   394    348  8650                          834     4996
+                                       |                                    344                                        4092
+      ---------------------------------|--------------------------------------------------------------------------------------------
+    "
+
+    "Modified: / 27.4.1999 / 09:25:17 / cg"
+!
+
+benchArrayFromToDo
+    "loop over an item in an array 10000 times"
+
+    |t|
+
+    t := Time millisecondsToRun: [
+        |array|
+
+        array := (1 to:1000) asArray.
+        10000 timesRepeat:[
+            array from:1 to:1000 do: [:each | 2].
+        ]
+    ].
+
+    Transcript show:'b''from:to:do: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchArrayFromToDo
+     ]
+
+      Indy    486/50   P5/133     SS10 | interpreted                                                           Ultra  SS10/40   ELC
+cache (none)  256k                     | indy   486/50 P5/133 P5/200 P6/266 P6/400 320H  715/33   DS3100  88k   250     gcc     gcc
+                                       |                      WIN95                                                      
+      ---------------------------------|--------------------------------------------------------------------------------------------
+                        1481           |        6178    1102   880    589    291  9301                          739    5340
+                                       |                                     299                                       4150
+      ---------------------------------|--------------------------------------------------------------------------------------------
+    "
+
+    "Modified: / 27.4.1999 / 09:21:53 / cg"
+!
+
+benchArrayIncludes
+    "search an item in an array 100000 times"
+
+    |t|
+
+    t := Time millisecondsToRun: [
+        |array|
+
+        array := (1 to:100) asArray.
+        1 to: 100000 do: [:each | array includes:50].
+    ].
+
+    Transcript show:'b''includes: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchArrayIncludes
+     ]
+
+      Indy    486/50   P5/133     SS10 | interpreted                                                              Ultra  SS10/40   ELC
+cache (none)  256k                     | indy   486/50 P5/133  P5/200 P6/266 P6/400 320H  715/33   DS3100  88k     250     gcc     gcc
+                                       |                       WIN95                                                       
+      ---------------------------------|----------------------------------------------------------------------------------------------
+      304     908       152       476  |  870    2726    722                         5687   4210     7601   4616          1622     4008
+              922 (i1)                 | 1001(5) 2575    633(#)                      5130   4150            3505
+                                       |                1230                                3630 (4)        3228(#)
+                                       |                                                    3510            3104
+      ---------------------------------|-----------------------------------------------------------------------------------------------
+                                       |         1135    251     148    111    74    1714                   1606    92     668     1651
+                                       |          835    242                         1307                   1601           659     1595
+                                       |          818    175                                                               631     1414
+                                       |                                                                                   566
+
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(5) fix true/false
+(#) ip rev.2
+    "
+
+    "Modified: / 27.4.1999 / 09:17:33 / cg"
+!
+
+benchArrayIndexOf
+    "search an item in an array 100000 times"
+
+    |t|
+
+    t := Time millisecondsToRun: [
+        |array|
+
+        array := (1 to:100) asArray.
+        1 to: 100000 do: [:each | array identityIndexOf:50].
+    ].
+
+    Transcript show:'b''indexOf: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchArrayIndexOf
+     ]
+
+      Indy    486/50   P5/133     | interpreted                                                        Ultra  SS10/40  ELC
+cache (none)  256k                | indy   486/50 P5/133  P5/200 P6/266 P6/400 320H  715/33     88k     250    gcc     gcc
+                                  |                       WIN95                                                      
+      ----------------------------|----------------------------------------------------------------------------------------
+      411      833       240      | 1243   3325    639                         12087   4400     4798                   4220
+               824                |        2940    645(#)                      10308   4340 (4) 3814
+               844 (i1)           | 1221   2515   1149                          6794   3410     3540(#)
+               830                |  984   2500                                 6397            3415
+                                  |                                             6142
+      ----------------------------|----------------------------------------------------------------------------------------
+                                  |        1113    267     192    127     85    1751            2206     102    763    2019
+                                  |        1030    247                          1574                            710    1948
+                                  |                                                                                    1924
+                                  |                                   
+(4) both (2) and (3)                                                                       
+(i1) without commonSymbols
+(#) ip rev.2
+    "
+
+    "Modified: / 27.4.1999 / 09:19:21 / cg"
+!
+
+benchArrayInject
+    "inject into an array 10000 times"
+
+    |t|
+
+    t := Time millisecondsToRun: [
+        |array|
+
+        array := (1 to:1000) asArray.
+        10000 timesRepeat:[
+            array inject:0 into:[:sum :el | sum + el].
+        ]
+    ].
+
+    Transcript show:'b''inject: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchArrayInject
+     ]
+
+      Indy    486/50   P5/133     SS10 | interpreted                                                           Ultra SS10/40   ELC
+cache (none)  256k                     | indy   486/50 P5/133 P5/200 P6/266 P6/400 320H  715/33   DS3100  88k   250     gcc     gcc
+                                       |                      WIN95                                                      
+      ---------------------------------|--------------------------------------------------------------------------------------------
+                                       |                                                                        3921 
+      ---------------------------------|--------------------------------------------------------------------------------------------
+    "
+
+!
+
+benchArrayReplace
+    "replace part of an array 100000 times"
+
+    |t|
+
+    t := Time millisecondsToRun: [
+        |array endIndex|
+
+        array := (1 to:100) asArray.
+        endIndex := 99.
+        1 to: 100000 do: [:each | array replaceFrom:1 to:endIndex with:array startingAt:2].
+    ].
+
+    Transcript show:'b''replace: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 benchArrayReplace
+     ]
+
+      Indy    486/50   P5/133     SS10 | interpreted                                                            SS10/40   ELC
+cache (none)  256k                     | indy   486/50 P5/133  P5/200 P6/266 P6/400 20H  715/33   DS3100  88k    gcc      gcc
+                                       |                       WIN95                                                      
+      ---------------------------------|--------------------------------------------------------------------------------------
+      ---------------------------------|--------------------------------------------------------------------------------------
+                                       |         1438   190     393    136     93   2271                  2769    904    3431
+                                       |         1361   170                    91   1631                          879    3195
+                                       |                                                            803
+    "
+
+    "Modified: / 27.4.1999 / 09:20:31 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'self micro benchmarks'!
+
+atAllPut
+    "fill a huge array (100k element) with some value
+     (in a loop here; actually Array atAllPut: is much faster - see atAllPut2)"
+
+    |vec t|
+
+    vec := Array new:100000.
+    t := Time millisecondsToRun:[
+        1 to:100000 do:[:i |
+            vec at:i put:7
+        ]
+    ].
+    ^ t
+
+    "
+     Transcript showCR:(STXBenchmarks1 atAllPut)
+    "
+!
+
+atAllPut2
+    "fill a huge array (100k element) with some value
+     - just to show, that it makes sense to use existing methods 
+     instead of doing things manually again and again."
+
+    |vec t|
+
+    vec := Array new:100000.
+    t := Time millisecondsToRun:[
+        vec atAllPut:7
+    ].
+    ^ t
+
+    "
+     Transcript showCR:(STXBenchmarks1 atAllPut2)
+    "
+!
+
+fastSumTo
+    "sum up the numbers from 1 to 10000 a hundred times.
+     Open coded loop here"
+
+    |val i|
+
+    100 timesRepeat:[
+        val := 0.
+        i := 1.
+        [i <= 10000] whileTrue:[
+            val := val + i.
+            i := i + 1
+        ].
+    ].
+
+    "
+     Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 fastSumTo])
+    "
+!
+
+loopTimes
+    "runs the self low-level loop benchmarks"
+
+    Transcript show:'fastSumTo:  '; show:(Time millisecondsToRun:[STXBenchmarks1 fastSumTo]); cr; endEntry.
+    Transcript show:'nestedLoop: '; show:(Time millisecondsToRun:[STXBenchmarks1 nestedLoop]); cr; endEntry.
+    Transcript show:'atAllput:   '; show:(STXBenchmarks1 atAllPut); cr; endEntry.
+    Transcript show:'sumAll:     '; show:(STXBenchmarks1 sumAll); cr; endEntry.
+    Transcript show:'sumTo:      '; show:(Time millisecondsToRun:[STXBenchmarks1 sumTo]); cr; endEntry.
+
+    "
+     Benchmarks::STXBenchmarks1 loopTimes
+                                                                         interpreted
+                 Indy      DS3100   486/50    P5/90 P5/100 SS10  ELC   | IRIX  IRIX  Linux  Linux  Linux   Linux  Linux  Linux  AIX   HPUX      HPUX    DEC     RealIX   SS10/40 ULTRA ELC    mc68k  alpha     alpha     | competition1 competition1
+                (no cache) ?        256k                   /40  (cc)   | indy  indy  486/50 P5/100 P5/133  P5/200 P6/266 P6/400 320H  715/33    735/100 DS3100  88k       gcc     250  gcc     33    21064/233 21164/433 | 486/50       SS10/40
+                                                                       | 100   200                                                                                                                                       |
+     --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------
+     fastSumTo:   417       2355    645       145   152?   449  1317   | 3378  2770   9739  3425   2652                        13072  14170      7357   26168  15869      6188         15170  18901   4598               | 769          406
+                                    584 (i2)                    1291   |                           2581                               12680 (2)  5154   25640  12925      5620         12148          2444               |   
+                                                                       |                           2504(#)                            10940 (3)  2693           9387(#)                12022          1986               | 
+                                                                       |                           2547(%)                             9300 (4)                 9331                   10954                             | 
+                                                                       |                           2337                                                         8846                                                     | 
+                                                                       |                           2247                                                         3990                                                     |
+                                                                       |                           2157                                                                                                                  |
+                                                                       +-------------------------------------------------------------------------------------------------------------------------------------------------+
+                                                                       |        491   2241          386      66     42     22   4116                            2925      1445     75   3946   4118    949       70      | 
+                                                                       |        464   1811          306      76?           28   2222                            1477      1397          1997   3490    334 ?             |
+                                                                       |        449    937          147      80 (W95)                                                     1134          1978           917 ?             |
+                                                                       |        427    857          138                                                                   1197?         1673           187               |
+                                                                       |               842          131                                                                    906          1653           167               |
+                                                                       |               818          123                                                                    602                                           |
+                                                                       |               619          114                                                                    510                                           |
+                                                                       |               573          101                                                                    461                                           |
+                                                                       |               544                                                                                 458                                           |
+                                                                                                                                                                                                                         |
+                                                                                                                               
+     nestedLoop:  243       1515    457        97    82    340   927   | 6096  3036  19469  4318   3614                        20950  24420      7079   67390  30579      5532         15903  17243   2836               | 659          383
+                                    438 (i2)               326   913   | 6350        16927         3505                        15230  23580 (2)  4619   52446  23232      5373         13070          2742               | 
+                                    397 (i3)                           | 5705        16035         3548(#)                            23330 (3)  2423   50113  20801(#)                12773          1670               | 
+                                                                       | 5332        15170         2041(%)                            20980 (4)                 9566(%)                14306          1338               | 
+                                                                       |                           1979                                                         9265                                                     | 
+                                                                       |                           3229                                                         3471                                                     | 
+                                                                       |                           3372                                                                                                                  |
+                                                                       |                           2264                                                                                                                  |
+                                                                       +-------------------------------------------------------------------------------------------------------------------------------------------------+
+                                                                       |        334   4496          529      73     53     43   1638                            1129       713     83   1492   1768    198       80      | 
+                                                                       |        308   2842          461      63 (W95)      36   1579                             597       705          1318   1536    190               |
+                                                                       |        283   2735          432                                                                    677          1231           184               |
+                                                                       |               992          260                                                                    603          2539?          179               |
+                                                                       |               958          240                                                                    590                                           |
+                                                                       |               992          249                                                                    562                                           |
+                                                                       |               907          233                                                                                                                  |
+                                                                       |               630          104                                                                                                                  |
+                                                                       |                            121                                                                                                                  |
+                                                                       |                            110                                                                                                                  |
+                                                                                                                                                                                                                         |
+                                                                                                                        
+     atAllPut:     26        164     54        17    15     48   117   |  625   355   1827   506    405                         3163   2570      1687    7410   3360      1248          3692   4791    562               | 164          152
+                                     53 (i2)                     115   |  771         1794          429(#)                             2490 (2)   648    6066   2625      1216          3413   2117    509               | 
+                                                                       |  647         1741          509(%)                             2430 (3)   330    6128   2324(#)                 3429           269               | 
+                                                                       |  590         1693          500                                2450 (4)                 2316                    3029                             | 
+                                                                       |  990?                      387                                2320                      506                                                     | 
+                                                                       |                            383                                                                                                                  | 
+                                                                       |                            466?                                                                                                                 |
+                                                                       +-------------------------------------------------------------------------------------------------------------------------------------------------+
+                                                                       |         98    485           69      21      9      6    674                            1035       265     15    784    452     37       13      | 
+                                                                       |         74    465           66       9 (W95)            254                             106       260           723            31               |
+                                                                       |         71    396           72                                                                    229           478            29               |
+                                                                       |               293           64                                                                    177           635?                            |
+                                                                       |               274           49                                                                    153           547                             |
+                                                                       |               128           27                                                                    108                                           |
+                                                                       |                                                                                                    94                                           |
+                                                                                                                               
+     sumAll:       55       1650    279       106    76    103   260   |  710   403   2244   605    487                         3672   2870      1891    7985   3708      1395          4093   2453    739               | 275          223
+                                                                 257   |  851         2012          497(#)                             2740 (2)   725    6457   2866      1350          3800           705               | 
+                                                                       |  739         1992          556(%)                             2670 (3)   359    6222   2520(#)                 3566           337               | 
+                                                                       |  668                       547                                2520 (4)                 2525                    3485           318               | 
+                                                                       |                            465                                                          537                                                     | 
+                                                                       |                            438                                                                                                                  | 
+                                                                       |                            536?                                                                                                                 |
+                                                                       +-------------------------------------------------------------------------------------------------------------------------------------------------+
+                                                                       |        132    633          116                                                                                                                  | 
+                                                                       |        100    545           84      21     13      9   1055                            1254       397     20   1060    729    160       16      |
+                                                                       |         96    455           87      12 (W95)            363                             212       393           876    672     89 ?             |
+                                                                       |               352           75                                                                    363           629           149 ?             |
+                                                                       |               320           59                                                                    313           778?           56               |
+                                                                       |               198           54                                                                    285           517                             |
+                                                                       |               161           33                                                                    173                                           |
+                                                                       |                                                                                                   131                                           |
+                                                                       |                                                                                                   116                                           |
+                                                                                                                               
+     sumTo:       242       1511    556       137   112    390   986   | 5884  3122  17293  4938   4322                        30993  23140      8201   67308  31448      6968         19618  19801   3825               | 769          463
+                                    477 (i2)                     974   | 6388        17884         4017                        16784  22260 (2)  5875   52532  23888      6570         14802          1993               | 
+                                    455 (i3)                           | 6123        16943         4112(#)                            22520 (3)  3002   50539  20939(#)                14455          1698               | 
+                                                                       | 5572        16653         3911                               22660 (4)                11530(%)                16306                             | 
+                                                                       | 5462                      2752(%)                            21860                    11294                                                     | 
+                                                                       |                           2471                                                         4409                                                     | 
+                                                                       |                           3764                                                                                                                  |
+                                                                       |                           3564                                                                                                                  |
+                                                                       |                           2634                                                                                                                  |
+                                                                       +-------------------------------------------------------------------------------------------------------------------------------------------------+
+                                                                       |        557   4438          759      86     61     38   7486                            5928      2625    123   7794   3654   1047       91      | 
+                                                                       |        484   3216          715      77 (W95)           2477                            1528      2605          5879   3541    365 ?             |
+                                                                       |        450   3190          466                         2316                                      2328          4043           358 ?             |
+                                                                       |              2591          436                                                                   2052          5531?         1021 ?             |
+                                                                       |              2273          461                                                                   1885          3106           214               |
+                                                                       |               865          384                                                                    852                         211               |
+                                                                       |               724          357                                                                    633                                           |
+                                                                       |                            153                                                                    557                                           |
+                                                                       |                            138                                                                                                                  |
+                                                                       |                            128                                                                                                                  |
+                                                                                                                                                                                                                         |
+     sumTo2:                        105                           94   | --- not possible ---                                                                                                                            | 
+                                                                                                                                                                                                                         | 
+                                                                                                                                                                                                                         | 
+(2) interpreter asm patch                                                                                                                                                              
+(3) interpreter with +O3 +Obb2000                                                                                              
+(4) both (2) and (3)                                                                                                           
+(i2) no commonSymbols; jno-to-jmp elimination                                                                                  
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt                                                                              
+(#) ip rev.2                                                                                                                   
+(%) bp instead of bp[pc]                                                                                                       
+    "
+
+    "Modified: / 9.6.1999 / 13:29:30 / cg"
+!
+
+nestedLoop
+    "a doubly nested loop"
+
+    |i|
+
+    100 timesRepeat:[
+
+        i := 0.
+        1 to:100 do:[:l1 |
+            1 to:100 do:[:l2 |
+                i := i + 1
+            ]
+        ]
+    ]
+    "
+     Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 nestedLoop])
+    "
+
+    "Modified: 26.6.1997 / 13:26:15 / cg"
+!
+
+sumAll 
+    "sum up the numbers in a big (100k element) array"
+
+    |vec t s|
+
+    vec := Array new:100000.
+    1 to:100000 do:[:i |
+        vec at:i put:7
+    ].
+    s := 0.
+    t := Time millisecondsToRun:[
+        1 to:100000 do:[:i |
+            s := s + (vec at:i)
+        ]
+    ].
+    ^ t
+
+    "
+     Transcript showCR:(STXBenchmarks1 sumAll)
+    "
+!
+
+sumAll2 
+    "sum up the numbers in a big (100k element) array.
+     Here, a standard enumeration construct is used"
+
+    |vec t s|
+
+    vec := Array new:100000.
+    vec atAllPut:7.
+    t := Time millisecondsToRun:[
+        s := vec inject:0 into:[:sumSoFar :element | sumSoFar + element].
+    ].
+    ^ t
+
+    "
+     Transcript showCR:(STXBenchmarks1 sumAll2)
+    "
+!
+
+sumTo
+    "sum up the numbers from 1 to 10000 a hundred times.
+     Using a to:do: loop here."
+
+    |val|
+
+    100 timesRepeat:[
+        val := 0.
+        1 to:10000 do:[:i |
+            val := val + i
+        ]
+    ].
+
+    "
+     Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 sumTo])
+    "
+!
+
+sumTo2
+    "demonstrating inline C advantage ...
+     ... however, be careful, some compilers optimize the whole
+         loop by eliminating it alltogether ..."
+
+    100 timesRepeat:[
+%{
+        int i, val = 0;
+
+        for (i=1; i<=10000; i++) {
+            val += i;
+        }
+%}.
+    ].
+
+    "
+     Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 sumTo2])
+    "
+!
+
+sumTo3
+    "demonstrating inline C advantage ...
+     ... however, be careful, some compilers optimize the whole
+         loop by eliminating it alltogether ..."
+
+%{
+        int i, cnt, val;
+
+        for (cnt=1; cnt<=100; cnt++) {
+            val = 0;
+            for (i=1; i<=10000; i++) {
+                val += i;
+            }
+        }
+%}.
+
+    "
+     Transcript showCR:(Time millisecondsToRun:[STXBenchmarks1 sumTo3])
+    "
+! !
+
+!BenchmarkSTX1 class methodsFor:'standard benchmarks'!
+
+byteFloatBench1
+    "arithmetic speed bench.
+     from Byte benchmarks; adapted to ST by Bruno Bienfait."
+
+    | a b c count i |
+
+    a := 3.141597.
+    b := 1.783903.
+    count := 1000000.
+    i := 1.
+
+    [i < count] whileTrue: [ 
+
+        c := (a - b) / ((a + b) * b ).
+        a := a + (c * b) - (b / a). 
+
+        i := i + 1.
+    ].
+
+    "
+     Transcript show:'byteFloatBench1: '; endEntry. 
+     Transcript show:(
+         Time millisecondsToRun:[
+            Benchmarks::STXBenchmarks1 byteFloatBench1
+         ]
+     ); cr
+
+      Indy    486/50   P5/90  P5/100  P5/133   | interpreted                                                SS10/40 ELC   NeXT    alpha    | competition1   competition2
+cache (none)  256k                             | indy    indy  486/50  P5/100 P5/133  P5/200  P5/200 P6/266 gcc     gcc   68k/33 21064/233 | 486/50         486/50
+                                               |         200                          (*)     (*)                                          |  
+      -------------------------------------------------------------------------------------------------------------------------------------|---------------------------
+min   10575   28429     8146   8131   6675     | 27006         74769   18559   15398                                      86258            | 119791         100457
+      10410   28839                            | 25735         50973   13639   15324                                                       |
+              28276                            | 25033                         14517                                                       |
+              28022                            | 20300                         13733                                                       |
+                                               | 18792                         13689                                                       |
+                                               | 18231                                                                                     |
+      -----------------------------------------|-------------------------------------------------------------------------------------------|---------------------------
+                                                         8333  44365           11449  8884(*)         2820  15648   51147         23347    |
+                                                               35588            8486  7347(*) 5779(*)                                      |
+                                                                                8199                                                       |
+                                                                                7524                                                       |
+
+     notice, that ST/X uses double prec. floats, while most other ST-systems
+     use single prec. floats. 
+     (meaning that the float allocation is twice as high in ST/X)
+
+     Notice, this benchmark is actually a garbage collector benchmark,
+     since most time is spent in collecting intermediate float objects.
+     GC times on the other hand are mostly affected by the memory bandwidth;
+     therefore, the times here are mostly affected by cache size and
+     the raw speed of memory access (meaning that even on equal-clocked CPUS,
+     time may differ heavily due to different mainboard memory access times ...
+
+     (*) this was a notebook with 200Mhz prozessor, but very slow
+         memory interface - see what you get from this ...
+         ... when compared to a 133Mhz pentium with a good memory
+         interface.
+         The second (smaller) number was measured on a normal pci-system;
+    "
+
+    "Modified: / 5.6.1998 / 00:18:37 / cg"
+!
+
+byteFloatBench2
+    "{ Pragma: +optMath } "
+
+    "same as byteFloatBench1 - demonstrates effect of special
+     optimizations ... "
+
+    | a "{Class: Float }"
+      b "{Class: Float }"
+      c "{Class: Float }"
+      count i |
+
+    a := 3.141597.
+    b := 1.783903.
+    count := 1000000.
+    i := 1.
+
+    [i < count] whileTrue: [ 
+
+        c := (a - b) / ((a + b) * b ).
+        a := a + (c * b) - (b / a). 
+
+        i := i + 1.
+    ].
+
+    "
+     Transcript show:'byteFloatBench2: '; endEntry. 
+     Transcript show:(
+         Time millisecondsToRun:[
+            STXBenchmarks1 byteFloatBench2
+         ]
+     ); cr
+
+      Indy    486/50   P5/90  P5/100  68k/33   | interpreted           | competition1   competition2
+cache (none)  256k                             | indy    486/50        | 486/50         486/50
+      ----------------------------------------------------------------------------------------------
+min   8240    22976    6476   6434     28555   |  ---- same as ByteFloatBench1 ---
+
+
+
+     Notice, this benchmark is actually a garbage collector benchmark,
+     since most time is spent in collecting intermediate float objects.
+     GC times on the other hand are mostly affected by the memory bandwidth;
+     therefore, the times here are mostly affected by cache size and
+     the raw speed of memory access (meaning that even on equal-clocked CPUS,
+     time may differ heavily due to different mainboard memory access times ...
+    "
+
+    "Modified: 29.5.1997 / 12:00:50 / cg"
+!
+
+byteFloatBench3
+    "{ Pragma: +optMath } "
+
+    "same as byteFloatBench2 - uses timesRepeat instead of open while-loop"
+
+    | a "{Class: Float }"
+      b "{Class: Float }"
+      c "{Class: Float }"|
+
+    a := 3.141597.
+    b := 1.783903.
+
+    1000000 timesRepeat:[
+        c := (a - b) / ((a + b) * b ).
+        a := a + (c * b) - (b / a). 
+    ].
+
+    "
+     Transcript show:'byteFloatBench3: '; endEntry. 
+     Transcript show:(
+         Time millisecondsToRun:[
+            STXBenchmarks1 byteFloatBench3
+         ]
+     ); cr
+
+      Indy    486/50  P5/100  68k/33    | interpreted           | competition1   competition2
+cache (none)  256k                      | indy    486/50        | 486/50         486/50
+      ----------------------------------------------------------------------------------------
+min   7904    22780   6252     27060    |  ---- almost same as ByteFloatBench1 ---
+
+
+
+     Notice, this benchmark is actually a garbage collector benchmark,
+     since most time is spent in collecting intermediate float objects.
+     GC times on the other hand are mostly affected by the memory bandwidth;
+     therefore, the times here are mostly affected by cache size and
+     the raw speed of memory access (meaning that even on equal-clocked CPUS,
+     time may differ heavily due to different mainboard memory access times ...
+    "
+
+    "Modified: 29.5.1997 / 12:00:55 / cg"
+!
+
+byteFloatBench4
+    "same as byteFloatBench1 - demonstrates effect of inline c-code"
+
+%{
+    double a, b, c;
+    int count;
+
+    a = 3.141597;
+    b = 1.783903;
+    for (count = 0; count < 1000000; count++) {
+        c =(a - b) / ((a + b) * b );
+        a = a + (c * b) - (b / a); 
+    }
+%}.
+
+    "
+     Transcript show:'byteFloatBench4: '; endEntry. 
+     Transcript show:(
+         Time millisecondsToRun:[
+            STXBenchmarks1 byteFloatBench4
+         ]
+     ); cr
+
+      Indy    486/50  P5/133  68k/33    | interpreted           | competition1   competition2
+cache (none)  256k                      | indy    486/50        | 486/50         486/50
+      ----------------------------------|-----------------------------------------------------
+min   1550    83*      15*      128*    |  ---- not possible ---
+
+
+(*)  not fair, since GCC removes that code completely
+    "
+!
+
+recur1
+    "lots of recursion for testing send with arg"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+        self recur1:15
+    ].
+    Transcript show:'recur1: '; show:(t printString); cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 recur1
+     ]
+
+      Indy    486/50   P5/90  P5/100  P5/133 88k  68k/25  SS10 | interpreted                                                                                                                            | competition1   competition1   competition2
+cache (none)  256k                                        /40  | indy   indy 486/50   P5/100 P5/133 P5/200 P6/266 P6/400 320H     715/33    735/100 DS3100   88k    SS10/40  ELC  ELC  68k/33  alpha    | 486/50         ss10/40        486/50
+                                                               |        200  -O                                                                     (R2000)          gcc     gcc  cc          21064/233 |
+      ---------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------
+min   55      118      34     28      22     100   286    86   | 462         1221     386    320                         4356      1690      617     3793    1984    782    2551 4227   2308    2516    |                50             440
+      47       99                                         74   | 439         1195            283(#)                      2583      1580 (2)  460 (6) 3484(2) 1950    755    1862                1275    |
+      46      108 (i1)                                         | 447         1145            372                         3260      1860 (3)          3199    1316(#)        1803                 633    |
+              104 (i2)                                         | 433         1123            362                         2869      1490 (2)                  1304                                       |
+               93 (i3)                                         | 430         1093(2)         301                         2746      1880 (4)                  1276                                       |
+                                                               | 408(2)      1076                                        2634      1590                      1190                                       |
+                                                               | 395(2)                                                  2425 (O3)                            599                                       |
+                                                               | 455(5)                                                                                                                                 |
+      ---------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------|----------------------------
+                                                               |         70   127             28                    5     265                                 349    105     245         183      55    |
+                                                               |         33   125             23                          240                                 165    100     215         177      50    |
+                                                               |         25   116             21     12                   208                                         90     207   207   171      44    |
+                                                               |              114             20     11      9            196                                                288?                       |
+                                                               |              108                                                                                     81                                |
+                                                               |              105                                                                                     74                                |
+                                                               |                                                                                                      70
+                                                               |                                                                                                      67
+                                                               |                                                                                                      65
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(i1) without commonSymbols
+(i2) without commonSymbols; jno-to-jmp opt
+(i3) +commonSymbols; jno-to-jmp opt; move esp opt
+(5) fix true/false
+(#) ip rev.2
+(6) gcc
+    "
+
+    "Modified: / 4.6.1998 / 10:14:40 / cg"
+!
+
+recur1:num
+    "actual recursion method for recur1"
+
+    (num = 0) ifTrue:[^ self].
+    self recur1:(num - 1).
+    ^ self recur1:(num - 1)
+!
+
+sieve:n
+    "sieve the primes n times"
+
+    |num i k prime count flags time|
+
+    num := 8191.
+    flags := Array new:num.
+
+    Transcript show:'Sieve running ...'; cr.
+
+    time := Time millisecondsToRun:[
+        n timesRepeat:[
+            count := 0.
+            flags atAllPut:1.
+            i := 1.
+            num timesRepeat:[
+                (flags at:i) == 1 ifTrue:[
+                    prime := i + i + 3.
+                    k := i + prime.
+                    [k <= num] whileTrue:[
+                        flags at:k put:0.
+                        k := k + prime
+                    ].
+                    count := count + 1
+                ].
+                i := i + 1
+            ].
+        ].
+    ].
+
+    Transcript show:'Sieve in Smalltalk: '.
+    Transcript show:n printString. 
+    Transcript show:' iteration(s).'; cr.
+    Transcript show:'found '. 
+    Transcript show:count printString. 
+    Transcript show:' primes.'; cr.
+    Transcript show:'time per run: '. 
+    Transcript show:(time / n) printString. 
+    Transcript show:' ms.'; cr; endEntry
+
+    "
+     10 timesRepeat:[
+         Benchmarks::STXBenchmarks1 sieve:1
+     ]
+
+
+      Indy    486/50   P5/90 P5/100 P5/133  88k  68k/25 68k/33 SS10 | indy   indy  486/50   P5/100 P5/133 P5/200 P6/266  320H     715/33   735/100 DS3100   88k    SS10/40 ELC  ELC  68k/33 alpha     | competition1  competition1
+                                                               /40  |        200                                                                   (R2000)          gcc    gcc  cc          21064/233 | 486/50        ss10/40
+      ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|---------------------------
+min   29      58       20    18     12      50   128      95    41  | 165          480      129    105                   2060      610      221     1227    701     245    714  1190   798    143     | 110           82
+      28      57             16                                     | 157          405             102                             550 (2)  132 (6) 1199(2) 670     227    580                 66     |
+      27      56                                                    | 146          371 (2)          97                    931      520 (3)  148     1078    557            564                        |
+      24                                                            | 141 (*)                       93                    797      460 (4)                  456(#)         550                        |
+                                                                    | 132 (5)                       97(#)                 763                               438                                       |
+                                                                    |                               91                    697                               420                                       |
+                                                                    |                               87                    664                               118                                       |
+                                                                    |                               92                    698 (O3)                          112                                       |
+      --------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|-------------
+                                                                    |        26    209              38                    226                               231      89    283   154   296     37     |
+                                                                    |        24    202              35                     78                                43      85    161         275     23     |
+                                                                    |              175              32                                                               83    137         248     13     |
+                                                                    |              168              20                                                               70    147?                11     |
+                                                                    |              100              18                                                               53     95                 19 ?   |
+                                                                    |               85              17                                                               32                         8     |
+                                                                    |               58              16                                                               29                               |
+                                                                    |               36              12                                                               28                               |
+                                                                    |               33               8       5     3    
+(*) quickSyms                                                                           
+(2) interpreter asm patch
+(3) interpreter with +O3 +Obb2000
+(4) both (2) and (3)
+(5) fix-true/false
+(#) ip rev.2
+(6) gcc
+    "
+
+    "Modified: / 2.6.1998 / 20:21:53 / cg"
+! !
+
+!BenchmarkSTX1 class methodsFor:'symbol table benchmarks'!
+
+symbolTableBenchmark
+    "create many symbols ..."
+
+    |t|
+
+    ObjectMemory reclaimSymbols.
+
+    t := Time millisecondsToRun:[
+        1 to:10000 do:[:i|
+            i printString asSymbol
+        ].
+    ].
+    Transcript show:'create symbols: '; show:(t printString); cr; endEntry.
+
+    t := Time millisecondsToRun:[
+        1 to:10000 do:[:i|
+            i printString asSymbol
+        ].
+    ].
+    Transcript show:'lookup symbols: '; show:(t printString); cr; endEntry.
+
+    ObjectMemory reclaimSymbols.
+
+    "
+
+     STXBenchmarks1 symbolTableBenchmark
+
+     (times in a fresh image (about 1.5Mb), with single browser opened)
+
+      Indy    486/50  P5/100      | interpreted                competition1  competition2
+cache (none)  256k                | indy   486/50  P6/400
+      -------------------------------------------------------------------------------------
+create                            |
+      232     407     176         |        781       19        4064                 
+      244             172         |
+      ------------------------------------------------------------------------------
+lookup                            |
+      143     373     150         |        675       16        4064          7744   
+      191             146         |
+    "
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSTX2.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,222 @@
+"
+ COPYRIGHT (c) 1988 by Claus Gittinger
+	      All Rights Reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. The name of the above contributor may not be
+    used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+"
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSTX2
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSTX2 class methodsFor:'documentation'!
+
+copyright
+"
+ COPYRIGHT (c) 1988 by Claus Gittinger
+	      All Rights Reserved
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+ 1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+ 2. The name of the above contributor may not be
+    used to endorse or promote products derived from this software
+    without specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE CONTRIBUTOR ``AS IS'' AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ ARE DISCLAIMED.  IN NO EVENT SHALL THE CONTRIBUTOR BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ SUCH DAMAGE.
+"
+!
+
+documentation
+"
+    some internal benchmarks (various primitive methods).
+    These are not of public interest.
+"
+! !
+
+!BenchmarkSTX2 class methodsFor:'helpers'!
+
+noop0
+    ^ 0
+!
+
+noop00
+    ^ 0
+!
+
+noopINVALID:x
+    x size > 100 ifTrue:[^ 999].
+
+%{  /* UNLIMITEDSTACK */
+    if (__isString(x)) {
+	RETURN ( __MKSMALLINT(0) );
+    }
+%}.
+    ^ 999
+!
+
+noopPR0
+%{
+    RETURN ( __MKSMALLINT(0) );
+%}
+!
+
+noopPRNC0
+%{  /* NOCONTEXT */
+    RETURN ( __MKSMALLINT(0) );
+%}
+!
+
+noopPRSTK0
+%{  /* STACK:10000 */
+    RETURN ( __MKSMALLINT(0) );
+%}
+!
+
+noopPRULSTK0
+%{  /* UNLIMITEDSTACK */
+    RETURN ( __MKSMALLINT(0) );
+%}
+! !
+
+!BenchmarkSTX2 class methodsFor:'micro benchmarks'!
+
+sendPoly
+    "different primitive methods"
+
+    |t a b|
+
+    a := (1 to:1000) asArray.
+
+    t := Time millisecondsToRun:[
+	1000 timesRepeat:[
+	    a do:[:el | el]
+	].
+    ].
+    Transcript show:'empty loop: '; showCR:(t printString).
+
+    t := Time millisecondsToRun:[
+	1000 timesRepeat:[
+	    a do:[:el | el negative]
+	].
+    ].
+    Transcript show:'all int: '; showCR:(t printString).
+
+    b := a collect:[:el | el asFloat].
+    t := Time millisecondsToRun:[
+	1000 timesRepeat:[
+	    b do:[:el | el negative]
+	].
+    ].
+    Transcript show:'all float: '; showCR:(t printString).
+
+    b := a collect:[:el | el even ifTrue:[el asFloat] ifFalse:[el]].
+    t := Time millisecondsToRun:[
+	1000 timesRepeat:[
+	    b do:[:el | el negative]
+	].
+    ].
+    Transcript show:'alternating : '; showCR:(t printString).
+
+    "
+     STXBenchmarks2 sendPoly
+
+	   Indy      486/50   P5/100            
+cache      (none)     256k               
+	   ----------------------------
+empty        189       596     177
+allInt      1006      2387     575
+allFloat    1460      3139     827
+altern'ng   2149      4942    1511
+    "
+!
+
+sendPrim
+    "different primitive methods"
+
+    |t|
+
+    t := Time millisecondsToRun:[
+	1000000 timesRepeat:[
+	    self noop0
+	].
+    ].
+    Transcript show:'standard ^ 0: '; showCR:(t printString).
+
+    t := Time millisecondsToRun:[
+	1000000 timesRepeat:[
+	    self noopPR0
+	].
+    ].
+    Transcript show:'standard prim ret 0: '; showCR:(t printString).
+
+    t := Time millisecondsToRun:[
+	1000000 timesRepeat:[
+	    self noopPRNC0
+	].
+    ].
+    Transcript show:'no context prim ret 0: '; showCR:(t printString).
+
+    t := Time millisecondsToRun:[
+	1000000 timesRepeat:[
+	    self noopPRSTK0
+	].
+    ].
+    Transcript show:'stk prim ret 0: '; showCR:(t printString).
+
+    t := Time millisecondsToRun:[
+	1000000 timesRepeat:[
+	    self noopPRULSTK0
+	].
+    ].
+    Transcript show:'unl. stk prim ret 0: '; showCR:(t printString).
+
+    "
+     STXBenchmarks2 sendPrim
+
+	Indy      486/50      P5/100        
+cache   (none)     256k               
+	----------------------------
+std       386      1276         306
+prim     1007      2316         495
+no-stk    346      1151         304
+stk      1007     11602(hit)   3695
+ulstk    3584      7788        1812
+    "
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSTX3.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,592 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSTX3
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+
+!BenchmarkSTX3 class methodsFor:'block speed'!
+
+blockSpeed
+    |a|
+
+    a := 1.
+
+    Transcript showCR:'[1 noop]'.
+    Transcript show:( [1 noop] speed    ) printString.
+    Transcript cr.
+
+    Transcript showCR:'[''hello'' , '' world'']'.
+    Transcript show:( ['hello' , ' world'] speed    ) printString.
+    Transcript cr.
+
+    Transcript showCR:'[1+1+1+1+1+1+1+1+1+1+1]'.
+    Transcript show:( [1+1+1+1+1+1+1+1+1+1+1] speed ) printString.
+    Transcript cr.
+
+    Transcript showCR:'[1+1]'.
+    Transcript show:( [1+1] speed                   ) printString.
+    Transcript cr.
+
+    Transcript showCR:'[]'.
+    Transcript show:( [] speed                      ) printString.
+    Transcript cr.
+
+    Transcript showCR:'[a+a+a+a+a+a+a+a+a+a+a]'.
+    Transcript show:( [a+a+a+a+a+a+a+a+a+a+a] speed ) printString.
+    Transcript cr.
+
+    Transcript showCR:'[a+a]'.
+    Transcript show:( [a+a] speed                   ) printString.
+    Transcript cr.
+
+    "STXBenchmarks3 blockSpeed"
+! !
+
+!BenchmarkSTX3 class methodsFor:'collection benchmarks'!
+
+collectionBenchmarks
+    ObjectMemory garbageCollect.
+    self ordCollBenchmark.
+    ObjectMemory garbageCollect.
+    self setBenchmark.
+    ObjectMemory garbageCollect.
+    self dictionaryBenchmark.
+    ObjectMemory garbageCollect.
+
+    "STXBenchmarks3 collectionBenchmarks"
+!
+
+collectionBenchmarks2
+    ObjectMemory garbageCollect.
+    self ordCollBenchmark2.
+    ObjectMemory garbageCollect.
+    self setBenchmark2.
+    ObjectMemory garbageCollect.
+    self dictionaryBenchmark2.
+    ObjectMemory garbageCollect.
+
+    "STXBenchmarks3 collectionBenchmarks2"
+    "STXBenchmarks3 setBenchmark2"
+    "STXBenchmarks3 dictionaryBenchmark2"
+    "STXBenchmarks3 orderedCollectionBenchmark2"
+!
+
+dictionaryBenchmark
+    Transcript showCR:'Dictionary:'.
+    Transcript showCR:'   100 ' , (self dictionaryBenchmark:100) printString.
+    Transcript endEntry.
+    Transcript showCR:'   500 ' , (self dictionaryBenchmark:500) printString.
+    Transcript endEntry.
+    Transcript showCR:'  1000 ' , (self dictionaryBenchmark:1000) printString.
+    Transcript endEntry.
+    Transcript showCR:'  5000 ' , (self dictionaryBenchmark:5000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 10000 ' , (self dictionaryBenchmark:10000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 50000 ' , (self dictionaryBenchmark:50000) printString.
+    Transcript endEntry.
+    Transcript showCR:'100000 ' , (self dictionaryBenchmark:100000) printString.
+    Transcript endEntry.
+
+    "STXBenchmarks3 dictionaryBenchmark"
+!
+
+dictionaryBenchmark2
+    Transcript showCR:'preallocated Dictionary:'.
+    Transcript showCR:'   100 ' , (self dictionaryBenchmark2:100) printString.
+    Transcript endEntry.
+    Transcript showCR:'   500 ' , (self dictionaryBenchmark2:500) printString.
+    Transcript endEntry.
+    Transcript showCR:'  1000 ' , (self dictionaryBenchmark2:1000) printString.
+    Transcript endEntry.
+    Transcript showCR:'  5000 ' , (self dictionaryBenchmark2:5000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 10000 ' , (self dictionaryBenchmark2:10000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 50000 ' , (self dictionaryBenchmark2:50000) printString.
+    Transcript endEntry.
+    Transcript showCR:'100000 ' , (self dictionaryBenchmark2:100000) printString.
+    Transcript endEntry.
+
+    "STXBenchmarks3 dictionaryBenchmark2"
+!
+
+dictionaryBenchmark2:n
+    |d|
+
+    d := Dictionary new:n.
+    ^ Time millisecondsToRun:[
+        1 to:n do:[:i |
+            d at:i put:i
+        ]
+    ]
+!
+
+dictionaryBenchmark:n
+    |d|
+
+    d := Dictionary new.
+    ^ Time millisecondsToRun:[
+        1 to:n do:[:i |
+            d at:i put:i
+        ]
+    ]
+!
+
+ordCollBenchmark
+    Transcript showCR:'OrderedCollection:'.
+    Transcript showCR:'   100 ' , (self ordCollBenchmark:100) printString.
+    Transcript endEntry.
+    Transcript showCR:'   500 ' , (self ordCollBenchmark:500) printString.
+    Transcript endEntry.
+    Transcript showCR:'  1000 ' , (self ordCollBenchmark:1000) printString.
+    Transcript endEntry.
+    Transcript showCR:'  5000 ' , (self ordCollBenchmark:5000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 10000 ' , (self ordCollBenchmark:10000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 50000 ' , (self ordCollBenchmark:50000) printString.
+    Transcript endEntry.
+    Transcript showCR:'100000 ' , (self ordCollBenchmark:100000) printString
+!
+
+ordCollBenchmark2
+
+    Transcript showCR:'preallocated OrderedCollection:'.
+    Transcript showCR:'   100 ' , (self ordCollBenchmark2:100) printString.
+    Transcript endEntry.
+    Transcript showCR:'   500 ' , (self ordCollBenchmark2:500) printString.
+    Transcript endEntry.
+    Transcript showCR:'  1000 ' , (self ordCollBenchmark2:1000) printString.
+    Transcript endEntry.
+    Transcript showCR:'  5000 ' , (self ordCollBenchmark2:5000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 10000 ' , (self ordCollBenchmark2:10000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 50000 ' , (self ordCollBenchmark2:50000) printString.
+    Transcript endEntry.
+    Transcript showCR:'100000 ' , (self ordCollBenchmark2:100000) printString
+!
+
+ordCollBenchmark2:n
+    |s|
+
+    s := OrderedCollection new:n.
+    ^ Time millisecondsToRun:[
+        1 to:n do:[:i |
+            s add:i
+        ]
+    ]
+!
+
+ordCollBenchmark:n
+    |s|
+
+    s := OrderedCollection new.
+    ^ Time millisecondsToRun:[
+        1 to:n do:[:i |
+            s add:i
+        ]
+    ]
+!
+
+setBenchmark
+    Transcript showCR:'Set:'.
+    Transcript showCR:'   100 ' , (self setBenchmark:100) printString.
+    Transcript endEntry.
+    Transcript showCR:'   500 ' , (self setBenchmark:500) printString.
+    Transcript endEntry.
+    Transcript showCR:'  1000 ' , (self setBenchmark:1000) printString.
+    Transcript endEntry.
+    Transcript showCR:'  5000 ' , (self setBenchmark:5000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 10000 ' , (self setBenchmark:10000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 50000 ' , (self setBenchmark:50000) printString.
+    Transcript endEntry.
+    Transcript showCR:'100000 ' , (self setBenchmark:100000) printString
+!
+
+setBenchmark2
+    Transcript showCR:'Preallocated Set:'.
+    Transcript showCR:'   100 ' , (self setBenchmark2:100) printString.
+    Transcript endEntry.
+    Transcript showCR:'   500 ' , (self setBenchmark2:500) printString.
+    Transcript endEntry.
+    Transcript showCR:'  1000 ' , (self setBenchmark2:1000) printString.
+    Transcript endEntry.
+    Transcript showCR:'  5000 ' , (self setBenchmark2:5000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 10000 ' , (self setBenchmark2:10000) printString.
+    Transcript endEntry.
+    Transcript showCR:' 50000 ' , (self setBenchmark2:50000) printString.
+    Transcript endEntry.
+    Transcript showCR:'100000 ' , (self setBenchmark2:100000) printString
+!
+
+setBenchmark2:n
+    |s|
+
+    s := Set new:n.
+    ^ Time millisecondsToRun:[
+        1 to:n do:[:i |
+            s add:i
+        ]
+    ]
+!
+
+setBenchmark:n
+    |s|
+
+    s := Set new.
+    ^ Time millisecondsToRun:[
+        1 to:n do:[:i |
+            s add:i
+        ]
+    ]
+! !
+
+!BenchmarkSTX3 class methodsFor:'helpers'!
+
+noop
+    ^ self
+!
+
+noopWith:a1
+    ^ self
+!
+
+noopWith:a1 with:a2
+    ^ self
+!
+
+noopWith:a1 with:a2 with:a3 with:a4 with:a5
+    with:a6 with:a7 with:a8 with:a9 with:a10
+    ^ self
+! !
+
+!BenchmarkSTX3 class methodsFor:'misc benchmarks'!
+
+cachedSend
+    |o t1 t2|
+
+    "loop-time"
+    t1 := Time millisecondsToRun:[
+        1 to:1000000 do:[:i |
+            i even ifTrue:[
+                o := 1.2. "a float "
+            ] ifFalse:[
+                o := 1.3  "another float "
+            ]
+        ]
+    ].
+    t2 := Time millisecondsToRun:[
+        1 to:1000000 do:[:i |
+            i even ifTrue:[
+                o := 1.2. "a float "
+            ] ifFalse:[
+                o := 1.3  "another float "
+            ].
+            o initialize.  "a cached polymorphic send"
+        ]
+    ].
+    ^ t2 - t1
+
+    "STXBenchmarks3 cachedSend"
+!
+
+countDown
+    |t index|
+
+    t := Time millisecondsToRun:[
+        index := 100000.
+        [index > 0] whileTrue:[
+            index := index - 1
+        ].
+    ].
+    ^ t
+
+    "STXBenchmarks3 countDown"
+!
+
+fib
+    |t|
+
+    t := Time millisecondsToRun:[
+        30 fib
+    ].
+    ^ t
+
+    "STXBenchmarks3 fib"
+!
+
+polySend
+    |o t1 t2|
+
+    "loop time"
+    t1 := Time millisecondsToRun:[
+        1 to:1000000 do:[:i |
+            i even ifTrue:[
+                o := 1.2. "a float "
+            ] ifFalse:[
+                o := 1    "an integer "
+            ]
+        ]
+    ].
+    t2 := Time millisecondsToRun:[
+        1 to:1000000 do:[:i |
+            i even ifTrue:[
+                o := 1.2. "a float "
+            ] ifFalse:[
+                o := 1    "an integer "
+            ].
+            o initialize.  "a polymorphic send"
+        ]
+    ].
+    ^ t2 - t1
+
+    "STXBenchmarks3 polySend"
+!
+
+send0
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            self noop
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 send0"
+!
+
+send1
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            self noopWith:1
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 send1"
+!
+
+send10
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            self noopWith:1 with:2 with:3 with:4 with:5
+                     with:6 with:7 with:8 with:9 with:10
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 send10"
+!
+
+send2
+    |t|
+
+    t := Time millisecondsToRun:[
+        1000000 timesRepeat:[
+            self noopWith:1 with:2
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 send2"
+! !
+
+!BenchmarkSTX3 class methodsFor:'running'!
+
+run
+    Transcript showCR:'running benchmarks ...'.
+    Transcript cr.
+    Transcript endEntry.
+
+    self run1.
+    self run2.
+
+    "STXBenchmarks3 run"
+!
+
+run1
+    self blockSpeed.
+
+    Transcript cr.
+!
+
+run2
+    Transcript showCR:('countDown      ', self countDown printString).
+    Transcript endEntry.
+    Transcript showCR:('fib            ', self fib printString).
+    Transcript endEntry.
+    Transcript cr.
+
+    Transcript showCR:('send 0-args    ', self send0 printString).
+    Transcript endEntry.
+    Transcript showCR:('send 1-args    ', self send1 printString).
+    Transcript endEntry.
+    Transcript showCR:('send 2-args    ', self send2 printString).
+    Transcript endEntry.
+    Transcript showCR:('send 10-args   ', self send10 printString).
+    Transcript endEntry.
+    Transcript showCR:('cached send    ', self cachedSend printString).
+    Transcript endEntry.
+    Transcript showCR:('polymorph send ', self polySend printString).
+    Transcript endEntry.
+    Transcript cr.
+
+    Transcript showCR:('atAllPut       ', self atAllPut printString).
+    Transcript endEntry.
+    Transcript showCR:('atAllPut2      ', self atAllPut2 printString).
+    Transcript endEntry.
+    Transcript showCR:('sumTo          ', self sumTo printString).
+    Transcript endEntry.
+    Transcript showCR:('fastSumTo      ', self fastSumTo printString).
+    Transcript endEntry.
+    Transcript showCR:('nestedLoop     ', self nestedLoop printString).
+    Transcript endEntry.
+    Transcript showCR:('sumAll         ', self sumAll printString).
+    Transcript endEntry.
+    Transcript showCR:('sumAll2        ', self sumAll2 printString).
+    Transcript endEntry.
+    Transcript cr.
+
+    "STXBenchmarks3 run2"
+! !
+
+!BenchmarkSTX3 class methodsFor:'self benchmarks'!
+
+atAllPut
+    |vec t|
+
+    vec := Array new:100000.
+    t := Time millisecondsToRun:[
+        1 to:100000 do:[:i |
+            vec at:i put:7
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 atAllPut"
+!
+
+atAllPut2
+    |array t|
+
+    array := Array new:100000.
+    t := Time millisecondsToRun:[
+        1 to:100000 do:[:i |
+            array at:i put:7
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 atAllPut2"
+!
+
+fastSumTo
+    |val i t|
+
+    t := Time millisecondsToRun:[
+        100 timesRepeat:[
+            val := 0.
+            i := 1.
+            [i <= 10000] whileTrue:[
+                val := val + i.
+                i := i + 1
+            ].
+        ]
+    ].
+
+    ^ t
+
+    "STXBenchmarks3 fastSumTo"
+!
+
+nestedLoop
+    |i t|
+
+    t := Time millisecondsToRun:[
+        100 timesRepeat:[
+            i := 0.
+            1 to:100 do:[:l1 |
+                1 to:100 do:[:l2 |
+                    i := i + 1
+                ]
+            ]
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 nestedLoop"
+!
+
+sumAll 
+    |vec t s|
+
+    vec := Array new:100000.
+    1 to:100000 do:[:i |
+        vec at:i put:7
+    ].
+    s := 0.
+    t := Time millisecondsToRun:[
+        1 to:100000 do:[:i |
+            s := s + (vec at:i)
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 sumAll"
+!
+
+sumAll2 
+    |array t s|
+
+    array := Array new:100000.
+    1 to:100000 do:[:i |
+        array at:i put:7
+    ].
+    s := 0.
+    t := Time millisecondsToRun:[
+        1 to:100000 do:[:i |
+            s := s + (array at:i)
+        ]
+    ].
+    ^ t
+
+    "STXBenchmarks3 sumAll2"
+!
+
+sumTo
+    |val t|
+
+    t := Time millisecondsToRun:[
+        100 timesRepeat:[
+            val := 0.
+            1 to:10000 do:[:i |
+                val := val + i
+            ]
+        ]
+    ].
+
+    ^ t
+    "STXBenchmarks3 sumTo"
+! !
+
+!BenchmarkSTX3 class methodsFor:'documentation'!
+
+version_HG
+
+    ^ '$Changeset: <not expanded> $'
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSimpleHanoi.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,89 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSimpleHanoi
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSimpleHanoi class methodsFor:'documentation'!
+
+results
+"
+    Transcript showCR:(self new hanoi)
+    10 timesRepeat:[Transcript showCR:(self new hanoi);endEntry]
+
+    ----------------- JIT ---------------
+
+    Duo2.1Ghz winVista           0.062
+    P6/700 linux-elf;egcs        0.23
+    Celeron/500 linux-elf;egcs   0.325
+    P6/400 linux-elf;egcs        0.4
+    P6/266 winNT;bcc             0.60 (S)
+    Ultra/250 sol2.6;egcs        0.61
+    P6/266 linux-elf;gcc         0.61
+    P6/266 win95;bcc             0.62 (S)
+    alpha/433 osf1;cc            0.66
+    hp b2000 cc                  0.74
+    P5/200 win95;bcc             0.86 (N)(S)
+    P5/200 linux-elf;gcc         1.13 (N)
+    P5/150 linux-elf;gcc         1.24
+    P5/133 linux-aout;gcc        1.40
+    P5/120 linux-elf;gcc         1.74 (N2)
+    r4000/150 irix5.3            1.92
+    alpha/233 osf1;cc;taso       4.32 (1)
+    ss10/40 solaris2.5;gcc       4.36
+    alpha/233 osf1;cc            4.72 (1)
+    486/50 linux-ELF             8.45
+    68k/33Mhz next3.3           11.03
+    320H aix3.2.5               12.39
+
+    ----------------- NO JIT ---------------
+
+    P6/400 linux-elf;egcs        7.6
+    P6/266 win95;bcc            12.73 (S)
+    P6/266 linux-elf;pgcc       13.19
+    P5/200 win95;bcc            19.4  (N)
+    P5/200 linux-elf;gcc        19.65 (N)
+    r4000/150 irix5.3           27.0
+    P5/133 linux-aout;gcc       33.16
+    alpha/233 osf1;cc           68.26
+    486/50 linux-ELF           132.46
+    320H aix3.2.5              502.46
+
+ Notice:
+   (N) the was executed on a notebook with a poor memory interface and 256k
+       cache. A regular P5/200 is somewhat faster.
+
+   (N2)another notebook with a poor memory interface
+
+   (1) the alpha is running 64 bit code (shuffling around twice as much data)
+       the taso version is also 64bit, bit has its VM loaded into the lower 4Gig.
+
+   (S) no stack overflow checks
+"
+! !
+
+!BenchmarkSimpleHanoi methodsFor:'processing'!
+
+hanoi
+    ^ (Time millisecondsToRun:[
+        self move:22 from:1 to:3 temp:3
+      ]) / 1000.0
+
+    "
+     Transcript showCR:(self new hanoi)
+    "
+
+    "Modified: / 12.11.1997 / 17:07:06 / cg"
+!
+
+move:n from:src to:dst temp:tmp
+    n == 1 ifTrue:[^ self].
+    self move:n-1 from:src to:tmp temp:dst.
+    self move:n-1 from:tmp to:dst temp:src
+
+    "Created: / 12.11.1997 / 17:06:46 / cg"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSlopstone.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,501 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSlopstone
+	instanceVariableNames:'testParams testBlocks'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSlopstone class methodsFor:'documentation'!
+
+documentation
+"
+    this is a low-level benchmark.
+
+    The results are biased towards a 33Mhz/486, running ParcPlace VisualWorks v1.0.
+    This configuration has a rating of 1 for all tests.
+
+    claus:
+      Since it tests highly optimizable code (adding constants, for example)
+      which can be (and is) easily optimized away, the numbers given are
+      not too valuable to compare different smalltalk systems.
+      (it may be useful, to compare different machines running the same
+       smalltalk, though).
+
+    See also: readme method
+    [author:]
+        Bruce Samuelson
+
+    [start with:]
+        Benchmarks::SlopstoneBenchmark new runBenchmark
+"
+!
+
+readme
+
+"INTRODUCTION
+
+Slopstone: Smalltalk Low level OPeration Stones
+Portable Low Level Benchmarks for ST80 and ST/V (using 16-bit SmallIntegers)
+Placed in public domain January 1993  (c) Bruce Samuelson
+Permission is given to place this in public Smalltalk archives
+
+Use monospaced fonts if possible to view the methods in this class.
+
+(1) Collect garbage if supported (2) do 'SlopstoneBenchmark new runBenchmark'.
+Results are printed in the Transcript window.
+Post results for your machines to comp.lang.smalltalk or
+mail them to bruce@ling.uta.edu or bruce@utafll.uta.edu.
+
+DISCUSSION
+
+This readme method would normally be in the class comment for ST80. ST/V-DOS
+doesn't support class comments.
+
+The benchmarks test strictly low level operations. They do not test higher
+level operations such as forming sets, sorting, or streaming, nor do they test
+applications. They also do not test user interface operations because of the
+non-portability of this area of Smalltalk and its sensitivity to the
+performance of the video subsystem. The tests are cpu bound. They do not
+access files and should not cause disk paging.
+
+The benchmarks use loop counts of 16000 because SmallIntegers cannot exceed
+16383 for ST/V-DOS. 16-bit implementions would perform worse with large loop
+counts. The benchmarks are also suitable for testing 32-bit versions of
+Smalltalk.
+
+DEFINITION OF REFERENCE MACHINE (ONE SLOPSTONE)
+
+The following machine is the one on which I developed these benchmarks. By
+convention it is defined to operate at one slopstone. It's a mid range
+performer for current ParcPlace versions of Smalltalk.
+
+Hardware: Amax 486DX/33 (includes internal floating point processor and
+internal 8K cache), 256K external cache, 16MB RAM.
+
+Software: ParcPlace VisualWorks 1.0, Windows 3.1, DOS 5.0 (plain vanilla
+setup).
+
+COMPARISON TO XEROX DORADO
+
+For reference, the machine runs at 649% of a Dorado on ParcPlace benchmarks
+for ST80 4.1. Its fast video card helps on these PPS benchmarks. I didn't run
+them for VisualWorks 1.0. It would be somewhat slower because there are vastly
+more classes.
+
+SlopstoneBenchmark new runBenchmark
+
+EXAMPLE RESULTS FOR REFERENCE MACHINE
+
+1000s    time    1000s of
+itera-   sec-    iterations   slop-
+tions    onds    per sec      stones   explanation
+
+3808     0.577   6600         1.0      add integers
+ 544     2.262    240         1.0      add floats
+ 960     1.088    882         1.0      access strings
+ 320     0.908    352         1.0      create objects
+ 160     1.49     107         1.0      copy objects
+ 480     1.129    425         1.0      perform selectors
+ 896     1.237    724         1.0      evaluate blocks
+
+ 640     1.151    555         1.0      harmonic mean"
+!
+
+results
+"
+        Benchmarks::SlopstoneBenchmark new runBenchmark
+        Notice:
+            the addInt, addFloat, perform and block benchmarks
+            are optimized by the system (the JIT) and are therefore
+            too short to be measured reasonably on most systems
+            (time below 10ms)
+
+        P6/400 linux/egcs/elf       
+               3808     0.001     3808000     576.97     add integers
+                544     0.001      544000    2266.67     add floats
+                960     0.119        8067       9.14652  access strings
+                320     0.08         4000      11.3636   create objects
+                160     0.06         2667      24.9221   copy objects
+                480     0.001      480000    1129.41     perform selectors
+                896     0.001      896000    1237.57     create & evaluate blocks
+
+                640     0.00664     96275     173.513    harmonic mean
+
+        P6/266 linux/gcc/elf       
+
+               3808     0.001     3808000     576.97     add integers
+                544     0.001      544000    2266.67     add floats
+                960     0.137        7007       7.94478  access strings
+                320     0.114        2807       7.97448  create objects
+                160     0.106        1509      14.1069   copy objects
+                480     0.001      480000    1129.41     perform selectors
+                896     0.001      896000    1237.57     create & evaluate blocks
+
+                640     0.00773     82698     149.043    harmonic mean
+
+        alpha/433 osf1/cc
+                3808    0.001     3808000     576.97      add integers
+                544     0.001      544000    2266.67      add floats
+                960     0.152        6316       7.16076   access strings
+                320     0.131        2443       6.93963   create objects
+                160     0.102        1569      14.6601    copy objects
+                480     0.001      480000    1129.41      perform selectors
+                896     0.001      896000    1237.57      create & evaluate blocks
+
+                640     0.00796     80317     144.753     harmonic mean
+
+        Ultra/250 solaris2.6
+                3808    0.001     3808000     576.97     add integers
+                544     0.001      544000    2266.67     add floats
+                960     0.154        6234       7.06776  access strings
+                320     0.17         1882       5.34759  create objects
+                160     0.113        1416      13.233    copy objects
+                480     0.001      480000    1129.41     perform selectors
+                896     0.001      896000    1237.57     create & evaluate blocks
+
+                640     0.0084      76116     137.181    harmonic mean
+
+        P5/200 linux/gcc/elf (slow memory interface - notebook)      
+
+                3808    0.001     3808000     576.97     add integers
+                544     0.001      544000    2266.67     add floats
+                960     0.315        3048       3.45535  access strings
+                320     0.277        1155       3.28192  create objects
+                160     0.206         777       7.25887  copy objects
+                480     0.002      240000     564.706    perform selectors
+                896     0.001      896000    1237.57     create & evaluate blocks
+
+                640     0.0120056   53276      96.0165   harmonic mean
+
+        P5/133 linux/gcc/a.out      
+                3808    0.002     1904000     288.485    add integers
+                544     0.002      272000    1133.33     add floats
+                960     0.36         2667       3.02343  access strings
+                320     0.293        1092       3.1027   create objects
+                160     0.241         664       6.20468  copy objects
+                480     0.002      240000     564.706    perform selectors
+                896     0.001      896000    1237.57     create & evaluate blocks
+
+                640     0.0153779     41593     74.9606  harmonic mean
+
+        alpha/233 osf1/cc
+
+                3808    0.001     3808000     576.97     add integers
+                544     0.001      544000    2266.67     add floats
+                960     0.57         1684       1.90954  access strings
+                320     0.979         327       0.928591 create objects
+                160     0.71          225       2.10609  copy objects
+                480     0.001      480000    1129.41     perform selectors
+                896     0.001      896000    1237.57     create & evaluate blocks
+
+                640     0.0169151   37813      68.1485   harmonic mean
+
+        ss10/40 solaris 2.5
+                3808    0.006      634667      96.1616    add integers
+                544     0.005      108800     453.333     add floats
+                320     0.918         349       0.990295  create objects
+                160     0.694         231       2.15465   copy objects
+                480     0.006       80000     188.235     perform selectors
+                896     0.005      179200     247.514     create & evaluate blocks
+
+                640     0.0480143   13321      24.0082    harmonic mean
+
+"
+
+! !
+
+!BenchmarkSlopstone methodsFor:'benchmarking'!
+
+execute
+
+| n nTests iters times speeds stones scale printA printB printC param
+count speed0 expln block time iter speed stone harMean hm power |
+
+Transcript cr; cr; show: 'Starting benchmarks...'.
+
+n := 16000. "Number of times each test block will be evaluated."
+n > 16383 ifTrue: [self halt: 'Count exceeded max small int for ST/V-DOS.'].
+nTests := testParams size.
+nTests  = testBlocks size ifFalse: [self halt: 'Inconsistent test count.'].
+
+iters  := OrderedCollection new.
+times  := OrderedCollection new.
+speeds := OrderedCollection new.
+stones := OrderedCollection new.
+scale  := 1000. "So iterations can be reported as 1000s of iterations"
+
+"The following blocks are restricted to two args by ST/V-DOS."
+
+printA :=
+  [:iter1 :time1 |
+  Transcript cr.
+  Transcript nextPutAll: (iter1 / scale) rounded printString.
+  Transcript nextPutAll: '     '.
+  Transcript nextPutAll: time1 printString.
+  Transcript nextPutAll: '     '].
+printB :=
+  [:speed1 :slop1 |
+  Transcript nextPutAll: (speed1 / scale) rounded printString.
+  Transcript nextPutAll: '     '.
+  Transcript nextPutAll: slop1 printString.
+  Transcript nextPutAll: '     '].
+printC :=
+  [:expln1 |
+  Transcript show: expln1].
+
+Transcript show: '
+
+1000s    time    1000s of
+itera-   sec-    iterations   slop-
+tions    onds    per sec      stones   explanation
+'.
+
+1 to: nTests do:
+  [:i |
+  param  := testParams at: i.
+  count  := param at: 1.           "repetitions of a test inside its block"
+  speed0 := (param at: 2) * scale. "iters/sec for a one-slopstone machine"
+  expln  := param at: 3.
+  block  := testBlocks at: i.
+  time   := Time millisecondsToRun: [n timesRepeat: block].
+  time   := (time max: 1) / 1000.0. "time is now in seconds"
+  iter   := count * n.
+  speed  := iter / time.
+  stone  := speed / speed0.
+  iters  add: iter.
+  times  add: time.
+  speeds add: speed.
+  stones add: stone.
+  printA value: iter value: time.
+  printB value: speed value: stone.
+  printC value: expln.].
+
+harMean :=
+  [:numbers |
+  hm := 1.
+  power := 1 / nTests.
+  numbers do: [:number | hm := hm * (number raisedTo: power)].
+  hm].
+Transcript cr.
+printA value: (harMean value: iters) value: (harMean value: times).
+printB value: (harMean value: speeds) value: (harMean value: stones).
+printC value: 'harmonic mean'.
+
+Transcript cr; cr; show: 'Benchmarks complete.'; cr
+!
+
+extendedSetup
+    self setup.
+
+    testParams
+      add: #(238 6600 'add integer vars *');
+      add: #( 34  240 'add float vars *');
+      add: #( 56  724 'create blocks *');
+      add: #( 56  724 'evaluate blocks *');
+      add: #( 56  724 'create self blocks *');
+      add: #( 56  724 'evaluate self blocks *');
+      add: #( 56  724 'create & evaluate self blocks *');
+      add: #( 56  724 'create full blocks *');
+      add: #( 56  724 'evaluate full blocks *');
+      add: #( 56  724 'create & evaluate full blocks *');
+      yourself.
+    self setup4
+!
+
+runBenchmark
+       "SlopstoneBenchmark new runBenchmark"
+
+	self setup.
+	self execute
+!
+
+runBenchmark2
+       "SlopstoneBenchmark new runBenchmark2"
+
+	self extendedSetup.
+	self execute
+!
+
+setup
+    self setup1.
+    self setup2.
+    self setup3.
+!
+
+setup1
+"Numbers in testParams represent the following:
+
+Column 1   number of internal repetitions for each test inside its block
+Column 2   thousands of iterations per second for a one-slopstone machine."
+
+testParams := OrderedCollection new.
+
+testParams
+  add: #(238 6600 'add integers');
+  add: #( 34  240 'add floats');
+  add: #( 60  882 'access strings');
+  add: #( 20  352 'create objects');
+  add: #( 10  107 'copy objects');
+  add: #( 30  425 'perform selectors');
+  add: #( 56  724 'create & evaluate blocks');
+  yourself.
+
+testBlocks := OrderedCollection new.
+
+"In the integer addition test, I originally had 340 internal repetitions.
+This caused the Digitalk compiler to blow up. The ParcPlace compiler compiled
+it ok but interestingly addition performed at slightly more than 50% of the
+performance with an internal count of 238. Perhaps something magical happens
+at 256."
+!
+
+setup2
+testBlocks
+  add: [1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+	1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+	1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+	1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+	1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+	1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+
+	1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1+1];
+
+  add: [1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+
+	1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0+1.0]
+!
+
+setup3
+testBlocks
+  add: ['a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1.
+	'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1. 'a' at: 1];
+
+  add: [Object new. Object new. Object new. Object new. Object new.
+	Object new. Object new. Object new. Object new. Object new.
+	Object new. Object new. Object new. Object new. Object new.
+	Object new. Object new. Object new. Object new. Object new];
+
+  add: [Object new copy copy copy copy copy copy copy copy copy copy];
+
+  add: [0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself.
+	0 perform: #yourself. 0 perform: #yourself. 0 perform: #yourself];
+
+  add: [[] value. [] value. [] value. [] value. [] value. [] value. [] value.
+	[] value. [] value. [] value. [] value. [] value. [] value. [] value.
+	[] value. [] value. [] value. [] value. [] value. [] value. [] value.
+	[] value. [] value. [] value. [] value. [] value. [] value. [] value.
+	[] value. [] value. [] value. [] value. [] value. [] value. [] value.
+	[] value. [] value. [] value. [] value. [] value. [] value. [] value.
+	[] value. [] value. [] value. [] value. [] value. [] value. [] value.
+	[] value. [] value. [] value. [] value. [] value. [] value. [] value]
+!
+
+setup4
+  |b v|
+
+testBlocks
+  add: [b := 1.
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b];
+
+  add: [b := 1.0.
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+
+	b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b+b];
+
+  add: [[]. []. [] . [] . [] . [] . [] .
+	[] . [] . [] . [] . [] . [] . [] .
+	[] . [] . [] . [] . [] . [] . [] .
+	[] . [] . [] . [] . [] . [] . [] .
+	[] . [] . [] . [] . [] . [] . [] .
+	[] . [] . [] . [] . [] . [] . [] .
+	[] . [] . [] . [] . [] . [] . [] .
+	[] . [] . [] . [] . [] . [] . [] ];
+
+  add: [b := [].
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value];
+
+  add: [[self]. [self]. [self] . [self] . [self] . [self] . [self] .
+	[self] . [self] . [self] . [self] . [self] . [self] . [self] .
+	[self] . [self] . [self] . [self] . [self] . [self] . [self] .
+	[self] . [self] . [self] . [self] . [self] . [self] . [self] .
+	[self] . [self] . [self] . [self] . [self] . [self] . [self] .
+	[self] . [self] . [self] . [self] . [self] . [self] . [self] .
+	[self] . [self] . [self] . [self] . [self] . [self] . [self] .
+	[self] . [self] . [self] . [self] . [self] . [self] . [self] ];
+
+  add: [b := [self].
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value];
+
+  add: [[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+	[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+	[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+	[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+	[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+	[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+	[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value.
+	[self] value. [self] value. [self] value. [self] value. [self] value. [self] value. [self] value];
+
+  add: [[ v := 0]. [v := 0]. [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+	[v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+	[v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+	[v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+	[v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+	[v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+	[v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] .
+	[v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] . [v := 0] ];
+
+  add: [b := [v := 0].
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value.
+	b value. b value. b value. b value. b value. b value. b value];
+
+  add: [[v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+	[v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+	[v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+	[v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+	[v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+	[v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+	[v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value.
+	[v := 0] value. [self] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value. [v := 0] value]
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSmopstone.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,628 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSmopstone
+	instanceVariableNames:'testParams testBlocks'
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSmopstone class methodsFor:'documentation'!
+
+documentation
+"
+    this is a medium-level benchmark.
+
+    The results are biased towards a 33Mhz/486, running ParcPlace VisualWorks v.4.0.
+    This configuration has a rating of 1 for all tests.
+
+    See also: readme method
+
+    [Notice:]
+        the sorcererBenchmark times are not directly comparable
+        between ST/X and other ST systems, since ST/X has to create
+        a new Point instance for every access to a rectangles origin
+        or corner (see implementation of Rectangle);
+        Therefore, that benchmarks time is higher in ST/X.
+
+    [author:]
+        Bruce Samuelson
+
+    [start with:]
+        Benchmarks::SmopstoneBenchmark new runBenchmark
+        Benchmarks::SmopstoneBenchmark new runBenchmark2
+"
+!
+
+readme
+
+"INTRODUCTION
+
+Smopstone: Smalltalk Medium level OPeration Stones
+Portable Medium level Benchmarks for ST80 and ST/V (using 16-bit SmallInts)
+Placed in public domain January 1993  (c) Bruce Samuelson
+Permission is given to place this in public Smalltalk archives
+
+Use monospaced fonts if possible to view the methods in this class.
+
+(1) Collect garbage if supported (2) do 'SmopstoneBenchmark new runBenchmark'.
+Results are printed in the Transcript window.
+Post results for your machines to comp.lang.smalltalk or
+mail them to bruce@ling.uta.edu or bruce@utafll.uta.edu.
+
+DISCUSSION
+   
+This readme method would normally be in the class comment for ST80. ST/V-DOS
+doesn't support class comments.
+
+These benchmarks are a companion to the SlopstoneBenchmark class posted to
+comp.lang.smalltalk this month. Slopstones tested low level operations.
+ 
+Smopstones test medium level operations that exercise recursive block and 
+method calls, collection building and enumeration, streaming, and sorting. The
+lower level operations contained in them exercise arithmetic (mostly integer,
+with some fractions and floats) string manipulation, and low level streaming.
+
+The benchmarks do not test applications. They also do not test user interface
+performance because of the non-portability of this area of Smalltalk and its 
+sensitivity to the speed of the video subsystem. The tests are cpu bound. They
+do not access files and should not cause disk paging.
+
+The main weaknesses of the benchmarks are (1) they are not high enough level
+to test actual applications, and (2) they concentrate in too few areas of
+Smalltalk, omitting many of the diverse capabilities of its class library. My
+excuse is that one can only devote limited time writing public domain
+benchmarks.
+
+The tests avoid generating integers larger than 16383, the maximum
+SmallInteger in ST/V-DOS. 16-bit implementions would perform worse with larger
+integers. The benchmarks are also suitable for testing 32-bit versions of
+Smalltalk. They try to avoid other pitfalls that would skew the results such
+as the lack of an adequate hash function for a class. Someone warned of this
+in comp.lang.smalltalk (I forget who).
+
+DEFINITION OF REFERENCE MACHINE (ONE SMOPSTONE)
+
+The following machine is the one on which I developed these benchmarks. By
+convention it is defined to operate at one smopstone. It's a mid range
+performer for current ParcPlace versions of Smalltalk.
+
+Hardware: Amax 486DX/33 (includes internal floating point processor and
+internal 8K cache), 256K external cache, 16MB RAM.
+
+Software: ParcPlace VisualWorks 1.0, Windows 3.1, DOS 5.0 (plain vanilla
+setup).
+
+COMPARISON TO XEROX DORADO
+
+For reference, the machine runs at 649% of a Dorado on ParcPlace benchmarks
+for ST80 4.1. Its fast video card helps on these PPS benchmarks. I didn't run
+them for VisualWorks 1.0. It would be somewhat slower because there are vastly
+more classes.
+
+EXAMPLE RESULTS FOR REFERENCE MACHINE
+
+time in    smop-
+seconds    stones    explanation
+
+
+3.157      1.0       generating fractonaccis
+1.123      1.0       generating primes
+1.091      1.0       generating and parsing streams
+3.091      1.0       generating strings
+1.167      1.0       forming sets
+5.139      1.0       sorting strings
+5.601      1.0       sorcerer's apprentice
+
+2.355      1.0       harmonic mean"
+!
+
+results
+"
+        Benchmarks::SmopstoneBenchmark new runBenchmark
+
+        P6/400 linux/egcs/elf 
+
+                0.069     45.7536     generating fractonaccis
+                0.032     35.0938     generating primes
+                0.044     24.7955     generating and parsing streams
+                0.009    343.444      generating strings
+                0.016     72.9375     forming sets
+                0.091     56.4725     sorting strings
+                0.419     13.3675     sorcerer's apprentice
+
+                0.047     49.7365     harmonic mean
+
+
+        alpha/433 osf1
+                0.103     30.6505     generating fractonaccis
+                0.047     23.8936     generating primes
+                0.036     30.3056     generating and parsing streams
+                0.024    128.792      generating strings
+                0.029     40.2414     forming sets
+                0.166     30.9578     sorting strings
+                0.226     24.7832     sorcerer's apprentice
+
+                0.064     36.6164     harmonic mean
+
+
+        P6/266 linux/gcc/elf 
+                0.117     26.9829     generating fractonaccis
+                0.048     23.3958     generating primes
+                0.051     21.3922     generating and parsing streams
+                0.045     68.6889     generating strings
+                0.016     72.9375     forming sets
+                0.16      32.1187     sorting strings
+                0.721      7.76838    sorcerer's apprentice
+
+                0.08145   28.9107     harmonic mean
+
+
+        Ultra/250 solaris2.6
+                0.15      21.0467     generating fractonaccis
+                0.056     20.0536     generating primes
+                0.062     17.5968     generating and parsing streams
+                0.036     85.8611     generating strings
+                0.026     44.8846     forming sets
+                0.204     25.1912     sorting strings
+                0.635      8.82047    sorcerer's apprentice
+
+                0.09364   25.1473     harmonic mean
+
+
+        P5/200 linux/gcc/elf (slow notebook nemory interface)
+                0.21      15.0333     generating fractonaccis
+                0.079     14.2152     generating primes
+                0.112      9.74107    generating and parsing streams
+                0.08      38.6375     generating strings
+                0.031     37.6452     forming sets
+                0.23      22.3435     sorting strings
+                1.72       3.2564     sorcerer's apprentice
+
+                0.151395  15.5546     harmonic mean
+
+
+        P5/133 linux/gcc/a.out      
+                0.328      9.625      generating fractonaccis
+                0.103     10.9029     generating primes
+                0.134      8.14179    generating and parsing streams
+                0.09      34.3444     generating strings
+                0.067     17.4179     forming sets
+                0.306     16.7941     sorting strings
+                2.022      2.77003    sorcerer's apprentice
+
+                0.208082  11.3171     harmonic mean
+
+
+        ss10/40 solaris 2.5
+                0.862      3.66241    generating fractonaccis
+                0.362      3.10221    generating primes
+                0.226     13.677      generating strings
+                0.144      8.10417    forming sets
+                1.188      4.32576    sorting strings
+                4.325      1.29503    sorcerer's apprentice
+
+                0.567877   4.14683    harmonic mean
+        
+
+        alpha/233 osf1
+                1.251      2.52358    generating fractonaccis
+                0.563      1.99467    generating primes
+                0.513      2.12671    generating and parsing streams
+                0.281      4.15302    forming sets
+                1.265      4.06245    sorting strings
+                2.938      1.9064     sorcerer's apprentice
+
+                0.775739   3.03567    harmonic mean
+"
+! !
+
+!BenchmarkSmopstone methodsFor:'benchmarking'!
+
+execute
+
+| n nTests times stones printA printC param
+time0 expln block time stone harMean hm power |
+
+n := 1. "Each test is repeated this many times. The smopstone times in
+	 the test parameters are normalized to a value of one. You may
+	 set it to a higher number if your machine is really blazing."
+
+Transcript cr; cr; show: 'Starting benchmarks with repetition count = '
+	   , n printString , '...'.
+
+nTests := testParams size.
+nTests  = testBlocks size ifFalse: [self halt: 'Inconsistent test count.'].
+
+times  := OrderedCollection new.
+stones := OrderedCollection new.
+
+"The following blocks are restricted to two args by ST/V-DOS."
+
+printA :=
+  [:time1 :smop1 |
+  Transcript cr.
+  Transcript nextPutAll: time1 printString.
+  Transcript nextPutAll: '     '.
+  Transcript nextPutAll: smop1 printString.
+  Transcript nextPutAll: '     '].
+printC :=
+  [:expln1 |
+  Transcript show: expln1].
+
+Transcript show: '
+
+time in    smop-
+seconds    stones    explanation
+'.
+
+1 to: nTests do:
+  [:i |
+  param  := testParams at: i.
+  time0  := param at: 1.            "seconds for one-smopstone machine"
+  expln  := param at: 2.
+  block  := testBlocks at: i.
+  time   := Time millisecondsToRun: [n timesRepeat: block].
+  time   := (time max: 1) / 1000.0. "time is now in seconds"
+  stone  := n  * time0 / time.
+  times  add: time.
+  stones add: stone.
+  printA value: time value: stone.
+  printC value: expln.].
+
+harMean :=
+  [:numbers |
+  hm := 1.
+  power := 1 / nTests.
+  numbers do: [:number | hm := hm * (number raisedTo: power)].
+  hm].
+Transcript cr.
+printA value: (harMean value: times) value: (harMean value: stones).
+printC value: 'harmonic mean'.
+
+Transcript cr; cr; show: 'Benchmarks complete.'; cr
+!
+
+fractonacci: n 
+  "Return something like the fibonacci function of n but
+  using fractional numbers rather than whole ones. The
+  reason for this variation is to run long enough to get
+  a decent time measurement without exceeding 16383, the
+  limit of small integers for ST/V-DOS. Choosing n = 13/2
+  takes enough time and computes to 13581.
+
+  Fibonacci uses n-1 and n-2 instead of n-(1/2) and n-(1/3).
+  However, I couldn't get it to run in the above constraints.
+
+  This benchmark tests the efficiency of recursively calling
+  a method that does a little fractional arithmetic internally."
+
+  n > 1
+    ifTrue: [^(self fractonacci: n - (1/2)) + (self fractonacci: n - (1/3))]
+    ifFalse: [^1]
+!
+
+primesUpTo: n
+  "Return the prime numbers between 1 and n.
+
+  This method tests the efficiency of recursively calling a block
+  that does some collection enumeration based on integer arithmetic."
+
+  | nSqrt lowPrimes highPrimes genNext first |
+  n < 5 | (n > 16363) ifTrue: [self halt: 'Upper limit out of range.'].
+  nSqrt := n sqrt rounded.
+  lowPrimes := OrderedCollection with: 2.
+  highPrimes := 5 to: n by: 2.
+  genNext :=
+    [:nextPrime |
+    lowPrimes add: nextPrime.
+    highPrimes := highPrimes select: [:k | k \\ nextPrime ~= 0].
+    first := highPrimes first.
+    first <= nSqrt ifTrue: [genNext value: first]].
+  genNext value: 3.
+  ^lowPrimes , highPrimes
+!
+
+runBenchmark
+       "SmopstoneBenchmark new runBenchmark"
+
+	self setup.
+	self execute
+!
+
+runBenchmark2
+       "SmopstoneBenchmark new runBenchmark2"
+
+        self setup2.
+        self execute
+
+    "Created: 11.6.1997 / 17:40:10 / cg"
+!
+
+setFrom: collection
+  "Form a set from collection and return it.
+
+  This method tests the efficiency of building a fairly large set
+  from strings. It indirectly tests the effectiveness of the string
+  hash function. Strings are used often enough as dictionary keys
+  that this may be worth including in the benchmark suite.  ST/V-DOS
+  has a primitive hash for strings, and ST80 has an elaborate one
+  written in Smalltalk."
+
+  ^collection asSet
+!
+
+setup
+  "Numbers in testParams represent the approximate number of seconds it
+  takes to run the tests for a one-smopstone machine.
+
+  Numbers in testBlocks are parameters tuned for each test. Do not
+  change them. The times for several tests depend on them non-linearly."
+
+  | primes strings set |
+
+  testParams := OrderedCollection new.
+ 
+  testParams
+    add: #(3.157 'generating fractonaccis');
+    add: #(1.123 'generating primes');
+    add: #(1.091 'generating and parsing streams');
+    add: #(3.091 'generating strings');
+    add: #(1.167 'forming sets');
+    add: #(5.139 'sorting strings');
+    add: #(5.601 'sorcerer''s apprentice').
+
+  testBlocks := OrderedCollection new.
+
+  testBlocks
+    add: [self fractonacci: 13/2];
+    add: [primes := self primesUpTo: 9000];
+    add: [self streamTestsOn: primes];
+    add: [strings := self stringsUpTo: 8000];
+    add: [set := self setFrom: strings];
+    add: [self sort: set];
+    add: [self sorcerersApprentice]
+!
+
+setup2
+  "claus:
+        just to show the difference ...
+        (read documentations [Notice] section)"
+
+  | primes strings set |
+
+  testParams := OrderedCollection new.
+ 
+  testParams
+    add: #(3.157 'generating fractonaccis');
+    add: #(1.123 'generating primes');
+    add: #(1.091 'generating and parsing streams');
+    add: #(3.091 'generating strings');
+    add: #(1.167 'forming sets');
+    add: #(5.139 'sorting strings');
+    add: #(5.601 'sorcerer''s apprentice').
+
+  testBlocks := OrderedCollection new.
+
+  testBlocks
+    add: [self fractonacci: 13/2];
+    add: [primes := self primesUpTo: 9000];
+    add: [self streamTestsOn: primes];
+    add: [strings := self stringsUpTo: 8000];
+    add: [set := self setFrom: strings];
+    add: [self sort: set];
+    add: [self sorcerersApprentice2]
+
+    "Created: 11.6.1997 / 17:40:03 / cg"
+!
+
+sorcerersApprentice
+
+" FORMATTED FOR MONOSPACED FONT
+
+  Perform various operations on rectangles.
+
+  This method tests the efficiency of recursively calling a block that
+  includes lots of integer arithmetic, collection building, and collection
+  enumeration. The method:
+
+  (1) Creates a collection of pseudo random rectangles 
+  (2) Forms a new collection of all their intersections 
+  (3) Recursively continues until there are no more intersections 
+  (4) Returns a collection with the counts of rectangles in each generation.
+
+  Because the intersections are forming progressively smaller rectangles
+  (we exclude intersections of a rectangle with itself), the algorithm will
+  eventually converge. Depending on the choice of numeric parameters, it may
+  converge very quickly or very slowly. The parameters used below make it
+  converge in a reasonable amount of time (a few seconds on a one-smopstone
+  machine). It took some experimentation with different combinations to
+  achieve this.
+
+  The pseudo random number generator isn't very good, but it's adequate
+  for this benchmark.
+
+  One could write an algorithm that would converge much more quickly and in
+  a more predictable amount of time by sorting the intermediate rectangles
+  in two dimensions and not bothering to test for intersections those
+  rectangles that are contained in mutually exclusive regions. We have
+  chosen algorithmic simplicity over performance optimization. We simply
+  perform intersections of each rectangle with every possible partner in
+  each generation. The time consumed is quadratic in the number of rectangles.
+
+  The algorithm originally stored rectangles in sets to eliminate duplicates.
+  Unfortunately, ST/V-DOS uses the hash function inherited from Object for
+  Rectangle, which will allow duplicates to be stored. So we were forced to
+  store rectangles in ordered collections and eliminate duplicates by brute
+  force. The brutality was heightened because we could not use the test
+  collection>>includes: to decide whether to add a rectangle to the ordered
+  collections, since ST/V-DOS does not define equality (=) for rectangles
+  either. The remaining warts in the code are not worth explaining.
+
+  In an actual application, these shortcomings of ST/V-DOS would have been
+  overcome by adding subclasses and methods rather than writing kludgy code."
+
+  | m n firstGen intersection isIncluded counts r random
+  a b c d e f g h generate nextGen |
+  m := 80.
+  n := 20 * m.
+  firstGen := OrderedCollection new.
+  counts := OrderedCollection new.
+  r := 50.
+  random := [r := r + 1 * 87 \\ n].
+  m timesRepeat: [
+    a := random value.
+    b := random value.
+    c := random value.
+    d := random value.
+    e := a min: b.
+    f := c min: d.
+    g := a max: b.
+    h := c max: d.
+    firstGen add: (Rectangle origin: e @ f corner: g @ h)].
+  generate := 
+    [:lastGen |
+    counts add: lastGen size.
+    nextGen := OrderedCollection new.
+    lastGen do:
+      [:r1 |
+      lastGen do: 
+	[:r2 | 
+	(r1 origin ~= r2 origin and: [r1 corner ~= r2 corner])
+	"In ST80 this test would have simply been r1 ~= r2"
+	  ifTrue:
+	    [(r1 intersects: r2)
+	      ifTrue:
+		[intersection := r1 intersect: r2.
+		isIncluded := false.                     "All these lines"
+		nextGen do:                              "would have been"
+		  [:rec |                                "avoided if we"
+		  (rec origin = intersection origin and: "could have used"
+		  [rec corner = intersection corner])    "a set for"
+		    ifTrue: [isIncluded := true]].       "nextGen. See"
+		isIncluded                               "explanation"
+		  ifFalse:                               "above."
+		    [nextGen size > 500
+		      ifTrue: [self halt: 'Converges too slowly.']
+		      ifFalse: [nextGen add: intersection]]]]]].
+    nextGen size > 0 ifTrue: [generate value: nextGen]].
+  generate value: firstGen.
+  ^counts
+!
+
+sorcerersApprentice2
+
+" 
+  claus: just to show the difference ...
+         (read the comment about rectangle internals in
+          the documentations [Notice] section)
+
+"
+
+  | m n firstGen intersection isIncluded counts r random
+  a b c d e f g h generate nextGen |
+  m := 80.
+  n := 20 * m.
+  firstGen := OrderedCollection new.
+  counts := OrderedCollection new.
+  r := 50.
+  random := [r := r + 1 * 87 \\ n].
+  m timesRepeat: [
+    a := random value.
+    b := random value.
+    c := random value.
+    d := random value.
+    e := a min: b.
+    f := c min: d.
+    g := a max: b.
+    h := c max: d.
+    firstGen add: (Rectangle origin: e @ f corner: g @ h)].
+  generate := 
+    [:lastGen |
+    counts add: lastGen size.
+    nextGen := OrderedCollection new.
+    lastGen do:
+      [:r1 |
+      lastGen do: 
+        [:r2 | 
+        (r1 ~= r2)
+        "In ST80 this test would have simply been r1 ~= r2"
+          ifTrue:
+            [(r1 intersects: r2)
+              ifTrue:
+                [intersection := r1 intersect: r2.
+                isIncluded := false.                     "All these lines"
+                nextGen do:                              "would have been"
+                  [:rec |                                "avoided if we"
+                  (rec = intersection)    "a set for"
+                    ifTrue: [isIncluded := true]].       "nextGen. See"
+                isIncluded                               "explanation"
+                  ifFalse:                               "above."
+                    [nextGen size > 500
+                      ifTrue: [self halt: 'Converges too slowly.']
+                      ifFalse: [nextGen add: intersection]]]]]].
+    nextGen size > 0 ifTrue: [generate value: nextGen]].
+  generate value: firstGen.
+  ^counts
+
+    "Created: 11.6.1997 / 17:38:34 / cg"
+    "Modified: 11.6.1997 / 17:39:24 / cg"
+!
+
+sort: collection
+  "Form a sorted collection from collection and return it.
+
+  This method tests the efficiency of sorting a fairly large
+  collection of strings. It indirectly measures the efficiency
+  of the sorting algorithm and of string comparison operations."
+
+  ^collection asSortedCollection
+!
+
+streamTestsOn: integers
+  "Test steaming operations on the collection of integers.
+
+  This method measures the efficiency of integer-to-float conversion, of
+  printing numbers to a write stream, of parsing tokens in a read stream,
+  and of converting the tokens from strings to numbers. The technique for
+  converting tokens into floats is constrained by portability between
+  ST80 and ST/V.
+
+  To validate the logic, the original integers are compared with the final
+  floats. There should be no roundoff errors."
+
+  | space s floats float string |
+  space := Character value: 32. "Can't use Character space in ST/V-DOS"
+  s := ReadWriteStream on: String new.
+  integers do: [:i | i asFloat printOn: s. s space].
+  "Now make sure the underlying string size is < 16383, a 16-bit small int."
+  s contents size > 8191 ifTrue: [self halt: 'String too big.'].
+  s reset.
+  floats := OrderedCollection new: integers size.
+  [s atEnd] whileFalse:
+    [float := 0.
+    string := s upTo: $..
+"/    s upTo: space.
+    s skipThrough:space.
+    "In the following, digitValue is portable between ST80 and ST/V-DOS."
+    string do: [:char | float := float * 10.0 + char digitValue].
+    floats add: float].
+  integers = floats ifFalse: [self halt: 'Numbers do not compare.']
+!
+
+stringsUpTo: n
+  "Return a collection of strings representing the integers from 1
+  to n with their digits reversed.
+
+  This method tests the efficiency of creating small streams, performing
+  string operations, and building collections. It includes a gross kludge
+  to coerce portability between ST80 and ST/V. They vary slightly in the
+  selector used to reverse collections."
+
+  | selector |
+  (Array with: #reverse with: #reversed) do:
+    [:symbol |
+    (String canUnderstand: symbol) ifTrue: [selector := symbol]].
+  ^(1 to: n) collect: [:m | m printString perform: selector]
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSortedCollectionLike.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,138 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+BenchmarkCollection subclass:#BenchmarkSortedCollectionLike
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSortedCollectionLike class methodsFor:'sorted collections'!
+
+test_Btree
+    |coll sc randomNumbers|
+
+    randomNumbers := (1 to:1000) collect:[:i |Random nextInteger].
+
+    sc := SortedCollection new.
+    sc addAll:randomNumbers.
+
+    coll := BinaryTree new.
+    coll addAll:randomNumbers.
+
+    randomNumbers do:[:each |
+"/        Transcript showCR:'-----------'.
+"/        Transcript showCR:(coll instVarNamed:'treeRoot').
+"/        Transcript showCR:each.
+        coll remove:each.
+        sc remove:each.
+        self assert:(sc asOrderedCollection = coll asOrderedCollection).
+    ].
+! !
+
+!BenchmarkSortedCollectionLike methodsFor:'benchmarks'!
+
+benchmarkOrderedAscAddEnBloque  
+    <benchmark: 'Insert ordered (asc) data individually'>
+
+    collection := collectionClass new.
+    collection addAll: (1 to: collectionDatasetSize)
+
+    "Created: / 09-03-2014 / 10:23:48 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedAscAddIndividually
+    <benchmark: 'Insert ordered (asc) data individually'>
+
+    collection := collectionClass new.
+    1 to: collectionDatasetSize do:[:each | collection add:each]
+
+    "Created: / 09-03-2014 / 10:20:58 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedAscRemoveIndividually
+    <benchmark: 'Remove ordered (asc) data individually'>
+    <setup: #(#setUpCollectionDataset1 #setUpCollectionDataset1OrderedAsc)>
+
+    collectionDataset1OrderedAsc do:[:each | collection remove:each]
+
+    "Created: / 09-03-2014 / 10:32:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-03-2014 / 23:45:00 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescAddEnBloque  
+    <benchmark: 'Insert ordered (desc) data en-bloque'>
+
+    collection := collectionClass new.
+    collection addAll: (collectionDatasetSize downTo: 1)
+
+    "Created: / 09-03-2014 / 10:24:23 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescAddIndividually
+    <benchmark: 'Insert ordered (desc) data individually'>
+
+    collection := collectionClass new.
+    collectionDatasetSize downTo: 1 do:[:each | collection add:each]
+
+    "Created: / 09-03-2014 / 10:21:22 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkOrderedDescRemoveIndividually
+    <benchmark: 'Remove ordered (desc) data individually'>
+    <setup: #(#setUpCollectionDataset1 #setUpCollectionDataset1OrderedDesc)>
+
+    collectionDataset1OrderedDesc do:[:each | collection remove:each]
+
+    "Created: / 09-03-2014 / 10:32:26 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-03-2014 / 23:44:52 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomAddEnBloque
+    <benchmark: 'Insert random data en-bloque'>
+
+    collection := collectionClass new.
+    collection addAll:collectionDataset1
+
+    "Created: / 09-03-2014 / 10:18:38 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 10-03-2014 / 11:31:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomAddIndividually
+    <benchmark: 'Insert random data individually'>
+
+    collection := collectionClass new.
+    collectionDataset1 do:[:each | collection add:each]
+
+    "Created: / 09-03-2014 / 10:17:53 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+!
+
+benchmarkRandomRemoveIndividually
+    <benchmark: 'Remove random data individually'>
+    <setup: #setUpCollectionDataset1>
+
+    collectionDataset1 do:[:each | collection remove:each]
+
+    "Created: / 09-03-2014 / 10:30:02 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+    "Modified: / 09-03-2014 / 23:45:12 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkSortedCollectionLike methodsFor:'parameters'!
+
+collectionClassName:aSymbol
+    <parameter: 'Collection class name to benchmark' type: #Symbol values: #(SortedCollection AATree BinaryTree)>
+
+    super collectionClassName:aSymbol
+
+    "Modified (format): / 09-03-2014 / 11:07:16 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
+!BenchmarkSortedCollectionLike methodsFor:'setup'!
+
+setUpCollectionDataset1
+    collection := collectionClass new.
+    collection addAll: collectionDataset1
+
+    "Created: / 09-03-2014 / 10:26:56 / Jan Vrany <jan.vrany@fit.cvut.cz>"
+! !
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/s/benchmarks/stx/BenchmarkSpeedTester.st	Mon Mar 10 11:40:06 2014 +0000
@@ -0,0 +1,606 @@
+"{ Package: 'jv:calipel/s/benchmarks/stx' }"
+
+Object subclass:#BenchmarkSpeedTester
+	instanceVariableNames:''
+	classVariableNames:''
+	poolDictionaries:''
+	category:'CalipeL-S-Benchmarks-St/X'
+!
+
+!BenchmarkSpeedTester class methodsFor:'documentation'!
+
+history
+
+    "Created: / 12.11.1997 / 17:16:01 / cg"
+    "Created: #allocSpeedTest / 12.11.1997 / 17:17:26 / cg"
+    "Created: #integerMathSpeedTest / 12.11.1997 / 17:22:58 / cg"
+    "Created: #floatMathSpeedTest / 12.11.1997 / 17:23:55 / cg"
+    "Created: #stringCompareSpeedTest / 12.11.1997 / 17:26:11 / cg"
+    "Created: #arrayWriteSpeedTest / 12.11.1997 / 17:27:59 / cg"
+    "Created: #dictionaryWriteSpeedTest / 12.11.1997 / 17:31:41 / cg"
+    "Modified: #dictionaryWriteSpeedTest / 12.11.1997 / 17:32:18 / cg"
+    "Created: #orderedCollectionWriteSpeedTest / 12.11.1997 / 17:34:01 / cg"
+    "Created: #orderedCollectionIterateSpeedTest / 12.11.1997 / 17:35:53 / cg"
+    "Modified: #integerMathSpeedTest / 13.11.1997 / 17:06:21 / cg"
+    "Modified: #integerMathSpeedTest / 13.11.1997 / 17:11:41 / cg"
+    "Modified: #results / 30.7.1998 / 11:14:24 / cg"
+!
+
+results
+"
+     #(
+        ('alloc ........:' #allocSpeedTest)
+        ('arrayWrite ...:' #arrayWriteSpeedTest)
+        ('ordCollWrite .:' #orderedCollectionWriteSpeedTest)
+        ('ordCollIterate:' #orderedCollectionIterateSpeedTest)
+        ('dictWrite ....:' #dictionaryWriteSpeedTest)
+        ('integerMath ..:' #integerMathSpeedTest)
+        ('floatMath ....:' #floatMathSpeedTest)
+        ('stringCompare :' #stringCompareSpeedTest)
+     ) do:[:pair |
+        |title test|
+
+        title := pair at:1.
+        test := pair at:2.
+
+        Transcript show:(title);endEntry.
+        5 timesRepeat:[
+            Transcript show:((SpeedTester new perform:test) printStringLeftPaddedTo:7);endEntry.
+            Transcript space.
+        ].
+        Transcript cr;endEntry.
+     ].
+
+
+
+
+                   | alloc    | arrayWrite | ordCollWrite | ordCollIterate | dictWrite | integerMath | floatMath | stringCompare |
+times              |100000    |  100000    |    100000    |    100000      |   10000   |   300000    |  300000   |    100000     |  
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+NO JIT
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ alpha433 osf1     |   999    |   363      |     870      |      1166      |    250    |    3680     |    4424   |      359      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ hp B2000 cc       |  1625    |   440      |     979      |      2739      |    257    |    3676     |    4982   |      537      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P6/266 lx-ELF/pgcc|  1309    |   789      |    1171      |      1513      |    263    |    4702     |    7109   |      792      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P5/200 linux-ELF  |          |            |              |                |           |             |           |               |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P5/133 linux-aout |  2961    |  1088      |    2225      |      3455      |    586    |    6986     |   14264   |     1146      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ indy/200 irix5.3  |  3837    |  1261      |    3274      |      4262      |    822    |    8158     |   16010   |     1501      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ hp735/100 10.20/gc|  5909    |  1277      |    3906      |      9984      |   1165    |    8977     |   18630   |     1712      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ ss10/40 sol2.5    |  6240    |  2880      |    5837      |     10323      |   1654    |   20372     |   32018   |     3036      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ alpha233 osf1     |  7649(2) |  1332      |    5711(2)   |      6981      |   2039(2) |   18752     |   42058(2)|     1245      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ 486/50 linux-ELF  |          |            |              |                |           |             |           |               |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ 320H aix3.2.5/gcc | 18230    |  8659      |   20991      |     28303      |   6430    |   65679     |   90023   |     9946      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+                   | alloc    | arrayWrite | ordCollWrite | ordCollIterate | dictWrite | integerMath | floatMath | stringCompare |
+
+
+WITH JIT
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P6/400 lx-ELF/egcs|   434    |   119      |     335      |       581      |    109    |     691     |    2977   |       94      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ alpha433 osf1     |   549    |   159      |     559      |       862      |    187    |     876     |    2993   |       92      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ ultra/250 sol2.6  |   599    |   141      |     604      |      1429      |    242    |    1502     |    3234   |      111      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P6/266 lx-ELF/gcc |   610    |   199      |     483      |       843      |    170    |    1068     |    4071   |      128      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P6/266 lx-ELF/pgcc|   631    |   183      |     494      |       856      |    171    |    1068     |    4208   |      138      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P5/200 linux-ELF  |  1475(3) |   330      |     951      |      1610      |    296    |    2088     |    7935(3)|      209      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P5/200Nlinux-ELF  |  2142(3) |   331      |    1065      |      1582      |    323    |    2042     |    9974(3)|      215      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P5/200N W95       |  2625(3) |   369      |    1593      |      2114      |    506    |    3462     |   11142(3)|      178      |   
+                   |          |            |              |      1978      |    496    |    2253     |   10439   |               |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P5/150 linux-ELF  |  1520    |   297      |     970      |      1770      |    370    |    1962     |    7995   |      179      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ P5/133 linux-aout |  1669    |   422      |    1171      |      2401      |    405    |    2853     |    9470   |      241      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ indy/200 irix5.3  |  2160    |   521      |    1656      |      2847      |    612    |    5626     |   16653(1)|      316      |   
+                   |  1936    |   543      |    1844      |      2962      |    614    |    5458     |   11112(1)|      318      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ ss10/40 sol2.5    |  4099    |  1201      |    3622      |      8192      |   1381    |   16873     |   22720   |      813      |   
+                   |  4031    |            |              |      8032      |   1319    |             |   22537   |      807      |   
+                   |  4360    |  1189      |    3965      |      7724      |   1428    |    9627     |   21192   |      891      |
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ alpha233 osf1     |  6373(2) |   513      |    4079(2)   |      3799      |   1334(2) |    3910     |   34703(2)|      226      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ 486/50 linux-ELF  |  6472    |  2192      |    5505      |     11541      |   2082    |   12985     |   47204   |     1394      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ 320H aix3.2.5     |  9876    |  3208      |   11787      |     19300      |   3815    |   27664     |   67262   |     2194      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+ 68k/33Mhz next3.3 |  9936    |  3468      |    9164      |     17808      |   3496    |   59377     |  101936   |     2339      |   
+-------------------+----------+------------+--------------+----------------+-----------+-------------+-----------+---------------+
+                   | alloc    | arrayWrite | ordCollWrite | ordCollIterate | dictWrite | integerMath | floatMath | stringCompare |
+
+ Notice:
+   (1) mips JIT does send for float arithmetic; bytecode interpreter does it inline.
+   (2) the alpha is running 64 bit code (shuffling around twice as much data)
+       the 233 alpha tested had NO cache (actually, a totally useless configuration)
+   (3) the P5/200N used in the test was a notebook (lion) with a poor memory HW-interface;
+       (results in memory-intensive menchmarks being slower than on a P5/133)
+       the faster machine has the same CPU, but a much better memory interface.
+"
+! !
+
+!BenchmarkSpeedTester methodsFor:'tests'!
+
+allocSpeedTest
+    ObjectMemory markAndSweep.
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+                Array new:10;
+                      new:10;
+                      new:10;
+                      new:10;
+                      new:10;
+                      new:10;
+                      new:10;
+                      new:10;
+                      new:10;
+                      new:10
+        ].
+        ObjectMemory markAndSweep.
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:SpeedTester new allocSpeedTest;endEntry
+     ]
+    "
+
+    "Created: / 12.11.1997 / 17:17:26 / cg"
+    "Modified: / 19.4.1999 / 14:44:53 / cg"
+!
+
+arrayReadSpeedTest
+    |array junk|
+
+    junk := Object new.
+    array := Array new:10.
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+                array at:1;
+                      at:2;
+                      at:3;
+                      at:4;
+                      at:5;
+                      at:6;
+                      at:7;
+                      at:8;
+                      at:9;
+                      at:10
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:SpeedTester new arrayReadSpeedTest;endEntry
+     ]
+    "
+
+    "Modified: / 12.11.1997 / 18:09:04 / cg"
+    "Created: / 7.5.1998 / 15:02:55 / cg"
+!
+
+arrayWriteSpeedTest
+    |array junk|
+
+    junk := Object new.
+    array := Array new:10.
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+                array at:1 put:junk;
+                      at:2 put:junk;
+                      at:3 put:junk;
+                      at:4 put:junk;
+                      at:5 put:junk;
+                      at:6 put:junk;
+                      at:7 put:junk;
+                      at:8 put:junk;
+                      at:9 put:junk;
+                      at:10 put:junk
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:SpeedTester new arrayWriteSpeedTest;endEntry
+     ]
+    "
+
+    "Created: / 12.11.1997 / 17:27:59 / cg"
+    "Modified: / 12.11.1997 / 18:09:04 / cg"
+!
+
+dictionaryReadSpeedTest
+    |dict junk key1 key2 key3 key4 key5 key6 key7 key8 key9 key10|
+
+    junk := Object new.
+    key1 := Object new.
+    key2 := Object new.
+    key3 := Object new.
+    key4 := Object new.
+    key5 := Object new.
+    key6 := Object new.
+    key7 := Object new.
+    key8 := Object new.
+    key9 := Object new.
+    key10 := Object new.
+
+    dict := IdentityDictionary new.
+    dict at:key1 put:junk;
+         at:key2 put:junk;
+         at:key3 put:junk;
+         at:key4 put:junk;
+         at:key5 put:junk;
+         at:key6 put:junk;
+         at:key7 put:junk;
+         at:key8 put:junk;
+         at:key9 put:junk;
+         at:key10 put:junk.
+
+    ^ Time millisecondsToRun:[
+        10000 timesRepeat:[
+                dict at:key1;
+                     at:key2;
+                     at:key3;
+                     at:key4;
+                     at:key5;
+                     at:key6;
+                     at:key7;
+                     at:key8;
+                     at:key9;
+                     at:key10
+        ].
+    ].
+
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:(SpeedTester new dictionaryReadSpeedTest); endEntry
+     ]
+    "
+
+    "Created: / 7.5.1998 / 15:10:31 / cg"
+    "Modified: / 7.5.1998 / 15:16:47 / cg"
+!
+
+dictionaryWriteSpeedTest
+    |dict junk key1 key2 key3 key4 key5 key6 key7 key8 key9 key10|
+
+    junk := Object new.
+    key1 := Object new.
+    key2 := Object new.
+    key3 := Object new.
+    key4 := Object new.
+    key5 := Object new.
+    key6 := Object new.
+    key7 := Object new.
+    key8 := Object new.
+    key9 := Object new.
+    key10 := Object new.
+
+    ^ Time millisecondsToRun:[
+        10000 timesRepeat:[
+                dict := IdentityDictionary new.
+                dict at:key1 put:junk;
+                     at:key2 put:junk;
+                     at:key3 put:junk;
+                     at:key4 put:junk;
+                     at:key5 put:junk;
+                     at:key6 put:junk;
+                     at:key7 put:junk;
+                     at:key8 put:junk;
+                     at:key9 put:junk;
+                     at:key10 put:junk
+        ].
+    ].
+
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:(SpeedTester new dictionaryWriteSpeedTest); endEntry
+     ]
+    "
+
+    "Created: / 12.11.1997 / 17:31:41 / cg"
+    "Modified: / 7.5.1998 / 14:23:24 / cg"
+!
+
+floatMathSpeedTest
+    |a b c d e|
+
+    a := 87.0.
+    b := 53.0.
+    c := -87.0.
+    d := 42461.0.
+    e := 5.0.
+    ^ Time millisecondsToRun:[
+        300000 timesRepeat:[
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:SpeedTester new floatMathSpeedTest;endEntry
+     ]
+    "
+
+    "Created: / 12.11.1997 / 17:23:55 / cg"
+!
+
+integerMathSpeedTest
+    |a b c d e|
+
+    a := 87.
+    b := 53.
+    c := -87.
+    d := 42461.
+    e := 5.
+    ^ Time millisecondsToRun:[
+        300000 timesRepeat:[
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+            e := (e * a + b) * c + d.
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:SpeedTester new integerMathSpeedTest;endEntry
+     ]
+    "
+
+    "Created: / 12.11.1997 / 17:22:58 / cg"
+    "Modified: / 13.11.1997 / 17:11:41 / cg"
+!
+
+orderedCollectionIterateSpeedTest
+    |oc junk|
+
+    junk := Object new.
+    oc := OrderedCollection new:20.
+    oc addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk.
+
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+                oc do:[:element | ].
+                oc do:[:element | ].
+                oc do:[:element | ].
+                oc do:[:element | ].
+                oc do:[:element | ].
+                oc do:[:element | ].
+                oc do:[:element | ].
+                oc do:[:element | ].
+                oc do:[:element | ].
+                oc do:[:element | ].
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:(SpeedTester new orderedCollectionIterateSpeedTest);endEntry
+     ]
+    "
+
+    "Created: / 12.11.1997 / 17:35:53 / cg"
+    "Modified: / 12.11.1997 / 17:41:50 / cg"
+!
+
+orderedCollectionReadSpeedTest
+    |oc junk|
+
+    junk := Object new.
+    oc := OrderedCollection new:20.
+    oc addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk;
+       addLast:junk.
+
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+                oc at:1;
+                   at:2;
+                   at:3;
+                   at:4;
+                   at:5;
+                   at:6;
+                   at:7;
+                   at:8;
+                   at:9;
+                   at:10
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:(SpeedTester new orderedCollectionReadSpeedTest); endEntry
+     ]
+    "
+
+    "Modified: / 12.11.1997 / 17:44:58 / cg"
+    "Created: / 7.5.1998 / 15:11:21 / cg"
+!
+
+orderedCollectionWriteSpeedTest
+    |oc junk|
+
+    junk := Object new.
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+                oc := OrderedCollection new:20.
+                oc addLast:junk;
+                   addLast:junk;
+                   addLast:junk;
+                   addLast:junk;
+                   addLast:junk;
+                   addLast:junk;
+                   addLast:junk;
+                   addLast:junk;
+                   addLast:junk;
+                   addLast:junk
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:(SpeedTester new orderedCollectionWriteSpeedTest); endEntry
+     ]
+    "
+
+    "Created: / 12.11.1997 / 17:34:01 / cg"
+    "Modified: / 12.11.1997 / 17:44:58 / cg"
+!
+
+stringCompareSpeedTest
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long strings'.
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:SpeedTester new stringCompareSpeedTest;endEntry
+     ]
+    "
+
+    "Created: / 12.11.1997 / 17:26:11 / cg"
+    "Modified: / 12.11.1997 / 18:47:32 / cg"
+!
+
+stringCompareSpeedTest2
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'Xthis is a test of a compare of two long stringsX'.
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:SpeedTester new stringCompareSpeedTest2;endEntry
+     ]
+    "
+
+    "Modified: / 12.11.1997 / 18:47:32 / cg"
+    "Created: / 7.5.1998 / 14:32:59 / cg"
+!
+
+stringCompareSpeedTest3
+    ^ Time millisecondsToRun:[
+        100000 timesRepeat:[
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+            'this is a test of a compare of two long strings'
+            = 'this is a test of a compare of two long stringsX'.
+        ]
+    ]
+
+    "
+     5 timesRepeat:[
+         Transcript showCR:SpeedTester new stringCompareSpeedTest3;endEntry
+     ]
+    "
+
+    "Modified: / 12.11.1997 / 18:47:32 / cg"
+    "Created: / 7.5.1998 / 14:32:41 / cg"
+! !
+
--- a/s/benchmarks/stx/Make.proto	Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/Make.proto	Mon Mar 10 11:40:06 2014 +0000
@@ -82,7 +82,7 @@
 
 # run default testsuite for this package
 test: $(TOP)/goodies/builder/reports
-	$(MAKE) -C $(TOP)/goodies/builder/reports
+	$(MAKE) -C $(TOP)/goodies/builder/reports -f Makefile.init
 	$(TOP)/goodies/builder/reports/report-runner.sh -D . -r Builder::TestReport -p $(PACKAGE)
 
 
@@ -121,8 +121,18 @@
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)BenchmarkStXMicro.$(O) BenchmarkStXMicro.$(H): BenchmarkStXMicro.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkCollection.$(O) BenchmarkCollection.$(H): BenchmarkCollection.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkLinkedList.$(O) BenchmarkLinkedList.$(H): BenchmarkLinkedList.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX1.$(O) BenchmarkSTX1.$(H): BenchmarkSTX1.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX2.$(O) BenchmarkSTX2.$(H): BenchmarkSTX2.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX3.$(O) BenchmarkSTX3.$(H): BenchmarkSTX3.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSimpleHanoi.$(O) BenchmarkSimpleHanoi.$(H): BenchmarkSimpleHanoi.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSlopstone.$(O) BenchmarkSlopstone.$(H): BenchmarkSlopstone.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSmopstone.$(O) BenchmarkSmopstone.$(H): BenchmarkSmopstone.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSpeedTester.$(O) BenchmarkSpeedTester.$(H): BenchmarkSpeedTester.st $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 $(OUTDIR)jv_calipel_s_benchmarks_stx.$(O) jv_calipel_s_benchmarks_stx.$(H): jv_calipel_s_benchmarks_stx.st $(INCLUDE_TOP)/stx/libbasic/LibraryDefinition.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(INCLUDE_TOP)/stx/libbasic/ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkDictionaryLike.$(O) BenchmarkDictionaryLike.$(H): BenchmarkDictionaryLike.st $(INCLUDE_TOP)/jv/calipel/s/benchmarks/stx/BenchmarkCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSortedCollectionLike.$(O) BenchmarkSortedCollectionLike.$(H): BenchmarkSortedCollectionLike.st $(INCLUDE_TOP)/jv/calipel/s/benchmarks/stx/BenchmarkCollection.$(H) $(INCLUDE_TOP)/stx/libbasic/Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/s/benchmarks/stx/Make.spec	Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/Make.spec	Mon Mar 10 11:40:06 2014 +0000
@@ -50,15 +50,35 @@
 STCWARNINGS=-warnNonStandard
 
 COMMON_CLASSES= \
-	BenchmarkStXMicro \
+	BenchmarkCollection \
+	BenchmarkLinkedList \
+	BenchmarkSTX1 \
+	BenchmarkSTX2 \
+	BenchmarkSTX3 \
+	BenchmarkSimpleHanoi \
+	BenchmarkSlopstone \
+	BenchmarkSmopstone \
+	BenchmarkSpeedTester \
 	jv_calipel_s_benchmarks_stx \
+	BenchmarkDictionaryLike \
+	BenchmarkSortedCollectionLike \
 
 
 
 
 COMMON_OBJS= \
-    $(OUTDIR_SLASH)BenchmarkStXMicro.$(O) \
+    $(OUTDIR_SLASH)BenchmarkCollection.$(O) \
+    $(OUTDIR_SLASH)BenchmarkLinkedList.$(O) \
+    $(OUTDIR_SLASH)BenchmarkSTX1.$(O) \
+    $(OUTDIR_SLASH)BenchmarkSTX2.$(O) \
+    $(OUTDIR_SLASH)BenchmarkSTX3.$(O) \
+    $(OUTDIR_SLASH)BenchmarkSimpleHanoi.$(O) \
+    $(OUTDIR_SLASH)BenchmarkSlopstone.$(O) \
+    $(OUTDIR_SLASH)BenchmarkSmopstone.$(O) \
+    $(OUTDIR_SLASH)BenchmarkSpeedTester.$(O) \
     $(OUTDIR_SLASH)jv_calipel_s_benchmarks_stx.$(O) \
+    $(OUTDIR_SLASH)BenchmarkDictionaryLike.$(O) \
+    $(OUTDIR_SLASH)BenchmarkSortedCollectionLike.$(O) \
 
 
 
--- a/s/benchmarks/stx/abbrev.stc	Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/abbrev.stc	Mon Mar 10 11:40:06 2014 +0000
@@ -1,5 +1,15 @@
 # automagically generated by the project definition
 # this file is needed for stc to be able to compile modules independently.
 # it provides information about a classes filename, category and especially namespace.
-BenchmarkStXMicro BenchmarkStXMicro jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkCollection BenchmarkCollection jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkLinkedList BenchmarkLinkedList jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSTX1 BenchmarkSTX1 jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSTX2 BenchmarkSTX2 jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSTX3 BenchmarkSTX3 jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSimpleHanoi BenchmarkSimpleHanoi jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSlopstone BenchmarkSlopstone jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSmopstone BenchmarkSmopstone jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSpeedTester BenchmarkSpeedTester jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
 jv_calipel_s_benchmarks_stx jv_calipel_s_benchmarks_stx jv:calipel/s/benchmarks/stx '* Projects & Packages *' 3
+BenchmarkDictionaryLike BenchmarkDictionaryLike jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
+BenchmarkSortedCollectionLike BenchmarkSortedCollectionLike jv:calipel/s/benchmarks/stx 'CalipeL-S-Benchmarks-St/X' 0
--- a/s/benchmarks/stx/bc.mak	Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/bc.mak	Mon Mar 10 11:40:06 2014 +0000
@@ -67,8 +67,18 @@
 
 
 # BEGINMAKEDEPEND --- do not remove this line; make depend needs it
-$(OUTDIR)BenchmarkStXMicro.$(O) BenchmarkStXMicro.$(H): BenchmarkStXMicro.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkCollection.$(O) BenchmarkCollection.$(H): BenchmarkCollection.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkLinkedList.$(O) BenchmarkLinkedList.$(H): BenchmarkLinkedList.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX1.$(O) BenchmarkSTX1.$(H): BenchmarkSTX1.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX2.$(O) BenchmarkSTX2.$(H): BenchmarkSTX2.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSTX3.$(O) BenchmarkSTX3.$(H): BenchmarkSTX3.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSimpleHanoi.$(O) BenchmarkSimpleHanoi.$(H): BenchmarkSimpleHanoi.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSlopstone.$(O) BenchmarkSlopstone.$(H): BenchmarkSlopstone.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSmopstone.$(O) BenchmarkSmopstone.$(H): BenchmarkSmopstone.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSpeedTester.$(O) BenchmarkSpeedTester.$(H): BenchmarkSpeedTester.st $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 $(OUTDIR)jv_calipel_s_benchmarks_stx.$(O) jv_calipel_s_benchmarks_stx.$(H): jv_calipel_s_benchmarks_stx.st $(INCLUDE_TOP)\stx\libbasic\LibraryDefinition.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(INCLUDE_TOP)\stx\libbasic\ProjectDefinition.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkDictionaryLike.$(O) BenchmarkDictionaryLike.$(H): BenchmarkDictionaryLike.st $(INCLUDE_TOP)\jv\calipel\s\benchmarks\stx\BenchmarkCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
+$(OUTDIR)BenchmarkSortedCollectionLike.$(O) BenchmarkSortedCollectionLike.$(H): BenchmarkSortedCollectionLike.st $(INCLUDE_TOP)\jv\calipel\s\benchmarks\stx\BenchmarkCollection.$(H) $(INCLUDE_TOP)\stx\libbasic\Object.$(H) $(STCHDR)
 
 # ENDMAKEDEPEND --- do not remove this line
 
--- a/s/benchmarks/stx/jv_calipel_s_benchmarks_stx.st	Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/jv_calipel_s_benchmarks_stx.st	Mon Mar 10 11:40:06 2014 +0000
@@ -11,20 +11,21 @@
 !jv_calipel_s_benchmarks_stx class methodsFor:'description'!
 
 excludedFromPreRequisites
-    "list all packages which should be ignored in the automatic
-     preRequisites scan. See #preRequisites for more."
+    "list packages which are to be explicitely excluded from the automatic constructed
+     prerequisites list. If empty, everything that is found along the inheritance of any of
+     my classes is considered to be a prerequisite package."
 
     ^ #(
     )
 !
 
 mandatoryPreRequisites
-    "list all required mandatory packages.
-     Packages are mandatory, if they contain superclasses of the package's classes
-     or classes which are extended by this package.
-     This list can be maintained manually or (better) generated and
-     updated by scanning the superclass hierarchies
-     (the browser has a menu function for that)"
+    "list packages which are mandatory as a prerequisite.
+     This are packages containing superclasses of my classes and classes which
+     are extended by myself.
+     They are mandatory, beacuse we need these packages as a prerequisite for loading and compiling.
+     This method is generated automatically,
+     by searching along the inheritance chain of all of my classes."
 
     ^ #(
         #'stx:libbasic'    "LibraryDefinition - superclass of jv_calipel_s_benchmarks_stx "
@@ -32,23 +33,24 @@
 !
 
 referencedPreRequisites
-    "list all packages containing classes referenced by the packages's members.
-     This list can be maintained manually or (better) generated and
-     updated by looking for global variable accesses
-     (the browser has a menu function for that)
-     However, often too much is found, and you may want to explicitely
-     exclude individual packages in the #excludedFromPreRequisites method."
+    "list packages which are a prerequisite, because they contain
+     classes which are referenced by my classes.
+     We do not need these packages as a prerequisite for loading or compiling.
+     This method is generated automatically,
+     by searching all classes (and their packages) which are referenced by my classes."
 
     ^ #(
-        #'jv:calipel/s'    "BenchmarkInstance - referenced by BenchmarkStXMicro class>>run: "
+        #'jv:calipel/s'    "BenchmarkInstance - referenced by BenchmarkCollection class>>run: "
+        #'stx:libbasic2'    "BinaryTree - referenced by BenchmarkSortedCollectionLike class>>test_Btree "
+        #'stx:libview'    "Color - referenced by BenchmarkSTX1 class>>lineDrawing2 "
     )
 !
 
 subProjects
-    "list packages which are known as subprojects.
+    "list packages which are known as subprojects. 
      The generated makefile will enter those and make there as well.
-     However: they are not forced to be loaded when a package is loaded;
-     for those, redefine requiredPrerequisites"
+     However: they are not forced to be loaded when a package is loaded; 
+     for those, redefine requiredPrerequisites."
 
     ^ #(
     )
@@ -64,14 +66,24 @@
 
     ^ #(
         "<className> or (<className> attributes...) in load order"
-        BenchmarkStXMicro
+        BenchmarkCollection
+        BenchmarkLinkedList
+        BenchmarkSTX1
+        BenchmarkSTX2
+        BenchmarkSTX3
+        BenchmarkSimpleHanoi
+        BenchmarkSlopstone
+        BenchmarkSmopstone
+        BenchmarkSpeedTester
         #'jv_calipel_s_benchmarks_stx'
+        BenchmarkDictionaryLike
+        BenchmarkSortedCollectionLike
     )
 !
 
 extensionMethodNames
-    "lists the extension methods which are to be included in the project.
-     Entries are 2-element array literals, consisting of class-name and selector."
+    "list class/selector pairs of extensions.
+     A correponding method with real names must be present in my concrete subclasses"
 
     ^ #(
     )
@@ -80,25 +92,29 @@
 !jv_calipel_s_benchmarks_stx class methodsFor:'description - project information'!
 
 companyName
-    "Return a companyname which will appear in <lib>.rc"
+    "Returns a company string which will appear in <lib>.rc.
+     Under win32, this is placed into the dlls file-info"
 
     ^ 'My Company'
 !
 
 description
-    "Return a description string which will appear in vc.def / bc.def"
+    "Returns a description string which will appear in nt.def / bc.def"
 
     ^ 'Class Library'
 !
 
 legalCopyright
-    "Return a copyright string which will appear in <lib>.rc"
+    "Returns a copyright string which will appear in <lib>.rc.
+     Under win32, this is placed into the dlls file-info"
 
     ^ 'My CopyRight or CopyLeft'
 !
 
 productName
-    "Return a product name which will appear in <lib>.rc"
+    "Returns a product name which will appear in <lib>.rc.
+     Under win32, this is placed into the dlls file-info.
+     This method is usually redefined in a concrete application definition"
 
     ^ 'LibraryName'
 ! !
--- a/s/benchmarks/stx/libInit.cc	Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/libInit.cc	Mon Mar 10 11:40:06 2014 +0000
@@ -27,8 +27,18 @@
 void _libjv_calipel_s_benchmarks_stx_Init(pass, __pRT__, snd)
 OBJ snd; struct __vmData__ *__pRT__; {
 __BEGIN_PACKAGE2__("libjv_calipel_s_benchmarks_stx", _libjv_calipel_s_benchmarks_stx_Init, "jv:calipel/s/benchmarks/stx");
-_BenchmarkStXMicro_Init(pass,__pRT__,snd);
+_BenchmarkCollection_Init(pass,__pRT__,snd);
+_BenchmarkLinkedList_Init(pass,__pRT__,snd);
+_BenchmarkSTX1_Init(pass,__pRT__,snd);
+_BenchmarkSTX2_Init(pass,__pRT__,snd);
+_BenchmarkSTX3_Init(pass,__pRT__,snd);
+_BenchmarkSimpleHanoi_Init(pass,__pRT__,snd);
+_BenchmarkSlopstone_Init(pass,__pRT__,snd);
+_BenchmarkSmopstone_Init(pass,__pRT__,snd);
+_BenchmarkSpeedTester_Init(pass,__pRT__,snd);
 _jv_137calipel_137s_137benchmarks_137stx_Init(pass,__pRT__,snd);
+_BenchmarkDictionaryLike_Init(pass,__pRT__,snd);
+_BenchmarkSortedCollectionLike_Init(pass,__pRT__,snd);
 
 
 __END_PACKAGE__();
--- a/s/benchmarks/stx/stx.rc	Mon Mar 10 11:29:09 2014 +0000
+++ b/s/benchmarks/stx/stx.rc	Mon Mar 10 11:40:06 2014 +0000
@@ -25,7 +25,7 @@
       VALUE "LegalCopyright", "My CopyRight or CopyLeft\0"
       VALUE "ProductName", "LibraryName\0"
       VALUE "ProductVersion", "6.2.3.0\0"
-      VALUE "ProductDate", "Fri, 28 Feb 2014 16:08:14 GMT\0"
+      VALUE "ProductDate", "Mon, 10 Mar 2014 11:38:04 GMT\0"
     END
 
   END