@c Copyright 2000, 2001, 2005, 2006, 2007, 2011 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:

@table @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 table

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)
