@c Copyright (C) 1991-2016 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 thiat 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.
