@c Copyright (C) 2002-2021 Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@c CRIS description contributed by Axis Communications.
@ifset GENERIC
@page
@node CRIS-Dependent
@chapter CRIS Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter CRIS Dependent Features
@end ifclear

@cindex CRIS support
@menu
* CRIS-Opts::              Command-line Options
* CRIS-Expand::            Instruction expansion
* CRIS-Symbols::           Symbols
* CRIS-Syntax::            Syntax
@end menu

@node CRIS-Opts
@section Command-line Options

@cindex options, CRIS
@cindex CRIS options
The CRIS version of @code{@value{AS}} has these
machine-dependent command-line options.

@cindex @option{--emulation=criself} command-line option, CRIS
@cindex @option{--emulation=crisaout} command-line option, CRIS
@cindex CRIS @option{--emulation=criself} command-line option
@cindex CRIS @option{--emulation=crisaout} command-line option

The format of the generated object files can be either ELF or
a.out, specified by the command-line options
@option{--emulation=crisaout} and @option{--emulation=criself}.
The default is ELF (criself), unless @code{@value{AS}} has been
configured specifically for a.out by using the configuration
name @code{cris-axis-aout}.

@cindex @option{--underscore} command-line option, CRIS
@cindex @option{--no-underscore} command-line option, CRIS
@cindex CRIS @option{--underscore} command-line option
@cindex CRIS @option{--no-underscore} command-line option
There are two different link-incompatible ELF object file
variants for CRIS, for use in environments where symbols are
expected to be prefixed by a leading @samp{_} character and for
environments without such a symbol prefix.  The variant used for
GNU/Linux port has no symbol prefix.  Which variant to produce
is specified by either of the options @option{--underscore} and
@option{--no-underscore}.  The default is @option{--underscore}.
Since symbols in CRIS a.out objects are expected to have a
@samp{_} prefix, specifying @option{--no-underscore} when
generating a.out objects is an error.  Besides the object format
difference, the effect of this option is to parse register names
differently (@pxref{crisnous}).  The @option{--no-underscore}
option makes a @samp{$} register prefix mandatory.

@cindex @option{--pic} command-line option, CRIS
@cindex CRIS @option{--pic} command-line option
@cindex Position-independent code, CRIS
@cindex CRIS position-independent code
The option @option{--pic} must be passed to @code{@value{AS}} in
order to recognize the symbol syntax used for ELF (SVR4 PIC)
position-independent-code (@pxref{crispic}).  This will also
affect expansion of instructions.  The expansion with
@option{--pic} will use PC-relative rather than (slightly
faster) absolute addresses in those expansions.  This option is only
valid when generating ELF format object files.

@cindex @option{--march=@var{architecture}} command-line option, CRIS
@cindex CRIS @option{--march=@var{architecture}} command-line option
@cindex Architecture variant option, CRIS
@cindex CRIS architecture variant option
The option @option{--march=@var{architecture}}
@anchor{march-option}specifies the recognized instruction set
and recognized register names.  It also controls the
architecture type of the object file.  Valid values for
@var{architecture} are:
@table @code

@item v0_v10
All instructions and register names for any architecture variant
in the set v0@dots{}v10 are recognized.  This is the
default if the target is configured as cris-*.

@item v10
Only instructions and register names for CRIS v10 (as found in
ETRAX 100 LX) are recognized.  This is the default if the target
is configured as crisv10-*.

@item v32
Only instructions and register names for CRIS v32 (code name
Guinness) are recognized.  This is the default if the target is
configured as crisv32-*.  This value implies
@option{--no-mul-bug-abort}.  (A subsequent
@option{--mul-bug-abort} will turn it back on.)

@item common_v10_v32
Only instructions with register names and addressing modes with
opcodes common to the v10 and v32 are recognized.
@end table

@cindex @option{-N} command-line option, CRIS
@cindex CRIS @option{-N} command-line option
When @option{-N} is specified, @code{@value{AS}} will emit a
warning when a 16-bit branch instruction is expanded into a
32-bit multiple-instruction construct (@pxref{CRIS-Expand}).

@cindex @option{--no-mul-bug-abort} command-line option, CRIS
@cindex @option{--mul-bug-abort} command-line option, CRIS
@cindex CRIS @option{--no-mul-bug-abort} command-line option
@cindex CRIS @option{--mul-bug-abort} command-line option

Some versions of the CRIS v10, for example in the Etrax 100 LX,
contain a bug that causes destabilizing memory accesses when a
multiply instruction is executed with certain values in the
first operand just before a cache-miss.  When the
@option{--mul-bug-abort} command-line option is active (the
default value), @code{@value{AS}} will refuse to assemble a file
containing a multiply instruction at a dangerous offset, one
that could be the last on a cache-line, or is in a section with
insufficient alignment.  This placement checking does not catch
any case where the multiply instruction is dangerously placed
because it is located in a delay-slot.  The
@option{--mul-bug-abort} command-line option turns off the
checking.

@node CRIS-Expand
@section Instruction expansion

