Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 1991-2016 Free Software Foundation, Inc.
      2 @c This is part of the GAS manual.
      3 @c For copying conditions, see the file as.texinfo.
      4 @ifset GENERIC
      5 @page
      6 @node i960-Dependent
      7 @chapter Intel 80960 Dependent Features
      8 @end ifset
      9 @ifclear GENERIC
     10 @node Machine Dependencies
     11 @chapter Intel 80960 Dependent Features
     12 @end ifclear
     13 
     14 @cindex i960 support
     15 @menu
     16 * Options-i960::                i960 Command-line Options
     17 * Floating Point-i960::         Floating Point
     18 * Directives-i960::             i960 Machine Directives
     19 * Opcodes for i960::            i960 Opcodes
     20 * Syntax of i960::              i960 Syntax
     21 @end menu
     22 
     23 @c FIXME! Add Syntax sec with discussion of bitfields here, at least so
     24 @c long as they're not turned on for other machines than 960.
     25 
     26 @node Options-i960
     27 
     28 @section i960 Command-line Options
     29 
     30 @cindex i960 options
     31 @cindex options, i960
     32 @table @code
     33 
     34 @cindex i960 architecture options
     35 @cindex architecture options, i960
     36 @cindex @code{-A} options, i960
     37 @item -ACA | -ACA_A | -ACB | -ACC | -AKA | -AKB | -AKC | -AMC
     38 Select the 80960 architecture.  Instructions or features not supported
     39 by the selected architecture cause fatal errors.
     40 
     41 @samp{-ACA} is equivalent to @samp{-ACA_A}; @samp{-AKC} is equivalent to
     42 @samp{-AMC}.  Synonyms are provided for compatibility with other tools.
     43 
     44 If you do not specify any of these options, @code{@value{AS}} generates code
     45 for any instruction or feature that is supported by @emph{some} version of the
     46 960 (even if this means mixing architectures!).  In principle,
     47 @code{@value{AS}} attempts to deduce the minimal sufficient processor type if
     48 none is specified; depending on the object code format, the processor type may
     49 be recorded in the object file.  If it is critical that the @code{@value{AS}}
     50 output match a specific architecture, specify that architecture explicitly.
     51 
     52 @cindex @code{-b} option, i960
     53 @cindex branch recording, i960
     54 @cindex i960 branch recording
     55 @item -b
     56 Add code to collect information about conditional branches taken, for
     57 later optimization using branch prediction bits.  (The conditional branch
     58 instructions have branch prediction bits in the CA, CB, and CC
     59 architectures.)  If @var{BR} represents a conditional branch instruction,
     60 the following represents the code generated by the assembler when
     61 @samp{-b} is specified:
     62 
     63 @smallexample
     64         call    @var{increment routine}
     65         .word   0       # pre-counter
     66 Label:  @var{BR}
     67         call    @var{increment routine}
     68         .word   0       # post-counter
     69 @end smallexample
     70 
     71 The counter following a branch records the number of times that branch
     72 was @emph{not} taken; the difference between the two counters is the
     73 number of times the branch @emph{was} taken.
     74 
     75 @cindex @code{gbr960}, i960 postprocessor
     76 @cindex branch statistics table, i960
     77 A table of every such @code{Label} is also generated, so that the
     78 external postprocessor @code{gbr960} (supplied by Intel) can locate all
     79 the counters.  This table is always labeled @samp{__BRANCH_TABLE__};
     80 this is a local symbol to permit collecting statistics for many separate
     81 object files.  The table is word aligned, and begins with a two-word
     82 header.  The first word, initialized to 0, is used in maintaining linked
     83 lists of branch tables.  The second word is a count of the number of
     84 entries in the table, which follow immediately: each is a word, pointing
     85 to one of the labels illustrated above.
     86 
     87 @c TEXI2ROFF-KILL
     88 @ifinfo
     89 @c END TEXI2ROFF-KILL
     90 @example
     91  +------------+------------+------------+ ... +------------+
     92  |            |            |            |     |            |
     93  |  *NEXT     |  COUNT: N  | *BRLAB 1   |     | *BRLAB N   |
     94  |            |            |            |     |            |
     95  +------------+------------+------------+ ... +------------+
     96 
     97                __BRANCH_TABLE__ layout
     98 @end example
     99 @c TEXI2ROFF-KILL
    100 @end ifinfo
    101 @need 2000
    102 @tex
    103 \vskip 1pc
    104 \line{\leftskip=0pt\hskip\tableindent
    105 \boxit{2cm}{\tt *NEXT}\boxit{2cm}{\tt COUNT: \it N}\boxit{2cm}{\tt
    106 *BRLAB 1}\ibox{1cm}{\quad\dots}\boxit{2cm}{\tt *BRLAB \it N}\hfil}
    107 \centerline{\it {\tt \_\_BRANCH\_TABLE\_\_} layout}
    108 @end tex
    109 @c END TEXI2ROFF-KILL
    110 
    111 The first word of the header is used to locate multiple branch tables,
    112 since each object file may contain one. Normally the links are
    113 maintained with a call to an initialization routine, placed at the
    114 beginning of each function in the file.  The @sc{gnu} C compiler
    115 generates these calls automatically when you give it a @samp{-b} option.
    116 For further details, see the documentation of @samp{gbr960}.
    117 
    118 @cindex @code{-no-relax} option, i960
    119 @item -no-relax
    120 Normally, Compare-and-Branch instructions with targets that require
    121 displacements greater than 13 bits (or that have external targets) are
    122 replaced with the corresponding compare (or @samp{chkbit}) and branch
    123 instructions.  You can use the @samp{-no-relax} option to specify that
    124 @code{@value{AS}} should generate errors instead, if the target displacement
    125 is larger than 13 bits.
    126 
    127 This option does not affect the Compare-and-Jump instructions; the code
    128 emitted for them is @emph{always} adjusted when necessary (depending on
    129 displacement size), regardless of whether you use @samp{-no-relax}.
    130 @end table
    131 
    132 @node Floating Point-i960
    133 @section Floating Point
    134 
    135 @cindex floating point, i960 (@sc{ieee})
    136 @cindex i960 floating point (@sc{ieee})
    137 @code{@value{AS}} generates @sc{ieee} floating-point numbers for the directives
    138 @samp{.float}, @samp{.double}, @samp{.extended}, and @samp{.single}.
    139 
    140 @node Directives-i960
    141 @section i960 Machine Directives
    142 
    143 @cindex machine directives, i960
    144 @cindex i960 machine directives
    145 
    146 @table @code
    147 @cindex @code{bss} directive, i960
    148 @item .bss @var{symbol}, @var{length}, @var{align}
    149 Reserve @var{length} bytes in the bss section for a local @var{symbol},
    150 aligned to the power of two specified by @var{align}.  @var{length} and
    151 @var{align} must be positive absolute expressions.  This directive
    152 differs from @samp{.lcomm} only in that it permits you to specify
    153 an alignment.  @xref{Lcomm,,@code{.lcomm}}.
    154 @end table
    155 
    156 @table @code
    157 @cindex @code{extended} directive, i960
    158 @item .extended @var{flonums}
    159 @code{.extended} expects zero or more flonums, separated by commas; for
    160 each flonum, @samp{.extended} emits an @sc{ieee} extended-format (80-bit)
    161 floating-point number.
    162 
    163 @cindex @code{leafproc} directive, i960
    164 @item .leafproc @var{call-lab}, @var{bal-lab}
    165 You can use the @samp{.leafproc} directive in conjunction with the
    166 optimized @code{callj} instruction to enable faster calls of leaf
    167 procedures.  If a procedure is known to call no other procedures, you
    168 may define an entry point that skips procedure prolog code (and that does
    169 not depend on system-supplied saved context), and declare it as the
    170 @var{bal-lab} using @samp{.leafproc}.  If the procedure also has an
    171 entry point that goes through the normal prolog, you can specify that
    172 entry point as @var{call-lab}.
    173 
    174 A @samp{.leafproc} declaration is meant for use in conjunction with the
    175 optimized call instruction @samp{callj}; the directive records the data
    176 needed later to choose between converting the @samp{callj} into a
    177 @code{bal} or a @code{call}.
    178 
    179 @var{call-lab} is optional; if only one argument is present, or if the
    180 two arguments are identical, the single argument is assumed to be the
    181 @code{bal} entry point.
    182 
    183 @cindex @code{sysproc} directive, i960
    184 @item .sysproc @var{name}, @var{index}
    185 The @samp{.sysproc} directive defines a name for a system procedure.
    186 After you define it using @samp{.sysproc}, you can use @var{name} to
    187 refer to the system procedure identified by @var{index} when calling
    188 procedures with the optimized call instruction @samp{callj}.
    189 
    190 Both arguments are required; @var{index} must be between 0 and 31
    191 (inclusive).
    192 @end table
    193 
    194 @node Opcodes for i960
    195 @section i960 Opcodes
    196 
    197 @cindex opcodes, i960
    198 @cindex i960 opcodes
    199 All Intel 960 machine instructions are supported;
    200 @pxref{Options-i960,,i960 Command-line Options} for a discussion of
    201 selecting the instruction subset for a particular 960
    202 architecture.@refill
    203 
    204 Some opcodes are processed beyond simply emitting a single corresponding
    205 instruction: @samp{callj}, and Compare-and-Branch or Compare-and-Jump
    206 instructions with target displacements larger than 13 bits.
    207 
    208 @menu
    209 * callj-i960::                  @code{callj}
    210 * Compare-and-branch-i960::     Compare-and-Branch
    211 @end menu
    212 
    213 @node callj-i960
    214 @subsection @code{callj}
    215 
    216 @cindex @code{callj}, i960 pseudo-opcode
    217 @cindex i960 @code{callj} pseudo-opcode
    218 You can write @code{callj} to have the assembler or the linker determine
    219 the most appropriate form of subroutine call: @samp{call},
    220 @samp{bal}, or @samp{calls}.  If the assembly source contains
    221 enough information---a @samp{.leafproc} or @samp{.sysproc} directive
    222 defining the operand---then @code{@value{AS}} translates the
    223 @code{callj}; if not, it simply emits the @code{callj}, leaving it
    224 for the linker to resolve.
    225 
    226 @node Compare-and-branch-i960
    227 @subsection Compare-and-Branch
    228 
    229 @cindex i960 compare/branch instructions
    230 @cindex compare/branch instructions, i960
    231 The 960 architectures provide combined Compare-and-Branch instructions
    232 that permit you to store the branch target in the lower 13 bits of the
    233 instruction word itself.  However, if you specify a branch target far
    234 enough away that its address won't fit in 13 bits, the assembler can
    235 either issue an error, or convert your Compare-and-Branch instruction
    236 into separate instructions to do the compare and the branch.
    237 
    238 @cindex compare and jump expansions, i960
    239 @cindex i960 compare and jump expansions
    240 Whether @code{@value{AS}} gives an error or expands the instruction depends
    241 on two choices you can make: whether you use the @samp{-no-relax} option,
    242 and whether you use a ``Compare and Branch'' instruction or a ``Compare
    243 and Jump'' instruction.  The ``Jump'' instructions are @emph{always}
    244 expanded if necessary; the ``Branch'' instructions are expanded when
    245 necessary @emph{unless} you specify @code{-no-relax}---in which case
    246 @code{@value{AS}} gives an error instead.
    247 
    248 These are the Compare-and-Branch instructions, their ``Jump'' variants,
    249 and the instruction pairs they may expand into:
    250 
    251 @c TEXI2ROFF-KILL
    252 @ifinfo
    253 @c END TEXI2ROFF-KILL
    254 @example
    255         Compare and
    256      Branch      Jump       Expanded to
    257      ------    ------       ------------
    258         bbc                 chkbit; bno
    259         bbs                 chkbit; bo
    260      cmpibe    cmpije       cmpi; be
    261      cmpibg    cmpijg       cmpi; bg
    262     cmpibge   cmpijge       cmpi; bge
    263      cmpibl    cmpijl       cmpi; bl
    264     cmpible   cmpijle       cmpi; ble
    265     cmpibno   cmpijno       cmpi; bno
    266     cmpibne   cmpijne       cmpi; bne
    267      cmpibo    cmpijo       cmpi; bo
    268      cmpobe    cmpoje       cmpo; be
    269      cmpobg    cmpojg       cmpo; bg
    270     cmpobge   cmpojge       cmpo; bge
    271      cmpobl    cmpojl       cmpo; bl
    272     cmpoble   cmpojle       cmpo; ble
    273     cmpobne   cmpojne       cmpo; bne
    274 @end example
    275 @c TEXI2ROFF-KILL
    276 @end ifinfo
    277 @tex
    278 \hskip\tableindent
    279 \halign{\hfil {\tt #}\quad&\hfil {\tt #}\qquad&{\tt #}\hfil\cr
    280 \omit{\hfil\it Compare and\hfil}\span\omit&\cr
    281 {\it Branch}&{\it Jump}&{\it Expanded to}\cr
    282         bbc&                 & chkbit; bno\cr
    283         bbs&                 & chkbit; bo\cr
    284      cmpibe&    cmpije&       cmpi; be\cr
    285      cmpibg&    cmpijg&       cmpi; bg\cr
    286     cmpibge&   cmpijge&       cmpi; bge\cr
    287      cmpibl&    cmpijl&       cmpi; bl\cr
    288     cmpible&   cmpijle&       cmpi; ble\cr
    289     cmpibno&   cmpijno&       cmpi; bno\cr
    290     cmpibne&   cmpijne&       cmpi; bne\cr
    291      cmpibo&    cmpijo&       cmpi; bo\cr
    292      cmpobe&    cmpoje&       cmpo; be\cr
    293      cmpobg&    cmpojg&       cmpo; bg\cr
    294     cmpobge&   cmpojge&       cmpo; bge\cr
    295      cmpobl&    cmpojl&       cmpo; bl\cr
    296     cmpoble&   cmpojle&       cmpo; ble\cr
    297     cmpobne&   cmpojne&       cmpo; bne\cr}
    298 @end tex
    299 @c END TEXI2ROFF-KILL
    300 
    301 @node Syntax of i960
    302 @section Syntax for the i960
    303 @menu
    304 * i960-Chars::                Special Characters
    305 @end menu
    306 
    307 @node i960-Chars
    308 @subsection Special Characters
    309 
    310 @cindex line comment character, i960
    311 @cindex i960 line comment character
    312 The presence of a @samp{#} on a line indicates the start of a comment
    313 that extends to the end of the current line.
    314 
    315 If a @samp{#} appears as the first character of a line, the whole line
    316 is treated as a comment, but in this case the line can also be a
    317 logical line number directive (@pxref{Comments}) or a
    318 preprocessor control command (@pxref{Preprocessing}).
    319 
    320 @cindex line separator, i960
    321 @cindex statement separator, i960
    322 @cindex i960 line separator
    323 The @samp{;} character can be used to separate statements on the same
    324 line.
    325