1401 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			1401 lines
		
	
	
		
			44 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #! /usr/bin/env bash
 | |
| #!/bin/bash
 | |
| # was #!/arch/gnu/bin/bash
 | |
| # was #! /bin/sh
 | |
| # but /bin/sh didn't recognize the -nt operator
 | |
| 
 | |
| # "bench", a shell script to benchmark Scheme implementations
 | |
| #
 | |
| # Please report any errors or extensions to the author:
 | |
| #
 | |
| #   Marc Feeley (feeley@iro.umontreal.ca)
 | |
| #
 | |
| # The following have contributed to this benchmark suite:
 | |
| #
 | |
| #   Harvey Stein (abel@netvision.net.il)
 | |
| 
 | |
| # This script has been modified by Will Clinger (will@ccs.neu.edu).
 | |
| # 
 | |
| # The benchmarks must be contained within a src subdirectory
 | |
| # of the directory in which this script is run.
 | |
| #
 | |
| # FIXME: The tested systems live in different places on our
 | |
| # machines.  This should be cleaned up so a one-line change
 | |
| # will take care of it.
 | |
| 
 | |
| OSNAME="`( uname )`"
 | |
| 
 | |
| # The following definitions are not in use, but using them
 | |
| # might improve the script.
 | |
| 
 | |
| HOME="`( pwd )`"
 | |
| SRC="${HOME}/src"
 | |
| PREFIX="${HOME}/prefix"
 | |
| SUFFIX="${HOME}/suffix"
 | |
| 
 | |
| TEMP="/tmp/larcenous"
 | |
| 
 | |
| # On our Solaris machines, we can't install systems in
 | |
| # /usr/local, and some are in random places for historical
 | |
| # reasons.
 | |
| 
 | |
| setup ()
 | |
| {
 | |
|   case ${OSNAME} in
 | |
| 
 | |
|     "SunOS")
 | |
| 
 | |
|         APPS="/proj/will/Apps"
 | |
| 
 | |
|         CHICKEN="${APPS}/Chicken/bin/csc"
 | |
|         CHICKEN_INT="${APPS}/Chicken/bin/csi"
 | |
|         GSC="${APPS}/bin/gsc"
 | |
|         GSI="${APPS}/bin/gsi"
 | |
|         TWOBIT="/proj/will/LarcenyDev/twobit"
 | |
|         SCHEME48="${APPS}/Scheme48/scheme48-1.3/go"
 | |
|         MIT="${APPS}/bin/mitscheme"
 | |
|         LARCENY=${LARCENY:-"larceny"}
 | |
|         ;;
 | |
| 
 | |
|     "Linux")
 | |
| 
 | |
|         APPS="/usr/local"
 | |
| 
 | |
|         CHICKEN="${APPS}/bin/chicken-csc"
 | |
|         CHICKEN_INT="${APPS}/bin/chicken-csi"
 | |
|         GSC="${APPS}/bin/gambit-gsc"
 | |
|         GSI="${APPS}/bin/gambit-gsi"
 | |
|         TWOBIT="${APPS}/bin/twobit"
 | |
|         SCHEME48="${APPS}/bin/scheme48"
 | |
|         MIT="${APPS}/bin/mit-scheme"
 | |
|         PETITE_CHEZ="${APPS}/bin/petite-chez"
 | |
|         HENCHMAN="/home/henchman/bin/larceny"
 | |
|         LARCENY=${LARCENY:-"larceny"}
 | |
|         ;;
 | |
| 
 | |
|       "Darwin")
 | |
|         APPS="/opt/bin"
 | |
|         LARCENY="/Users/aghuloum/.opt/larceny-0.93-bin-native-ia32-macosx/larceny"
 | |
|         PETITE_CHEZ="/usr/bin/petite"
 | |
|         ;;
 | |
|   esac
 | |
| 
 | |
|   # For both Solaris and Linux machines.
 | |
| 
 | |
|   BIGLOO=${BIGLOO:-"${APPS}/bin/bigloo"}
 | |
|   MZSCHEME=${MZSCHEME:-"mzscheme"}
 | |
|  
 | |
|   CSC=$CHICKEN
 | |
|   CSI=$CHICKEN_INT
 | |
| }
 | |
| 
 | |
| setup
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| 
 | |
| error ()
 | |
