123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346 |
- @c Copyright (C) 1991-2015 Free Software Foundation, Inc.
- @c This is part of the GAS manual.
- @c For copying conditions, see the file as.texinfo.
- @page
- @node SH-Dependent
- @chapter Renesas / SuperH SH Dependent Features
- @cindex SH support
- @menu
- * SH Options:: Options
- * SH Syntax:: Syntax
- * SH Floating Point:: Floating Point
- * SH Directives:: SH Machine Directives
- * SH Opcodes:: Opcodes
- @end menu
- @node SH Options
- @section Options
- @cindex SH options
- @cindex options, SH
- @code{@value{AS}} has following command-line options for the Renesas
- (formerly Hitachi) / SuperH SH family.
- @table @code
- @kindex --little
- @kindex --big
- @kindex --relax
- @kindex --small
- @kindex --dsp
- @kindex --renesas
- @kindex --allow-reg-prefix
- @item --little
- Generate little endian code.
- @item --big
- Generate big endian code.
- @item --relax
- Alter jump instructions for long displacements.
- @item --small
- Align sections to 4 byte boundaries, not 16.
- @item --dsp
- Enable sh-dsp insns, and disable sh3e / sh4 insns.
- @item --renesas
- Disable optimization with section symbol for compatibility with
- Renesas assembler.
- @item --allow-reg-prefix
- Allow '$' as a register name prefix.
- @kindex --fdpic
- @item --fdpic
- Generate an FDPIC object file.
- @item --isa=sh4 | sh4a
- Specify the sh4 or sh4a instruction set.
- @item --isa=dsp
- Enable sh-dsp insns, and disable sh3e / sh4 insns.
- @item --isa=fp
- Enable sh2e, sh3e, sh4, and sh4a insn sets.
- @item --isa=all
- Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
- @item -h-tick-hex
- Support H'00 style hex constants in addition to 0x00 style.
- @end table
- @node SH Syntax
- @section Syntax
- @menu
- * SH-Chars:: Special Characters
- * SH-Regs:: Register Names
- * SH-Addressing:: Addressing Modes
- @end menu
- @node SH-Chars
- @subsection Special Characters
- @cindex line comment character, SH
- @cindex SH line comment character
- @samp{!} is the line comment character.
- @cindex line separator, SH
- @cindex statement separator, SH
- @cindex SH line separator
- You can use @samp{;} instead of a newline to separate statements.
- If a @samp{#} appears as the first character of a line then the whole
- line is treated as a comment, but in this case the line could also be
- a logical line number directive (@pxref{Comments}) or a preprocessor
- control command (@pxref{Preprocessing}).
- @cindex symbol names, @samp{$} in
- @cindex @code{$} in symbol names
- Since @samp{$} has no special meaning, you may use it in symbol names.
- @node SH-Regs
- @subsection Register Names
- @cindex SH registers
- @cindex registers, SH
- You can use the predefined symbols @samp{r0}, @samp{r1}, @samp{r2},
- @samp{r3}, @samp{r4}, @samp{r5}, @samp{r6}, @samp{r7}, @samp{r8},
- @samp{r9}, @samp{r10}, @samp{r11}, @samp{r12}, @samp{r13}, @samp{r14},
- and @samp{r15} to refer to the SH registers.
- The SH also has these control registers:
- @table @code
- @item pr
- procedure register (holds return address)
- @item pc
- program counter
- @item mach
- @itemx macl
- high and low multiply accumulator registers
- @item sr
- status register
- @item gbr
- global base register
- @item vbr
- vector base register (for interrupt vectors)
- @end table
- @node SH-Addressing
- @subsection Addressing Modes
- @cindex addressing modes, SH
- @cindex SH addressing modes
- @code{@value{AS}} understands the following addressing modes for the SH.
- @code{R@var{n}} in the following refers to any of the numbered
- registers, but @emph{not} the control registers.
- @table @code
- @item R@var{n}
- Register direct
- @item @@R@var{n}
- Register indirect
- @item @@-R@var{n}
- Register indirect with pre-decrement
- @item @@R@var{n}+
- Register indirect with post-increment
- @item @@(@var{disp}, R@var{n})
- Register indirect with displacement
- @item @@(R0, R@var{n})
- Register indexed
- @item @@(@var{disp}, GBR)
- @code{GBR} offset
- @item @@(R0, GBR)
- GBR indexed
- @item @var{addr}
- @itemx @@(@var{disp}, PC)
- PC relative address (for branch or for addressing memory). The
- @code{@value{AS}} implementation allows you to use the simpler form
- @var{addr} anywhere a PC relative address is called for; the alternate
- form is supported for compatibility with other assemblers.
- @item #@var{imm}
- Immediate data
- @end table
- @node SH Floating Point
- @section Floating Point
- @cindex floating point, SH (@sc{ieee})
- @cindex SH floating point (@sc{ieee})
- SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
- SH groups can use @code{.float} directive to generate @sc{ieee}
- floating-point numbers.
- SH2E and SH3E support single-precision floating point calculations as
- well as entirely PCAPI compatible emulation of double-precision
- floating point calculations. SH2E and SH3E instructions are a subset of
- the floating point calculations conforming to the IEEE754 standard.
- In addition to single-precision and double-precision floating-point
- operation capability, the on-chip FPU of SH4 has a 128-bit graphic
- engine that enables 32-bit floating-point data to be processed 128
- bits at a time. It also supports 4 * 4 array operations and inner
- product operations. Also, a superscalar architecture is employed that
- enables simultaneous execution of two instructions (including FPU
- instructions), providing performance of up to twice that of
- conventional architectures at the same frequency.
- @node SH Directives
- @section SH Machine Directives
- @cindex SH machine directives
- @cindex machine directives, SH
- @cindex @code{uaword} directive, SH
- @cindex @code{ualong} directive, SH
- @cindex @code{uaquad} directive, SH
- @table @code
- @item uaword
- @itemx ualong
- @itemx uaquad
- @code{@value{AS}} will issue a warning when a misaligned @code{.word},
- @code{.long}, or @code{.quad} directive is used. You may use
- @code{.uaword}, @code{.ualong}, or @code{.uaquad} to indicate that the
- value is intentionally misaligned.
- @end table
- @node SH Opcodes
- @section Opcodes
- @cindex SH opcode summary
- @cindex opcode summary, SH
- @cindex mnemonics, SH
- @cindex instruction summary, SH
- For detailed information on the SH machine instruction set, see
- @cite{SH-Microcomputer User's Manual} (Renesas) or
- @cite{SH-4 32-bit CPU Core Architecture} (SuperH) and
- @cite{SuperH (SH) 64-Bit RISC Series} (SuperH).
- @code{@value{AS}} implements all the standard SH opcodes. No additional
- pseudo-instructions are needed on this family. Note, however, that
- because @code{@value{AS}} supports a simpler form of PC-relative
- addressing, you may simply write (for example)
- @example
- mov.l bar,r0
- @end example
- @noindent
- where other assemblers might require an explicit displacement to
- @code{bar} from the program counter:
- @example
- mov.l @@(@var{disp}, PC)
- @end example
- @ifset SMALL
- @c this table, due to the multi-col faking and hardcoded order, looks silly
- @c except in smallbook. See comments below "@set SMALL" near top of this file.
- Here is a summary of SH opcodes:
- @page
- @smallexample
- @i{Legend:}
- Rn @r{a numbered register}
- Rm @r{another numbered register}
- #imm @r{immediate data}
- disp @r{displacement}
- disp8 @r{8-bit displacement}
- disp12 @r{12-bit displacement}
- add #imm,Rn lds.l @@Rn+,PR
- add Rm,Rn mac.w @@Rm+,@@Rn+
- addc Rm,Rn mov #imm,Rn
- addv Rm,Rn mov Rm,Rn
- and #imm,R0 mov.b Rm,@@(R0,Rn)
- and Rm,Rn mov.b Rm,@@-Rn
- and.b #imm,@@(R0,GBR) mov.b Rm,@@Rn
- bf disp8 mov.b @@(disp,Rm),R0
- bra disp12 mov.b @@(disp,GBR),R0
- bsr disp12 mov.b @@(R0,Rm),Rn
- bt disp8 mov.b @@Rm+,Rn
- clrmac mov.b @@Rm,Rn
- clrt mov.b R0,@@(disp,Rm)
- cmp/eq #imm,R0 mov.b R0,@@(disp,GBR)
- cmp/eq Rm,Rn mov.l Rm,@@(disp,Rn)
- cmp/ge Rm,Rn mov.l Rm,@@(R0,Rn)
- cmp/gt Rm,Rn mov.l Rm,@@-Rn
- cmp/hi Rm,Rn mov.l Rm,@@Rn
- cmp/hs Rm,Rn mov.l @@(disp,Rn),Rm
- cmp/pl Rn mov.l @@(disp,GBR),R0
- cmp/pz Rn mov.l @@(disp,PC),Rn
- cmp/str Rm,Rn mov.l @@(R0,Rm),Rn
- div0s Rm,Rn mov.l @@Rm+,Rn
- div0u mov.l @@Rm,Rn
- div1 Rm,Rn mov.l R0,@@(disp,GBR)
- exts.b Rm,Rn mov.w Rm,@@(R0,Rn)
- exts.w Rm,Rn mov.w Rm,@@-Rn
- extu.b Rm,Rn mov.w Rm,@@Rn
- extu.w Rm,Rn mov.w @@(disp,Rm),R0
- jmp @@Rn mov.w @@(disp,GBR),R0
- jsr @@Rn mov.w @@(disp,PC),Rn
- ldc Rn,GBR mov.w @@(R0,Rm),Rn
- ldc Rn,SR mov.w @@Rm+,Rn
- ldc Rn,VBR mov.w @@Rm,Rn
- ldc.l @@Rn+,GBR mov.w R0,@@(disp,Rm)
- ldc.l @@Rn+,SR mov.w R0,@@(disp,GBR)
- ldc.l @@Rn+,VBR mova @@(disp,PC),R0
- lds Rn,MACH movt Rn
- lds Rn,MACL muls Rm,Rn
- lds Rn,PR mulu Rm,Rn
- lds.l @@Rn+,MACH neg Rm,Rn
- lds.l @@Rn+,MACL negc Rm,Rn
- @page
- nop stc VBR,Rn
- not Rm,Rn stc.l GBR,@@-Rn
- or #imm,R0 stc.l SR,@@-Rn
- or Rm,Rn stc.l VBR,@@-Rn
- or.b #imm,@@(R0,GBR) sts MACH,Rn
- rotcl Rn sts MACL,Rn
- rotcr Rn sts PR,Rn
- rotl Rn sts.l MACH,@@-Rn
- rotr Rn sts.l MACL,@@-Rn
- rte sts.l PR,@@-Rn
- rts sub Rm,Rn
- sett subc Rm,Rn
- shal Rn subv Rm,Rn
- shar Rn swap.b Rm,Rn
- shll Rn swap.w Rm,Rn
- shll16 Rn tas.b @@Rn
- shll2 Rn trapa #imm
- shll8 Rn tst #imm,R0
- shlr Rn tst Rm,Rn
- shlr16 Rn tst.b #imm,@@(R0,GBR)
- shlr2 Rn xor #imm,R0
- shlr8 Rn xor Rm,Rn
- sleep xor.b #imm,@@(R0,GBR)
- stc GBR,Rn xtrct Rm,Rn
- stc SR,Rn
- @end smallexample
- @end ifset
- @ifset Renesas-all
- @ifclear GENERIC
- @raisesections
- @end ifclear
- @end ifset
|