| @c Copyright (C) 2002-2016 Free Software Foundation, Inc. |
| @c This is part of the GAS manual. |
| @c For copying conditions, see the file as.texinfo. |
| @page |
| @node SH64-Dependent |
| @chapter SuperH SH64 Dependent Features |
| |
| @cindex SH64 support |
| @menu |
| * SH64 Options:: Options |
| * SH64 Syntax:: Syntax |
| * SH64 Directives:: SH64 Machine Directives |
| * SH64 Opcodes:: Opcodes |
| @end menu |
| |
| @node SH64 Options |
| @section Options |
| |
| @cindex SH64 options |
| @cindex options, SH64 |
| @table @code |
| |
| @cindex SH64 ISA options |
| @cindex ISA options, SH64 |
| @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 -isa=shmedia | -isa=shcompact |
| Specify the default instruction set. @code{SHmedia} specifies the |
| 32-bit opcodes, and @code{SHcompact} specifies the 16-bit opcodes |
| compatible with previous SH families. The default depends on the ABI |
| selected; the default for the 64-bit ABI is SHmedia, and the default for |
| the 32-bit ABI is SHcompact. If neither the ABI nor the ISA is |
| specified, the default is 32-bit SHcompact. |
| |
| Note that the @code{.mode} pseudo-op is not permitted if the ISA is not |
| specified on the command line. |
| |
| @cindex SH64 ABI options |
| @cindex ABI options, SH64 |
| @item -abi=32 | -abi=64 |
| Specify the default ABI. If the ISA is specified and the ABI is not, |
| the default ABI depends on the ISA, with SHmedia defaulting to 64-bit |
| and SHcompact defaulting to 32-bit. |
| |
| Note that the @code{.abi} pseudo-op is not permitted if the ABI is not |
| specified on the command line. When the ABI is specified on the command |
| line, any @code{.abi} pseudo-ops in the source must match it. |
| |
| @item -shcompact-const-crange |
| Emit code-range descriptors for constants in SHcompact code sections. |
| |
| @item -no-mix |
| Disallow SHmedia code in the same section as constants and SHcompact |
| code. |
| |
| @item -no-expand |
| Do not expand MOVI, PT, PTA or PTB instructions. |
| |
| @item -expand-pt32 |
| With -abi=64, expand PT, PTA and PTB instructions to 32 bits only. |
| |
| @item -h-tick-hex |
| Support H'00 style hex constants in addition to 0x00 style. |
| |
| @end table |
| |
| @node SH64 Syntax |
| @section Syntax |
| |
| @menu |
| * SH64-Chars:: Special Characters |
| * SH64-Regs:: Register Names |
| * SH64-Addressing:: Addressing Modes |
| @end menu |
| |
| @node SH64-Chars |
| @subsection Special Characters |
| |
| @cindex line comment character, SH64 |
| @cindex SH64 line comment character |
| @samp{!} is the line comment character. |
| |
| 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 line separator, SH64 |
| @cindex statement separator, SH64 |
| @cindex SH64 line separator |
| You can use @samp{;} instead of a newline to separate statements. |
| |
| @cindex symbol names, @samp{$} in |
| @cindex @code{$} in symbol names |
| Since @samp{$} has no special meaning, you may use it in symbol names. |
| |
| @node SH64-Regs |
| @subsection Register Names |
| |
| @cindex SH64 registers |
| @cindex registers, SH64 |
| You can use the predefined symbols @samp{r0} through @samp{r63} to refer |
| to the SH64 general registers, @samp{cr0} through @code{cr63} for |
| control registers, @samp{tr0} through @samp{tr7} for target address |
| registers, @samp{fr0} through @samp{fr63} for single-precision floating |
| point registers, @samp{dr0} through @samp{dr62} (even numbered registers |
| only) for double-precision floating point registers, @samp{fv0} through |
| @samp{fv60} (multiples of four only) for single-precision floating point |
| vectors, @samp{fp0} through @samp{fp62} (even numbered registers only) |
| for single-precision floating point pairs, @samp{mtrx0} through |
| @samp{mtrx48} (multiples of 16 only) for 4x4 matrices of |
| single-precision floating point registers, @samp{pc} for the program |
| counter, and @samp{fpscr} for the floating point status and control |
| register. |
| |
| You can also refer to the control registers by the mnemonics @samp{sr}, |
| @samp{ssr}, @samp{pssr}, @samp{intevt}, @samp{expevt}, @samp{pexpevt}, |
| @samp{tra}, @samp{spc}, @samp{pspc}, @samp{resvec}, @samp{vbr}, |
| @samp{tea}, @samp{dcr}, @samp{kcr0}, @samp{kcr1}, @samp{ctc}, and |
| @samp{usr}. |
| |
| @node SH64-Addressing |
| @subsection Addressing Modes |
| |
| @cindex addressing modes, SH64 |
| @cindex SH64 addressing modes |
| |
| SH64 operands consist of either a register or immediate value. The |
| immediate value can be a constant or label reference (or portion of a |
| label reference), as in this example: |
| |
| @example |
| movi 4,r2 |
| pt function, tr4 |
| movi (function >> 16) & 65535,r0 |
| shori function & 65535, r0 |
| ld.l r0,4,r0 |
| @end example |
| |
| @cindex datalabel, SH64 |
| Instruction label references can reference labels in either SHmedia or |
| SHcompact. To differentiate between the two, labels in SHmedia sections |
| will always have the least significant bit set (i.e. they will be odd), |
| which SHcompact labels will have the least significant bit reset |
| (i.e. they will be even). If you need to reference the actual address |
| of a label, you can use the @code{datalabel} modifier, as in this |
| example: |
| |
| @example |
| .long function |
| .long datalabel function |
| @end example |
| |
| In that example, the first longword may or may not have the least |
| significant bit set depending on whether the label is an SHmedia label |
| or an SHcompact label. The second longword will be the actual address |
| of the label, regardless of what type of label it is. |
| |
| @node SH64 Directives |
| @section SH64 Machine Directives |
| |
| In addition to the SH directives, the SH64 provides the following |
| directives: |
| |
| @cindex SH64 machine directives |
| @cindex machine directives, SH64 |
| |
| @table @code |
| |
| @item .mode [shmedia|shcompact] |
| @itemx .isa [shmedia|shcompact] |
| Specify the ISA for the following instructions (the two directives are |
| equivalent). Note that programs such as @code{objdump} rely on symbolic |
| labels to determine when such mode switches occur (by checking the least |
| significant bit of the label's address), so such mode/isa changes should |
| always be followed by a label (in practice, this is true anyway). Note |
| that you cannot use these directives if you didn't specify an ISA on the |
| command line. |
| |
| @item .abi [32|64] |
| Specify the ABI for the following instructions. Note that you cannot use |
| this directive unless you specified an ABI on the command line, and the |
| ABIs specified must match. |
| |
| @end table |
| |
| @node SH64 Opcodes |
| @section Opcodes |
| |
| @cindex SH64 opcode summary |
| @cindex opcode summary, SH64 |
| @cindex mnemonics, SH64 |
| @cindex instruction summary, SH64 |
| For detailed information on the SH64 machine instruction set, see |
| @cite{SuperH 64 bit RISC Series Architecture Manual} (SuperH, Inc.). |
| |
| @code{@value{AS}} implements all the standard SH64 opcodes. In |
| addition, the following pseudo-opcodes may be expanded into one or more |
| alternate opcodes: |
| |
| @table @code |
| |
| @item movi |
| If the value doesn't fit into a standard @code{movi} opcode, |
| @code{@value{AS}} will replace the @code{movi} with a sequence of |
| @code{movi} and @code{shori} opcodes. |
| |
| @item pt |
| This expands to a sequence of @code{movi} and @code{shori} opcode, |
| followed by a @code{ptrel} opcode, or to a @code{pta} or @code{ptb} |
| opcode, depending on the label referenced. |
| |
| @end table |