| {
 | |
|   echo $1
 | |
|   echo '
 | |
| Usage: bench [-r runs] [-c clean] [-i iterfile] [-s setting] [-o options] <scheme-systems> <benchmarks>
 | |
| 
 | |
| <scheme-systems> is the abbreviated name of one or more
 | |
| language implementations to use, i.e.:
 | |
| 
 | |
|   gambit           for Gambit-C compiler.
 | |
|   gambit-int       for Gambit-C interpreter.
 | |
|   bigloo           for Bigloo compiler.
 | |
|   bigloo-int       for Bigloo interpreter.
 | |
|   chicken          for Chicken compiler.
 | |
|   chicken-int      for Chicken interpreter.
 | |
|   mzscheme         for MzScheme.
 | |
|   scheme48         for Scheme48.
 | |
|   larceny          for Larceny.
 | |
|   awk              for AWK.
 | |
|   cc               for '"cc"' C compiler.
 | |
|   gcc              for '"gcc"' C compiler.
 | |
|   java             for Java.
 | |
|   all              for all of the above.
 | |
|   all-interpreters for the above interpreters.
 | |
|   all-compilers    for the above compilers.
 | |
| 
 | |
| <benchmarks> is the name of one or more benchmarks
 | |
| to use, i.e.:
 | |
| 
 | |
|   all         for all the benchmarks
 | |
|   fib         for the fib benchmark
 | |
|   "fib boyer" for fib & boyer.
 | |
| 
 | |
| runs is the number of times to run each benchmark (default is 1).
 | |
| 
 | |
| clean is whether or not to clean out the build directory.
 | |
| true = clean.  Useful for testing or inspection.
 | |
| 
 | |
| iterfile is the file which specifies the number of iterations in
 | |
| each benchmark.  If not supplied, we use num-iters.scm for compilers
 | |
| and num-iters-int.scm for interpreters.  For testing, you might
 | |
| want to use one-iter.scm, which runs each test once.
 | |
| 
 | |
| setting is the benchmarking setting.  The possible values are:
 | |
| 
 | |
|   r5rs (default):
 | |
|        - generic arithmetic operations
 | |
|        - optional overflow detection on fixnum arithmetic
 | |
|        - mutable bindings for the definitions in the benchmark
 | |
|        - mutable predefined bindings (for +, car, ...)
 | |
| 
 | |
|   r6rs:
 | |
|        - generic arithmetic operations
 | |
|        - overflow detection on fixnum arithmetic (either produce a  
 | |
|          bignum or signal an exception)
 | |
|        - immutable bindings for the definitions in the benchmark
 | |
|        - immutable predefined bindings (for +, car, ...)
 | |
|        - safe execution (i.e. an exception must be signalled on errors)
 | |
| 
 | |
|   r6rs-unsafe:
 | |
|        - like r6rs setting but errors are not checked, but
 | |
|          fixnum arithmetic overflows are detected
 | |
| 
 | |
|   r6rs-fixflo:
 | |
|        - arithmetic operations are specialized to fixnum or flonum
 | |
|          arguments as appropriate and the fixnum operations may
 | |
|          wrap on overflow
 | |
|        - immutable bindings for the definitions in the benchmark
 | |
|        - immutable predefined bindings (for +, car, ...)
 | |
|        - safe execution (i.e. an exception must be signalled on errors)
 | |
| 
 | |
|   r6rs-fixflo-unsafe:
 | |
|        - like r6rs-fixflo setting but errors are not checked'
 | |
| 
 | |
|   exit
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| 
 | |
| cleanup ()
 | |
| {
 | |
|   if [ "$clean" = "true" ] ; then
 | |
|      # It's true that technically speaking, we should be in the build
 | |
|      # directory when this fcn is called.  Thus, we should be able to
 | |
|      # just do rm *.  However, that's kind of dangerous, so instead,
 | |
|      # we delete files newer than the mark file that evaluate () makes.
 | |
| 
 | |
|      for x in * ; do
 | |
|         if [ $x -nt clean_newer_than_me ] ; then
 | |
|           rm $x
 | |
|         fi
 | |
|      done
 | |
|   fi
 | |
|   rm clean_newer_than_me
 | |
| }
 | |
| 
 | |
| evaluate ()
 | |
| {
 | |
|   echo > clean_newer_than_me
 | |
|   sleep 1
 | |
|   {
 | |
|   echo
 | |
|   echo Testing $1 under ${NAME}-${setting}
 | |
|   echo Compiling...
 | |
|   make_src_code $1
 | |
|   $COMP $1
 | |
|   i=0
 | |
|   while [ "$i" -lt "$NB_RUNS" ]
 | |
|   do
 | |
|     echo Running...
 | |
|     $EXEC $1
 | |
|     i=`expr $i + 1`
 | |
|   done
 | |
|   cleanup
 | |
|   } 2>&1 | tee -a ../../results.${NAME}-${setting}
 | |
| 
 | |
| }
 | |
| 
 | |
| make_src_code ()
 | |
| {
 | |
|   case "$extension" in
 | |
|      ".awk")
 | |
|        cat ../../src/$1.awk > $1.awk
 | |
|        chmod +x $1.awk ;;
 | |
|      ".c")
 | |
|        cat ../../src/$1.c > $1.c ;;
 | |
|      ".java")
 | |
