
		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-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-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-duplicate \
                --enable-sim-endian=big \
                --disable-sim-xor-endian \
                --enable-sim-env=user \
                --disable-sim-reserved-bits \
                --disable-sim-assert \
                --disable-sim-trace


	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-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