@cindex instruction expansion, CRIS
@cindex CRIS instruction expansion
@code{@value{AS}} will silently choose an instruction that fits
the operand size for @samp{[register+constant]} operands.  For
example, the offset @code{127} in @code{move.d [r3+127],r4} fits
in an instruction using a signed-byte offset.  Similarly,
@code{move.d [r2+32767],r1} will generate an instruction using a
16-bit offset.  For symbolic expressions and constants that do
not fit in 16 bits including the sign bit, a 32-bit offset is
generated.

For branches, @code{@value{AS}} will expand from a 16-bit branch
instruction into a sequence of instructions that can reach a
full 32-bit address.  Since this does not correspond to a single
instruction, such expansions can optionally be warned about.
@xref{CRIS-Opts}.

If the operand is found to fit the range, a @code{lapc} mnemonic
will translate to a @code{lapcq} instruction.  Use @code{lapc.d}
to force the 32-bit @code{lapc} instruction.

Similarly, the @code{addo} mnemonic will translate to the
shortest fitting instruction of @code{addoq}, @code{addo.w} and
@code{addo.d}, when used with a operand that is a constant known
at assembly time.

@node CRIS-Symbols
@section Symbols
@cindex Symbols, built-in, CRIS
@cindex Symbols, CRIS, built-in
@cindex CRIS built-in symbols
@cindex Built-in symbols, CRIS

Some symbols are defined by the assembler.  They're intended to
be used in conditional assembly, for example:
@smallexample
 .if ..asm.arch.cris.v32
 @var{code for CRIS v32}
 .elseif ..asm.arch.cris.common_v10_v32
 @var{code common to CRIS v32 and CRIS v10}
 .elseif ..asm.arch.cris.v10 | ..asm.arch.cris.any_v0_v10
 @var{code for v10}
 .else
 .error "Code needs to be added here."
 .endif
@end smallexample

These symbols are defined in the assembler, reflecting
command-line options, either when specified or the default.
They are always defined, to 0 or 1.
@table @code

@item ..asm.arch.cris.any_v0_v10
This symbol is non-zero when @option{--march=v0_v10} is specified
or the default.

@item ..asm.arch.cris.common_v10_v32
Set according to the option @option{--march=common_v10_v32}.

@item ..asm.arch.cris.v10
Reflects the option @option{--march=v10}.

@item ..asm.arch.cris.v32
Corresponds to @option{--march=v10}.
@end table

Speaking of symbols, when a symbol is used in code, it can have
a suffix modifying its value for use in position-independent
code. @xref{CRIS-Pic}.

@node CRIS-Syntax
@section Syntax

There are different aspects of the CRIS assembly syntax.

@menu
* CRIS-Chars::		        Special Characters
* CRIS-Pic::			Position-Independent Code Symbols
* CRIS-Regs::			Register Names
* CRIS-Pseudos::		Assembler Directives
@end menu

@node CRIS-Chars
@subsection Special Characters
@cindex line comment characters, CRIS
@cindex CRIS line comment characters

