1 @c Copyright 1991, 1992, 1993, 1994, 1995, 1997, 2001, 2003, 2004,
2 @c 2005, 2008, 2010 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 @cindex symbol names, @samp{$} in
97 @cindex @code{$} in symbol names
98 Since @samp{$} has no special meaning, you may use it in symbol names.
101 @subsection Register Names
104 @cindex registers, SH
105 You can use the predefined symbols @samp{r0}, @samp{r1}, @samp{r2},
106 @samp{r3}, @samp{r4}, @samp{r5}, @samp{r6}, @samp{r7}, @samp{r8},
107 @samp{r9}, @samp{r10}, @samp{r11}, @samp{r12}, @samp{r13}, @samp{r14},
108 and @samp{r15} to refer to the SH registers.
110 The SH also has these control registers:
114 procedure register (holds return address)
121 high and low multiply accumulator registers
130 vector base register (for interrupt vectors)
134 @subsection Addressing Modes
136 @cindex addressing modes, SH
137 @cindex SH addressing modes
138 @code{@value{AS}} understands the following addressing modes for the SH.
139 @code{R@var{n}} in the following refers to any of the numbered
140 registers, but @emph{not} the control registers.
150 Register indirect with pre-decrement
153 Register indirect with post-increment
155 @item @@(@var{disp}, R@var{n})
156 Register indirect with displacement
158 @item @@(R0, R@var{n})
161 @item @@(@var{disp}, GBR)
168 @itemx @@(@var{disp}, PC)
169 PC relative address (for branch or for addressing memory). The
170 @code{@value{AS}} implementation allows you to use the simpler form
171 @var{addr} anywhere a PC relative address is called for; the alternate
172 form is supported for compatibility with other assemblers.
178 @node SH Floating Point
179 @section Floating Point
181 @cindex floating point, SH (@sc{ieee})
182 @cindex SH floating point (@sc{ieee})
183 SH2E, SH3E and SH4 groups have on-chip floating-point unit (FPU). Other
184 SH groups can use @code{.float} directive to generate @sc{ieee}
185 floating-point numbers.
187 SH2E and SH3E support single-precision floating point calculations as
188 well as entirely PCAPI compatible emulation of double-precision
189 floating point calculations. SH2E and SH3E instructions are a subset of
190 the floating point calculations conforming to the IEEE754 standard.
192 In addition to single-precision and double-precision floating-point
193 operation capability, the on-chip FPU of SH4 has a 128-bit graphic
194 engine that enables 32-bit floating-point data to be processed 128
195 bits at a time. It also supports 4 * 4 array operations and inner
196 product operations. Also, a superscalar architecture is employed that
197 enables simultaneous execution of two instructions (including FPU
198 instructions), providing performance of up to twice that of
199 conventional architectures at the same frequency.
202 @section SH Machine Directives
204 @cindex SH machine directives
205 @cindex machine directives, SH
206 @cindex @code{uaword} directive, SH
207 @cindex @code{ualong} directive, SH
212 @code{@value{AS}} will issue a warning when a misaligned @code{.word} or
213 @code{.long} directive is used. You may use @code{.uaword} or
214 @code{.ualong} to indicate that the value is intentionally misaligned.
220 @cindex SH opcode summary
221 @cindex opcode summary, SH
222 @cindex mnemonics, SH
223 @cindex instruction summary, SH
224 For detailed information on the SH machine instruction set, see
225 @cite{SH-Microcomputer User's Manual} (Renesas) or
226 @cite{SH-4 32-bit CPU Core Architecture} (SuperH) and
227 @cite{SuperH (SH) 64-Bit RISC Series} (SuperH).
229 @code{@value{AS}} implements all the standard SH opcodes. No additional
230 pseudo-instructions are needed on this family. Note, however, that
231 because @code{@value{AS}} supports a simpler form of PC-relative
232 addressing, you may simply write (for example)
239 where other assemblers might require an explicit displacement to
240 @code{bar} from the program counter:
243 mov.l @@(@var{disp}, PC)
247 @c this table, due to the multi-col faking and hardcoded order, looks silly
248 @c except in smallbook. See comments below "@set SMALL" near top of this file.
250 Here is a summary of SH opcodes:
255 Rn @r{a numbered register}
256 Rm @r{another numbered register}
257 #imm @r{immediate data}
258 disp @r{displacement}
259 disp8 @r{8-bit displacement}
260 disp12 @r{12-bit displacement}
262 add #imm,Rn lds.l @@Rn+,PR
263 add Rm,Rn mac.w @@Rm+,@@Rn+
264 addc Rm,Rn mov #imm,Rn
266 and #imm,R0 mov.b Rm,@@(R0,Rn)
267 and Rm,Rn mov.b Rm,@@-Rn
268 and.b #imm,@@(R0,GBR) mov.b Rm,@@Rn
269 bf disp8 mov.b @@(disp,Rm),R0
270 bra disp12 mov.b @@(disp,GBR),R0
271 bsr disp12 mov.b @@(R0,Rm),Rn
272 bt disp8 mov.b @@Rm+,Rn
274 clrt mov.b R0,@@(disp,Rm)
275 cmp/eq #imm,R0 mov.b R0,@@(disp,GBR)
276 cmp/eq Rm,Rn mov.l Rm,@@(disp,Rn)
277 cmp/ge Rm,Rn mov.l Rm,@@(R0,Rn)
278 cmp/gt Rm,Rn mov.l Rm,@@-Rn
279 cmp/hi Rm,Rn mov.l Rm,@@Rn
280 cmp/hs Rm,Rn mov.l @@(disp,Rn),Rm
281 cmp/pl Rn mov.l @@(disp,GBR),R0
282 cmp/pz Rn mov.l @@(disp,PC),Rn
283 cmp/str Rm,Rn mov.l @@(R0,Rm),Rn
284 div0s Rm,Rn mov.l @@Rm+,Rn
286 div1 Rm,Rn mov.l R0,@@(disp,GBR)
287 exts.b Rm,Rn mov.w Rm,@@(R0,Rn)
288 exts.w Rm,Rn mov.w Rm,@@-Rn
289 extu.b Rm,Rn mov.w Rm,@@Rn
290 extu.w Rm,Rn mov.w @@(disp,Rm),R0
291 jmp @@Rn mov.w @@(disp,GBR),R0
292 jsr @@Rn mov.w @@(disp,PC),Rn
293 ldc Rn,GBR mov.w @@(R0,Rm),Rn
294 ldc Rn,SR mov.w @@Rm+,Rn
295 ldc Rn,VBR mov.w @@Rm,Rn
296 ldc.l @@Rn+,GBR mov.w R0,@@(disp,Rm)
297 ldc.l @@Rn+,SR mov.w R0,@@(disp,GBR)
298 ldc.l @@Rn+,VBR mova @@(disp,PC),R0
300 lds Rn,MACL muls Rm,Rn
302 lds.l @@Rn+,MACH neg Rm,Rn
303 lds.l @@Rn+,MACL negc Rm,Rn
306 not Rm,Rn stc.l GBR,@@-Rn
307 or #imm,R0 stc.l SR,@@-Rn
308 or Rm,Rn stc.l VBR,@@-Rn
309 or.b #imm,@@(R0,GBR) sts MACH,Rn
312 rotl Rn sts.l MACH,@@-Rn
313 rotr Rn sts.l MACL,@@-Rn
324 shlr16 Rn tst.b #imm,@@(R0,GBR)
327 sleep xor.b #imm,@@(R0,GBR)
328 stc GBR,Rn xtrct Rm,Rn