aboutsummaryrefslogtreecommitdiff
path: root/sim/ppc/README.psim
diff options
context:
space:
mode:
Diffstat (limited to 'sim/ppc/README.psim')
-rw-r--r--sim/ppc/README.psim700
1 files changed, 0 insertions, 700 deletions
diff --git a/sim/ppc/README.psim b/sim/ppc/README.psim
deleted file mode 100644
index 518b412..0000000
--- a/sim/ppc/README.psim
+++ /dev/null
@@ -1,700 +0,0 @@
-
- PSIM - model a PowerPC platform
-
- Copyright (C) 1994-1995, Andrew Cagney <cagney@highland.com.au>.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-
-
-This directory contains the source code to the program PSIM.
-
-
-What is PSIM?
-
- PSIM is an ANSI C program that implements an instruction
- level model of the PowerPC architecture.
-
- It can be configured to model various PowerPC platforms
- and include:
-
- o A user program environment (UEA) complete
- with emulated system calls
-
- to
-
- o A hardware platform with several processors
- interacting with each other and various
- modeled hardware devices.
-
- For each of these models PSIM is able perform a detailed
- analysis of the machines performance.
-
-
-
-Who would be interested in PSIM?
-
- o the curious
-
- Using psim, gdb, gcc and binutils the curious
- user can contruct an environment that allows
- them to play with PowerPC user programs with out
- the need for real hardware.
-
-
- o the analyst
-
- PSIM includes many (contributed) monitoring
- features which (unlike many other simulators)
- do not come with a great penalty in performance.
-
- Thus the performance analyst is able to use
- this simulator to model the inpact of changes
- to the system they are analysing. Be that
- system a compiler or real hardware platform.
-
- If PSIM doesn't monitor a components of interest,
- the source code is freely available, and hence
- there is no hinderance to changing things
- to meet a specific analysts needs.
-
-
- o the serious SW developer
-
- PSIM models all three levels of the PowerPC
- Architecture: UEA, VEA and OEA. Further,
- the internal design is such that PSIM can
- be extended to suport additional
- development requirements. Such requirements
- might include (for the UEA) a new Operating
- System emulation through to (for the OEA)
- a model of a different hardware platform.
-
-
-What features does PSIM have?
-
-
- Monitoring and modeling
-
- PSIM includes (thanks to Michael Meissner)
- a detailed model of the various PowerPC
- implementations schedulers.
-
-
- SMP
-
- The PowerPC ISA defines SMP synchronizing instructions
- this simulator models a limited subset of their
- behavor. Consequently, if you limit code to the
- use the modeled behavour, PSIM can be used to
- model SMP PowerPC platforms.
-
- People intending to use this system should study
- the code implementing the lwarx etc instructions.
-
- ENDIAN SUPORT
-
- PSIM implements the PowerPC's big and little (xor
- endian) modes and correctly simulates code that
- switches between these two modes.
-
- In addition, psim can model a true little-endian
- machine.
-
- ISA models (Instruction Set Architecture)
-
- PSIM includes a model of the UEA, VEA and OEA. This
- inclues the time base registers (VEA) and HTAB
- and BATS (OEA).
-
- In addition, a preliminary model of the 64 bit
- PowerPC architecture is implemented.
-
- Hardware
-
- PSIM's internals are based around the concept
- of a Device Tree. This tree intentionaly
- resembles that of the Device Tree found in
- OpenBoot firmware. PSIM is flexable enough
- to allow the user to fully configure the
- actual hardware model from a device tree
- specification that is read in from a file.
-
- A user can either run a program using one of
- PSIM's built in hardware models specify a
- custom hardware model that should be simulated.
-
- A user is also able to quickly add a model
- of new hardware devices so that they can be
- included in a custom hardware model.
-
- OS-Emulation
-
- PSIM's UEA model includes emulation for UNIX system
- calls.
-
- PSIM's OEA model includes emulation of either:
-
- o OpenBoot client interface
-
- o MOTO's BUG interface.
-
-
- Floating point
-
- Preliminary suport for floating point is included.
-
-
-
-What performance analysis measurements can PSIM perform?
-
- Below is the output from a recent analysis run
- (contributed by Michael Meissner):
-
- For the following program:
-
- long
- simple_rand ()
- {
- static unsigned long seed = 47114711;
- unsigned long this = seed * 1103515245 + 12345;
- seed = this;
- return this >> 8;
- }
-
- unsigned long int
- random_bitstring ()
- {
- unsigned long int x;
- int ran, n_bits;
- int tot_bits = 0;
-
- x = 0;
- for (;;)
- {
- ran = simple_rand ();
- n_bits = (ran >> 1) % 16;
- tot_bits += n_bits;
-
- if (n_bits == 0)
- return x;
- else
- {
- x <<= n_bits;
- if (ran & 1)
- x |= (1 << n_bits) - 1;
-
- if (tot_bits > 8 * sizeof (long) + 6)
- return x;
- }
- }
- }
-
- #define ABS(x) ((x) >= 0 ? (x) : -(x))
-
- main ()
- {
- int i;
-
- for (i = 0; i < 50000; i++)
- {
- unsigned long x, y;
- x = random_bitstring ();
- y = random_bitstring ();
-
- if (sizeof (int) == sizeof (long))
- goto save_time;
-
- { unsigned long xx = x, yy = y, r1, r2;
- if (yy == 0) continue;
- r1 = xx / yy;
- r2 = xx % yy;
- if (r2 >= yy || r1 * yy + r2 != xx)
- abort ();
- }
- { signed long xx = x, yy = y, r1, r2;
- if ((unsigned long) xx << 1 == 0 && yy == -1)
- continue;
- r1 = xx / yy;
- r2 = xx % yy;
- if (ABS (r2) >= (unsigned long) ABS (yy) || (signed long) (r1 * yy + r2) != xx)
- abort ();
- }
- save_time:
- { unsigned int xx = x, yy = y, r1, r2;
- if (yy == 0) continue;
- r1 = xx / yy;
- r2 = xx % yy;
- if (r2 >= yy || r1 * yy + r2 != xx)
- abort ();
- }
- { signed int xx = x, yy = y, r1, r2;
- if ((unsigned int) xx << 1 == 0 && yy == -1)
- continue;
- r1 = xx / yy;
- r2 = xx % yy;
- if (ABS (r2) >= (unsigned int) ABS (yy) || (signed int) (r1 * yy + r2) != xx)
- abort ();
- }
- { unsigned short xx = x, yy = y, r1, r2;
- if (yy == 0) continue;
- r1 = xx / yy;
- r2 = xx % yy;
- if (r2 >= yy || r1 * yy + r2 != xx)
- abort ();
- }
- { signed short xx = x, yy = y, r1, r2;
- r1 = xx / yy;
- r2 = xx % yy;
- if (ABS (r2) >= (unsigned short) ABS (yy) || (signed short) (r1 * yy + r2) != xx)
- abort ();
- }
- { unsigned char xx = x, yy = y, r1, r2;
- if (yy == 0) continue;
- r1 = xx / yy;
- r2 = xx % yy;
- if (r2 >= yy || r1 * yy + r2 != xx)
- abort ();
- }
- { signed char xx = x, yy = y, r1, r2;
- r1 = xx / yy;
- r2 = xx % yy;
- if (ABS (r2) >= (unsigned char) ABS (yy) || (signed char) (r1 * yy + r2) != xx)
- abort ();
- }
- }
-
- exit (0);
- }
-
- Here is the current output generated with the -I switch on a 90 Mhz
- pentium (the compiler used is the devlopment version of GCC with a new
- scheduler replacing the old one):
-
- CPU #1 executed 41,994 AND instructions.
- CPU #1 executed 519,785 AND Immediate instructions.
- CPU #1 executed 680,058 Add instructions.
- CPU #1 executed 41,994 Add Extended instructions.
- CPU #1 executed 921,916 Add Immediate instructions.
- CPU #1 executed 221,199 Add Immediate Carrying instructions.
- CPU #1 executed 943,823 Add Immediate Shifted instructions.
- CPU #1 executed 471,909 Add to Zero Extended instructions.
- CPU #1 executed 571,915 Branch instructions.
- CPU #1 executed 1,992,403 Branch Conditional instructions.
- CPU #1 executed 571,910 Branch Conditional to Link Register instructions.
- CPU #1 executed 320,431 Compare instructions.
- CPU #1 executed 471,911 Compare Immediate instructions.
- CPU #1 executed 145,867 Compare Logical instructions.
- CPU #1 executed 442,414 Compare Logical Immediate instructions.
- CPU #1 executed 1 Condition Register XOR instruction.
- CPU #1 executed 103,873 Divide Word instructions.
- CPU #1 executed 104,275 Divide Word Unsigned instructions.
- CPU #1 executed 132,510 Extend Sign Byte instructions.
- CPU #1 executed 178,895 Extend Sign Half Word instructions.
- CPU #1 executed 871,920 Load Word and Zero instructions.
- CPU #1 executed 41,994 Move From Condition Register instructions.
- CPU #1 executed 100,005 Move from Special Purpose Register instructions.
- CPU #1 executed 100,002 Move to Special Purpose Register instructions.
- CPU #1 executed 804,619 Multiply Low Word instructions.
- CPU #1 executed 421,201 OR instructions.
- CPU #1 executed 471,910 OR Immediate instructions.
- CPU #1 executed 1,292,020 Rotate Left Word Immediate then AND with Mask instructions.
- CPU #1 executed 663,613 Shift Left Word instructions.
- CPU #1 executed 1,151,564 Shift Right Algebraic Word Immediate instructions.
- CPU #1 executed 871,922 Store Word instructions.
- CPU #1 executed 100,004 Store Word with Update instructions.
- CPU #1 executed 887,804 Subtract From instructions.
- CPU #1 executed 83,988 Subtract From Immediate Carrying instructions.
- CPU #1 executed 1 System Call instruction.
- CPU #1 executed 207,746 XOR instructions.
-
- CPU #1 executed 23,740,856 cycles.
- CPU #1 executed 10,242,780 stalls waiting for data.
- CPU #1 executed 1 stall waiting for a function unit.
- CPU #1 executed 1 stall waiting for serialization.
- CPU #1 executed 1,757,900 times a writeback slot was unavilable.
- CPU #1 executed 1,088,135 branches.
- CPU #1 executed 2,048,093 conditional branches fell through.
- CPU #1 executed 1,088,135 successful branch predictions.
- CPU #1 executed 904,268 unsuccessful branch predictions.
- CPU #1 executed 742,557 branch if the condition is FALSE conditional branches.
- CPU #1 executed 1,249,846 branch if the condition is TRUE conditional branches.
- CPU #1 executed 571,910 branch always conditional branches.
- CPU #1 executed 9,493,653 1st single cycle integer functional unit instructions.
- CPU #1 executed 1,220,900 2nd single cycle integer functional unit instructions.
- CPU #1 executed 1,254,768 multiple cycle integer functional unit instructions.
- CPU #1 executed 1,843,846 load/store functional unit instructions.
- CPU #1 executed 3,136,229 branch functional unit instructions.
- CPU #1 executed 16,949,396 instructions that were accounted for in timing info.
- CPU #1 executed 871,920 data reads.
- CPU #1 executed 971,926 data writes.
- CPU #1 executed 221 icache misses.
- CPU #1 executed 16,949,396 instructions in total.
-
- Simulator speed was 250,731 instructions/second
-
-
-
-What motivated PSIM?
-
- As an idea, psim was first discussed seriously during mid
- 1994. At that time its main objectives were:
-
-
- o good performance
-
- Many simulators loose out by only providing
- a binary interface to the internals. This
- interface eventually becomes a bottle neck
- in the simulators performance.
-
- It was intended that PSIM would avoid this
- problem by giving the user access to the
- full source code.
-
- Further, by exploiting the power of modern
- compilers it was hoped that PSIM would achieve
- good performance with out having to compromize
- its internal design.
-
-
- o practical portability
-
- Rather than try to be portable to every
- C compiler on every platform, it was decided
- that PSIM would restrict its self to suporting
- ANSI compilers that included the extension
- of a long long type.
-
- GCC is one such compiler, consequenly PSIM
- should be portable to any machine running GCC.
-
-
- o flexability in its design
-
- PSIM should allow the user to select the
- features required and customize the build
- accordingly. By having the source code,
- the compler is able to eliminate any un
- used features of the simulator.
-
- After all, let the compiler do the work.
-
-
- o SMP
-
- A model that allowed the simulation of
- SMP platforms with out the large overhead
- often encountered with such models.
-
-
- PSIM achieves each of these objectives.
-
-
-Is PSIM PowerPC Platform (PPCP) (nee CHRP) Compliant?
-
- No.
-
- Among other things it does not have an Apple ROM socket.
-
-
-Can PSIM be configured so that it models a CHRP machine?
-
- Yes.
-
- PSIM has been designed with the CHRP spec in mind. To model
- a CHRP desktop a user would need to add the following:
-
- o An apple rom socket :-)
-
- o Model of each of the desktop IO devices
- (some may already be implemented).
-
- o An OpenPIC (Open Programmable Interrupt
- Controller) device. (it may by now be
- implemented).
-
- o RTAS (Run Time Abstraction Services).
-
- o A fully populated device tree.
-
-
-Is the source code available?
-
- Yes.
-
- The source code to PSIM is available under the terms of
- the GNU Public Licence. This allows you to distribute
- the source code for free but with certain conditions.
-
-
-How do I build PSIM?
-
- To build PSIM you will need the following files:
-
-
- gdb-4.15.tar.gz From your favorite GNU ftp site.
- I've also tested psim with
- gdb-4.15.1. If you would prefer
- a graphical development environment
- then PSIM can also be built with
- gdbtk.
-
-
- ftp://ftp.ci.com.au/pub/clayton/README.pim
-
- This file.
-
-
- ftp://ftp.ci.com.au/pub/clayton/gdb-4.15+psim.diff.gz
-
- Firstly this file contains a few
- minor changes to gdb-4.15 so that it
- will build PSIM as part of GDB.
-
-
- ftp://ftp.ci.com.au/pub/clayton/gdb-4.15+note.diff.gz
-
- Add suport for note sections (used
- by OpenBoot PowerPC programs).
-
-
- ftp://ftp.ci.com.au/pub/clayton/gdb-4.15+attach.diff.gz
-
- Allow the gdb attach command to
- work with simulators.
-
-
- ftp://ftp.ci.com.au/pub/clayton/psim-960119.tar.gz
-
- This contains the psim files proper.
-
-
- gcc Again available from your favorite
- GNU ftp site.
-
-
- patch Sun's patch behaves a little wierd
- and doesn't appear to like creating
- empty files. You may want to consider
- installing gnu's patch.
-
-
- Procedure:
-
- 0. A starting point
-
- $ ls -1
- gdb-4.15+attach.diff.gz
- gdb-4.15+note.diff.gz
- gdb-4.15+psim.diff.gz
- gdb-4.15+psim.diff.gz
- gdb-4.15.tar.gz
- psim-960119.tar.gz
-
-
- 1. Unpack gdb
-
- $ gunzip < gdb-4.15.tar.gz | tar xf -
-
-
- 2. Change to the gdb directory, apply the psim patches and unpack
- the psim files.
-
- $ cd gdb-4.15
-
- $ gunzip < ../gdb-4.15+psim.diff.gz | more
- $ gunzip < ../gdb-4.15+psim.diff.gz | patch -p1
-
- $ gunzip < ../gdb-4.15+psim-960119.tar.gz | tar tvf -
- $ gunzip < ../gdb-4.15+psim-960119.tar.gz | tar xvf -
-
- You may also want to consider applying the `attach' and
- `note' patches that are available vis:
-
- $ gunzip < ../gdb-4.15+attach.diff.gz | more
- $ gunzip < ../gdb-4.15+attach.diff.gz | patch -p
-
- $ gunzip < ../gdb-4.15+note.diff.gz | more
- $ gunzip < ../gdb-4.15+note.diff.gz | patch -p
-
-
- 3. Configure gdb
-
- $ more gdb/README
-
- then something like (I assume SH):
-
- $ CC=gcc ./configure --target=powerpc-unknown-eabisim
-
- eabisim is needed as by default (because PSIM needs GCC) the
- simulator is not built.
-
- [If building with a more recent gdb snapshot then the
- command:
-
- $CC=gcc ./configure --enable-sim-powerpc
-
- is used.]
-
- 4. Build
-
- $ make CC=gcc
-
- alternativly, if you are short on disk space or just want the
- simulator built:
-
- $ ( 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
-
-
-Is there a more recent version of PSIM and if so, how would I build it?
-
- A PSIM is an ongoing development, occasional snapshots
- (that include new features) are made available. Several of
- the more recent snapshots are:
-
- <to-be-advised>
-
- To build/install one of these snapshots, you replace the
- current gdb/sim/ppc directory with the one in the update,
- re-configure and rebuild.
-
- Procedure:
-
- 0. A starting point
-
- $ cd gdb-4.15
-
-
- 1. Remove the old psim directory
-
- $ mv sim/ppc sim/old.ppc
-
-
- 2. Unpack the new one
-
- $ gunzip < ../psim-960105.tar.gz | tar tf -
- $ gunzip < ../psim-960105.tar.gz | tar tf -
-
-
- 3. Reconfig/rebuild (as seen above):
-
- $ CC=gcc ./configure --target=powerpc-unknown-eabisim
- $ make CC=gcc
-
-
-Are there any example programs that can be run on PSIM?
-
- Psim has a simple test suite that is used to ensure
- that fixes do not introduce new bugs. This test suite
- like psim is updated:
-
- ftp://ftp.ci.com.au/pub/clayton/psim-test-960118.tar.gz
-
- Prebuilt test programs for PSIM.
- Includes examples of UEA, VEA and
- OEA code.
- Requires gcc-2.7.2 and binutils-2.6
- to rebuild.
-
-
-How do I use the simulator?
-
-
- I assume that you've unpacked a psim-test archive.
-
-
- 1. As a standalone program
-
- Print out the users environment:
-
- $ powerpc-unknown-eabisim-run psim-test/uea/envp
-
- Print out the arguments:
-
- $ powerpc-unknown-eabisim-run psim-test/uea/argv a b c
-
- Check that sbrk works:
-
- $ powerpc-unknown-eabisim-run psim-test/uea/break
-
-
- 2. Example of running GDB:
-
- The main thing to note is that before you can run the simulator
- you must enable it. The example below illustrates this:
-
- $ powerpc-unknown-eabisim-gdb psim-test/uea/envp
- (gdb) target sim
- (gdb) load
- (gdb) break main
- (gdb) run
- .
- .
- .
-
-
- 3. Using a device tree as a description of a machine
- (I assume that you have applied the attach bug).
-
- $ cd psim-test/tree
- $ powerpc-unknown-eabisim-gdb
- (gdb) target sim
- (gdb) attach device-tree
- (gdb) run
-
- or
-
- $ cd psim-test/tree
- $ powerpc-unknown-eabisim-run device-tree
-
-
-Where do I send bugs or report problems?
-
- There is a mailing list (subscribe through majordomo@ci.com.au) (that
- is almost never used) at:
-
- powerpc-psim@ci.com.au
-
- If I get the ftp archive updated I post a note to that mailing list.
- In addition your welcome to send bugs or problems either to me or to
- that e-mail list.
-
-
-Does PSIM have any limitations or problems?
-
- See the file PROBLEMS (included in the distribution) for any
- outstanding issues.
-
-
-Who helped?
-
- Thanks go to the following who each helped in their own
- way:
-
- Allen Briggs, Bett Koch, David Edelsohn, Gordon Irlam,
- Michael Meissner, Bob Mercier, Richard Perini, Dale Rahn
- Richard Stallman, Mitchele Walker