Home | History | Annotate | Line # | Download | only in ppc
      1 
      2 		PSIM - model the PowerPC environment
      3 
      4     Copyright (C) 1994-1996, Andrew Cagney <cagney (a] highland.com.au>.
      5 
      6     ----------------------------------------------------------------------
      7 
      8 
      9 			Building PSIM
     10 
     11 	This file describes how to build the program PSIM
     12 
     13 	o	Walk through a basic build
     14 
     15 	o	Discussion of PSIM's components and
     16 		how they relate to the build process
     17 
     18 	o	Detailed description of each of PSIM's
     19 		compile time configuration options
     20 
     21 
     22     ----------------------------------------------------------------------
     23 
     24 
     25 BUILDING PSIM:
     26 
     27 PSIM 1.0.2 is included in GDB-4.16.  To build PSIM you will need the
     28 following:
     29 
     30 	gdb-4.16.tar.gz		Available from your favorite GNU
     31 				ftp site
     32 
     33 	gcc			GCC version two includes suport
     34 				for long long (64bit integer)
     35 				arithmetic which PSIM uses.  Hence
     36 				it is recommended that you build PSIM
     37 				using GCC.
     38 				
     39 Method:
     40 
     41 	1.	Unpack gdb
     42 
     43 		$ cd .../scratch
     44 		$ gunzip < gdb-4.16.tar.gz | tar xf -
     45 
     46 
     47 	2.	Configure gdb
     48 
     49 		First consult the gdb documentation
     50 
     51 		$ cd .../scratch
     52 		$ cd gdb-4.16
     53 		$ more README
     54 		$ more gdb/README
     55 
     56 		then something like (I assume SH):
     57 
     58 		$ CC=gcc ./configure \
     59                         --enable-sim-powerpc \
     60                         --target=powerpc-unknown-eabi \
     61                         --prefix=/applications/psim
     62 
     63 
     64 	4.	Build (again specifying GCC)
     65 
     66 		$ make CC=gcc
     67 
     68 		alternatively, if you are short on disk space or only
     69 		want to build the simulator:
     70 
     71 		$ ( cd libiberty && make CC=gcc )
     72 		$ ( cd bfd && make CC=gcc )
     73 		$ ( cd sim/ppc && make CC=gcc )
     74 
     75 
     76 	5.	Install
     77 
     78 		$ make CC=gcc install
     79 
     80 		or just
     81 
     82 		$ cp gdb/gdb ~/bin/powerpc-unknown-eabisim-gdb
     83 		$ cp sim/ppc/run ~/bin/powerpc-unknown-eabisim-run
     84 
     85 
     86     ----------------------------------------------------------------------
     87 
     88 
     89 UPDATING PSIM:
     90 
     91 
     92 A PSIM is an ongoing development.  Occasional snapshots which both contain new
     93 features and fix old bugs are made available.  See the ftp directory:
     94 
     95 	ftp://ftp.ci.com.au/pub/psim/beta
     96 or	ftp://cambridge.cygnus.com/pub/psim/beta
     97 
     98 for the latest version.  To build/install one of these snapshots, you
     99 replace the sim/ppc found in the gdb archive with with one from the
    100 snapshot.  Then just re-configure and rebuild/install.
    101 
    102 	Procedure:
    103 
    104 	0.	A starting point
    105 
    106 		$ cd gdb-4.16
    107 
    108 
    109 	1.	Remove the old psim directory
    110 
    111 		$ mv sim/ppc sim/old.ppc
    112 
    113 
    114 	2.	Unpack the new one
    115 
    116 		$ gunzip < ../psim-NNNNNN.tar.gz | tar tf -
    117 		$ gunzip < ../psim-NNNNNN.tar.gz | tar tf -
    118 
    119 
    120 	3.	Reconfigure/rebuild (as seen above):
    121 
    122 		$ CC=gcc ./configure \
    123 			--enable-sim-powerpc \
    124                         --target=powerpc-unknown-eabi \
    125                         --prefix=/applications/psim
    126 		$ make CC=gcc
    127 
    128 
    129     ----------------------------------------------------------------------
    130 
    131 
    132 UPDATES TO GDB:
    133 
    134 From time to time, problems involving the integration of PSIM into gdb
    135 are found.  While eventually each of these problems is resolved there
    136 can be periouds during which a local hack may be needed.
    137 
    138 At the time of writing the following were outstanding:
    139 
    140 	ATTACH command:
    141 
    142 		ftp://ftp.ci.com.au/pub/psim/gdb-4.15+attach.diff.gz
    143 	or	ftp://cambridge.cygnus.com/pub/psim/gdb-4.15+attach.diff.gz
    144 	
    145 	PSIM, unlike the other simulators found in GDB, is able to load
    146 	the description of a target machine (including the initial
    147 	state of all processor registers) from a file.
    148 
    149 	Unfortunately GDB does not yet have a standard command that
    150 	facilitates the use of this feature.  Until such a command is
    151 	added, the patch (hack?) gdb-4.15+attach.diff.gz can be used to
    152 	extend GDB's attach command so that it can be used to initialize
    153 	the simulators configuration from a file.
    154 
    155 
    156 
    157     ----------------------------------------------------------------------
    158 
    159 
    160 RUNNING PROGRAMS:
    161 
    162 
    163 See the file:
    164 
    165 	ftp://ftp.ci.com.au/pub/psim/RUN
    166 or	ftp://cambridge.cygnus.com/pub/psim/RUN
    167 
    168 
    169     ----------------------------------------------------------------------
    170 
    171 
    172 COMPILE TIME CONFIGURATION OPTIONS:
    173 
    174 
    175 PSIM's compile time configuration is controlled by autoconf.  PSIM's
    176 configure script recognises options of the form:
    177 
    178 		--enable-sim-<option>[=<val>]
    179 
    180 And can be specified on the configure command line (at the top level
    181 of the gdb directory tree) vis:
    182 
    183 		$ cd gdb-4.15
    184 		$ CC=gcc ./configure \
    185                         --target=powerpc-unknown-eabisim \
    186                         --prefix=/applications/psim \
    187 			--enable-sim-inline
    188 		$ make CC=gcc
    189 
    190 For a brief list of PSIM's configuration options, configure --help
    191 will list them vis:
    192 
    193 	$ cd sim/ppc
    194 	$ ./configure --help
    195 
    196 Each PSIM specific option is discussed in detail below.
    197 
    198 
    199 
    200 --enable-sim-warnings=<flags>
    201 
    202 
    203 Turn on additional GCC specific checks.
    204 
    205 Some hosts (NetBSD, Linux, Solaris-2.5) have complete header files
    206 that include correct prototypes for all library functions.  On such
    207 hosts, PSIM can be built with many more than the standard C checks
    208 enabled.  The option --enable-sim-warnings controls this.
    209 
    210 Ex: Default warnings
    211 
    212 With just --enable-sim-warnings, the following -W options are enabled:
    213 -Werror -Wall -Wpointer-arith -Wmissing-prototypes.
    214 
    215 
    216 
    217 --enable-sim-opcode=which
    218 
    219 
    220 Specify the file containing the rules for generating the instruction
    221 decode and execute functions from the file powerpc.igen.
    222 
    223 The form of the instruction decode and execute functions is controlled
    224 by an opcode table.  It specifies: the combination of switch
    225 statements and jump tables to use when decoding an instruction and how
    226 much of each instruction should be decoded before calling the
    227 instruction execute function.
    228 
    229 PSIM includes a number of opcode tables:
    230 
    231 	psim-opcode-simple
    232 		Generates a small compact two level switch statement
    233 		that will compile quickly and run reasonably fast.
    234 
    235 		This may be useful on a small machine.
    236 
    237 	psim-opcode-complex
    238 		(the default) A fairly aggressive instruction decode
    239 		table that includes the breaking out of a number
    240 		of special instruction cases (eg RA==0 vs RA!=0).
    241 
    242 	psim-opcode-flat
    243 		Identical to complex except a switch statement
    244 		is used.  Ideal for when the icache is being
    245 		disabled.
    246 
    247 	psim-opcode-stupid
    248 		In addition to the instruction decodes performed
    249 		by psim-opcode-complex, this also full decodes mtspr,
    250 		mfspr, and branch instructions.  The table generated
    251 		is very large and, as a consequence, only performs
    252 		well on machines with large caches.
    253 
    254 	ppc-opcode-test-1
    255 	ppc-opcode-test-2
    256 		Generate test (but workable) tables.  These exercise
    257 		PSIM's ability to generate instruction decode functions
    258 		that are a combination of jump-tables and switch statements.
    259 
    260 The program igen generates the instruction tables from the opcode
    261 table and the ppc-instruction table.
    262 
    263 
    264 
    265 --enable-sim-switch
    266 
    267 
    268 Enable/disable the use of a switch statement when looking up the
    269 attributes of a SPR register.
    270 
    271 The PowerPC architecture defines a number of Special Purpose Registers
    272 (SPR's).  Associated with each of these registers are a number of
    273 attributes (such as validity or size) which the instructions
    274 mtspr/mfspr query as part of their execution.
    275 
    276 For PSIM, this information is kept in a table (ppc-spr-table).  The
    277 program dgen converts this table into lookup routines (contained in
    278 the generated files spreg.h spreg.c) that can be used to query an
    279 SPR's attributes.  Those lookup routines are either implemented as
    280 a table or alternatively as a number of switch statements:
    281 
    282 	spr_table spr_info[] = { .... };
    283 	int spr_length(sprs spr) { return spr_info[spr].length; }
    284 
    285 vs
    286 
    287 	int spr_length(sprs spr) { switch (spr) { case ..: return ..; } }
    288 
    289 In general the first implementation (a table) is the most efficient.
    290 It may, however, prove that when performing an aggressive optimization
    291 where both the SPR is known and the above function is being inlined
    292 (with the consequence that GCC can eliminate the switch statement)
    293 that the second choice is improves performance.
    294 
    295 In practice, only a marginal (if any benefit) has ever been seen.
    296 
    297 
    298 
    299 --enable-sim-duplicate
    300 
    301 
    302 Create a duplicate copy of each instruction function hardwiring
    303 instruction fields that would have otherwise have been variable.
    304 
    305 As discussed above, igen outputs a C function generated from the file
    306 powerpc.igen (using the opcode rules) for each of the
    307 instructions.  Thus multiple entries in the instruction decode tables
    308 may be pointing back at the same function.  Enabling duplicate, will
    309 result in psim creating a duplicate of the instruction's function for
    310 each different entry in the instruction decode tables.
    311 
    312 For instance, given the branch instruction:
    313 
    314 	0.19,6.BO,11.BI,16./,21.528,31.LK
    315 	...
    316 	if (LK) LR = (spreg)IEA(CIA + 4);
    317 	...
    318 
    319 igen as part of its instruction lookup table may have generated two
    320 different entries - one for LK=0 and one for LK=1.  With duplicate
    321 enabled, igen outputs (almost) duplicate copies of branch function,
    322 one with LK hardwired to 0 and one with LK hardwired to 1.
    323 
    324 By doing this the compiler is provided with additional information that
    325 will allow it possibly eliminate dead code.  (such as the assignment
    326 to LK if LR==0).
    327 
    328 Ex: default
    329 
    330 Because this feature is such a big win, --enable-sim-duplicate is
    331 turned on by default.
    332 
    333 Ex: A small machine
    334 
    335 Only rarely (eg on a very small host) would this feature need to be
    336 disabled (using: --disable-sim-duplicate).
    337 
    338 
    339 
    340 --enable-sim-filter=rule
    341 
    342 
    343 Include/exclude PowerPC instructions that are specific to a particular
    344 implementation.
    345 
    346 Some of the PowerPC instructions included in the file powerpc.igen
    347 are limited to certain specific PPC implementations.  For instance,
    348 the instruction:
    349 
    350 	0.58,6.RT,11.RA,16.DS,30.2:DS:64::Load Word Algebraic
    351 
    352 Is only valid for the 64bit architecture.  The enable-sim-filter flag
    353 is passed to igen so that it can `filter out' any invalid
    354 instructions.  The filter rule has the form:
    355 
    356 	-f <name>
    357 
    358 thus:
    359 
    360 	--enable-sim-filter='-f 64'
    361 
    362 (the default) would filter out all 64bit instructions.
    363 
    364 Ex: Remove floating point instructions
    365 
    366 A given 32bit PowerPC implementation may not include floating point
    367 hardware.  Consequently there is little point in including floating
    368 point instructions in the instruction table.  The option:
    369 
    370 	--enable-sim-filter='-f 64 -f f'
    371 
    372 will eliminate all floating point instructions from the instruction
    373 table.
    374 
    375 
    376 
    377 --enable-sim-icache=size
    378 
    379 
    380 Set the size of the cache used to hold decoded instructions.
    381 
    382 Psim executes instructions in two separate steps:
    383 
    384 	o	instruction fetch/decode
    385 
    386 	o	instruction execution
    387 
    388 For a given instruction, the first stage need only be executed once
    389 (the first time the instruction is encountered) while the second stage
    390 must be executed every time the program `executes' that instruction.
    391 
    392 Exploiting this, PSIM can maintain a cache of decoded instructions.
    393 It will then use the decoded instruction from the cache in preference
    394 to fetching/decoding the real instruction from memory.
    395 
    396 Ex: default
    397 
    398 Because this feature is normally such a big win, it is enabled by
    399 default (with the cache size set to 1024 entries).
    400 
    401 The 1024 entries equals 4096 bytes (or one page) of instructions.
    402 Larger caches can be used but with caution - PSIM does not check for
    403 address aliasing within its instruction cache.
    404 
    405 Ex: disable the cache
    406 
    407 There may be cases (for instance where the cache has a low hit rate)
    408 where the psim performs better with no instruction cache.  For such
    409 situations, the cache can be disabled vis: --disable-sim-icache.
    410 
    411 
    412 
    413 --enable-sim-inline[=module]
    414 
    415 
    416 Specify the inlining of one or more modules.
    417 
    418 Many architectures (in particular the x86) suffer from a large
    419 function call overhead.  By eliminating function calls (through
    420 inlining of functions) a large performance gain can be achieved.
    421 
    422 In PSIM, modules are inlined in one of two possible ways.  Some
    423 modules (such as the byte swapping code) can be inlined into any
    424 module that calls them.  Other modules, due to complex
    425 interdependencies, are only inlined as a group when compiling the
    426 external interface module psim.c.
    427 
    428 Ex: default
    429 
    430 By default the modules endian (handle be/le), bits (manipulate
    431 bit-fields within words), cpu (the processor object) and events
    432 (timers) are inlined in any module that calls them.  This gives a
    433 reasonable performance gain with little additional compilation
    434 overhead.
    435 
    436 Ex: recommended  --enable-sim-inline
    437 
    438 Assuming you machine is reasonably well configured, this option is
    439 highly recommended.  On the x86 several orders of magnitude
    440 improvement in performance is possible.
    441 
    442 Ex: fine tuning
    443 
    444 The file std-config.h contains a detailed description of how the
    445 inlining works.  Individual modules can be inlined by specifying them.
    446 For if you have a very large cache the model module could be inlined
    447 with:
    448 
    449 	--enable-sim-inline=MODEL
    450 
    451 
    452 
    453 --enable-sim-endian=endian
    454 
    455 
    456 Specify the byte order of the target.
    457 
    458 By default, PSIM is able to execute both big and little endian
    459 executables.  As a consequence, every byte swap routine includes a
    460 test to see if the byte swap is really needed.  By specifying the byte
    461 order of the target (and the host below) the need for this test can be
    462 eliminated.
    463 
    464 Clearly setting the byte order of the target is only useful when known
    465 before hand.
    466 
    467 
    468 
    469 --enable-sim-hostendain=end
    470 
    471 
    472 As above but for the host.
    473 
    474 Normally this option should not be needed. configure (autoconf) should
    475 determine the byte order of the host automatically.  However if for
    476 some reason there is a problem, this option can be used to override
    477 autoconf.
    478 
    479 
    480 
    481 --enable-sim-smp=n
    482 
    483 
    484 Set the maximum number of processors that PSIM can model.
    485 
    486 Psim can model (with small limitation discussed else where) a
    487 multi-processor PowerPC environment.  While the overhead of
    488 co-ordinating the execution of a number of processors is relatively
    489 small it is still significant when compared to handling only one
    490 processor.
    491 
    492 This option only sets the maximum number of processors that can be
    493 simulated.  The number active during a given simulation run us
    494 determined at run time.
    495 
    496 Ex: default
    497 
    498 By default 5 processors are configured but only one is enabled.
    499 Additional processors can be enabled with the runtime option:
    500 
    501 	-o '/openprom/options/smp 5'
    502 
    503 Ex: recommended
    504 
    505 Unless you intend studying multi-processor systems there is little reason for
    506 having PSIM configured with SMP support.  Specifying:
    507 
    508 	--disable-sim-smp
    509 or	--enable-sim-smp=0
    510 
    511 will eliminate any SMP such as:
    512 
    513 	for (cpu = 0; cpu < nr_cpus; cpu++)
    514 		...
    515 
    516 
    517 
    518 --enable-sim-xor-endian=n
    519 
    520 
    521 Set the byte-size of the bus involved in the PowerPC's xor endian byte
    522 swapping.
    523 
    524 The PowerPC's implementation of BE/LE mode is different to what a
    525 programmer may first expect.  The details of this implementation are
    526 discussed at length in PowerPC documentation.
    527 
    528 Ex: default
    529 
    530 By default this is configured with a value of 8 (the bus size of most
    531 60x processors).
    532 
    533 Ex: recommended
    534 
    535 Unless you are expecting to test/debug PowerPC be/le switching code
    536 this option is of little use and should be disabled:
    537 
    538 	--disable-sim-xor-endian
    539 
    540 
    541 
    542 --enable-sim-bitsize=n
    543 
    544 
    545 Specify the bit size (32/64) of the PowerPC to be modelled.
    546 
    547 Note: By default 32 is specified.  The implementation of the 64bit
    548 architecture is still under development.
    549 
    550 
    551 --enable-sim-hostbitsize=32|64
    552 
    553 As above but for the host.
    554 
    555 NOTE: Psim has yet to be built on a 64bit host.
    556 
    557 
    558 
    559 --enable-sim-env=env
    560 
    561 
    562 Hardwire the PowerPC environment being modelled (user, virtual or
    563 operating).
    564 
    565 The PowerPC architecture defines three different levels of compliance to its
    566 architectural specification.  These environments are discussed in detail in
    567 PowerPC publications.
    568 
    569 	user - normal user programs 
    570 	virtual - an extension of the user environment (includes timers)
    571 	operating - kernel code
    572 
    573 Ex: default
    574 
    575 By default all three environments are supported.
    576 
    577 Ex: recommended
    578 
    579 If you only intend running psim with user (or operating) code then
    580 PSIM should be configured accordingly.  For user code, it eliminates:
    581 support for timers and events and redundant VM calls.
    582 
    583 
    584 
    585 --enable-sim-timebase
    586 
    587 
    588 Enable/disable the time base register.
    589 
    590 The PowerPC architecture (virtual environment) includes a time base
    591 register.  Maintaining that register incurs an overhead in
    592 performance that can be eliminated by eliminating time-base register
    593 support.
    594 
    595 Ex: default
    596 
    597 Normally this option is not used.  Instead --enable-sim-env (above) us
    598 used to disable/enable features such as the timebase register.
    599 
    600 
    601 
    602 --enable-sim-alignment=align
    603 
    604 
    605 Control the PowerPC's memory access alignment restrictions.
    606 
    607 The PowerPC in LE mode only allows memory transfers of a correctly
    608 aligned size/address.  The above option controls how misaligned
    609 accesses are handled.
    610 
    611 	strict		All accesses must be correctly aligned
    612 
    613 	nonstrict	Unaligned access allowed (the are split
    614 			into a number of aligned accesses).
    615 
    616 Ex: default
    617 
    618 Unless otherwise specified PSIM will auto configure a BE program to
    619 allow miss-aligned accesses while a LE program will not.
    620 
    621 Ex: 604e
    622 
    623 The recently announced 604e processor allows miss-aligned accesses in both
    624 BE and LE modes.  If modeling the 604e then you should specify:
    625 
    626 	--enable-sim-alignment=nonstrict
    627 
    628 
    629 
    630 --enable-sim-trace
    631 
    632 
    633 Include code to trace PSIM's internal progress (also controlled by the
    634 -t option).
    635 
    636 Checking to see if a trace message should be output slows down a
    637 simulation.  Disabling this option (--disable-sim-trace) eliminates
    638 completely that code.
    639 
    640 
    641 
    642 --enable-sim-assert
    643 
    644 
    645 Include the code that checks the correctness of parts of PSIM.
    646 
    647 Eliminating such code (--disable-sim-assert) eliminates internal
    648 consistency tests and their overhead.
    649 
    650 
    651 
    652 --enable-sim-reserved-bits
    653 
    654 
    655 Include code to check that the reserved fields of the instruction are
    656 zero.
    657 
    658 The PowerPC architecture defines certain fields of some instructions
    659 as reserved (`/').  By default, for each instruction, PSIM will check
    660 the reserved fields causing an invalid instruction exception if a
    661 field is invalid.  Disabling this option eliminates this test.  This
    662 is at the slight risk of PSIM treating an invalid instruction as
    663 valid.
    664 
    665 
    666 
    667 --enable-sim-float
    668 
    669 
    670 Include support for hardware floating point.
    671 
    672 
    673 
    674 --enable-sim-monitor=mon
    675 
    676 
    677 Include support for basic instruction counting.
    678 
    679 If you are not interested in the performance of either you program or
    680 the simulator then you can disable this option.
    681 
    682 
    683 
    684 --enable-sim-model=which
    685 
    686 Hardwire the processor that will be used as a reference when modeling
    687 execution units.
    688 
    689 
    690 
    691 --enable-sim-default-model=which
    692 
    693 
    694 Specify the processor of choice for the execution unit model.
    695 
    696 
    697 
    698 --enable-sim-model-issue
    699 
    700 
    701 Include support for the modeling of processor execution units.
    702 
    703     ----------------------------------------------------------------------
    704 
    705 TYPICAL CONFIGURATION OPTIONS:
    706 
    707 
    708 	VEA CODE ONLY:
    709 
    710 	Here of note are:
    711 
    712 		o	ramp up the compiler options (some
    713 			of the below are P5 specific).
    714 
    715 		o	disable anything not used
    716 
    717         CC=gcc ./configure \
    718                 --prefix=/applications/psim \
    719                 --target=powerpc-unknown-eabi \
    720                 --enable-sim-powerpc \
    721                 --enable-sim-warnings \
    722                 --enable-sim-inline \
    723                 --disable-sim-smp \
    724                 --enable-sim-duplicate \
    725                 --enable-sim-endian=big \
    726                 --disable-sim-xor-endian \
    727                 --enable-sim-env=user \
    728                 --disable-sim-reserved-bits \
    729                 --disable-sim-assert \
    730                 --disable-sim-trace
    731 
    732 
    733 	OEA CODE ONLY:
    734 
    735 	The key configuration changes are:
    736 
    737 		o	turn off the instruction cache.  The overhead
    738 			of flushing and reloading it is greater than
    739 			not having a cache.
    740 
    741 		o	use a switch statement (ppc-opcode-flat) for
    742 			the instruction decode and then (-O3) fully
    743 			inline all functions.
    744 
    745 		o	--enable-sim-warnings is not present.  GCC (2.7.2)
    746 			gets confused by the instruction decode table
    747 			generated by igen (contains a perfect switch)
    748 			and, as a consequence, generates a bogus warning.
    749 
    750 	CC=gcc ./configure \
    751                 --prefix=/applications/psim \
    752                 --target=powerpc-unknown-eabi \
    753                 --enable-sim-powerpc \
    754                 --enable-sim-inline \
    755                 --disable-sim-smp \
    756                 --enable-sim-duplicate \
    757                 --enable-sim-endian=big \
    758                 --disable-sim-xor-endian \
    759                 --enable-sim-env=operating \
    760                 --disable-sim-reserved-bits \
    761                 --disable-sim-assert \
    762                 --disable-sim-trace \
    763                 --enable-sim-opcode=ppc-opcode-flat \
    764                 --disable-sim-icache
    765