@c Copyright 1991, 1992, 1993, 1994, 1995, 1998
@c Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@page
@node HPPA-Dependent
@chapter HPPA Dependent Features

@cindex  support
@menu
* HPPA Notes::                Notes
* HPPA Options::              Options
* HPPA Syntax::               Syntax
* HPPA Floating Point::       Floating Point
* HPPA Directives::           HPPA Machine Directives
* HPPA Opcodes::              Opcodes
@end menu

@node HPPA Notes
@section Notes
As a back end for @sc{gnu} @sc{cc} @code{@value{AS}} has been throughly tested and should
work extremely well.  We have tested it only minimally on hand written assembly
code and no one has tested it much on the assembly output from the HP
compilers.

The format of the debugging sections has changed since the original
@code{@value{AS}} port (version 1.3X) was released; therefore,
you must rebuild all HPPA objects and libraries with the new 
assembler so that you can debug the final executable.

The HPPA @code{@value{AS}} port generates a small subset of the relocations
available in the SOM and ELF object file formats.  Additional relocation
support will be added as it becomes necessary.  

@node HPPA Options
@section Options
@code{@value{AS}} has no machine-dependent command-line options for the HPPA.

@cindex HPPA Syntax
@node HPPA Syntax
@section Syntax
The assembler syntax closely follows the HPPA instruction set
reference manual; assembler directives and general syntax closely follow the
HPPA assembly language reference manual, with a few noteworthy differences.

First, a colon may immediately follow a label definition.  This is
simply for compatibility with how most assembly language programmers
write code.

Some obscure expression parsing problems may affect hand written code which
uses the @code{spop} instructions, or code which makes significant
use of the @code{!} line separator.

@code{@value{AS}} is much less forgiving about missing arguments and other
similar oversights than the HP assembler.  @code{@value{AS}} notifies you
of missing arguments as syntax errors; this is regarded as a feature, not a
bug.

Finally, @code{@value{AS}} allows you to use an external symbol without
explicitly importing the symbol.  @emph{Warning:} in the future this will be
an error for HPPA targets.

Special characters for HPPA targets include:

@samp{;} is the line comment character.

@samp{!} can be used instead of a newline to separate statements.

Since @samp{$} has no special meaning, you may use it in symbol names.

@node HPPA Floating Point
@section Floating Point
@cindex floating point, HPPA (@sc{ieee})
@cindex HPPA floating point (@sc{ieee})
The HPPA family uses @sc{ieee} floating-point numbers.

@node HPPA Directives
@section HPPA Assembler Directives

@code{@value{AS}} for the HPPA supports many additional directives for
compatibility with the native assembler.  This section describes them only
briefly.  For detailed information on HPPA-specific assembler directives, see
@cite{HP9000 Series 800 Assembly Language Reference Manual} (HP 92432-90001).

@cindex HPPA directives not supported
@code{@value{AS}} does @emph{not} support the following assembler directives
described in the HP manual:

@example
.endm           .liston
.enter          .locct
.leave          .macro  
.listoff
@end example

@cindex @code{.param} on HPPA
Beyond those implemented for compatibility, @code{@value{AS}} supports one
additional assembler directive for the HPPA: @code{.param}.  It conveys
register argument locations for static functions.  Its syntax closely follows
the @code{.export} directive.

@cindex HPPA-only directives
These are the additional directives in @code{@value{AS}} for the HPPA:

@table @code
@item .block @var{n}
@itemx .blockz @var{n}
Reserve @var{n} bytes of storage, and initialize them to zero.

@item .call 
Mark the beginning of a procedure call.  Only the special case with @emph{no
arguments} is allowed.

@item .callinfo [ @var{param}=@var{value}, @dots{} ]  [ @var{flag}, @dots{} ]
Specify a number of parameters and flags that define the environment for a
procedure.

@var{param} may be any of @samp{frame} (frame size), @samp{entry_gr} (end of
general register range), @samp{entry_fr} (end of float register range),
@samp{entry_sr} (end of space register range).

The values for @var{flag} are @samp{calls} or @samp{caller} (proc has
subroutines), @samp{no_calls} (proc does not call subroutines), @samp{save_rp}
(preserve return pointer), @samp{save_sp} (proc preserves stack pointer),
@samp{no_unwind} (do not unwind this proc), @samp{hpux_int} (proc is interrupt
routine).

@item .code
Assemble into the standard section called @samp{$TEXT$}, subsection
@samp{$CODE$}.

@ifset SOM
@item .copyright "@var{string}"
In the SOM object format, insert @var{string} into the object code, marked as a
copyright string.
@end ifset

@ifset ELF
@item .copyright "@var{string}"
In the ELF object format, insert @var{string} into the object code, marked as a
version string.
@end ifset

@item .enter
Not yet supported; the assembler rejects programs containing this directive.

@item .entry
Mark the beginning of a procedure.

@item .exit
Mark the end of a procedure.

