OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-old/] [binutils-2.18.50/] [gas/] [doc/] [c-hppa.texi] - Diff between revs 156 and 816

Go to most recent revision | Only display areas with differences | Details | Blame | View Log

Rev 156 Rev 816
@c Copyright 1991, 1992, 1993, 1994, 1995, 1998, 2004
@c Copyright 1991, 1992, 1993, 1994, 1995, 1998, 2004
@c Free Software Foundation, Inc.
@c Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@c For copying conditions, see the file as.texinfo.
@page
@page
@node HPPA-Dependent
@node HPPA-Dependent
@chapter HPPA Dependent Features
@chapter HPPA Dependent Features
 
 
@cindex  support
@cindex  support
@menu
@menu
* HPPA Notes::                Notes
* HPPA Notes::                Notes
* HPPA Options::              Options
* HPPA Options::              Options
* HPPA Syntax::               Syntax
* HPPA Syntax::               Syntax
* HPPA Floating Point::       Floating Point
* HPPA Floating Point::       Floating Point
* HPPA Directives::           HPPA Machine Directives
* HPPA Directives::           HPPA Machine Directives
* HPPA Opcodes::              Opcodes
* HPPA Opcodes::              Opcodes
@end menu
@end menu
 
 
@node HPPA Notes
@node HPPA Notes
@section Notes
@section Notes
As a back end for @sc{gnu} @sc{cc} @code{@value{AS}} has been throughly tested and should
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
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
code and no one has tested it much on the assembly output from the HP
compilers.
compilers.
 
 
The format of the debugging sections has changed since the original
The format of the debugging sections has changed since the original
@code{@value{AS}} port (version 1.3X) was released; therefore,
@code{@value{AS}} port (version 1.3X) was released; therefore,
you must rebuild all HPPA objects and libraries with the new
you must rebuild all HPPA objects and libraries with the new
assembler so that you can debug the final executable.
assembler so that you can debug the final executable.
 
 
The HPPA @code{@value{AS}} port generates a small subset of the relocations
The HPPA @code{@value{AS}} port generates a small subset of the relocations
available in the SOM and ELF object file formats.  Additional relocation
available in the SOM and ELF object file formats.  Additional relocation
support will be added as it becomes necessary.
support will be added as it becomes necessary.
 
 
@node HPPA Options
@node HPPA Options
@section Options
@section Options
@code{@value{AS}} has no machine-dependent command-line options for the HPPA.
@code{@value{AS}} has no machine-dependent command-line options for the HPPA.
 
 
@cindex HPPA Syntax
@cindex HPPA Syntax
@node HPPA Syntax
@node HPPA Syntax
@section Syntax
@section Syntax
The assembler syntax closely follows the HPPA instruction set
The assembler syntax closely follows the HPPA instruction set
reference manual; assembler directives and general syntax closely follow the
reference manual; assembler directives and general syntax closely follow the
HPPA assembly language reference manual, with a few noteworthy differences.
HPPA assembly language reference manual, with a few noteworthy differences.
 
 
First, a colon may immediately follow a label definition.  This is
First, a colon may immediately follow a label definition.  This is
simply for compatibility with how most assembly language programmers
simply for compatibility with how most assembly language programmers
write code.
write code.
 
 
Some obscure expression parsing problems may affect hand written code which
Some obscure expression parsing problems may affect hand written code which
uses the @code{spop} instructions, or code which makes significant
uses the @code{spop} instructions, or code which makes significant
use of the @code{!} line separator.
use of the @code{!} line separator.
 
 
@code{@value{AS}} is much less forgiving about missing arguments and other
@code{@value{AS}} is much less forgiving about missing arguments and other
similar oversights than the HP assembler.  @code{@value{AS}} notifies you
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
of missing arguments as syntax errors; this is regarded as a feature, not a
bug.
bug.
 
 
Finally, @code{@value{AS}} allows you to use an external symbol without
Finally, @code{@value{AS}} allows you to use an external symbol without
explicitly importing the symbol.  @emph{Warning:} in the future this will be
explicitly importing the symbol.  @emph{Warning:} in the future this will be
an error for HPPA targets.
an error for HPPA targets.
 
 
Special characters for HPPA targets include:
Special characters for HPPA targets include:
 
 
@samp{;} is the line comment character.
@samp{;} is the line comment character.
 
 
@samp{!} can be used instead of a newline to separate statements.
@samp{!} can be used instead of a newline to separate statements.
 
 
Since @samp{$} has no special meaning, you may use it in symbol names.
Since @samp{$} has no special meaning, you may use it in symbol names.
 
 
@node HPPA Floating Point
@node HPPA Floating Point
@section Floating Point
@section Floating Point
@cindex floating point, HPPA (@sc{ieee})
@cindex floating point, HPPA (@sc{ieee})
@cindex HPPA floating point (@sc{ieee})
@cindex HPPA floating point (@sc{ieee})
The HPPA family uses @sc{ieee} floating-point numbers.
The HPPA family uses @sc{ieee} floating-point numbers.
 
 
@node HPPA Directives
@node HPPA Directives
@section HPPA Assembler Directives
@section HPPA Assembler Directives
 
 
@code{@value{AS}} for the HPPA supports many additional directives for
@code{@value{AS}} for the HPPA supports many additional directives for
compatibility with the native assembler.  This section describes them only
compatibility with the native assembler.  This section describes them only
briefly.  For detailed information on HPPA-specific assembler directives, see
briefly.  For detailed information on HPPA-specific assembler directives, see
@cite{HP9000 Series 800 Assembly Language Reference Manual} (HP 92432-90001).
@cite{HP9000 Series 800 Assembly Language Reference Manual} (HP 92432-90001).
 
 
@cindex HPPA directives not supported
@cindex HPPA directives not supported
@code{@value{AS}} does @emph{not} support the following assembler directives
@code{@value{AS}} does @emph{not} support the following assembler directives
described in the HP manual:
described in the HP manual:
 
 
@example
@example
.endm           .liston
.endm           .liston
.enter          .locct
.enter          .locct
.leave          .macro
.leave          .macro
.listoff
.listoff
@end example
@end example
 
 
@cindex @code{.param} on HPPA
@cindex @code{.param} on HPPA
Beyond those implemented for compatibility, @code{@value{AS}} supports one
Beyond those implemented for compatibility, @code{@value{AS}} supports one
additional assembler directive for the HPPA: @code{.param}.  It conveys
additional assembler directive for the HPPA: @code{.param}.  It conveys
register argument locations for static functions.  Its syntax closely follows
register argument locations for static functions.  Its syntax closely follows
the @code{.export} directive.
the @code{.export} directive.
 
 
@cindex HPPA-only directives
@cindex HPPA-only directives
These are the additional directives in @code{@value{AS}} for the HPPA:
These are the additional directives in @code{@value{AS}} for the HPPA:
 
 
@table @code
@table @code
@item .block @var{n}
@item .block @var{n}
@itemx .blockz @var{n}
@itemx .blockz @var{n}
Reserve @var{n} bytes of storage, and initialize them to zero.
Reserve @var{n} bytes of storage, and initialize them to zero.
 
 
@item .call
@item .call
Mark the beginning of a procedure call.  Only the special case with @emph{no
Mark the beginning of a procedure call.  Only the special case with @emph{no
arguments} is allowed.
arguments} is allowed.
 
 
@item .callinfo [ @var{param}=@var{value}, @dots{} ]  [ @var{flag}, @dots{} ]
@item .callinfo [ @var{param}=@var{value}, @dots{} ]  [ @var{flag}, @dots{} ]
Specify a number of parameters and flags that define the environment for a
Specify a number of parameters and flags that define the environment for a
procedure.
procedure.
 
 
@var{param} may be any of @samp{frame} (frame size), @samp{entry_gr} (end of
@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),
general register range), @samp{entry_fr} (end of float register range),
@samp{entry_sr} (end of space register range).
@samp{entry_sr} (end of space register range).
 
 
The values for @var{flag} are @samp{calls} or @samp{caller} (proc has
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}
subroutines), @samp{no_calls} (proc does not call subroutines), @samp{save_rp}
(preserve return pointer), @samp{save_sp} (proc preserves stack pointer),
(preserve return pointer), @samp{save_sp} (proc preserves stack pointer),
@samp{no_unwind} (do not unwind this proc), @samp{hpux_int} (proc is interrupt
@samp{no_unwind} (do not unwind this proc), @samp{hpux_int} (proc is interrupt
routine).
routine).
 
 
@item .code
@item .code
Assemble into the standard section called @samp{$TEXT$}, subsection
Assemble into the standard section called @samp{$TEXT$}, subsection
@samp{$CODE$}.
@samp{$CODE$}.
 
 
@ifset SOM
@ifset SOM
@item .copyright "@var{string}"
@item .copyright "@var{string}"
In the SOM object format, insert @var{string} into the object code, marked as a
In the SOM object format, insert @var{string} into the object code, marked as a
copyright string.
copyright string.
@end ifset
@end ifset
 
 
@ifset ELF
@ifset ELF
@item .copyright "@var{string}"
@item .copyright "@var{string}"
In the ELF object format, insert @var{string} into the object code, marked as a
In the ELF object format, insert @var{string} into the object code, marked as a
version string.
version string.
@end ifset
@end ifset
 
 
@item .enter
@item .enter
Not yet supported; the assembler rejects programs containing this directive.
Not yet supported; the assembler rejects programs containing this directive.
 
 
@item .entry
@item .entry
Mark the beginning of a procedure.
Mark the beginning of a procedure.
 
 
@item .exit
@item .exit
Mark the end of a procedure.
Mark the end of a procedure.
 
 
@item .export @var{name} [ ,@var{typ} ]  [ ,@var{param}=@var{r} ]
@item .export @var{name} [ ,@var{typ} ]  [ ,@var{param}=@var{r} ]
Make a procedure @var{name} available to callers.  @var{typ}, if present, must
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},
be one of @samp{absolute}, @samp{code} (ELF only, not SOM), @samp{data},
@samp{entry}, @samp{data}, @samp{entry}, @samp{millicode}, @samp{plabel},
@samp{entry}, @samp{data}, @samp{entry}, @samp{millicode}, @samp{plabel},
@samp{pri_prog}, or @samp{sec_prog}.
@samp{pri_prog}, or @samp{sec_prog}.
 
 
@var{param}, if present, provides either relocation information for the
@var{param}, if present, provides either relocation information for the
procedure arguments and result, or a privilege level.  @var{param} may be
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
@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
indicates one of four one-word arguments); @samp{rtnval} (the procedure's
result); or @samp{priv_lev} (privilege level).  For arguments or the result,
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
@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
relocatable), @samp{gr} (argument is in general register), @samp{fr} (in
floating point register), or @samp{fu} (upper half of float register).
floating point register), or @samp{fu} (upper half of float register).
For @samp{priv_lev}, @var{r} is an integer.
For @samp{priv_lev}, @var{r} is an integer.
 
 
@item .half @var{n}
@item .half @var{n}
Define a two-byte integer constant @var{n}; synonym for the portable
Define a two-byte integer constant @var{n}; synonym for the portable
@code{@value{AS}} directive @code{.short}.
@code{@value{AS}} directive @code{.short}.
 
 
@item .import @var{name} [ ,@var{typ} ]
@item .import @var{name} [ ,@var{typ} ]
Converse of @code{.export}; make a procedure available to call.  The arguments
Converse of @code{.export}; make a procedure available to call.  The arguments
use the same conventions as the first two arguments for @code{.export}.
use the same conventions as the first two arguments for @code{.export}.
 
 
@item .label @var{name}
@item .label @var{name}
Define @var{name} as a label for the current assembly location.
Define @var{name} as a label for the current assembly location.
 
 
@item .leave
@item .leave
Not yet supported; the assembler rejects programs containing this directive.
Not yet supported; the assembler rejects programs containing this directive.
 
 
@item .origin @var{lc}
@item .origin @var{lc}
Advance location counter to @var{lc}. Synonym for the @code{@value{AS}}
Advance location counter to @var{lc}. Synonym for the @code{@value{AS}}
portable directive @code{.org}.
portable directive @code{.org}.
 
 
@item .param @var{name} [ ,@var{typ} ]  [ ,@var{param}=@var{r} ]
@item .param @var{name} [ ,@var{typ} ]  [ ,@var{param}=@var{r} ]
@c Not in HP manual; @sc{gnu} HPPA extension
@c Not in HP manual; @sc{gnu} HPPA extension
Similar to @code{.export}, but used for static procedures.
Similar to @code{.export}, but used for static procedures.
 
 
@item .proc
@item .proc
Use preceding the first statement of a procedure.
Use preceding the first statement of a procedure.
 
 
@item .procend
@item .procend
Use following the last statement of a procedure.
Use following the last statement of a procedure.
 
 
@item @var{label} .reg @var{expr}
@item @var{label} .reg @var{expr}
@c ?? Not in HP manual (Jan 1988 vn)
@c ?? Not in HP manual (Jan 1988 vn)
Synonym for @code{.equ}; define @var{label} with the absolute expression
Synonym for @code{.equ}; define @var{label} with the absolute expression
@var{expr} as its value.
@var{expr} as its value.
 
 
@item .space @var{secname} [ ,@var{params} ]
@item .space @var{secname} [ ,@var{params} ]
Switch to section @var{secname}, creating a new section by that name if
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
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
when switching to an existing one.  @var{secname} may identify a section by
number rather than by name.
number rather than by name.
 
 
If specified, the list @var{params} declares attributes of the section,
If specified, the list @var{params} declares attributes of the section,
identified by keywords.  The keywords recognized are @samp{spnum=@var{exp}}
identified by keywords.  The keywords recognized are @samp{spnum=@var{exp}}
(identify this section by the number @var{exp}, an absolute expression),
(identify this section by the number @var{exp}, an absolute expression),
@samp{sort=@var{exp}} (order sections according to this sort key when linking;
@samp{sort=@var{exp}} (order sections according to this sort key when linking;
@var{exp} is an absolute expression), @samp{unloadable} (section contains no
@var{exp} is an absolute expression), @samp{unloadable} (section contains no
loadable data), @samp{notdefined} (this section defined elsewhere), and
loadable data), @samp{notdefined} (this section defined elsewhere), and
@samp{private} (data in this section not available to other programs).
@samp{private} (data in this section not available to other programs).
 
 
@item .spnum @var{secnam}
@item .spnum @var{secnam}
@c ?? Not in HP manual (Jan 1988)
@c ?? Not in HP manual (Jan 1988)
Allocate four bytes of storage, and initialize them with the section number of
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
the section named @var{secnam}.  (You can define the section number with the
HPPA @code{.space} directive.)
HPPA @code{.space} directive.)
 
 
@cindex @code{string} directive on HPPA
@cindex @code{string} directive on HPPA
@item .string "@var{str}"
@item .string "@var{str}"
Copy the characters in the string @var{str} to the object file.
Copy the characters in the string @var{str} to the object file.
@xref{Strings,,Strings}, for information on escape sequences you can use in
@xref{Strings,,Strings}, for information on escape sequences you can use in
@code{@value{AS}} strings.
@code{@value{AS}} strings.
 
 
@emph{Warning!} The HPPA version of @code{.string} differs from the
@emph{Warning!} The HPPA version of @code{.string} differs from the
usual @code{@value{AS}} definition: it does @emph{not} write a zero byte
usual @code{@value{AS}} definition: it does @emph{not} write a zero byte
after copying @var{str}.
after copying @var{str}.
 
 
@item .stringz "@var{str}"
@item .stringz "@var{str}"
Like @code{.string}, but appends a zero byte after copying @var{str} to object
Like @code{.string}, but appends a zero byte after copying @var{str} to object
file.
file.
 
 
@item .subspa @var{name} [ ,@var{params} ]
@item .subspa @var{name} [ ,@var{params} ]
@itemx .nsubspa @var{name} [ ,@var{params} ]
@itemx .nsubspa @var{name} [ ,@var{params} ]
Similar to @code{.space}, but selects a subsection @var{name} within the
Similar to @code{.space}, but selects a subsection @var{name} within the
current section.  You may only specify @var{params} when you create a
current section.  You may only specify @var{params} when you create a
subsection (in the first instance of @code{.subspa} for this @var{name}).
subsection (in the first instance of @code{.subspa} for this @var{name}).
 
 
If specified, the list @var{params} declares attributes of the subsection,
If specified, the list @var{params} declares attributes of the subsection,
identified by keywords.  The keywords recognized are @samp{quad=@var{expr}}
identified by keywords.  The keywords recognized are @samp{quad=@var{expr}}
(``quadrant'' for this subsection), @samp{align=@var{expr}} (alignment for
(``quadrant'' for this subsection), @samp{align=@var{expr}} (alignment for
beginning of this subsection; a power of two), @samp{access=@var{expr}} (value
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
for ``access rights'' field), @samp{sort=@var{expr}} (sorting order for this
subspace in link), @samp{code_only} (subsection contains only code),
subspace in link), @samp{code_only} (subsection contains only code),
@samp{unloadable} (subsection cannot be loaded into memory), @samp{comdat}
@samp{unloadable} (subsection cannot be loaded into memory), @samp{comdat}
(subsection is comdat), @samp{common} (subsection is common block),
(subsection is comdat), @samp{common} (subsection is common block),
@samp{dup_comm} (subsection may have duplicate names), or @samp{zero}
@samp{dup_comm} (subsection may have duplicate names), or @samp{zero}
(subsection is all zeros, do not write in object file).
(subsection is all zeros, do not write in object file).
 
 
@code{.nsubspa} always creates a new subspace with the given name, even
@code{.nsubspa} always creates a new subspace with the given name, even
if one with the same name already exists.
if one with the same name already exists.
 
 
@samp{comdat}, @samp{common} and @samp{dup_comm} can be used to implement
@samp{comdat}, @samp{common} and @samp{dup_comm} can be used to implement
various flavors of one-only support when using the SOM linker.  The SOM
various flavors of one-only support when using the SOM linker.  The SOM
linker only supports specific combinations of these flags.  The details
linker only supports specific combinations of these flags.  The details
are not documented.  A brief description is provided here.
are not documented.  A brief description is provided here.
 
 
@samp{comdat} provides a form of linkonce support.  It is useful for
@samp{comdat} provides a form of linkonce support.  It is useful for
both code and data subspaces.  A @samp{comdat} subspace has a key symbol
both code and data subspaces.  A @samp{comdat} subspace has a key symbol
marked by the @samp{is_comdat} flag or @samp{ST_COMDAT}.  Only the first
marked by the @samp{is_comdat} flag or @samp{ST_COMDAT}.  Only the first
subspace for any given key is selected.  The key symbol becomes universal
subspace for any given key is selected.  The key symbol becomes universal
in shared links.  This is similar to the behavior of @samp{secondary_def}
in shared links.  This is similar to the behavior of @samp{secondary_def}
symbols.
symbols.
 
 
@samp{common} provides Fortran named common support.  It is only useful
@samp{common} provides Fortran named common support.  It is only useful
for data subspaces.  Symbols with the flag @samp{is_common} retain this
for data subspaces.  Symbols with the flag @samp{is_common} retain this
flag in shared links.  Referencing a @samp{is_common} symbol in a shared
flag in shared links.  Referencing a @samp{is_common} symbol in a shared
library from outside the library doesn't work.  Thus, @samp{is_common}
library from outside the library doesn't work.  Thus, @samp{is_common}
symbols must be output whenever they are needed.
symbols must be output whenever they are needed.
 
 
@samp{common} and @samp{dup_comm} together provide Cobol common support.
@samp{common} and @samp{dup_comm} together provide Cobol common support.
The subspaces in this case must all be the same length.  Otherwise, this
The subspaces in this case must all be the same length.  Otherwise, this
support is similar to the Fortran common support.
support is similar to the Fortran common support.
 
 
@samp{dup_comm} by itself provides a type of one-only support for code.
@samp{dup_comm} by itself provides a type of one-only support for code.
Only the first @samp{dup_comm} subspace is selected.  There is a rather
Only the first @samp{dup_comm} subspace is selected.  There is a rather
complex algorithm to compare subspaces.  Code symbols marked with the
complex algorithm to compare subspaces.  Code symbols marked with the
@samp{dup_common} flag are hidden.  This support was intended for "C++
@samp{dup_common} flag are hidden.  This support was intended for "C++
duplicate inlines".
duplicate inlines".
 
 
A simplified technique is used to mark the flags of symbols based on
A simplified technique is used to mark the flags of symbols based on
the flags of their subspace.  A symbol with the scope SS_UNIVERSAL and
the flags of their subspace.  A symbol with the scope SS_UNIVERSAL and
type ST_ENTRY, ST_CODE or ST_DATA is marked with the corresponding
type ST_ENTRY, ST_CODE or ST_DATA is marked with the corresponding
settings of @samp{comdat}, @samp{common} and @samp{dup_comm} from the
settings of @samp{comdat}, @samp{common} and @samp{dup_comm} from the
subspace, respectively.  This avoids having to introduce additional
subspace, respectively.  This avoids having to introduce additional
directives to mark these symbols.  The HP assembler sets @samp{is_common}
directives to mark these symbols.  The HP assembler sets @samp{is_common}
from @samp{common}.  However, it doesn't set the @samp{dup_common} from
from @samp{common}.  However, it doesn't set the @samp{dup_common} from
@samp{dup_comm}.  It doesn't have @samp{comdat} support.
@samp{dup_comm}.  It doesn't have @samp{comdat} support.
 
 
@item .version "@var{str}"
@item .version "@var{str}"
Write @var{str} as version identifier in object code.
Write @var{str} as version identifier in object code.
@end table
@end table
 
 
@node HPPA Opcodes
@node HPPA Opcodes
@section Opcodes
@section Opcodes
For detailed information on the HPPA machine instruction set, see
For detailed information on the HPPA machine instruction set, see
@cite{PA-RISC Architecture and Instruction Set Reference Manual}
@cite{PA-RISC Architecture and Instruction Set Reference Manual}
(HP 09740-90039).
(HP 09740-90039).
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.