|        cat ../../src/$1.java > $1.java ;;
 | |
|      ".scm")
 | |
|        printf "$PREFIXCODE\n" "$1" "$1" > $1-prefix.scm
 | |
|        printf "$SUFFIXCODE\n" "$1" "$1" > $1-suffix.scm
 | |
|        cat $1-prefix.scm ../../prefix/prefix-${system}.scm | sed "s/;INSERTCODE/$INSERTCODE/" | cat - ../../num-iters/${iterfile} ../../src/$1.scm ../../suffix/suffix-${system}.scm $1-suffix.scm > $1.scm ;;
 | |
|      ".ss")
 | |
|        printf "$PREFIXCODE\n" "$1" "$1" > $1-prefix.scm
 | |
|        printf "$SUFFIXCODE\n" "$1" "$1" > $1-suffix.scm
 | |
|        cat ../../prefix/prefix-${system}.scm | sed "s/;INSERTCODE/$INSERTCODE/" | cat - ../../num-iters/${iterfile} ../../src/$1.scm ../../suffix/suffix-${system}.scm > $1-body.ss
 | |
|        cat $1-prefix.scm $1-suffix.scm > $1.ss ;;
 | |
|   esac
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # For handling setting that does not exist for a given compiler
 | |
| 
 | |
| nonexistent_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| nonexistent_exec ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to Gambit-C compiler
 | |
| 
 | |
| gambit_comp ()
 | |
| {
 | |
|   {
 | |
|     echo $GSC $COMPOPTS $1.scm
 | |
|   } | /usr/bin/time sh
 | |
| }
 | |
| 
 | |
| gambit_exec ()
 | |
| {
 | |
|   if test -f ./$1.o1
 | |
|   then $GSI -:m10000,d- ./$1.o1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| gambit_int_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| gambit_int_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | $GSI -:m10000,d-
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to bigloo compiler
 | |
| 
 | |
| bigloo_comp ()
 | |
| {
 | |
|   case $1 in
 | |
|      ctak|dynamic|fibc|maze|puzzle|scheme) usecc="-call/cc" ;;
 | |
|      *) usecc="" ;;
 | |
|   esac
 | |
|   /usr/bin/time $BIGLOO $usecc $COMPOPTS $1.scm -o $1
 | |
| }
 | |
| 
 | |
| bigloo_exec ()
 | |
| {
 | |
|   if test -f ./$1
 | |
|   then ./$1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| bigloo_int_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| bigloo_int_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | /usr/bin/time $BIGLOO -heapsize 10
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to Chicken compiler
 | |
| 
 | |
| chicken_comp ()
 | |
| {
 | |
|   {
 | |
|     echo $CSC $COMPOPTS $1.scm
 | |
|   } | /usr/bin/time sh
 | |
| }
 | |
| 
 | |
| chicken_exec ()
 | |
| {
 | |
|   if test -f ./$1
 | |
|   then ./$1 -:hi10M -:hs0
 | |
|   fi
 | |
| }
 | |
| 
 | |
| chicken_int_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| chicken_int_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | /usr/bin/time $CSI -:hi10M -:hs0
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to MzScheme
 | |
| 
 | |
| mzscheme_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| mzscheme_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | mzscheme $COMPOPTS
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to Scheme48
 | |
| 
 | |
| scheme48_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| scheme48_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | $SCHEME48 $COMPOPTS
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to Larceny
 | |
| 
 | |
| larceny_comp ()
 | |
| {
 | |
|   printf "$COMPCOMMANDS" "$1" | ${LARCENY} $COMPOPTS
 | |
|   :
 | |
| }
 | |
| 
 | |
| larceny_exec ()
 | |
| {
 | |
|   printf "$EXECCOMMANDS" "$1" | ${LARCENY} $COMPOPTS
 | |
| }
 | |
| 
 | |
| henchman_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| henchman_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | $HENCHMAN $COMPOPTS
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to Ikarus Scheme
 | |
| 
 | |
| ikarus_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| ikarus_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | ikarus
 | |
| }
 | |
| 
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to Chez Scheme
 | |
| 
 | |
| chez_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| chez_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | scheme
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to Petite Chez
 | |
| 
 | |
| petite_chez_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| petite_chez_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | /usr/bin/time $PETITE_CHEZ
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to MIT Scheme
 | |
| 
 | |
| mit_comp ()
 | |
| {
 | |
|   {
 | |
|     echo "(compile-file \"$1.scm\")" | /usr/bin/time ${MIT} ${COMPOPTS}
 | |
|   }
 | |
| }
 | |
| 
 | |
| mit_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | $MIT -heap 7000
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to stalin
 | |
| 
 | |
| stalin_comp ()
 | |
| {
 | |
|   mv $1.scm $1.sc
 | |
|   /usr/bin/time stalin -copt -O2 -Ob -Om -On -Or -Ot -s $1
 | |
| }
 | |
