Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 2000-2014 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 i860-Dependent
      7 @chapter Intel i860 Dependent Features
      8 @end ifset
      9 @ifclear GENERIC
     10 @node Machine Dependencies
     11 @chapter Intel i860 Dependent Features
     12 @end ifclear
     13 
     14 @ignore
     15 @c FIXME: This is basically a stub for i860. There is tons more information
     16 that I will add later (jle (a] cygnus.com).
     17 @end ignore
     18 
     19 @cindex i860 support
     20 @menu
     21 * Notes-i860::                  i860 Notes
     22 * Options-i860::                i860 Command-line Options
     23 * Directives-i860::             i860 Machine Directives
     24 * Opcodes for i860::            i860 Opcodes
     25 * Syntax of i860::              i860 Syntax
     26 @end menu
     27 
     28 @node Notes-i860
     29 @section i860 Notes
     30 This is a fairly complete i860 assembler which is compatible with the
     31 UNIX System V/860 Release 4 assembler. However, it does not currently
     32 support SVR4 PIC (i.e., @code{@@GOT, @@GOTOFF, @@PLT}).
     33 
     34 Like the SVR4/860 assembler, the output object format is ELF32. Currently,
     35 this is the only supported object format. If there is sufficient interest,
     36 other formats such as COFF may be implemented.
     37 
     38 Both the Intel and AT&T/SVR4 syntaxes are supported, with the latter
     39 being the default.  One difference is that AT&T syntax requires the '%'
     40 prefix on register names while Intel syntax does not.  Another difference
     41 is in the specification of relocatable expressions.  The Intel syntax
     42 is @code{ha%expression} whereas the SVR4 syntax is @code{[expression]@@ha}
     43 (and similarly for the "l" and "h" selectors).
     44 @node Options-i860
     45 @section i860 Command-line Options
     46 @subsection SVR4 compatibility options
     47 @table @code
     48 @item -V
     49 Print assembler version.
     50 @item -Qy
     51 Ignored.
     52 @item -Qn
     53 Ignored.
     54 @end table
     55 @subsection Other options
     56 @table @code
     57 @item -EL
     58 Select little endian output (this is the default).
     59 @item -EB
     60 Select big endian output. Note that the i860 always reads instructions
     61 as little endian data, so this option only effects data and not
     62 instructions.
     63 @item -mwarn-expand
     64 Emit a warning message if any pseudo-instruction expansions occurred.
     65 For example, a @code{or} instruction with an immediate larger than 16-bits
     66 will be expanded into two instructions. This is a very undesirable feature to
     67 rely on, so this flag can help detect any code where it happens. One
     68 use of it, for instance, has been to find and eliminate any place
     69 where @code{gcc} may emit these pseudo-instructions.
     70 @item -mxp
     71 Enable support for the i860XP instructions and control registers.  By default,
     72 this option is disabled so that only the base instruction set (i.e., i860XR)
     73 is supported.
     74 @item -mintel-syntax
     75 The i860 assembler defaults to AT&T/SVR4 syntax.  This option enables the
     76 Intel syntax.
     77 @end table
     78 
     79 @node Directives-i860
     80 @section i860 Machine Directives
     81 
     82 @cindex machine directives, i860
     83 @cindex i860 machine directives
     84 
     85 @table @code
     86 @cindex @code{dual} directive, i860
     87 @item .dual
     88 Enter dual instruction mode. While this directive is supported, the
     89 preferred way to use dual instruction mode is to explicitly code
     90 the dual bit with the @code{d.} prefix.
     91 @end table
     92 
     93 @table @code
     94 @cindex @code{enddual} directive, i860
     95 @item .enddual
     96 Exit dual instruction mode. While this directive is supported, the
     97 preferred way to use dual instruction mode is to explicitly code
     98 the dual bit with the @code{d.} prefix.
     99 @end table
    100 
    101 @table @code
    102 @cindex @code{atmp} directive, i860
    103 @item .atmp
    104 Change the temporary register used when expanding pseudo operations. The
    105 default register is @code{r31}.
    106 @end table
    107 
    108 The @code{.dual}, @code{.enddual}, and @code{.atmp} directives are available only in the Intel syntax mode.
    109 
    110 Both syntaxes allow for the standard @code{.align} directive.  However,
    111 the Intel syntax additionally allows keywords for the alignment
    112 parameter: "@code{.align type}", where `type' is one of @code{.short}, @code{.long},
    113 @code{.quad}, @code{.single}, @code{.double} representing alignments of 2, 4,
    114 16, 4, and 8, respectively.
    115 
    116 @node Opcodes for i860
    117 @section i860 Opcodes
    118 
    119 @cindex opcodes, i860
    120 @cindex i860 opcodes
    121 All of the Intel i860XR and i860XP machine instructions are supported. Please see
    122 either @emph{i860 Microprocessor Programmer's Reference Manual} or @emph{i860 Microprocessor Architecture} for more information.
    123 @subsection Other instruction support (pseudo-instructions)
    124 For compatibility with some other i860 assemblers, a number of
    125 pseudo-instructions are supported. While these are supported, they are
    126 a very undesirable feature that should be avoided -- in particular, when
    127 they result in an expansion to multiple actual i860 instructions. Below
    128 are the pseudo-instructions that result in expansions.
    129 @itemize @bullet
    130 @item Load large immediate into general register:
    131 
    132 The pseudo-instruction @code{mov imm,%rn} (where the immediate does
    133 not fit within a signed 16-bit field) will be expanded into:
    134 @smallexample
    135 orh large_imm@@h,%r0,%rn
    136 or large_imm@@l,%rn,%rn
    137 @end smallexample
    138 @item Load/store with relocatable address expression:
    139 
    140 For example, the pseudo-instruction @code{ld.b addr_exp(%rx),%rn}
    141 will be expanded into:
    142 @smallexample
    143 orh addr_exp@@ha,%rx,%r31
    144 ld.l addr_exp@@l(%r31),%rn
    145 @end smallexample
    146 
    147 The analogous expansions apply to @code{ld.x, st.x, fld.x, pfld.x, fst.x}, and @code{pst.x} as well.
    148 @item Signed large immediate with add/subtract:
    149 
    150 If any of the arithmetic operations @code{adds, addu, subs, subu} are used
    151 with an immediate larger than 16-bits (signed), then they will be expanded.
    152 For instance, the pseudo-instruction @code{adds large_imm,%rx,%rn} expands to:
    153 @smallexample
    154 orh large_imm@@h,%r0,%r31
    155 or large_imm@@l,%r31,%r31
    156 adds %r31,%rx,%rn
    157 @end smallexample
    158 @item Unsigned large immediate with logical operations:
    159 
    160 Logical operations (@code{or, andnot, or, xor}) also result in expansions.
    161 The pseudo-instruction @code{or large_imm,%rx,%rn} results in:
    162 @smallexample
    163 orh large_imm@@h,%rx,%r31
    164 or large_imm@@l,%r31,%rn
    165 @end smallexample
    166 
    167 Similarly for the others, except for @code{and} which expands to:
    168 @smallexample
    169 andnot (-1 - large_imm)@@h,%rx,%r31
    170 andnot (-1 - large_imm)@@l,%r31,%rn
    171 @end smallexample
    172 @end itemize
    173 
    174 @node Syntax of i860
    175 @section i860 Syntax
    176 @menu
    177 * i860-Chars::                Special Characters
    178 @end menu
    179 
    180 @node i860-Chars
    181 @subsection Special Characters
    182 
    183 @cindex line comment character, i860
    184 @cindex i860 line comment character
    185 The presence of a @samp{#} appearing anywhere on a line indicates the
    186 start of a comment that extends to the end of that line.
    187 
    188 If a @samp{#} appears as the first character of a line then the whole
    189 line is treated as a comment, but in this case the line can also be a
    190 logical line number directive (@pxref{Comments}) or a preprocessor
    191 control command (@pxref{Preprocessing}).
    192 
    193 @cindex line separator, i860
    194 @cindex statement separator, i860
    195 @cindex i860 line separator
    196 The @samp{;} character can be used to separate statements on the same
    197 line.
    198