@c Copyright (C) 2002, 2003, 2008, 2011 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.

@item .uaquad
Like .uaword and .ualong, this allows you to specify an intentionally
unaligned quadword (64 bit word).

@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
