1 @c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 2001, 2003, 2004,
2 @c 2005, 2008, 2010, 2011 Free Software Foundation, Inc.
3 @c This is part of the GAS manual.
4 @c For copying conditions, see the file as.texinfo.
7 @chapter Renesas / SuperH SH Dependent Features
11 * SH Options:: Options
13 * SH Floating Point:: Floating Point
14 * SH Directives:: SH Machine Directives
15 * SH Opcodes:: Opcodes
23 @code{@value{AS}} has following command-line options for the Renesas
24 (formerly Hitachi) / SuperH SH family.
33 @kindex --allow-reg-prefix
36 Generate little endian code.
39 Generate big endian code.
42 Alter jump instructions for long displacements.
45 Align sections to 4 byte boundaries, not 16.
48 Enable sh-dsp insns, and disable sh3e / sh4 insns.
51 Disable optimization with section symbol for compatibility with
54 @item --allow-reg-prefix
55 Allow '$' as a register name prefix.
59 Generate an FDPIC object file.
61 @item --isa=sh4 | sh4a
62 Specify the sh4 or sh4a instruction set.
64 Enable sh-dsp insns, and disable sh3e / sh4 insns.
66 Enable sh2e, sh3e, sh4, and sh4a insn sets.
68 Enable sh1, sh2, sh2e, sh3, sh3e, sh4, sh4a, and sh-dsp insn sets.
71 Support H'00 style hex constants in addition to 0x00 style.
79 * SH-Chars:: Special Characters
80 * SH-Regs:: Register Names
81 * SH-Addressing:: Addressing Modes
85 @subsection Special Characters
87 @cindex line comment character, SH
88 @cindex SH line comment character
89 @samp{!} is the line comment character.
91 @cindex line separator, SH
92 @cindex statement separator, SH
93 @cindex SH line separator
94 You can use @samp{;} instead of a newline to separate statements.
96 If a @samp{#} appears as the first character of a line then the whole
97 line is treated as a comment, but in this case the line could also be
98 a logical line number directive (@pxref{Comments}) or a preprocessor
99 control command (@pxref{Preprocessing}).
101 @cindex symbol names, @samp{$} in
102 @cindex @code{$} in symbol names
103 Since @samp{$} has no special meaning, you may use it in symbol names.
106 @subsection Register Names
109 @cindex registers, SH
110 You can use the predefined symbols @samp{r0}, @samp{r1}, @samp{r2},
111 @samp{r3}, @samp{r4}, @samp{r5}, @samp{r6}, @samp{r7}, @samp{r8},
112 @samp{r9}, @samp{r10}, @samp{r11}, @samp{r12}, @samp{r13}, @samp{r14},
113 and @samp{r15} to refer to the SH registers.
115 The SH also has these control registers:
119 procedure register (holds return address)
126 high and low multiply accumulator registers
135 vector base register (for interrupt vectors)
139 @subsection Addressing Modes
141 @cindex addressing modes, SH
142 @cindex SH addressing modes
143 @code{@value{AS}} understands the following addressing modes for the SH.
144 @code{R@var{n}} in the following refers to any of the numbered
145 registers, but @emph{not} the control registers.
155 Register indirect with pre-decrement
158 Register indirect with post-increment
160 @item @@(@var{disp}, R@var{n})
161 Register indirect with displacement
163 @item @@(R0, R@var{n})
166 @item @@(@var{disp}, GBR)
173 @itemx @@(@var{disp}, PC)
174 PC relative address (for branch or for addressing memory). The
175 @code{@value{AS}} implementation allows you to use the simpler form
176 @var{addr} anywhere a PC relative address is called for; the alternate
177 form is supported for compatibility with other assemblers.
183 @node SH Floating Point
184 @section Floating Point
186 @cindex floating point, SH (@sc{ieee})
187 @cindex SH floating point (@sc{ieee})
188 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
189 SH groups can use @code{.float} directive to generate @sc{ieee}
190 floating-point numbers.
192 SH2E and SH3E support single-precision floating point calculations as
193 well as entirely PCAPI compatible emulation of double-precision
194 floating point calculations. SH2E and SH3E instructions are a subset of
195 the floating point calculations conforming to the IEEE754 standard.
197 In addition to single-precision and double-precision floating-point
198 operation capability, the on-chip FPU of SH4 has a 128-bit graphic
199 engine that enables 32-bit floating-point data to be processed 128
200 bits at a time. It also supports 4 * 4 array operations and inner
201 product operations. Also, a superscalar architecture is employed that
202 enables simultaneous execution of two instructions (including FPU
203 instructions), providing performance of up to twice that of
204 conventional architectures at the same frequency.
207 @section SH Machine Directives
209 @cindex SH machine directives
210 @cindex machine directives, SH
211 @cindex @code{uaword} directive, SH
212 @cindex @code{ualong} directive, SH
217 @code{@value{AS}} will issue a warning when a misaligned @code{.word} or
218 @code{.long} directive is used. You may use @code{.uaword} or
219 @code{.ualong} to indicate that the value is intentionally misaligned.
225 @cindex SH opcode summary
226 @cindex opcode summary, SH
227 @cindex mnemonics, SH
228 @cindex instruction summary, SH
229 For detailed information on the SH machine instruction set, see
230 @cite{SH-Microcomputer User's Manual} (Renesas) or
231 @cite{SH-4 32-bit CPU Core Architecture} (SuperH) and
232 @cite{SuperH (SH) 64-Bit RISC Series} (SuperH).
234 @code{@value{AS}} implements all the standard SH opcodes. No additional
235 pseudo-instructions are needed on this family. Note, however, that
236 because @code{@value{AS}} supports a simpler form of PC-relative
237 addressing, you may simply write (for example)
244 where other assemblers might require an explicit displacement to
245 @code{bar} from the program counter:
248 mov.l @@(@var{disp}, PC)
252 @c this table, due to the multi-col faking and hardcoded order, looks silly
253 @c except in smallbook. See comments below "@set SMALL" near top of this file.
255 Here is a summary of SH opcodes:
260 Rn @r{a numbered register}
261 Rm @r{another numbered register}
262 #imm @r{immediate data}
263 disp @r{displacement}
264 disp8 @r{8-bit displacement}
265 disp12 @r{12-bit displacement}
267 add #imm,Rn lds.l @@Rn+,PR
268 add Rm,Rn mac.w @@Rm+,@@Rn+
269 addc Rm,Rn mov #imm,Rn
271 and #imm,R0 mov.b Rm,@@(R0,Rn)
272 and Rm,Rn mov.b Rm,@@-Rn
273 and.b #imm,@@(R0,GBR) mov.b Rm,@@Rn
274 bf disp8 mov.b @@(disp,Rm),R0
275 bra disp12 mov.b @@(disp,GBR),R0
276 bsr disp12 mov.b @@(R0,Rm),Rn
277 bt disp8 mov.b @@Rm+,Rn
279 clrt mov.b R0,@@(disp,Rm)
280 cmp/eq #imm,R0 mov.b R0,@@(disp,GBR)
281 cmp/eq Rm,Rn mov.l Rm,@@(disp,Rn)
282 cmp/ge Rm,Rn mov.l Rm,@@(R0,Rn)
283 cmp/gt Rm,Rn mov.l Rm,@@-Rn
284 cmp/hi Rm,Rn mov.l Rm,@@Rn
285 cmp/hs Rm,Rn mov.l @@(disp,Rn),Rm
286 cmp/pl Rn mov.l @@(disp,GBR),R0
287 cmp/pz Rn mov.l @@(disp,PC),Rn
288 cmp/str Rm,Rn mov.l @@(R0,Rm),Rn
289 div0s Rm,Rn mov.l @@Rm+,Rn
291 div1 Rm,Rn mov.l R0,@@(disp,GBR)
292 exts.b Rm,Rn mov.w Rm,@@(R0,Rn)
293 exts.w Rm,Rn mov.w Rm,@@-Rn
294 extu.b Rm,Rn mov.w Rm,@@Rn
295 extu.w Rm,Rn mov.w @@(disp,Rm),R0
296 jmp @@Rn mov.w @@(disp,GBR),R0
297 jsr @@Rn mov.w @@(disp,PC),Rn
298 ldc Rn,GBR mov.w @@(R0,Rm),Rn
299 ldc Rn,SR mov.w @@Rm+,Rn
300 ldc Rn,VBR mov.w @@Rm,Rn
301 ldc.l @@Rn+,GBR mov.w R0,@@(disp,Rm)
302 ldc.l @@Rn+,SR mov.w R0,@@(disp,GBR)
303 ldc.l @@Rn+,VBR mova @@(disp,PC),R0
305 lds Rn,MACL muls Rm,Rn
307 lds.l @@Rn+,MACH neg Rm,Rn
308 lds.l @@Rn+,MACL negc Rm,Rn
311 not Rm,Rn stc.l GBR,@@-Rn
312 or #imm,R0 stc.l SR,@@-Rn
313 or Rm,Rn stc.l VBR,@@-Rn
314 or.b #imm,@@(R0,GBR) sts MACH,Rn
317 rotl Rn sts.l MACH,@@-Rn
318 rotr Rn sts.l MACL,@@-Rn
329 shlr16 Rn tst.b #imm,@@(R0,GBR)
332 sleep xor.b #imm,@@(R0,GBR)
333 stc GBR,Rn xtrct Rm,Rn