@c Copyright 2000, 2001, 2005 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 ARC special characters
@cindex special characters, ARC
*TODO*

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