The character @samp{#} is a line comment character.  It starts a
comment if and only if it is placed at the beginning of a line.

A @samp{;} character starts a comment anywhere on the line,
causing all characters up to the end of the line to be ignored.

A @samp{@@} character is handled as a line separator equivalent
to a logical new-line character (except in a comment), so
separate instructions can be specified on a single line.

@node CRIS-Pic
@subsection Symbols in position-independent code
@cindex Symbols in position-independent code, CRIS
@cindex CRIS symbols in position-independent code
@cindex Position-independent code, symbols in, CRIS

When generating @anchor{crispic}position-independent code (SVR4
PIC) for use in cris-axis-linux-gnu or crisv32-axis-linux-gnu
shared libraries, symbol
suffixes are used to specify what kind of run-time symbol lookup
will be used, expressed in the object as different
@emph{relocation types}.  Usually, all absolute symbol values
must be located in a table, the @emph{global offset table},
leaving the code position-independent; independent of values of
global symbols and independent of the address of the code.  The
suffix modifies the value of the symbol, into for example an
index into the global offset table where the real symbol value
is entered, or a PC-relative value, or a value relative to the
start of the global offset table.  All symbol suffixes start
with the character @samp{:} (omitted in the list below).  Every
symbol use in code or a read-only section must therefore have a
PIC suffix to enable a useful shared library to be created.
Usually, these constructs must not be used with an additive
constant offset as is usually allowed, i.e.@: no 4 as in
@code{symbol + 4} is allowed.  This restriction is checked at
link-time, not at assembly-time.

@table @code
@item GOT

Attaching this suffix to a symbol in an instruction causes the
symbol to be entered into the global offset table.  The value is
a 32-bit index for that symbol into the global offset table.
The name of the corresponding relocation is
@samp{R_CRIS_32_GOT}.  Example: @code{move.d
[$r0+extsym:GOT],$r9}

@item GOT16

Same as for @samp{GOT}, but the value is a 16-bit index into the
global offset table.  The corresponding relocation is
@samp{R_CRIS_16_GOT}.  Example: @code{move.d
[$r0+asymbol:GOT16],$r10}

@item PLT

This suffix is used for function symbols.  It causes a
@emph{procedure linkage table}, an array of code stubs, to be
created at the time the shared object is created or linked
against, together with a global offset table entry.  The value
is a pc-relative offset to the corresponding stub code in the
procedure linkage table.  This arrangement causes the run-time
symbol resolver to be called to look up and set the value of the
symbol the first time the function is called (at latest;
depending environment variables).  It is only safe to leave the
symbol unresolved this way if all references are function calls.
The name of the relocation is @samp{R_CRIS_32_PLT_PCREL}.
Example: @code{add.d fnname:PLT,$pc}

@item PLTG

Like PLT, but the value is relative to the beginning of the
global offset table.  The relocation is
@samp{R_CRIS_32_PLT_GOTREL}.  Example: @code{move.d
fnname:PLTG,$r3}

@item GOTPLT

Similar to @samp{PLT}, but the value of the symbol is a 32-bit
index into the global offset table.  This is somewhat of a mix
between the effect of the @samp{GOT} and the @samp{PLT} suffix;
the difference to @samp{GOT} is that there will be a procedure
linkage table entry created, and that the symbol is assumed to
be a function entry and will be resolved by the run-time
resolver as with @samp{PLT}.  The relocation is
@samp{R_CRIS_32_GOTPLT}.  Example: @code{jsr
[$r0+fnname:GOTPLT]}

@item GOTPLT16

A variant of @samp{GOTPLT} giving a 16-bit value.  Its
relocation name is @samp{R_CRIS_16_GOTPLT}.  Example: @code{jsr
[$r0+fnname:GOTPLT16]}

@item GOTOFF

This suffix must only be attached to a local symbol, but may be
used in an expression adding an offset.  The value is the
address of the symbol relative to the start of the global offset
table.  The relocation name is @samp{R_CRIS_32_GOTREL}.
Example: @code{move.d [$r0+localsym:GOTOFF],r3}
@end table

@node CRIS-Regs
@subsection Register names
@cindex register names, CRIS
@cindex CRIS register names

A @samp{$} character may always prefix a general or special
register name in an instruction operand but is mandatory when
the option @option{--no-underscore} is specified or when the
@code{.syntax register_prefix} directive is in effect
(@pxref{crisnous}).  Register names are case-insensitive.

@node CRIS-Pseudos
@subsection Assembler Directives
@cindex assembler directives, CRIS
@cindex pseudo-ops, CRIS
@cindex CRIS assembler directives
@cindex CRIS pseudo-ops

There are a few CRIS-specific pseudo-directives in addition to
the generic ones.  @xref{Pseudo Ops}.  Constants emitted by
pseudo-directives are in little-endian order for CRIS.  There is
no support for floating-point-specific directives for CRIS.

@table @code
@item .dword EXPRESSIONS
@cindex assembler directive .dword, CRIS
@cindex pseudo-op .dword, CRIS
@cindex CRIS assembler directive .dword
@cindex CRIS pseudo-op .dword

The @code{.dword} directive is a synonym for @code{.int},
expecting zero or more EXPRESSIONS, separated by commas.  For
each expression, a 32-bit little-endian constant is emitted.

@item .syntax ARGUMENT
@cindex assembler directive .syntax, CRIS
@cindex pseudo-op .syntax, CRIS
@cindex CRIS assembler directive .syntax
@cindex CRIS pseudo-op .syntax
The @code{.syntax} directive takes as @var{ARGUMENT} one of the
following case-sensitive choices.

@table @code
@item no_register_prefix

The @code{.syntax no_register_prefix} @anchor{crisnous}directive
makes a @samp{$} character prefix on all registers optional.  It
overrides a previous setting, including the corresponding effect
of the option @option{--no-underscore}.  If this directive is
used when ordinary symbols do not have a @samp{_} character
prefix, care must be taken to avoid ambiguities whether an
operand is a register or a symbol; using symbols with names the
same as general or special registers then invoke undefined
behavior.

@item register_prefix

This directive makes a @samp{$} character prefix on all
registers mandatory.  It overrides a previous setting, including
the corresponding effect of the option @option{--underscore}.

@item leading_underscore

This is an assertion directive, emitting an error if the
@option{--no-underscore} option is in effect.

@item no_leading_underscore

This is the opposite of the @code{.syntax leading_underscore}
directive and emits an error if the option @option{--underscore}
is in effect.
@end table

@item .arch ARGUMENT
@cindex assembler directive .arch, CRIS
@cindex pseudo-op .arch, CRIS
@cindex CRIS assembler directive .arch
@cindex CRIS pseudo-op .arch
This is an assertion directive, giving an error if the specified
@var{ARGUMENT} is not the same as the specified or default value
for the @option{--march=@var{architecture}} option
(@pxref{march-option}).

@c If you compare with md_pseudo_table, you see that we don't
@c document ".file" and ".loc" here.  This is because we're just
@c wrapping the corresponding ELF function and emitting an error for
@c a.out.
@end table
