@c Copyright (C) 2000-2014 Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.

@ifset GENERIC
@page
@node ARC-Dependent
@chapter ARC Dependent Features
@end ifset

@ifclear GENERIC
@node Machine Dependencies
@chapter ARC Dependent Features
@end ifclear

@set ARC_CORE_DEFAULT 6

@cindex ARC support
@menu
* ARC Options::              Options
* ARC Syntax::               Syntax
* ARC Floating Point::       Floating Point
* ARC Directives::           ARC Machine Directives
* ARC Opcodes::              Opcodes
@end menu


@node ARC Options
@section Options
@cindex ARC options (none)
@cindex options for ARC (none)

@table @code

@cindex @code{-marc[5|6|7|8]} command line option, ARC
@item -marc[5|6|7|8]
This option selects the core processor variant.  Using
@code{-marc} is the same as @code{-marc@value{ARC_CORE_DEFAULT}}, which
is also the default.

@table @code

@cindex @code{arc5} arc5, ARC
@item arc5
Base instruction set.

@cindex @code{arc6} arc6, ARC
@item arc6
Jump-and-link (jl) instruction.  No requirement of an instruction between
setting flags and conditional jump.  For example:

@smallexample
  mov.f r0,r1
  beq   foo
@end smallexample

@cindex @code{arc7} arc7, ARC
@item arc7
Break (brk) and sleep (sleep) instructions.

@cindex @code{arc8} arc8, ARC
@item arc8
Software interrupt (swi) instruction.

@end table

Note: the @code{.option} directive can to be used to select a core
variant from within assembly code.

@cindex @code{-EB} command line option, ARC
@item -EB
This option specifies that the output generated by the assembler should
be marked as being encoded for a big-endian processor.

@cindex @code{-EL} command line option, ARC
@item -EL
This option specifies that the output generated by the assembler should
be marked as being encoded for a little-endian processor - this is the
default.

@end table

@node ARC Syntax
@section Syntax
@menu
* ARC-Chars::                Special Characters
* ARC-Regs::                 Register Names
@end menu

@node ARC-Chars
@subsection Special Characters

