mirror of
https://sourceware.org/git/binutils-gdb.git
synced 2024-12-15 04:31:49 +08:00
a2c5833233
The result of running etc/update-copyright.py --this-year, fixing all the files whose mode is changed by the script, plus a build with --enable-maintainer-mode --enable-cgen-maint=yes, then checking out */po/*.pot which we don't update frequently. The copy of cgen was with commit d1dd5fcc38ead reverted as that commit breaks building of bfp opcodes files.
384 lines
12 KiB
Plaintext
384 lines
12 KiB
Plaintext
@c Copyright (C) 1991-2022 Free Software Foundation, Inc.
|
|
@c This is part of the GAS manual.
|
|
@c For copying conditions, see the file as.texinfo.
|
|
@c VAX/VMS description enhanced and corrected by Klaus K"aempf, kkaempf@progis.de
|
|
@ifset GENERIC
|
|
@node Vax-Dependent
|
|
@chapter VAX Dependent Features
|
|
@cindex VAX support
|
|
|
|
@end ifset
|
|
@ifclear GENERIC
|
|
@node Machine Dependencies
|
|
@chapter VAX Dependent Features
|
|
@cindex VAX support
|
|
|
|
@end ifclear
|
|
|
|
@menu
|
|
* VAX-Opts:: VAX Command-Line Options
|
|
* VAX-float:: VAX Floating Point
|
|
* VAX-directives:: Vax Machine Directives
|
|
* VAX-opcodes:: VAX Opcodes
|
|
* VAX-branch:: VAX Branch Improvement
|
|
* VAX-operands:: VAX Operands
|
|
* VAX-no:: Not Supported on VAX
|
|
* VAX-Syntax:: VAX Syntax
|
|
@end menu
|
|
|
|
|
|
@node VAX-Opts
|
|
@section VAX Command-Line Options
|
|
|
|
@cindex command-line options ignored, VAX
|
|
@cindex VAX command-line options ignored
|
|
The Vax version of @code{@value{AS}} accepts any of the following options,
|
|
gives a warning message that the option was ignored and proceeds.
|
|
These options are for compatibility with scripts designed for other
|
|
people's assemblers.
|
|
|
|
@table @code
|
|
@cindex @code{-D}, ignored on VAX
|
|
@cindex @code{-S}, ignored on VAX
|
|
@cindex @code{-T}, ignored on VAX
|
|
@item @code{-D} (Debug)
|
|
@itemx @code{-S} (Symbol Table)
|
|
@itemx @code{-T} (Token Trace)
|
|
These are obsolete options used to debug old assemblers.
|
|
|
|
@cindex @code{-d}, VAX option
|
|
@item @code{-d} (Displacement size for JUMPs)
|
|
This option expects a number following the @samp{-d}. Like options
|
|
that expect filenames, the number may immediately follow the
|
|
@samp{-d} (old standard) or constitute the whole of the command-line
|
|
argument that follows @samp{-d} (@sc{gnu} standard).
|
|
|
|
@cindex @code{-V}, redundant on VAX
|
|
@item @code{-V} (Virtualize Interpass Temporary File)
|
|
Some other assemblers use a temporary file. This option
|
|
commanded them to keep the information in active memory rather
|
|
than in a disk file. @code{@value{AS}} always does this, so this
|
|
option is redundant.
|
|
|
|
@cindex @code{-J}, ignored on VAX
|
|
@item @code{-J} (JUMPify Longer Branches)
|
|
Many 32-bit computers permit a variety of branch instructions
|
|
to do the same job. Some of these instructions are short (and
|
|
fast) but have a limited range; others are long (and slow) but
|
|
can branch anywhere in virtual memory. Often there are 3
|
|
flavors of branch: short, medium and long. Some other
|
|
assemblers would emit short and medium branches, unless told by
|
|
this option to emit short and long branches.
|
|
|
|
@cindex @code{-t}, ignored on VAX
|
|
@item @code{-t} (Temporary File Directory)
|
|
Some other assemblers may use a temporary file, and this option
|
|
takes a filename being the directory to site the temporary
|
|
file. Since @code{@value{AS}} does not use a temporary disk file, this
|
|
option makes no difference. @samp{-t} needs exactly one
|
|
filename.
|
|
@end table
|
|
|
|
@cindex VMS (VAX) options
|
|
@cindex options for VAX/VMS
|
|
@cindex VAX/VMS options
|
|
@cindex Vax-11 C compatibility
|
|
@cindex symbols with uppercase, VAX/VMS
|
|
The Vax version of the assembler accepts additional options when
|
|
compiled for VMS:
|
|
|
|
@table @samp
|
|
@cindex @samp{-h} option, VAX/VMS
|
|
@item -h @var{n}
|
|
External symbol or section (used for global variables) names are not
|
|
case sensitive on VAX/VMS and always mapped to upper case. This is
|
|
contrary to the C language definition which explicitly distinguishes
|
|
upper and lower case. To implement a standard conforming C compiler,
|
|
names must be changed (mapped) to preserve the case information. The
|
|
default mapping is to convert all lower case characters to uppercase and
|
|
adding an underscore followed by a 6 digit hex value, representing a 24
|
|
digit binary value. The one digits in the binary value represent which
|
|
characters are uppercase in the original symbol name.
|
|
|
|
The @samp{-h @var{n}} option determines how we map names. This takes
|
|
several values. No @samp{-h} switch at all allows case hacking as
|
|
described above. A value of zero (@samp{-h0}) implies names should be
|
|
upper case, and inhibits the case hack. A value of 2 (@samp{-h2})
|
|
implies names should be all lower case, with no case hack. A value of 3
|
|
(@samp{-h3}) implies that case should be preserved. The value 1 is
|
|
unused. The @code{-H} option directs @code{@value{AS}} to display
|
|
every mapped symbol during assembly.
|
|
|
|
Symbols whose names include a dollar sign @samp{$} are exceptions to the
|
|
general name mapping. These symbols are normally only used to reference
|
|
VMS library names. Such symbols are always mapped to upper case.
|
|
|
|
@cindex @samp{-+} option, VAX/VMS
|
|
@item -+
|
|
The @samp{-+} option causes @code{@value{AS}} to truncate any symbol
|
|
name larger than 31 characters. The @samp{-+} option also prevents some
|
|
code following the @samp{_main} symbol normally added to make the object
|
|
file compatible with Vax-11 "C".
|
|
|
|
@cindex @samp{-1} option, VAX/VMS
|
|
@item -1
|
|
This option is ignored for backward compatibility with @code{@value{AS}}
|
|
version 1.x.
|
|
|
|
@cindex @samp{-H} option, VAX/VMS
|
|
@item -H
|
|
The @samp{-H} option causes @code{@value{AS}} to print every symbol
|
|
which was changed by case mapping.
|
|
@end table
|
|
|
|
@node VAX-float
|
|
@section VAX Floating Point
|
|
|
|
@cindex VAX floating point
|
|
@cindex floating point, VAX
|
|
Conversion of flonums to floating point is correct, and
|
|
compatible with previous assemblers. Rounding is
|
|
towards zero if the remainder is exactly half the least significant bit.
|
|
|
|
@code{D}, @code{F}, @code{G} and @code{H} floating point formats
|
|
are understood.
|
|
|
|
Immediate floating literals (@emph{e.g.} @samp{S`$6.9})
|
|
are rendered correctly. Again, rounding is towards zero in the
|
|
boundary case.
|
|
|
|
@cindex @code{float} directive, VAX
|
|
@cindex @code{double} directive, VAX
|
|
The @code{.float} directive produces @code{f} format numbers.
|
|
The @code{.double} directive produces @code{d} format numbers.
|
|
|
|
@node VAX-directives
|
|
@section Vax Machine Directives
|
|
|
|
@cindex machine directives, VAX
|
|
@cindex VAX machine directives
|
|
The Vax version of the assembler supports four directives for
|
|
generating Vax floating point constants. They are described in the
|
|
table below.
|
|
|
|
@cindex wide floating point directives, VAX
|
|
@table @code
|
|
@cindex @code{dfloat} directive, VAX
|
|
@item .dfloat
|
|
This expects zero or more flonums, separated by commas, and
|
|
assembles Vax @code{d} format 64-bit floating point constants.
|
|
|
|
@cindex @code{ffloat} directive, VAX
|
|
@item .ffloat
|
|
This expects zero or more flonums, separated by commas, and
|
|
assembles Vax @code{f} format 32-bit floating point constants.
|
|
|
|
@cindex @code{gfloat} directive, VAX
|
|
@item .gfloat
|
|
This expects zero or more flonums, separated by commas, and
|
|
assembles Vax @code{g} format 64-bit floating point constants.
|
|
|
|
@cindex @code{hfloat} directive, VAX
|
|
@item .hfloat
|
|
This expects zero or more flonums, separated by commas, and
|
|
assembles Vax @code{h} format 128-bit floating point constants.
|
|
|
|
@end table
|
|
|
|
@node VAX-opcodes
|
|
@section VAX Opcodes
|
|
|
|
@cindex VAX opcode mnemonics
|
|
@cindex opcode mnemonics, VAX
|
|
@cindex mnemonics for opcodes, VAX
|
|
All DEC mnemonics are supported. Beware that @code{case@dots{}}
|
|
instructions have exactly 3 operands. The dispatch table that
|
|
follows the @code{case@dots{}} instruction should be made with
|
|
@code{.word} statements. This is compatible with all unix
|
|
assemblers we know of.
|
|
|
|
@node VAX-branch
|
|
@section VAX Branch Improvement
|
|
|
|
@cindex VAX branch improvement
|
|
@cindex branch improvement, VAX
|
|
@cindex pseudo-ops for branch, VAX
|
|
Certain pseudo opcodes are permitted. They are for branch
|
|
instructions. They expand to the shortest branch instruction that
|
|
reaches the target. Generally these mnemonics are made by
|
|
substituting @samp{j} for @samp{b} at the start of a DEC mnemonic.
|
|
This feature is included both for compatibility and to help
|
|
compilers. If you do not need this feature, avoid these
|
|
opcodes. Here are the mnemonics, and the code they can expand into.
|
|
|
|
@table @code
|
|
@item jbsb
|
|
@samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}.
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{bsbb @dots{}}
|
|
@item (word displacement)
|
|
@kbd{bsbw @dots{}}
|
|
@item (long displacement)
|
|
@kbd{jsb @dots{}}
|
|
@end table
|
|
@item jbr
|
|
@itemx jr
|
|
Unconditional branch.
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{brb @dots{}}
|
|
@item (word displacement)
|
|
@kbd{brw @dots{}}
|
|
@item (long displacement)
|
|
@kbd{jmp @dots{}}
|
|
@end table
|
|
@item j@var{COND}
|
|
@var{COND} may be any one of the conditional branches
|
|
@code{neq}, @code{nequ}, @code{eql}, @code{eqlu}, @code{gtr},
|
|
@code{geq}, @code{lss}, @code{gtru}, @code{lequ}, @code{vc}, @code{vs},
|
|
@code{gequ}, @code{cc}, @code{lssu}, @code{cs}.
|
|
@var{COND} may also be one of the bit tests
|
|
@code{bs}, @code{bc}, @code{bss}, @code{bcs}, @code{bsc}, @code{bcc},
|
|
@code{bssi}, @code{bcci}, @code{lbs}, @code{lbc}.
|
|
@var{NOTCOND} is the opposite condition to @var{COND}.
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{b@var{COND} @dots{}}
|
|
@item (word displacement)
|
|
@kbd{b@var{NOTCOND} foo ; brw @dots{} ; foo:}
|
|
@item (long displacement)
|
|
@kbd{b@var{NOTCOND} foo ; jmp @dots{} ; foo:}
|
|
@end table
|
|
@item jacb@var{X}
|
|
@var{X} may be one of @code{b d f g h l w}.
|
|
@table @asis
|
|
@item (word displacement)
|
|
@kbd{@var{OPCODE} @dots{}}
|
|
@item (long displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: jmp @dots{} ;
|
|
bar:
|
|
@end example
|
|
@end table
|
|
@item jaob@var{YYY}
|
|
@var{YYY} may be one of @code{lss leq}.
|
|
@item jsob@var{ZZZ}
|
|
@var{ZZZ} may be one of @code{geq gtr}.
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{@var{OPCODE} @dots{}}
|
|
@item (word displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: brw @var{destination} ;
|
|
bar:
|
|
@end example
|
|
@item (long displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: jmp @var{destination} ;
|
|
bar:
|
|
@end example
|
|
@end table
|
|
@item aobleq
|
|
@itemx aoblss
|
|
@itemx sobgeq
|
|
@itemx sobgtr
|
|
@table @asis
|
|
@item (byte displacement)
|
|
@kbd{@var{OPCODE} @dots{}}
|
|
@item (word displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: brw @var{destination} ;
|
|
bar:
|
|
@end example
|
|
@item (long displacement)
|
|
@example
|
|
@var{OPCODE} @dots{}, foo ;
|
|
brb bar ;
|
|
foo: jmp @var{destination} ;
|
|
bar:
|
|
@end example
|
|
@end table
|
|
@end table
|
|
|
|
@node VAX-operands
|
|
@section VAX Operands
|
|
|
|
@cindex VAX operand notation
|
|
@cindex operand notation, VAX
|
|
@cindex immediate character, VAX
|
|
@cindex VAX immediate character
|
|
The immediate character is @samp{$} for Unix compatibility, not
|
|
@samp{#} as DEC writes it.
|
|
|
|
@cindex indirect character, VAX
|
|
@cindex VAX indirect character
|
|
The indirect character is @samp{*} for Unix compatibility, not
|
|
@samp{@@} as DEC writes it.
|
|
|
|
@cindex displacement sizing character, VAX
|
|
@cindex VAX displacement sizing character
|
|
The displacement sizing character is @samp{`} (an accent grave) for
|
|
Unix compatibility, not @samp{^} as DEC writes it. The letter
|
|
preceding @samp{`} may have either case. @samp{G} is not
|
|
understood, but all other letters (@code{b i l s w}) are understood.
|
|
|
|
@cindex register names, VAX
|
|
@cindex VAX register names
|
|
Register names understood are @code{r0 r1 r2 @dots{} r15 ap fp sp
|
|
pc}. Upper and lower case letters are equivalent.
|
|
|
|
For instance
|
|
@smallexample
|
|
tstb *w`$4(r5)
|
|
@end smallexample
|
|
|
|
Any expression is permitted in an operand. Operands are comma
|
|
separated.
|
|
|
|
@c There is some bug to do with recognizing expressions
|
|
@c in operands, but I forget what it is. It is
|
|
@c a syntax clash because () is used as an address mode
|
|
@c and to encapsulate sub-expressions.
|
|
|
|
@node VAX-no
|
|
@section Not Supported on VAX
|
|
|
|
@cindex VAX bitfields not supported
|
|
@cindex bitfields, not supported on VAX
|
|
Vax bit fields can not be assembled with @code{@value{AS}}. Someone
|
|
can add the required code if they really need it.
|
|
|
|
@node VAX-Syntax
|
|
@section VAX Syntax
|
|
@menu
|
|
* VAX-Chars:: Special Characters
|
|
@end menu
|
|
|
|
@node VAX-Chars
|
|
@subsection Special Characters
|
|
|
|
@cindex line comment character, VAX
|
|
@cindex VAX 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, VAX
|
|
@cindex statement separator, VAX
|
|
@cindex VAX line separator
|
|
The @samp{;} character can be used to separate statements on the same
|
|
line.
|