@c Copyright (C) 1991-2021 Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.

@ignore
@c FIXME!  Stop ignoring when filled in.
@node 32x32
@chapter 32x32

@section Options
The 32x32 version of @code{@value{AS}} accepts a @samp{-m32032} option to
specify that it is compiling for a 32032 processor, or a
@samp{-m32532} to specify that it is compiling for a 32532 option.
The default (if neither is specified) is chosen when the assembler
is compiled.

@section Syntax
I don't know anything about the 32x32 syntax assembled by
@code{@value{AS}}.  Someone who understands the processor (I've never seen
one) and the possible syntaxes should write this section.

@section Floating Point
The 32x32 uses @sc{ieee} floating point numbers, but @code{@value{AS}}
only creates single or double precision values.  I don't know if the
32x32 understands extended precision numbers.

@section 32x32 Machine Directives
The 32x32 has no machine dependent directives.

@end ignore

@ifset GENERIC
@page
@node NS32K-Dependent
@chapter NS32K Dependent Features
@end ifset

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

@cindex N32K support
@menu
* NS32K Syntax::               Syntax
@end menu


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

@node NS32K-Chars
@subsection Special Characters

@cindex line comment character, NS32K
@cindex NS32K 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}).

If Sequent compatibility has been configured into the assembler then
the @samp{|} character appearing as the first character on a line will
also indicate the start of a line comment.

@cindex line separator, NS32K
@cindex statement separator, NS32K
@cindex NS32K line separator
The @samp{;} character can be used to separate statements on the same
line.
