Doc fixes from Andrew
authorMichael Meissner <gnu@the-meissners.org>
Thu, 4 Apr 1996 20:03:33 +0000 (20:03 +0000)
committerMichael Meissner <gnu@the-meissners.org>
Thu, 4 Apr 1996 20:03:33 +0000 (20:03 +0000)
sim/ppc/ChangeLog
sim/ppc/INSTALL [new file with mode: 0644]

index 3fabbed..1a506b6 100644 (file)
@@ -1,3 +1,12 @@
+Sun Mar 31 15:47:33 1996  Andrew Cagney  <cagney@kremvax.highland.com.au>
+
+        * INSTALL: Update to reflect gdb-4.16.
+
+        * RUN: Update to reflect gdb-4.16.  Review notes on building a BSD
+        runtime environment.
+
+       * README: Point out copyright status of simulator in introduction.
+
 Fri Mar 29 12:17:58 1996  Michael Meissner  <meissner@tiktok.cygnus.com>
 
        * options.c (print_options): Print out WITH_STDIO.
diff --git a/sim/ppc/INSTALL b/sim/ppc/INSTALL
new file mode 100644 (file)
index 0000000..45cb64c
--- /dev/null
@@ -0,0 +1,811 @@
+
+               PSIM - model the PowerPC environment
+
+    Copyright (C) 1994-1996, Andrew Cagney <cagney@highland.com.au>.
+
+    ----------------------------------------------------------------------
+
+
+                       Building PSIM
+
+       This file describes how to build the program PSIM
+
+       o       Walk through a basic build
+
+       o       Discussion of PSIM's components and
+               how they relate to the build process
+
+       o       Detailed description of each of PSIM's
+               compile time configuration options
+
+
+    ----------------------------------------------------------------------
+
+
+BUILDING PSIM:
+
+PSIM 1.0.2 is included in GDB-4.16.  To build PSIM you will need the
+following:
+
+       gdb-4.16.tar.gz         Available from your favorite GNU
+                               ftp site
+
+       gcc                     GCC version two includes suport
+                               for long long (64bit integer)
+                               arrithemetic which PSIM uses.  Hence
+                               it is recommended that you build PSIM
+                               using GCC.
+                               
+Method:
+
+       1.      Unpack gdb
+
+               $ cd .../scratch
+               $ gunzip < gdb-4.16.tar.gz | tar xf -
+
+
+       2.      Configure gdb
+
+               First consult the gdb documentation
+
+               $ cd .../scratch
+               $ cd gdb-4.16
+               $ more README
+               $ more gdb/README
+
+               then something like (I assume SH):
+
+               $ CC=gcc ./configure \
+                        --enable-sim-powerpc \
+                        --target=powerpc-unknown-eabi \
+                        --prefix=/applications/psim
+
+
+       4.      Build (again specifying GCC)
+
+               $ make CC=gcc
+
+               alternatively, if you are short on disk space or only
+               want to build the simulator:
+
+               $ ( cd libiberty && make CC=gcc )
+               $ ( cd bfd && make CC=gcc )
+               $ ( cd sim/ppc && make CC=gcc )
+
+
+       5.      Install
+
+               $ make CC=gcc install
+
+               or just
+
+               $ cp gdb/gdb ~/bin/powerpc-unknown-eabisim-gdb
+               $ cp sim/ppc/run ~/bin/powerpc-unknown-eabisim-run
+
+
+    ----------------------------------------------------------------------
+
+
+UPDATING PSIM:
+
+
+A PSIM is an ongoing development.  Occasional snapshots which both contain new features and fix old bugs are made available.   See the ftp directory:
+
+       ftp://ftp.ci.com.au/pub/psim/beta
+or     ftp://cambridge.cygnus.com/pub/psim/beta
+
+for the latest version.  To build/install one of these snapshots, you
+replace the sim/ppc found in the gdb archive with with one from the
+snapshot.  Then just re-configure and rebuild/install.
+
+       Procedure:
+
+       0.      A starting point
+
+               $ cd gdb-4.16
+
+
+       1.      Remove the old psim directory
+
+               $ mv sim/ppc sim/old.ppc
+
+
+       2.      Unpack the new one
+
+               $ gunzip < ../psim-NNNNNN.tar.gz | tar tf -
+               $ gunzip < ../psim-NNNNNN.tar.gz | tar tf -
+
+
+       3.      Reconfigure/rebuild (as seen above):
+
+               $ CC=gcc ./configure \
+                       --enable-sim-powerpc \
+                        --target=powerpc-unknown-eabi \
+                        --prefix=/applications/psim
+               $ make CC=gcc
+
+
+    ----------------------------------------------------------------------
+
+
+UPDATES TO GDB:
+
+From time to time, problems involving the integration of PSIM into gdb
+are found.  While eventually each of these problems is resolved there
+can be periouds during which a local hack may be needed.
+
+At the time of writing the following were outstanding:
+
+       ATTACH command:
+
+               ftp://ftp.ci.com.au/pub/psim/gdb-4.15+attach.diff.gz
+       or      ftp://cambridge.cygnus.com/pub/psim/gdb-4.15+attach.diff.gz
+       
+       PSIM, unlike the other simulators found in GDB, is able to load
+       the description of a target machine (including the initial
+       state of all processor registers) from a file.
+
+       Unfortunatly GDB does not yet have a standard command that
+       facilitates the use of this feature.  Until such a command is
+       added, the patch (hack?) gdb-4.15+attach.diff.gz can be used to
+       extend GDB's attach command so that it can be used to initialize
+       the simulators configuration from a file.
+
+
+
+    ----------------------------------------------------------------------
+
+
+RUNNING PROGRAMS:
+
+
+See the file:
+
+       ftp://ftp.ci.com.au/pub/psim/RUN
+or     ftp://cambridge.cygnus.com/pub/psim/RUN
+
+
+    ----------------------------------------------------------------------
+
+
+COMPILE TIME CONFIGURATION OPTIONS:
+
+
+PSIM's compile time configuration is controlled by autoconf.  PSIM's
+configure script recognises options of the form:
+
+               --enable-sim-<option>[=<val>]
+
+And can be specified on the configure command line (at the top level
+of the gdb directory tree) vis:
+
+               $ cd gdb-4.15
+               $ CC=gcc ./configure \
+                        --target=powerpc-unknown-eabisim \
+                        --prefix=/applications/psim \
+                       --enable-sim-inline
+               $ make CC=gcc
+
+For a brief list of PSIM's configuration options, configure --help
+will list them vis:
+
+       $ cd sim/ppc
+       $ ./configure --help
+
+Each PSIM specific option is discussed in detail below.
+
+
+
+--enable-sim-cflags=<opts>
+
+
+Specify additional C compiler flags that are to be used when compiling
+just PSIM.
+
+PSIM places heavy demands on both the host machine and its C compiler.
+So that the builder has better control over the compiler the above
+option can be used to pass additional options to the compiler while PSIM is being built.
+
+Ex: No debug information
+
+PSIM can be built with everything inline.  Unfortunately, because of
+all the debugging information generated the C compiler can grow very
+very large as a result.  For GCC, the debug information can be
+restricted with the `-g0' option.  To specify that this option should
+be include in the CFLAGS when compiling the psim source code use:
+
+       --enable-sim-cflags=-g0
+
+Ex: Additional optimization flags
+
+A significant gain in performance can be achieved by tuning the
+optimization flags passed to the C compiler.  For instance on an x86
+you may consider:
+
+       --enable-sim-cflags='-g0 -O2 -fno-strength-reduce -f...'
+
+
+
+--enable-sim-warnings=<flags>
+
+
+Turn on additional GCC specific checks.
+
+Some hosts (NetBSD, Linux, Solaris-2.5) have complete header files
+that include correct prototypes for all library functions.  On such
+hosts, PSIM can be built with many more than the standard C checks
+enabled.  The option --enable-sim-warnings controls this.
+
+Ex: Default warnings
+
+With just --enable-sim-warnings, the following -W options are enabled:
+-Werror -Wall -Wpointer-arith -Wmissing-prototypes.
+
+
+
+--enable-sim-opcode=which
+
+
+Specify the file containing the rules for generating the instruction
+decode and execute functions from the file ppc-instructions.
+
+The form of the instruction decode and execute functions is controlled
+by an opcode table.  It specifies: the combination of switch
+statements and jump tables to use when decoding an instruction and how
+much of each instruction should be decoded before calling the
+instruction execute function.
+
+PSIM includes a number of opcode tables:
+
+       psim-opcode-simple
+               Generates a small compact two level switch statement
+               that will compile quickly and run reasonably fast.
+
+               This may be useful on a small machine.
+
+       psim-opcode-complex
+               (the default) A fairly aggressive instruction decode
+               table that includes the breaking out of a number
+               of special instruction cases (eg RA==0 vs RA!=0).
+
+       psim-opcode-flat
+               Identical to complex except a switch statement
+               is used.  Ideal for when the icache is being
+               disabled.
+
+       psim-opcode-stupid
+               In addition to the instruction decodes performed
+               by psim-opcode-complex, this also full decodes mtspr,
+               mfspr, and branch instructions.  The table generated
+               is very large and, as a consequence, only performs
+               well on machines with large caches.
+
+       ppc-opcode-test-1
+       ppc-opcode-test-2
+               Generate test (but workable) tables.  These exercise
+               PSIM's ability to generate instruction decode functions
+               that are a combination of jump-tables and switch statements.
+
+The program igen generates the instruction tables from the opcode
+table and the ppc-instruction table.
+
+
+
+--enable-sim-switch
+
+
+Enable/disable the use of a switch statement when looking up the
+attributes of a SPR register.
+
+The PowerPC architecture defines a number of Special Purpose Registers
+(SPR's).  Associated with each of these registers are a number of
+attributes (such as validity or size) which the instructions
+mtspr/mfspr query as part of their execution.
+
+For PSIM, this information is kept in a table (ppc-spr-table).  The
+program dgen converts this table into lookup routines (contained in
+the generated files spreg.h spreg.c) that can be used to query an
+SPR's attributes.  Those lookup routines are either implemented as
+a table or alternatively as a number of switch statements:
+
+       spr_table spr_info[] = { .... };
+       int spr_length(sprs spr) { return spr_info[spr].length; }
+
+vs
+
+       int spr_length(sprs spr) { switch (spr) { case ..: return ..; } }
+
+In general the first implementation (a table) is the most efficient.
+It may, however, prove that when performing an aggressive optimization
+where both the SPR is known and the above function is being inlined
+(with the consequence that GCC can eliminate the switch statement)
+that the second choice is improves performance.
+
+In practice, only a marginal (if any benefit) has ever been seen.
+
+
+
+--enable-sim-duplicate
+
+
+Create a duplicate copy of each instruction function hardwiring
+instruction fields that would have otherwise have been variable.
+
+As discussed above, igen outputs a C function generated from the file
+ppc-instructions (using the opcode rules) for each of the
+instructions.  Thus multiple entries in the instruction decode tables
+may be pointing back at the same function.  Enabling duplicate, will
+result in psim creating a duplicate of the instruction's function for
+each different entry in the instruction decode tables.
+
+For instance, given the branch instruction:
+
+       0.19,6.BO,11.BI,16./,21.528,31.LK
+       ...
+       if (LK) LR = (spreg)IEA(CIA + 4);
+       ...
+
+igen as part of its instruction lookup table may have generated two
+different entries - one for LK=0 and one for LK=1.  With duplicate
+enabled, igen outputs (almost) duplicate copies of branch function,
+one with LK hardwired to 0 and one with LK hardwired to 1.
+
+By doing this the compiler is provided with additional information that
+will allow it possibly eliminate dead code.  (such as the assignment
+to LK if LR==0).
+
+Ex: default
+
+Because this feature is such a big win, --enable-sim-duplicate is
+turned on by default.
+
+Ex: A small machine
+
+Only rarely (eg on a very small host) would this feature need to be
+disabled (using: --disable-sim-duplicate).
+
+
+
+--enable-sim-filter=rule
+
+
+Include/exclude PowerPC instructions that are specific to a particular
+implementation.
+
+Some of the PowerPC instructions included in the file ppc-instructions
+are limited to certain specific PPC implementations.  For instance,
+the instruction:
+
+       0.58,6.RT,11.RA,16.DS,30.2:DS:64::Load Word Algebraic
+
+Is only valid for the 64bit architecture.  The enable-sim-filter flag
+is passed to igen so that it can `filter out' any invalid
+instructions.  The filter rule has the form:
+
+       -f <name>
+
+thus:
+
+       --enable-sim-filter='-f 64'
+
+(the default) would filter out all 64bit instructions.
+
+Ex: Remove floating point instructions
+
+A given 32bit PowerPC implementation may not include floating point
+hardware.  Consequently there is little point in including floating
+point instructions in the instruction table.  The option:
+
+       --enable-sim-filter='-f 64 -f f'
+
+will eliminate all floating point instructions from the instruction
+table.
+
+
+
+--enable-sim-icache=size
+
+
+Set the size of the cache used to hold decoded instructions.
+
+Psim executes instructions in two separate steps:
+
+       o       instruction fetch/decode
+
+       o       instruction execution
+
+For a given instruction, the first stage need only be executed once
+(the first time the instruction is encountered) while the second stage
+must be executed every time the program `executes' that instruction.
+
+Exploiting this, PSIM can maintain a cache of decoded instructions.
+It will then use the decoded instruction from the cache in preference
+to fetching/decoding the real instruction from memory.
+
+Ex: default
+
+Because this feature is normally such a big win, it is enabled by
+default (with the cache size set to 1024 entries).
+
+The 1024 entries equals 4096 bytes (or one page) of instructions.
+Larger caches can be used but with caution - PSIM does not check for
+address aliasing within its instruction cache.
+
+Ex: disable the cache
+
+There may be cases (for instance where the cache has a low hit rate)
+where the psim performs better with no instruction cache.  For such
+situations, the cache can be disabled vis: --disable-sim-icache.
+
+
+
+--enable-sim-inline[=module]
+
+
+Specify the inlining of one or more modules.
+
+Many architectures (in particular the x86) suffer from a large
+function call overhead.  By eliminating function calls (through
+inlining of functions) a large performance gain can be achieved.
+
+In PSIM, modules are inlined in one of two possible ways.  Some
+modules (such as the byte swapping code) can be inlined into any
+module that calls them.  Other modules, due to complex
+interdependencies, are only inlined as a group when compiling the
+external interface module psim.c.
+
+Ex: default
+
+By default the modules endian (handle be/le), bits (manipulate
+bit-fields within words), cpu (the processor object) and events
+(timers) are inlined in any module that calls them.  This gives a
+reasonable performance gain with little additional compilation
+overhead.
+
+Ex: recommended  --enable-sim-inline
+
+Assuming you machine is reasonably well configured, this option is
+highly recommended.  On the x86 several orders of magnitude
+improvement in performance is possible.
+
+Ex: fine tuning
+
+The file std-config.h contains a detailed description of how the
+inlining works.  Individual modules can be inlined by specifying them.
+For if you have a very large cache the model module could be inlined
+with:
+
+       --enable-sim-inline=MODEL
+
+
+
+--enable-sim-bswap
+
+
+(x86 specific) Use the i486/P5/P6 byte swap instruction.
+
+PSIM contains generic byte swapping code.  For the x86 (P[4-6]) PSIM
+can be built so that it uses the bswap instruction instead of relying
+on the compiler to generate byte swap code.
+
+Ex: default
+
+By default, when compiling with GCC-2 on an i486/P5/P6 the bswap
+instruction is used.
+
+
+
+--enable-sim-endian=endian
+
+
+Specify the byte order of the target.
+
+By default, PSIM is able to execute both big and little endian
+executables.  As a consequence, every byte swap routine includes a
+test to see if the byte swap is really needed.  By specifying the byte
+order of the target (and the host below) the need for this test can be
+eliminated.
+
+Clearly setting the byte order of the target is only useful when known
+before hand.
+
+
+
+--enable-sim-hostendain=end
+
+
+As above but for the host.
+
+Normally this option should not be needed. configure (autoconf) should
+determine the byte order of the host automatically.  However if for
+some reason there is a problem, this option can be used to override
+autoconf.
+
+
+
+--enable-sim-smp=n
+
+
+Set the maximum number of processors that PSIM can model.
+
+Psim can model (with small limitation discussed else where) a
+multi-processor PowerPC environment.  While the overhead of
+co-ordinating the execution of a number of processors is relatively
+small it is still significant when compared to handling only one
+processor.
+
+This option only sets the maximum number of processors that can be
+simulated.  The number active during a given simulation run us
+determined at run time.
+
+Ex: default
+
+By default 5 processors are configured but only one is enabled.
+Additional processors can be enabled with the runtime option:
+
+       -o '/openprom/options/smp 5'
+
+Ex: recommended
+
+Unless you intend studying multi-processor systems there is little reason for having PSIM configured with SMP support.  Specifying:
+
+       --disable-sim-smp
+or     --enable-sim-smp=0
+
+will eliminate any SMP such as:
+
+       for (cpu = 0; cpu < nr_cpus; cpu++)
+               ...
+
+
+
+--enable-sim-xor-endian=n
+
+
+Set the byte-size of the bus involved in the PowerPC's xor endian byte
+swapping.
+
+The PowerPC's implementation of BE/LE mode is different to what a
+programmer may first expect.  The details of this implementation are
+discussed at length in PowerPC documentation.
+
+Ex: default
+
+By default this is configured with a value of 8 (the bus size of most
+60x processors).
+
+Ex: recommended
+
+Unless you are expecting to test/debug PowerPC be/le switching code
+this option is of little use and should be disabled:
+
+       --disable-sim-xor-endian
+
+
+
+--enable-sim-bitsize=n
+
+
+Specify the bit size (32/64) of the PowerPC to be modelled.
+
+Note: By default 32 is specified.  The implementation of the 64bit
+architecture is still under development.
+
+
+--enable-sim-hostbitsize=32|64
+
+As above but for the host.
+
+NOTE: Psim has yet to be built on a 64bit host.
+
+
+
+--enable-sim-env=env
+
+
+Hardwire the PowerPC environment being modelled (user, virtual or
+operating).
+
+The PowerPC architecture defines three different levels of compliance
+to its architectural specification.  These environments are discussed in detail in PowerPC publications.
+
+       user - normal user programs 
+       virtual - an extension of the user environment (includes timers)
+       operating - kernel code
+
+Ex: default
+
+By default all three environments are supported.
+
+Ex: recommended
+
+If you only intend running psim with user (or operating) code then
+PSIM should be configured accordingly.  For user code, it eliminates:
+support for timers and events and redundant VM calls.
+
+
+
+--enable-sim-timebase
+
+
+Enable/disable the time base register.
+
+The PowerPC architecture (virtual environment) includes a time base
+register.  Maintaining that register incurs an overhead in
+performance that can be eliminated by eliminating time-base register
+support.
+
+Ex: default
+
+Normally this option is not used.  Instead --enable-sim-env (above) us
+used to disable/enable features such as the timebase register.
+
+
+
+--enable-sim-alignment=align
+
+
+Control the PowerPC's memory access alignment restrictions.
+
+The PowerPC in LE mode only allows memory transfers of a correctly
+aligned size/address.  The above option controls how misaligned
+accesses are handled.
+
+       strict          All accesses must be correctly aligned
+
+       nonstrict       Unaligned access allowed (the are split
+                       into a number of aligned accesses).
+
+Ex: default
+
+Unless otherwise specified PSIM will auto configure a BE program to
+allow miss-aligned accesses while a LE program will not.
+
+Ex: 604e
+
+The recently announced 604e processor allows miss-aligned accesses in both
+BE and LE modes.  If modeling the 604e then you should specify:
+
+       --enable-sim-alignment=nonstrict
+
+
+
+--enable-sim-trace
+
+
+Include code to trace PSIM's internal progress (also controlled by the
+-t option).
+
+Checking to see if a trace message should be output slows down a
+simulation.  Disabling this option (--disable-sim-trace) eliminates
+completely that code.
+
+
+
+--enable-sim-assert
+
+
+Include the code that checks the correctness of parts of PSIM.
+
+Eliminating such code (--disable-sim-assert) eliminates internal
+consistency tests and their overhead.
+
+
+
+--enable-sim-reserved-bits
+
+
+Include code to check that the reserved fields of the instruction are
+zero.
+
+The PowerPC architecture defines certain fields of some instructions
+as reserved (`/').  By default, for each instruction, PSIM will check
+the reserved fields causing an invalid instruction exception if a
+field is invalid.  Disabling this option eliminates this test.  This
+is at the slight risk of PSIM treating an invalid instruction as
+valid.
+
+
+
+--enable-sim-float
+
+
+Include support for hardware floating point.
+
+
+
+--enable-sim-monitor=mon
+
+
+Include support for basic instruction counting.
+
+If you are not interested in the performance of either you program or
+the simulator then you can disable this option.
+
+
+
+--enable-sim-model=which
+
+Hardwire the processor that will be used as a reference when modeling
+execution units.
+
+
+
+--enable-sim-default-model=which
+
+
+Specify the processor of choice for the execution unit model.
+
+
+
+--enable-sim-model-issue
+
+
+Include support for the modeling of processor execution units.
+
+    ----------------------------------------------------------------------
+
+TYPICAL CONFIGURATION OPTIONS:
+
+
+       VEA CODE ONLY:
+
+       Here of note are:
+
+               o       ramp up the compiler options (some
+                       of the below are P5 specific).
+
+               o       disable anything not used
+
+        CC=gcc ./configure \
+                --prefix=/applications/psim \
+                --target=powerpc-unknown-eabi \
+                --enable-sim-powerpc \
+                --enable-sim-warnings \
+                --enable-sim-inline \
+                --disable-sim-smp \
+                --enable-sim-bswap \
+                --enable-sim-duplicate \
+                --enable-sim-endian=big \
+                --disable-sim-xor-endian \
+                --enable-sim-env=user \
+                --disable-sim-reserved-bits \
+                --disable-sim-assert \
+                --disable-sim-trace \
+                --enable-sim-cflags='-g0 -O2 -fno-strength-reduce -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2'
+
+
+       OEA CODE ONLY:
+
+       The key configuration changes are:
+
+               o       turn off the instruction cache.  The overhead
+                       of flushing and reloading it is greater than
+                       not having a cache.
+
+               o       use a switch statement (ppc-opcode-flat) for
+                       the instruction decode and then (-O3) fully
+                       inline all functions.
+
+               o       --enable-sim-warnings is not present.  GCC (2.7.2)
+                       gets confused by the instruction decode table
+                       generated by igen (contains a perfect switch)
+                       and, as a consequence, generates a bogus warning.
+
+       CC=gcc ./configure \
+                --prefix=/applications/psim \
+                --target=powerpc-unknown-eabi \
+                --enable-sim-powerpc \
+                --enable-sim-inline \
+                --disable-sim-smp \
+                --enable-sim-bswap \
+                --enable-sim-duplicate \
+                --enable-sim-endian=big \
+                --disable-sim-xor-endian \
+                --enable-sim-env=operating \
+                --disable-sim-reserved-bits \
+                --disable-sim-assert \
+                --disable-sim-trace \
+                --enable-sim-opcode=ppc-opcode-flat \
+                --disable-sim-icache \
+                --enable-sim-cflags='-g0 -O3 -fno-strength-reduce -fomit-frame-pointer -malign-loops=2 -malign-jumps=2 -malign-functions=2'