@c Copyright (C) 2010-2021 Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@c man end
@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

@c man begin OPTIONS
@table @gcctabopt

@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{-mdsbt} command-line option, TIC6X
@cindex @code{-mno-dsbt} command-line option, TIC6X
@item -mdsbt
@itemx -mno-dsbt
The @option{-mdsbt} option causes the assembler to generate the
@code{Tag_ABI_DSBT} attribute with a value of 1, indicating that the
code is using DSBT addressing.  The @option{-mno-dsbt} option, the
default, causes the tag to have a value of 0, indicating that the code
does not use DSBT addressing.  The linker will emit a warning if
objects of different type (DSBT and non-DSBT) are linked together.

@cindex @code{-mpid=} command-line option, TIC6X
@item -mpid=no
@itemx -mpid=near
@itemx -mpid=far
The @option{-mpid=} option causes the assembler to generate the
@code{Tag_ABI_PID} attribute with a value indicating the form of data
addressing used by the code.  @option{-mpid=no}, the default,
indicates position-dependent data addressing, @option{-mpid=near}
indicates position-independent addressing with GOT accesses using near
DP addressing, and @option{-mpid=far} indicates position-independent
addressing with GOT accesses using far DP addressing.  The linker will
emit a warning if objects built with different settings of this option
are linked together.

@cindex @code{-mpic} command-line option, TIC6X
@cindex @code{-mno-pic} command-line option, TIC6X
@item -mpic
@itemx -mno-pic
The @option{-mpic} option causes the assembler to generate the
@code{Tag_ABI_PIC} attribute with a value of 1, indicating that the
code is using position-independent code addressing,  The
@code{-mno-pic} option, the default, causes the tag to have a value of
0, indicating position-dependent code addressing.  The linker will
emit a warning if objects of different type (position-dependent and
position-independent) are linked together.

@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
@c man end

@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.  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, 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{.cantunwind} directive, TIC6X
@item .cantunwind
Prevents unwinding through the current function.  No personality routine
or exception table data is required or permitted.

If this is not specified then frame unwinding information will be
constructed from CFI directives. @pxref{CFI directives}.

@cindex @code{.c6xabi_attribute} directive, TIC6X
@item .c6xabi_attribute @var{tag}, @var{value}
Set the C6000 EABI build attribute @var{tag} to @var{value}.

The @var{tag} is either an attribute number or one of
@code{Tag_ISA}, @code{Tag_ABI_wchar_t},
@code{Tag_ABI_stack_align_needed},
@code{Tag_ABI_stack_align_preserved}, @code{Tag_ABI_DSBT},
@code{Tag_ABI_PID}, @code{Tag_ABI_PIC},
@code{TAG_ABI_array_object_alignment},
@code{TAG_ABI_array_object_align_expected},
@code{Tag_ABI_compatibility} and @code{Tag_ABI_conformance}.  The
@var{value} is either a @code{number}, @code{"string"}, or
@code{number, "string"} depending on the tag.

@cindex @code{.ehtype} directive, TIC6X
@item .ehtype @var{symbol}
Output an exception type table reference to @var{symbol}.

@cindex @code{.endp} directive, TIC6X
@item .endp
Marks the end of and exception table or function.  If preceded by a
@code{.handlerdata} directive then this also switched back to the previous
text section.

@cindex @code{.handlerdata} directive, TIC6X
@item .handlerdata
Marks the end of the current function, and the start of the exception table
entry for that function.  Anything between this directive and the
@code{.endp} directive will be added to the exception table entry.

Must be preceded by a CFI block containing a @code{.cfi_lsda} directive.

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

@cindex @code{.personalityindex} directive, TIC6X
@item .personalityindex @var{index}
Sets the personality routine for the current function to the ABI specified
compact routine number @var{index}

@cindex @code{.personality} directive, TIC6X
@item .personality @var{name}
Sets the personality routine for the current function to @var{name}.

@cindex @code{.scomm} directive, TIC6X
@item .scomm @var{symbol}, @var{size}, @var{align}
Like @code{.comm}, creating a common symbol @var{symbol} with size @var{size}
and alignment @var{align}, but unlike when using @code{.comm}, this symbol
will be placed into the small BSS section by the linker.

@end table
