
		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)
				arithmetic 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.

	Unfortunately 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
