@c Copyright 2010 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 TIC6X-Dependent
@chapter TIC6X Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter TIC6X Dependent Features
@end ifclear

@cindex TIC6X support
@cindex TMS320C6X support
@menu
* TIC6X Options::            Options
* TIC6X Syntax::             Syntax
* TIC6X Directives::         Directives
@end menu

@node TIC6X Options
@section TIC6X Options
@cindex TIC6X options
@cindex options for TIC6X

@table @code

@cindex @code{-march=} command line option, TIC6X
@item -march=@var{arch}
Enable (only) instructions from architecture @var{arch}.  By default,
all instructions are permitted.

The following values of @var{arch} are accepted: @code{c62x},
@code{c64x}, @code{c64x+}, @code{c67x}, @code{c67x+}, @code{c674x}.

@cindex @code{-matomic} command line option, TIC6X
@cindex @code{-mno-atomic} command line option, TIC6X
@item -matomic
@itemx -mno-atomic
Enable or disable the optional C64x+ atomic operation instructions.
By default, they are enabled if no @option{-march} option is given, or
if an architecture is specified with @option{-march} that implies
these instructions are present (currently, there are no such
architectures); they are disabled if an architecture is specified with
@option{-march} on which the instructions are optional or not
present.  This option overrides such a default from the architecture,
independent of the order in which the @option{-march} or
@option{-matomic} or @option{-mno-atomic} options are passed.

@cindex TIC6X big-endian output
@cindex TIC6X little-endian output
@cindex big-endian output, TIC6X
@cindex little-endian output, TIC6X
@item -mbig-endian
@itemx -mlittle-endian
Generate code for the specified endianness.  The default is
little-endian.

@end table

@node TIC6X Syntax
@section TIC6X Syntax

@cindex line comment character, TIC6X
@cindex TIC6X 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.  If a @samp{#} or
@samp{*} appears as the first character of a line, the whole line is
treated as a comment.

@cindex line separator, TIC6X
@cindex statement separator, TIC6X
@cindex TIC6X line separator
The @samp{@@} character can be used instead of a newline to separate
statements.

Instruction, register and functional unit names are case-insensitive.
@command{@value{AS}} requires fully-specified functional unit names,
such as @samp{.S1}, @samp{.L1X} or @samp{.D1T2}, on all instructions
using a functional unit.

For some instructions, there may be syntactic ambiguity between
register or functional unit names and the names of labels or other
symbols.  To avoid this, enclose the ambiguous symbol name in
parentheses; register and functional unit names may not be enclosed in
parentheses.

@node TIC6X Directives
@section TIC6X Directives

@cindex machine directives, TIC6X
@cindex TIC6X machine directives

Directives controlling the set of instructions accepted by the
assembler have effect for instructions between the directive and any
subsequent directive overriding it.

@table @code

@cindex @code{.arch} directive, TIC6X
@item .arch @var{arch}
This has the same effect as @option{-march=@var{arch}}.

@cindex @code{.atomic} directive, TIC6X
@cindex @code{.noatomic} directive, TIC6X
@item .atomic
@itemx .noatomic
These have the same effects as @option{-matomic} and
@option{-mno-atomic}.

@cindex @code{.nocmp} directive, TIC6X
@item .nocmp
Disallow use of C64x+ compact instructions in the current text
section.

@end table
