
		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 powerpc.igen.

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
powerpc.igen (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 powerpc.igen
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