| 
 | |
| stalin_exec ()
 | |
| {
 | |
|   if test -f ./$1
 | |
|   then /usr/bin/time ./$1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to scm
 | |
| 
 | |
| scm_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| scm_exec ()
 | |
| {
 | |
|   printf "$REPLCOMMANDS" "$1" | /usr/bin/time scm -f
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to STk
 | |
| 
 | |
| stk_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| stk_exec ()
 | |
| {
 | |
|   ### Need to send output to /dev/null so that it doesn't hang when there's
 | |
|   ### an error...
 | |
|   printf "$REPLCOMMANDS" "$1" | /usr/bin/time snow -f < /dev/null
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to AWK
 | |
| 
 | |
| awk_comp ()
 | |
| {
 | |
|   :
 | |
| }
 | |
| 
 | |
| awk_exec ()
 | |
| {
 | |
|   /usr/bin/time ./$1.awk
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to CC
 | |
| 
 | |
| cc_comp ()
 | |
| {
 | |
|   {
 | |
|      echo cc -O -o $1 $1.c -lm -lpthread
 | |
|   } | /usr/bin/time sh
 | |
|   ls -l $1
 | |
| }
 | |
| 
 | |
| cc_exec ()
 | |
| {
 | |
|   if test -f ./$1
 | |
|   then /usr/bin/time ./$1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to GCC
 | |
| 
 | |
| gcc_comp ()
 | |
| {
 | |
|   {
 | |
|      echo gcc -O3 -o $1 $1.c -lm -lpthread
 | |
|   } | /usr/bin/time sh
 | |
|   ls -l $1
 | |
| }
 | |
| 
 | |
| gcc_exec ()
 | |
| {
 | |
|   if test -f ./$1
 | |
|   then /usr/bin/time ./$1
 | |
|   fi
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| # Definitions specific to Java
 | |
| 
 | |
| java_comp ()
 | |
| {
 | |
|   {
 | |
|      echo javac $1.java
 | |
|   } | /usr/bin/time sh
 | |
|   ls -l $1.class
 | |
| }
 | |
| 
 | |
| java_exec ()
 | |
| {
 | |
|   /usr/bin/time java $1
 | |
| }
 | |
| 
 | |
| # -----------------------------------------------------------------------------
 | |
| 
 | |
| GABRIEL_BENCHMARKS="boyer browse cpstak ctak dderiv deriv destruc diviter divrec puzzle takl triangl" # fft tak trav1 trav2
 | |
| 
 | |
| KVW_BENCHMARKS="ack array1 cat string sum1 sumloop tail wc"
 | |
| 
 | |
| #C_BENCHMARKS="fft fib fibfp mbrot nucleic pnpoly sum sumfp tak tfib $KVW_BENCHMARKS"
 | |
| C_BENCHMARKS="fft fib fibfp mbrot pnpoly sum sumfp tak $KVW_BENCHMARKS"
 | |
| 
 | |
| #OTHER_BENCHMARKS="conform dynamic earley fibc graphs lattice matrix maze mazefun nqueens paraffins peval pi primes ray scheme simplex slatex"
 | |
| OTHER_BENCHMARKS="conform dynamic earley fibc graphs lattice matrix maze mazefun nqueens paraffins peval primes ray scheme simplex slatex perm9 nboyer sboyer gcbench symbtesting"
 | |
| 
 | |
| NEW_BENCHMARKS="parsing gcold"
 | |
| 
 | |
| AWK_BENCHMARKS="$KVW_BENCHMARKS"
 | |
| 
 | |
| JAVA_BENCHMARKS="tfib"
 | |
| 
 | |
| #ALL_BENCHMARKS="succeed fail crash $GABRIEL_BENCHMARKS $C_BENCHMARKS $OTHER_BENCHMARKS"
 | |
| ALL_BENCHMARKS="$GABRIEL_BENCHMARKS $C_BENCHMARKS $OTHER_BENCHMARKS $NEW_BENCHMARKS"
 | |
| 
 | |
| ALL_INTERPRETERS='bigloo-int petite-chez gambit-int chicken-int scm stk'
 | |
| ALL_COMPILERS='gambit bigloo chicken mzscheme scheme48 larceny'
 | |
| ALL_GAMBIT='gambit gambit-int'
 | |
| ALL_NON_SCHEME='awk cc gcc java'
 | |
| ALL_SYSTEMS="$ALL_COMPILERS $ALL_INTERPRETERS $ALL_NON_SCHEME"
 | |
| 
 | |
| ## Arg processing...
 | |
| if [ "$#" -lt 2 ]; then
 | |
|   error '>>> At least two command line arguments are needed'
 | |
| fi
 | |
| 
 | |
| 
 | |
| cmdline="$0"
 | |
| flagsdone=0
 | |
| 
 | |
| NB_RUNS=1
 | |
| clean=true
 | |
| setting=r5rs
 | |
| options=""
 | |
| 
 | |
| while [ $# -gt 2 ] ; do
 | |
|    arg="$1"
 | |
|    shift
 | |
|    case $arg in
 | |
|       -r) NB_RUNS=$1    ; shift ;;
 | |
|       -c) clean=$1      ; shift ;;
 | |
|       -i) forceiters=$1 ; shift ;;
 | |
|       -s) setting=$1    ; shift ;;
 | |
|       -o) options=$1    ; shift ;;
 | |
|        *) error ">>> Unknown argument of $arg given." ;;
 | |
|    esac
 | |
| done
 | |
| 
 | |
| if [ "$#" -ne 2 ]; then
 | |
|   error '>>> Last two arguments must be <systems> and <benchmarks>'
 | |
| fi
 | |
| 
 | |
| case "$1" in
 | |
|                all) systems="$ALL_SYSTEMS" ;;
 | |