@cindex line comment character, ARC
@cindex ARC line comment character
The presence of a @samp{#} on a line indicates the start of a comment
that extends to the end of the current line.  Note that if a line
starts with a @samp{#} character then it can also be a logical line
number directive (@pxref{Comments}) or a preprocessor
control command (@pxref{Preprocessing}).

@cindex line separator, ARC
@cindex statement separator, ARC
@cindex ARC line separator
The ARC assembler does not support a line separator character.

@node ARC-Regs
@subsection Register Names

@cindex ARC register names
@cindex register names, ARC
*TODO*


@node ARC Floating Point
@section Floating Point

@cindex floating point, ARC (@sc{ieee})
@cindex ARC floating point (@sc{ieee})
The ARC core does not currently have hardware floating point
support. Software floating point support is provided by @code{GCC}
and uses @sc{ieee} floating-point numbers.


@node ARC Directives
@section ARC Machine Directives

@cindex machine directives, ARC
@cindex ARC machine directives
The ARC version of @code{@value{AS}} supports the following additional
machine directives:

@table @code

@cindex @code{2byte} directive, ARC
@item .2byte @var{expressions}
*TODO*

@cindex @code{3byte} directive, ARC
@item .3byte @var{expressions}
*TODO*

@cindex @code{4byte} directive, ARC
@item .4byte @var{expressions}
*TODO*

@cindex @code{extAuxRegister} directive, ARC
@item .extAuxRegister @var{name},@var{address},@var{mode}
The ARCtangent A4 has extensible auxiliary register space.  The
auxiliary registers can be defined in the assembler source code by
using this directive.  The first parameter is the @var{name} of the
new auxiallry register.  The second parameter is the @var{address} of
the register in the auxiliary register memory map for the variant of
the ARC.  The third parameter specifies the @var{mode} in which the
register can be operated is and it can be one of:

@table @code
@item r          (readonly)
@item w          (write only)
@item r|w        (read or write)
@end table

For example:

@smallexample
  .extAuxRegister mulhi,0x12,w
@end smallexample

This specifies an extension auxiliary register called @emph{mulhi}
which is at address 0x12 in the memory space and which is only
writable.

@cindex @code{extCondCode} directive, ARC
@item .extCondCode @var{suffix},@var{value}
The condition codes on the ARCtangent A4 are extensible and can be
specified by means of this assembler directive.  They are specified
by the suffix and the value for the condition code.  They can be used to
specify extra condition codes with any values.  For example:

@smallexample
  .extCondCode is_busy,0x14

   add.is_busy  r1,r2,r3
   bis_busy     _main
@end smallexample

@cindex @code{extCoreRegister} directive, ARC
@item .extCoreRegister @var{name},@var{regnum},@var{mode},@var{shortcut}
Specifies an extension core register @var{name} for the application.
This allows a register @var{name} with a valid @var{regnum} between 0
and 60, with the following as valid values for @var{mode}

@table @samp
@item @emph{r}   (readonly)
@item @emph{w}   (write only)
@item @emph{r|w} (read or write)
@end table


The other parameter gives a description of the register having a
@var{shortcut} in the pipeline.  The valid values are:

@table @code
@item can_shortcut
@item cannot_shortcut
@end table

For example:

@smallexample
  .extCoreRegister mlo,57,r,can_shortcut
@end smallexample

This defines an extension core register mlo with the value 57 which
can shortcut the pipeline.

@cindex @code{extInstruction} directive, ARC
@item .extInstruction @var{name},@var{opcode},@var{subopcode},@var{suffixclass},@var{syntaxclass}
The ARCtangent A4 allows the user to specify extension instructions.
The extension instructions are not macros.  The assembler creates
encodings for use of these instructions according to the specification
by the user.  The parameters are:

@itemize @bullet
@item @var{name}
Name of the extension instruction

@item @var{opcode}
Opcode to be used. (Bits 27:31 in the encoding).  Valid values
0x10-0x1f or 0x03

@item @var{subopcode}
Subopcode to be used.  Valid values are from 0x09-0x3f.  However the
correct value also depends on @var{syntaxclass}

@item @var{suffixclass}
Determines the kinds of suffixes to be allowed.  Valid values are
@code{SUFFIX_NONE}, @code{SUFFIX_COND},
@code{SUFFIX_FLAG} which indicates the absence or presence of
conditional suffixes and flag setting by the extension instruction.
It is also possible to specify that an instruction sets the flags and
is conditional by using @code{SUFFIX_CODE} | @code{SUFFIX_FLAG}.

@item @var{syntaxclass}
Determines the syntax class for the instruction.  It can have the
following values:

@table @code
@item @code{SYNTAX_2OP}:
2 Operand Instruction
@item @code{SYNTAX_3OP}:
3 Operand Instruction
@end table

In addition there could be modifiers for the syntax class as described
below:

@itemize @minus
Syntax Class Modifiers are:

@item @code{OP1_MUST_BE_IMM}:
Modifies syntax class SYNTAX_3OP,  specifying that the first operand
of a three-operand instruction must be an immediate (i.e., the result
is discarded).  OP1_MUST_BE_IMM is used by bitwise ORing it with
SYNTAX_3OP as given in the example below.  This could usually be used
to set the flags using specific instructions and not retain results.

@item @code{OP1_IMM_IMPLIED}:
Modifies syntax class SYNTAX_20P, it specifies that there is an
implied immediate destination operand which does not appear in the
syntax.  For example, if the source code contains an instruction like:

@smallexample
inst r1,r2
@end smallexample

it really means that the first argument is an implied immediate (that
is, the result is discarded).  This is the same as though the source
code were: inst 0,r1,r2.  You use OP1_IMM_IMPLIED by bitwise ORing it
with SYNTAX_20P.

@end itemize
@end itemize

For example, defining 64-bit multiplier with immediate operands:

@smallexample
.extInstruction mp64,0x14,0x0,SUFFIX_COND | SUFFIX_FLAG ,
                SYNTAX_3OP|OP1_MUST_BE_IMM
@end smallexample

The above specifies an extension instruction called mp64 which has 3 operands,
sets the flags, can be used with a condition code, for which the
first operand is an immediate.  (Equivalent to discarding the result
of the operation).

@smallexample
 .extInstruction mul64,0x14,0x00,SUFFIX_COND, SYNTAX_2OP|OP1_IMM_IMPLIED
@end smallexample

This describes a 2 operand instruction with an implicit first
immediate operand.  The result of this operation would be discarded.

@cindex @code{half} directive, ARC
@item .half @var{expressions}
*TODO*

@cindex @code{long} directive, ARC
@item .long @var{expressions}
*TODO*

@cindex @code{option} directive, ARC
@item .option @var{arc|arc5|arc6|arc7|arc8}
The @code{.option} directive must be followed by the desired core
version. Again @code{arc} is an alias for
@code{arc@value{ARC_CORE_DEFAULT}}.

Note: the @code{.option} directive overrides the command line option
@code{-marc}; a warning is emitted when the version is not consistent
between the two - even for the implicit default core version
(arc@value{ARC_CORE_DEFAULT}).

@cindex @code{short} directive, ARC
@item .short @var{expressions}
*TODO*

@cindex @code{word} directive, ARC
@item .word @var{expressions}
*TODO*

@end table


@node ARC Opcodes
@section Opcodes

@cindex ARC opcodes
@cindex opcodes for ARC

For information on the ARC instruction set, see @cite{ARC Programmers
Reference Manual}, ARC International (www.arc.com)
