Diff for /gforth/vmgen-ex/README between versions 1.1 and 1.2

version 1.1, 2001/04/29 11:28:23 version 1.2, 2001/05/01 10:20:55
Line 1 Line 1
 This directory contains a working example for using vmgen.  It's a  This directory contains a working example for using vmgen.  It's a
 small programming language.  small Modula-2-like programming language.
   
   You can build the example by first installing Gforth and then saying,
   in this directory:
   
   make
   
   You can check that it works with
   
   make check
   
   You can run mini programs like this:
   
   ./mini fib.mini
   
   To learn about the options, type
   
   ./mini -h
   
   The files in this directory are:
   
   Makefile
   README
   disasm.c                wrapper file
   engine.c                wrapper file
   peephole.c              wrapper file
   profile.c               wrapper file
   mini-inst.vmg           simple VM instructions
   mini-super.vmg          superinstructions (empty at first)
   mini.h                  common declarations
   mini.l                  scanner
   mini.y                  front end (parser, VM code generator)
   support.c               main() and other support functions
   fib.mini                example mini program
   simple.mini             example mini program
   test.mini               example mini program (tests everything)
   test.out                test.mini output
   stat.awk                script for aggregating profile information
   peephole-blacklist      list of instructions not allowed in superinstructions
   seq2rule.awk            script for creating superinstructions
   
   For your own interpreter, you would typically copy the following files
   and change little, if anything:
   
   disasm.c                wrapper file
   engine.c                wrapper file
   peephole.c              wrapper file
   profile.c               wrapper file
   stat.awk                script for aggregating profile information
   seq2rule.awk            script for creating superinstructions
   
   You would typically change much in or replace the following files:
   
   Makefile
   mini-inst.vmg           simple VM instructions
   mini.h                  common declarations
   mini.l                  scanner
   mini.y                  front end (parser, VM code generator)
   support.c               main() and other support functions
   peephole-blacklist      list of instructions not allowed in superinstructions
   
   
   Using profiling to create superinstructions:
   
   I have not added rules for this in the Makefile (there are many
   options for selecting superinstructions, and I did not want to
   hardcode one into the Makefile), but there are some supporting
   scripts, and here's an example:
   
   Suppose you want to use fib.mini and test.mini as training programs,
   you get the profiles like this:
   
   make fib.prof test.prof
   
   You can aggregate these profiles with stat.awk:
   
   awk -f stat.awk fib.prof test.prof
   
   The result contains lines like:
   
         2      16        36910041 loadlocal lit
   
   This means that the sequence "loadlocal lit" statically occurs a total
   of 16 times in 2 profiles, with a dynamic execution count of 36910041.
   
   The numbers can be used in various ways to select superinstructions.
   E.g., if you just want to select all sequences with a dynamic
   execution count exceeding 10000, you would use the following pipeline:
   
   awk -f stat.awk fib.prof test.prof|
   awk '$3>=10000'|                #select sequences
   fgrep -v -f peephole-blacklist| #eliminate wrong instructions
   awk -f seq2rule.awk|          #transform sequences into superinstruction rules
   sort -k 3 >mini-super.vmg       #sort sequences
   
   The peephole-blacklist contains all instructions where stack caching
   might lead to problems (for mini: call, return); the sort step is
   necessary because currently the superinstructions containing all
   sequence prefixes must precede a superinstruction of length >2.
   
   Now you can create a version of mini with superinstructions by just saying
   
   make
   
   Before you generate new profiles for creating superinstructions, you
   have to again create a version of mini without superinstructions:
   
   echo >mini-super.vmg
   make
   

Removed from v.1.1  
changed lines
  Added in v.1.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>