|   all-interpreters) systems="$ALL_INTERPRETERS" ;;
 | |
|      all-compilers) systems="$ALL_COMPILERS" ;;
 | |
|         all-gambit) systems="$ALL_GAMBIT" ;;
 | |
|                  *) systems="$1" ;;
 | |
| esac
 | |
| 
 | |
| case "$2" in
 | |
|       all) benchmarks="$ALL_BENCHMARKS" ;;
 | |
|   gabriel) benchmarks="$GABRIEL_BENCHMARKS" ;;
 | |
|       kvw) benchmarks="$KVW_BENCHMARKS" ;;
 | |
|     other) benchmarks="$OTHER_BENCHMARKS" ;;
 | |
|       awk) benchmarks="$AWK_BENCHMARKS" ;;
 | |
|         c) benchmarks="$C_BENCHMARKS" ;;
 | |
|      java) benchmarks="$JAVA_BENCHMARKS" ;;
 | |
|         *) benchmarks="$2" ;;
 | |
| esac
 | |
| 
 | |
| ## Run each benchmark under each system...
 | |
| for system in $systems ; do
 | |
| 
 | |
|    case "$system" in
 | |
| 
 | |
|     gambit) NAME='Gambit-C'
 | |
|             COMP=gambit_comp
 | |
|             EXEC=gambit_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             case "$setting" in
 | |
|               mostly-fixflo)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (mostly-fixnum-flonum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               mostly-flofix)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (mostly-flonum-fixnum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               mostly-fix)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (mostly-fixnum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               mostly-flo)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (mostly-flonum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               mostly-generic)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (mostly-generic))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-fixflo)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-fixnum-flonum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-flofix)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-flonum-fixnum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-fix)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-fixnum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-flo)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-flonum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-generic)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-generic))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r5rs)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (extended-bindings) (block))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (extended-bindings) (block) (not safe))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (extended-bindings) (block))(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 COMPOPTS="-dynamic -cc-options '$options'"
 | |
|                 INSERTCODE="(declare (standard-bindings) (extended-bindings) (block) (not safe))(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
|     gambit-sp) NAME='Gambit-C-sp'
 | |
|             COMP=gambit_comp
 | |
|             EXEC=gambit_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             case "$setting" in
 | |
|               mostly-fixflo)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (mostly-fixnum-flonum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               mostly-flofix)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (mostly-flonum-fixnum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               mostly-fix)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (mostly-fixnum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               mostly-flo)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (mostly-flonum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               mostly-generic)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (mostly-generic))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-fixflo)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-fixnum-flonum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-flofix)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-flonum-fixnum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-fix)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-fixnum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-flo)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-flonum))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               sb-mostly-generic)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (mostly-generic))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r5rs)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (extended-bindings) (block))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (extended-bindings) (block) (not safe))(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (extended-bindings) (block))(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 COMPOPTS="-dynamic -cc-options -D___OPTIMIZE_SPACE"
 | |
|                 INSERTCODE="(declare (standard-bindings) (extended-bindings) (block) (not safe))(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
| gambit-int) NAME='Gambit-C-int'
 | |
|             COMP=gambit_int_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=gambit_int_exec
 | |
|             iterfile=num-iters-int.scm
 | |
|             extension=".scm"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS="(load \"%s.scm\")"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS="(load \"%s.scm\")"
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS="(load \"%s.scm\")"
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS="(load \"%s.scm\")"
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS="(load \"%s.scm\")"
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
|     bigloo) NAME='Bigloo'
 | |
|             COMP=bigloo_comp
 | |
|             EXEC=bigloo_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 COMPOPTS="-O6 -copt -O3 -copt -fomit-frame-pointer"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 COMP=nonexistent_comp
 | |
