@c Copyright (C) 1996-2021 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 MT-Dependent
@chapter MT Dependent Features
@end ifset

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

@cindex MT support
@menu
* MT Options::              Options
* MY Syntax::               Syntax
@end menu

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

@table @code

@cindex @code{-march=} command-line option, MT
@item -march=@var{processor}
This option specifies the target processor.  The assembler will issue an
error message if an attempt is made to assemble an instruction which
will not execute on the target processor.  The following processor names are
recognized:
@code{ms1-64-001},
@code{ms1-16-002},
@code{ms1-16-003},
and @code{ms2}.

@cindex @code{-nosched} command-line option, MT
@item -nosched
This option disables scheduling restriction checking.

@end table

@node MT Syntax
@section Syntax
@menu
* MT-Chars::                Special Characters
@end menu

@node MT-Chars
@subsection Special Characters

@cindex line comment character, MT
@cindex MT line comment character
The presence of a @samp{;} appearing anywhere on a line indicates the
start of a comment that extends to the end of that line.

If a @samp{#} appears as the first character of a line then the whole
line is treated as a comment, but in this case the line can also be a
logical line number directive (@pxref{Comments}) or a preprocessor
control command (@pxref{Preprocessing}).

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

