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