|                 EXEC=nonexistent_exec
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 COMPOPTS="-O6 -copt -O3 -copt -fomit-frame-pointer"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 COMPOPTS="-Obench -copt -O3 -copt -fomit-frame-pointer"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 COMPOPTS="-O6 -copt -O3 -copt -fomit-frame-pointer"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 COMPOPTS="-Obench -copt -O3 -copt -fomit-frame-pointer"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
| bigloo-int) NAME='Bigloo-int'
 | |
|             COMP=bigloo_int_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=bigloo_int_exec
 | |
|             iterfile=num-iters-int.scm
 | |
|             extension=".scm"
 | |
|             INSERTCODE=""
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             REPLCOMMANDS="(load \"%s.scm\")"
 | |
|             ;;
 | |
| 
 | |
|    chicken) NAME='Chicken'
 | |
|             COMP=chicken_comp
 | |
|             EXEC=chicken_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             # Possible improvement: should -disable-interrupts be used?  What
 | |
|             # is lost when -disable-interrupts is used?  Is that a normal
 | |
|             # mode of execution?
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 COMPOPTS="-w -d0 -no-trace -no-usual-integrations"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 COMPOPTS="-w -d0 -O3 -no-trace -block"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 COMPOPTS="-w -d0 -O3 -no-trace -block -unsafe -unsafe-libraries"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 # It is impossible to use the fixnum/flonum specific
 | |
|                 # procedures in this setting because they are unsafe.
 | |
|                 COMPOPTS="-w -d0 -O3 -no-trace -block"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) no)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 COMP=nonexistent_comp
 | |
|                 EXEC=nonexistent_exec
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 COMPOPTS="-w -d0 -O3 -no-trace -block -unsafe -unsafe-libraries"
 | |
|                 INSERTCODE="(define-macro (if-fixflo yes no) yes)"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=""
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
| chicken-int) NAME='Chicken-int'
 | |
|             COMP=chicken_int_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=chicken_int_exec
 | |
|             iterfile=num-iters-int.scm
 | |
|             extension=".scm"
 | |
|             INSERTCODE=""
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             REPLCOMMANDS="(load \"%s.scm\")"
 | |
|             ;;
 | |
| 
 | |
|   mzscheme) NAME='MzScheme'
 | |
|             COMP=mzscheme_comp
 | |
|             EXEC=mzscheme_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".ss"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 COMPOPTS="-q"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="(require (lib \"include.ss\")) (include \"%s-body.ss\") (main) ; %s"
 | |
|                 REPLCOMMANDS="(load \"%s.ss\")"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 COMPOPTS="-q"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="(module %s mzscheme (define-syntax body-src \"%s-body.ss\")"
 | |
|                 SUFFIXCODE="(require (lib \"include.ss\")) (define-syntax (include-body stx) #\`(begin (include #,(syntax-local-value #'body-src)) (main))) (include-body)) ; %s %s"
 | |
|                 REPLCOMMANDS="(require \"%s.ss\")"
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 # MzScheme does not seem to have an unsafe mode.
 | |
|                 COMPOPTS="-q"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="(module %s mzscheme (define-syntax body-src \"%s-body.ss\")"
 | |
|                 SUFFIXCODE="(require (lib \"include.ss\")) (define-syntax (include-body stx) #\`(begin (include #,(syntax-local-value #'body-src)) (main))) (include-body)) ; %s %s"
 | |
|                 REPLCOMMANDS="(require \"%s.ss\")"
 | |
|                 COMP=nonexistent_comp
 | |
|                 EXEC=nonexistent_exec
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 # MzScheme does not seem to have fixnum/flonum specific arithmetic operators.
 | |
|                 COMPOPTS="-q"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="(module %s mzscheme (define-syntax body-src \"%s-body.ss\")"
 | |
|                 SUFFIXCODE="(require (lib \"include.ss\")) (define-syntax (include-body stx) #\`(begin (include #,(syntax-local-value #'body-src)) (main))) (include-body)) ; %s %s"
 | |
|                 REPLCOMMANDS="(require \"%s.ss\")"
 | |
|                 COMP=nonexistent_comp
 | |
|                 EXEC=nonexistent_exec
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 # MzScheme does not seem to have fixnum/flonum specific arithmetic operators.
 | |
|                 # MzScheme does not seem to have an unsafe mode.
 | |
|                 COMPOPTS="-q"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="(module %s mzscheme (define-syntax body-src \"%s-body.ss\")"
 | |
|                 SUFFIXCODE="(require (lib \"include.ss\")) (define-syntax (include-body stx) #\`(begin (include #,(syntax-local-value #'body-src)) (main))) (include-body)) ; %s %s"
 | |
|                 REPLCOMMANDS="(require \"%s.ss\")"
 | |
|                 COMP=nonexistent_comp
 | |
|                 EXEC=nonexistent_exec
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
|   scheme48) NAME='Scheme48'
 | |
