Home | History | Annotate | Download | only in doc
      1 @c Copyright (C) 1991-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 @page
      5 @node SH-Dependent
      6 @chapter Renesas / SuperH SH Dependent Features
      7 
      8 @cindex SH support
      9 @menu
     10 * SH Options::              Options
     11 * SH Syntax::               Syntax
     12 * SH Floating Point::       Floating Point
     13 * SH Directives::           SH Machine Directives
     14 * SH Opcodes::              Opcodes
     15 @end menu
     16 
     17 @node SH Options
     18 @section Options
     19 
     20 @cindex SH options
     21 @cindex options, SH
     22 @code{@value{AS}} has following command-line options for the Renesas
     23 (formerly Hitachi) / SuperH SH family.
     24 
     25 @table @code
     26 @kindex --little
     27 @kindex --big
     28 @kindex --relax
     29 @kindex --small
     30 @kindex --dsp
     31 @kindex --renesas
     32 @kindex --allow-reg-prefix
     33 
     34 @item --little
     35 Generate little endian code.
     36 
     37 @item --big
     38 Generate big endian code.
     39 
     40 @item --relax
     41 Alter jump instructions for long displacements.
     42 
     43 @item --small
     44 Align sections to 4 byte boundaries, not 16.
     45 
     46 @item --dsp
     47 Enable sh-dsp insns, and disable sh3e / sh4 insns.
     48 
     49 @item --renesas
     50 Disable optimization with section symbol for compatibility with
     51 Renesas assembler.
     52 
     53 @item --allow-reg-prefix
     54 Allow '$' as a register name prefix.
     55 
     56 @kindex --fdpic
     57 @item --fdpic
     58 Generate an FDPIC object file.
     59 
     60 @item --isa=sh4 | sh4a
     61 Specify the sh4 or sh4a instruction set.
     62 @item --isa=dsp
     63 Enable sh-dsp insns, and disable sh3e / sh4 insns.
     64 @item --isa=fp
     65 Enable sh2e, sh3e, sh4, and sh4a insn sets.
     66 @item --isa=all
     67 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
     68 
     69 @item -h-tick-hex
     70 Support H'00 style hex constants in addition to 0x00 style.
     71 
     72 @end table
     73 
     74 @node SH Syntax
     75 @section Syntax
     76 
     77 @menu
     78 * SH-Chars::                Special Characters
     79 * SH-Regs::                 Register Names
     80 * SH-Addressing::           Addressing Modes
     81 @end menu
     82 
     83 @node SH-Chars
     84 @subsection Special Characters
     85 
     86 @cindex line comment character, SH
     87 @cindex SH line comment character
     88 @samp{!} is the line comment character.
     89 
     90 @cindex line separator, SH
     91 @cindex statement separator, SH
     92 @cindex SH line separator
     93 You can use @samp{;} instead of a newline to separate statements.
     94 
     95 If a @samp{#} appears as the first character of a line then the whole
     96 line is treated as a comment, but in this case the line could also be
     97 a logical line number directive (@pxref{Comments}) or a preprocessor
     98 control command (@pxref{Preprocessing}).
     99 
    100 @cindex symbol names, @samp{$} in
    101 @cindex @code{$} in symbol names
    102 Since @samp{$} has no special meaning, you may use it in symbol names.
    103 
    104 @node SH-Regs
    105 @subsection Register Names
    106 
    107 @cindex SH registers
    108 @cindex registers, SH
    109 You can use the predefined symbols @samp{r0}, @samp{r1}, @samp{r2},
    110 @samp{r3}, @samp{r4}, @samp{r5}, @samp{r6}, @samp{r7}, @samp{r8},
    111 @samp{r9}, @samp{r10}, @samp{r11}, @samp{r12}, @samp{r13}, @samp{r14},
    112 and @samp{r15} to refer to the SH registers.
    113 
    114 The SH also has these control registers:
    115 
    116 @table @code
    117 @item pr
    118 procedure register (holds return address)
    119 
    120 @item pc
    121 program counter
    122 
    123 @item mach
    124 @itemx macl
    125 high and low multiply accumulator registers
    126 
    127 @item sr
    128 status register
    129 
    130 @item gbr
    131 global base register
    132 
    133 @item vbr
    134 vector base register (for interrupt vectors)
    135 @end table
    136 
    137 @node SH-Addressing
    138 @subsection Addressing Modes
    139 
    140 @cindex addressing modes, SH
    141 @cindex SH addressing modes
    142 @code{@value{AS}} understands the following addressing modes for the SH.
    143 @code{R@var{n}} in the following refers to any of the numbered
    144 registers, but @emph{not} the control registers.
    145 
    146 @table @code
    147 @item R@var{n}
    148 Register direct
    149 
    150 @item @@R@var{n}
    151 Register indirect
    152 
    153 @item @@-R@var{n}
    154 Register indirect with pre-decrement
    155 
    156 @item @@R@var{n}+
    157 Register indirect with post-increment
    158 
    159 @item @@(@var{disp}, R@var{n})
    160 Register indirect with displacement
    161 
    162 @item @@(R0, R@var{n})
    163 Register indexed
    164 
    165 @item @@(@var{disp}, GBR)
    166 @code{GBR} offset
    167 
    168 @item @@(R0, GBR)
    169 GBR indexed
    170 
    171 @item @var{addr}
    172 @itemx @@(@var{disp}, PC)
    173 PC relative address (for branch or for addressing memory).  The
    174 @code{@value{AS}} implementation allows you to use the simpler form
    175 @var{addr} anywhere a PC relative address is called for; the alternate
    176 form is supported for compatibility with other assemblers.
    177 
    178 @item #@var{imm}
    179 Immediate data
    180 @end table
    181 
    182 @node SH Floating Point
    183 @section Floating Point
    184 
    185 @cindex floating point, SH (@sc{ieee})
    186 @cindex SH floating point (@sc{ieee})
    187 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
    188 SH groups can use @code{.float} directive to generate @sc{ieee}
    189 floating-point numbers.
    190 
    191 SH2E and SH3E support single-precision floating point calculations as
    192 well as entirely PCAPI compatible emulation of double-precision
    193 floating point calculations. SH2E and SH3E instructions are a subset of
    194 the floating point calculations conforming to the IEEE754 standard.
    195 
    196 In addition to single-precision and double-precision floating-point
    197 operation capability, the on-chip FPU of SH4 has a 128-bit graphic
    198 engine that enables 32-bit floating-point data to be processed 128
    199 bits at a time. It also supports 4 * 4 array operations and inner
    200 product operations. Also, a superscalar architecture is employed that
    201 enables simultaneous execution of two instructions (including FPU
    202 instructions), providing performance of up to twice that of
    203 conventional architectures at the same frequency.
    204 
    205 @node SH Directives
    206 @section SH Machine Directives
    207 
    208 @cindex SH machine directives
    209 @cindex machine directives, SH
    210 @cindex @code{uaword} directive, SH
    211 @cindex @code{ualong} directive, SH
    212 @cindex @code{uaquad} directive, SH
    213 
    214 @table @code
    215 @item uaword
    216 @itemx ualong
    217 @itemx uaquad
    218 @code{@value{AS}} will issue a warning when a misaligned @code{.word},
    219 @code{.long}, or @code{.quad} directive is used.  You may use
    220 @code{.uaword}, @code{.ualong}, or @code{.uaquad} to indicate that the
    221 value is intentionally misaligned.
    222 @end table
    223 
    224 @node SH Opcodes
    225 @section Opcodes
    226 
    227 @cindex SH opcode summary
    228 @cindex opcode summary, SH
    229 @cindex mnemonics, SH
    230 @cindex instruction summary, SH
    231 For detailed information on the SH machine instruction set, see
    232 @cite{SH-Microcomputer User's Manual} (Renesas) or
    233 @cite{SH-4 32-bit CPU Core Architecture} (SuperH) and
    234 @cite{SuperH (SH) 64-Bit RISC Series} (SuperH).
    235 
    236 @code{@value{AS}} implements all the standard SH opcodes.  No additional
    237 pseudo-instructions are needed on this family.  Note, however, that
    238 because @code{@value{AS}} supports a simpler form of PC-relative
    239 addressing, you may simply write (for example)
    240 
    241 @example
    242 mov.l  bar,r0
    243 @end example
    244 
    245 @noindent
    246 where other assemblers might require an explicit displacement to
    247 @code{bar} from the program counter:
    248 
    249 @example
    250 mov.l  @@(@var{disp}, PC)
    251 @end example
    252 
    253 @ifset SMALL
    254 @c this table, due to the multi-col faking and hardcoded order, looks silly
    255 @c except in smallbook.  See comments below "@set SMALL" near top of this file.
    256 
    257 Here is a summary of SH opcodes:
    258 
    259 @page
    260 @smallexample
    261 @i{Legend:}
    262 Rn        @r{a numbered register}
    263 Rm        @r{another numbered register}
    264 #imm      @r{immediate data}
    265 disp      @r{displacement}
    266 disp8     @r{8-bit displacement}
    267 disp12    @r{12-bit displacement}
    268 
    269 add #imm,Rn                    lds.l @@Rn+,PR
    270 add Rm,Rn                      mac.w @@Rm+,@@Rn+
    271 addc Rm,Rn                     mov #imm,Rn
    272 addv Rm,Rn                     mov Rm,Rn
    273 and #imm,R0                    mov.b Rm,@@(R0,Rn)
    274 and Rm,Rn                      mov.b Rm,@@-Rn
    275 and.b #imm,@@(R0,GBR)           mov.b Rm,@@Rn
    276 bf disp8                       mov.b @@(disp,Rm),R0
    277 bra disp12                     mov.b @@(disp,GBR),R0
    278 bsr disp12                     mov.b @@(R0,Rm),Rn
    279 bt disp8                       mov.b @@Rm+,Rn
    280 clrmac                         mov.b @@Rm,Rn
    281 clrt                           mov.b R0,@@(disp,Rm)
    282 cmp/eq #imm,R0                 mov.b R0,@@(disp,GBR)
    283 cmp/eq Rm,Rn                   mov.l Rm,@@(disp,Rn)
    284 cmp/ge Rm,Rn                   mov.l Rm,@@(R0,Rn)
    285 cmp/gt Rm,Rn                   mov.l Rm,@@-Rn
    286 cmp/hi Rm,Rn                   mov.l Rm,@@Rn
    287 cmp/hs Rm,Rn                   mov.l @@(disp,Rn),Rm
    288 cmp/pl Rn                      mov.l @@(disp,GBR),R0
    289 cmp/pz Rn                      mov.l @@(disp,PC),Rn
    290 cmp/str Rm,Rn                  mov.l @@(R0,Rm),Rn
    291 div0s Rm,Rn                    mov.l @@Rm+,Rn
    292 div0u                          mov.l @@Rm,Rn
    293 div1 Rm,Rn                     mov.l R0,@@(disp,GBR)
    294 exts.b Rm,Rn                   mov.w Rm,@@(R0,Rn)
    295 exts.w Rm,Rn                   mov.w Rm,@@-Rn
    296 extu.b Rm,Rn                   mov.w Rm,@@Rn
    297 extu.w Rm,Rn                   mov.w @@(disp,Rm),R0
    298 jmp @@Rn                        mov.w @@(disp,GBR),R0
    299 jsr @@Rn                        mov.w @@(disp,PC),Rn
    300 ldc Rn,GBR                     mov.w @@(R0,Rm),Rn
    301 ldc Rn,SR                      mov.w @@Rm+,Rn
    302 ldc Rn,VBR                     mov.w @@Rm,Rn
    303 ldc.l @@Rn+,GBR                 mov.w R0,@@(disp,Rm)
    304 ldc.l @@Rn+,SR                  mov.w R0,@@(disp,GBR)
    305 ldc.l @@Rn+,VBR                 mova @@(disp,PC),R0
    306 lds Rn,MACH                    movt Rn
    307 lds Rn,MACL                    muls Rm,Rn
    308 lds Rn,PR                      mulu Rm,Rn
    309 lds.l @@Rn+,MACH                neg Rm,Rn
    310 lds.l @@Rn+,MACL                negc Rm,Rn
    311 @page
    312 nop                            stc VBR,Rn
    313 not Rm,Rn                      stc.l GBR,@@-Rn
    314 or #imm,R0                     stc.l SR,@@-Rn
    315 or Rm,Rn                       stc.l VBR,@@-Rn
    316 or.b #imm,@@(R0,GBR)            sts MACH,Rn
    317 rotcl Rn                       sts MACL,Rn
    318 rotcr Rn                       sts PR,Rn
    319 rotl Rn                        sts.l MACH,@@-Rn
    320 rotr Rn                        sts.l MACL,@@-Rn
    321 rte                            sts.l PR,@@-Rn
    322 rts                            sub Rm,Rn
    323 sett                           subc Rm,Rn
    324 shal Rn                        subv Rm,Rn
    325 shar Rn                        swap.b Rm,Rn
    326 shll Rn                        swap.w Rm,Rn
    327 shll16 Rn                      tas.b @@Rn
    328 shll2 Rn                       trapa #imm
    329 shll8 Rn                       tst #imm,R0
    330 shlr Rn                        tst Rm,Rn
    331 shlr16 Rn                      tst.b #imm,@@(R0,GBR)
    332 shlr2 Rn                       xor #imm,R0
    333 shlr8 Rn                       xor Rm,Rn
    334 sleep                          xor.b #imm,@@(R0,GBR)
    335 stc GBR,Rn                     xtrct Rm,Rn
    336 stc SR,Rn
    337 @end smallexample
    338 @end ifset
    339 
    340 @ifset Renesas-all
    341 @ifclear GENERIC
    342 @raisesections
    343 @end ifclear
    344 @end ifset
    345 
    346