@item .export @var{name} [ ,@var{typ} ]  [ ,@var{param}=@var{r} ]
Make a procedure @var{name} available to callers.  @var{typ}, if present, must
be one of @samp{absolute}, @samp{code} (ELF only, not SOM), @samp{data},
@samp{entry}, @samp{data}, @samp{entry}, @samp{millicode}, @samp{plabel},
@samp{pri_prog}, or @samp{sec_prog}.

@var{param}, if present, provides either relocation information for the
procedure arguments and result, or a privilege level.  @var{param} may be
@samp{argw@var{n}} (where @var{n} ranges from @code{0} to @code{3}, and
indicates one of four one-word arguments); @samp{rtnval} (the procedure's
result); or @samp{priv_lev} (privilege level).  For arguments or the result,
@var{r} specifies how to relocate, and must be one of @samp{no} (not
relocatable), @samp{gr} (argument is in general register), @samp{fr} (in
floating point register), or @samp{fu} (upper half of float register).
For @samp{priv_lev}, @var{r} is an integer.

@item .half @var{n}
Define a two-byte integer constant @var{n}; synonym for the portable
@code{@value{AS}} directive @code{.short}.

@item .import @var{name} [ ,@var{typ} ]
Converse of @code{.export}; make a procedure available to call.  The arguments
use the same conventions as the first two arguments for @code{.export}.

@item .label @var{name}
Define @var{name} as a label for the current assembly location.

@item .leave
Not yet supported; the assembler rejects programs containing this directive.

@item .origin @var{lc}
Advance location counter to @var{lc}. Synonym for the @code{@value{as}}
portable directive @code{.org}.

@item .param @var{name} [ ,@var{typ} ]  [ ,@var{param}=@var{r} ]
@c Not in HP manual; @sc{gnu} HPPA extension
Similar to @code{.export}, but used for static procedures.

@item .proc
Use preceding the first statement of a procedure.

@item .procend
Use following the last statement of a procedure.

@item @var{label} .reg @var{expr}
@c ?? Not in HP manual (Jan 1988 vn)
Synonym for @code{.equ}; define @var{label} with the absolute expression
@var{expr} as its value.

@item .space @var{secname} [ ,@var{params} ]
Switch to section @var{secname}, creating a new section by that name if
necessary.  You may only use @var{params} when creating a new section, not
when switching to an existing one.  @var{secname} may identify a section by
number rather than by name.

If specified, the list @var{params} declares attributes of the section,
identified by keywords.  The keywords recognized are @samp{spnum=@var{exp}}
(identify this section by the number @var{exp}, an absolute expression),
@samp{sort=@var{exp}} (order sections according to this sort key when linking;
@var{exp} is an absolute expression), @samp{unloadable} (section contains no
loadable data), @samp{notdefined} (this section defined elsewhere), and
@samp{private} (data in this section not available to other programs).

@item .spnum @var{secnam}
@c ?? Not in HP manual (Jan 1988)
Allocate four bytes of storage, and initialize them with the section number of
the section named @var{secnam}.  (You can define the section number with the
HPPA @code{.space} directive.)

@cindex @code{string} directive on HPPA
@item .string "@var{str}"
Copy the characters in the string @var{str} to the object file.
@xref{Strings,,Strings}, for information on escape sequences you can use in
@code{@value{AS}} strings.

@emph{Warning!} The HPPA version of @code{.string} differs from the
usual @code{@value{AS}} definition: it does @emph{not} write a zero byte
after copying @var{str}.

@item .stringz "@var{str}"
Like @code{.string}, but appends a zero byte after copying @var{str} to object
file.

@item .subspa @var{name} [ ,@var{params} ]
@itemx .nsubspa @var{name} [ ,@var{params} ]
Similar to @code{.space}, but selects a subsection @var{name} within the
current section.  You may only specify @var{params} when you create a
subsection (in the first instance of @code{.subspa} for this @var{name}).

If specified, the list @var{params} declares attributes of the subsection,
identified by keywords.  The keywords recognized are @samp{quad=@var{expr}}
(``quadrant'' for this subsection), @samp{align=@var{expr}} (alignment for
beginning of this subsection; a power of two), @samp{access=@var{expr}} (value
for ``access rights'' field), @samp{sort=@var{expr}} (sorting order for this
subspace in link), @samp{code_only} (subsection contains only code),
@samp{unloadable} (subsection cannot be loaded into memory), @samp{common}
(subsection is common block), @samp{dup_comm} (initialized data may have
duplicate names), or @samp{zero} (subsection is all zeros, do not write in
object file).

@code{.nsubspa} always creates a new subspace with the given name, even
if one with the same name already exists.

@item .version "@var{str}"
Write @var{str} as version identifier in object code.
@end table

@node HPPA Opcodes
@section Opcodes
For detailed information on the HPPA machine instruction set, see
@cite{PA-RISC Architecture and Instruction Set Reference Manual} 
(HP 09740-90039).