|             COMP=scheme48_comp
 | |
|             EXEC=scheme48_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 COMPOPTS="-h 20000000"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=",bench off\n,open time posix bitwise ascii\n,load %s.scm\n,exit\n"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 COMPOPTS="-h 20000000"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=",bench on\n,open time posix bitwise ascii\n,load %s.scm\n,exit\n"
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 # Scheme48 does not seem to have an unsafe mode.
 | |
|                 COMPOPTS="-h 20000000"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=",bench on\n,open time posix bitwise ascii\n,load %s.scm\n,exit\n"
 | |
|                 COMP=nonexistent_comp
 | |
|                 EXEC=nonexistent_exec
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 # Scheme48 does not seem to have fixnum/flonum specific arithmetic operators.
 | |
|                 COMPOPTS="-h 20000000"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 REPLCOMMANDS=",bench on\n,open time posix bitwise ascii\n,load %s.scm\n,exit\n"
 | |
|                 COMP=nonexistent_comp
 | |
|                 EXEC=nonexistent_exec
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 # Scheme48 does not seem to have fixnum/flonum specific arithmetic operators.
 | |
|                 # Scheme48 does not seem to have an unsafe mode.
 | |
|                 COMPOPTS="-h 20000000"
 | |
|                 PREFIXCODE="; %s %s"
 | |
|                 SUFFIXCODE="; %s %s"
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 REPLCOMMANDS=",bench on\n,open time posix bitwise ascii\n,load %s.scm\n,exit\n"
 | |
|                 COMP=nonexistent_comp
 | |
|                 EXEC=nonexistent_exec
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
|    larceny) NAME='Larceny'
 | |
|             COMP=larceny_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=larceny_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 COMPSWITCHES="(compiler-switches 'standard)"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
| 		COMPSWITCHES="(compiler-switches 'fast-safe)"
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
| 		COMPSWITCHES="(compiler-switches 'fast-unsafe)"
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) yes)))"
 | |
| 		COMPSWITCHES="(compiler-switches 'fast-safe)"
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) yes)))"
 | |
| 		COMPSWITCHES="(compiler-switches 'fast-unxsafe)"
 | |
|                 ;;
 | |
|             esac
 | |
| 	    REPLCOMMANDS="(begin $COMPSWITCHES (load \"%s.scm\") (main))"
 | |
| 	    COMPCOMMANDS="(begin $COMPSWITCHES (compile-file \"%s.scm\"))"
 | |
| 	    EXECCOMMANDS="(begin (load \"%s.fasl\") (main))"
 | |
|             ;;
 | |
| 
 | |
|   henchman) NAME='Henchman'
 | |
|             COMP=henchman_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=henchman_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 REPLCOMMANDS="(begin (compiler-switches 'standard) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 REPLCOMMANDS="(begin (compiler-switches 'fast-safe) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 REPLCOMMANDS="(begin (compiler-switches 'fast-unsafe) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) yes)))"
 | |
|                 REPLCOMMANDS="(begin (compiler-switches 'fast-safe) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) yes)))"
 | |
|                 REPLCOMMANDS="(begin (compiler-switches 'fast-unsafe) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
|       ikarus) NAME='Ikarus'
 | |
|             COMP=ikarus_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=ikarus_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 REPLCOMMANDS="(begin (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 REPLCOMMANDS="(begin (import scheme) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
| 
 | |
|       chez) NAME='Chez-Scheme'
 | |
|             COMP=chez_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=chez_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 REPLCOMMANDS="(begin (optimize-level 1) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 REPLCOMMANDS="(begin (optimize-level 2) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs-unsafe)
 | |
|                 REPLCOMMANDS="(begin (optimize-level 3) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs-fixflo)
 | |
|                 REPLCOMMANDS="(begin (optimize-level 2) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs-fixflo-unsafe)
 | |
|                 REPLCOMMANDS="(begin (optimize-level 3) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
| petite-chez) NAME='Petite-Chez-Scheme'
 | |
|              COMP=petite_chez_comp
 | |
|              COMPOPTS=""
 | |
|              EXEC=petite_chez_exec
 | |
|              iterfile=num-iters.scm
 | |
|              extension=".scm"
 | |
|             INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|              PREFIXCODE="; %s %s"
 | |
