1
0
mirror of https://github.com/mist-devel/mist-board.git synced 2026-01-30 21:16:52 +00:00
Files
mist-devel.mist-board/tools/vasm/doc/cpu_ppc.texi
2014-01-31 12:21:39 +00:00

151 lines
3.9 KiB
Plaintext

This chapter documents the Backend for the PowerPC microprocessor family.
@section Legal
This module is written in 2002-2006,2008,2011 by Frank Wille.
This archive may be redistributed without modifications and used
for non-commercial purposes.
Distributing modified versions and commercial usage needs my written
consent.
Certain modules may fall under additional copyrights.
@section Additional options for this module
This module provides the following additional options:
@table @option
@item -big
Select big-endian mode.
@item -no-regnames
Don't predefine any register-name symbols.
@item -little
Select little-endian mode.
@item -mpwrx, -mpwr2
Generate code for the POWER2 family.
@item -mpwr
Generate code for the POWER family.
@item -m601
Generate code for the 601.
@item -mppc32, -mppc -m403, -m405, -m603, -m604, -m750, -m860
Generate code for the 32-bit PowerPC family.
@item -mppc64, -m620
Generate code for the 64-bit PowerPC family.
@item -mavec, -maltivec
Generate code for the Altivec unit.
@item -mcom
Allow only common PPC instructions.
@item -many
Allow any PPC instruction.
@item -sdreg=<n>
Sets small data base register to @code{Rn}.
@item -sd2reg=<n>
Sets the 2nd small data base register to @code{Rn}.
@item -opt-branch
Enables 'optimization' of 16-bit branches into
"B<!cc> $+8 ; B label" sequences when necessary.
@end table
@section General
This backend accepts PowerPC instructions as described in the
instruction set manuals from IBM and Motorola (e.g. the PowerPC
Programming Environments).
The full instruction set of the following families is supported:
POWER, POWER2, 40x, 60x, 620, 750, 74xx (including Altivec), 860.
The target address type is 32bit.
Default alignment for sections and instructions is 4 bytes. Data is
aligned to its natural alignment by default.
@section Extensions
This backend provides the following specific extensions:
@itemize @minus
@item When not disabled by the option @code{-no-regnames}, the registers r0 - r31,
f0 - f31, v0 - v31, cr0 - cr7, vrsave, sp, rtoc, fp, fpscr, xer, lr, ctr,
and the symbols lt, gt, so and un will be predefined on startup and may
be referenced by the program.
@end itemize
This backend extends the selected syntax module by the following
directives:
@table @code
@item .sdreg <n>
Sets the small data base register to @code{Rn}.
@item .sd2reg <n>
Sets the 2nd small data base register to @code{Rn}.
@end table
@section Optimizations
This backend performs the following optimizations:
@itemize @minus
@item 16-bit branches, where the destination is out of range, are translated
into @code{B<!cc> $+8} and a 26-bit unconditional branch.
@end itemize
@section Known Problems
Some known problems of this module at the moment:
@itemize @minus
@item No real differantiation between 403, 750, 860 instructions
at the moment.
@item New instructions from modern CPUs are still missing.
@end itemize
@section Error Messages
This module has the following error messages:
@itemize @minus
@item 2002: instruction not supported on selected architecture
@item 2003: constant integer expression required
@item 2004: trailing garbage in operand
@item 2005: illegal operand type
@item 2006: missing closing parenthesis in load/store addressing mode
@item 2007: relocation does not allow hi/lo modifier
@item 2008: multiple relocation attributes
@item 2009: multiple hi/lo modifiers
@item 2010: data size %d not supported
@item 2012: relocation attribute not supported by operand
@item 2013: operand out of range: %ld (allowed: %ld to %ld)
@item 2014: not a valid register (0-31)
@item 2015: missing base register in load/store addressing mode
@item 2016: missing mandatory operand
@item 2017: ignoring fake operand
@end itemize