|              SUFFIXCODE="; %s %s"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 REPLCOMMANDS="(begin (optimize-level 1) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 REPLCOMMANDS="(begin (optimize-level 2) (load \"%s.scm\") (main))"
 | |
|                 ;;
 | |
|             esac
 | |
|              ;;
 | |
| 
 | |
|        mit) NAME='MIT-Scheme'
 | |
|             COMP=mit_comp
 | |
|             COMPOPTS="-compiler -heap 6000"
 | |
|             EXEC=mit_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 REPLCOMMANDS="(begin (load \"%s\") (main))"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 INSERTCODE="(declare (usual-integrations)) (define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 REPLCOMMANDS="(begin (load \"%s\") (main))"
 | |
|                 ;;
 | |
|             esac
 | |
|             ;;
 | |
| 
 | |
|    mit-int) NAME='MIT-Scheme-int'
 | |
|             COMP=nonexistent_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=mit_exec
 | |
|             iterfile=num-iters-int.scm
 | |
|             extension=".scm"
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             case "$setting" in
 | |
|               r5rs)
 | |
|                 INSERTCODE="(define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 REPLCOMMANDS="(begin (load \"%s\") (main))"
 | |
|                 ;;
 | |
|               r6rs)
 | |
|                 INSERTCODE="(declare (usual-integrations)) (define-syntax if-fixflo (syntax-rules () ((if-fixflo yes no) no)))"
 | |
|                 REPLCOMMANDS="(begin (load \"%s\") (main))"
 | |
|                 ;;
 | |
|             esac
 | |
|             REPLCOMMANDS="(load \"%s.scm\")"
 | |
|             ;;
 | |
| 
 | |
|        scm) NAME='SCM'
 | |
|             COMP=scm_comp
 | |
|             COMPOPTS=""
 | |
|             EXEC=scm_exec
 | |
|             iterfile=num-iters-int.scm
 | |
|             extension=".scm"
 | |
|             INSERTCODE=""
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             REPLCOMMANDS="(load \"%s.scm\")"
 | |
|             ;;
 | |
| 
 | |
|     stalin) NAME='Stalin'
 | |
|             COMP=stalin_comp
 | |
|             COMPOPTS=""
 | |
|             INSERTCODE=""
 | |
|             EXEC=stalin_exec
 | |
|             iterfile=num-iters.scm
 | |
|             extension=".scm"
 | |
|             INSERTCODE=""
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             REPLCOMMANDS=""
 | |
|             ;;
 | |
| 
 | |
|        stk) NAME='STk'
 | |
|             COMP=stk_comp
 | |
|             COMPOPTS=""
 | |
|             INSERTCODE=""
 | |
|             EXEC=stk_exec
 | |
|             iterfile=num-iters-int.scm
 | |
|             extension=".scm"
 | |
|             INSERTCODE=""
 | |
|             PREFIXCODE="; %s %s"
 | |
|             SUFFIXCODE="; %s %s"
 | |
|             REPLCOMMANDS="(load \"%s.scm\")"
 | |
|             ;;
 | |
| 
 | |
|        awk) NAME='AWK'
 | |
|             COMP=awk_comp
 | |
|             COMPOPTS=""
 | |
|             INSERTCODE=""
 | |
|             EXEC=awk_exec
 | |
|             iterfile=
 | |
|             extension=".awk"
 | |
|             ;;
 | |
| 
 | |
|         cc) NAME='CC'
 | |
|             COMP=cc_comp
 | |
|             COMPOPTS=""
 | |
|             INSERTCODE=""
 | |
|             EXEC=cc_exec
 | |
|             iterfile=
 | |
|             extension=".c"
 | |
|             ;;
 | |
| 
 | |
|        gcc) NAME='GCC'
 | |
|             COMP=gcc_comp
 | |
|             COMPOPTS=""
 | |
|             INSERTCODE=""
 | |
|             EXEC=gcc_exec
 | |
|             iterfile=
 | |
|             extension=".c"
 | |
|             ;;
 | |
| 
 | |
|       java) NAME='Java'
 | |
|             COMP=java_comp
 | |
|             COMPOPTS=""
 | |
|             INSERTCODE=""
 | |
|             EXEC=java_exec
 | |
|             iterfile=
 | |
|             extension=".java"
 | |
|             ;;
 | |
| 
 | |
|          *) error '>>> Unknown system'
 | |
|             ;;
 | |
|    esac
 | |
| 
 | |
|    if [ -n "$forceiters" ] ; then iterfile="$forceiters" ; fi
 | |
| 
 | |
|    cd sys/$system
 | |
|    if [ $? != 0 ] ; then
 | |
|       echo "ERROR: Can't change to directory sys/$system."
 | |
|       exit 1
 | |
|    fi
 | |
| 
 | |
|    {
 | |
|       echo
 | |
|       echo '****************************'
 | |
|       echo Benchmarking ${NAME}-${setting} on `date` under `uname -a`
 | |
|    } >> ../../results.${NAME}-${setting}
 | |
| 
 | |
|    for program in $benchmarks ; do
 | |
|       evaluate $program
 | |
|    done
 | |
|    cd ../..
 | |
|    if [ $? != 0 ] ; then
 | |
|       echo "ERROR: Can't change back to benchmark directory."
 | |
|       exit 1
 | |
|    fi
 | |
| done
 |