1 @c Copyright (C) 1991-2019 Free Software Foundation, Inc.
2 @c This is part of the GAS manual.
3 @c For copying conditions, see the file as.texinfo.
4 @c VAX/VMS description enhanced and corrected by Klaus K"aempf, kkaempf@progis.de
7 @chapter VAX Dependent Features
12 @node Machine Dependencies
13 @chapter VAX Dependent Features
19 * VAX-Opts:: VAX Command-Line Options
20 * VAX-float:: VAX Floating Point
21 * VAX-directives:: Vax Machine Directives
22 * VAX-opcodes:: VAX Opcodes
23 * VAX-branch:: VAX Branch Improvement
24 * VAX-operands:: VAX Operands
25 * VAX-no:: Not Supported on VAX
26 * VAX-Syntax:: VAX Syntax
31 @section VAX Command-Line Options
33 @cindex command-line options ignored, VAX
34 @cindex VAX command-line options ignored
35 The Vax version of @code{@value{AS}} accepts any of the following options,
36 gives a warning message that the option was ignored and proceeds.
37 These options are for compatibility with scripts designed for other
41 @cindex @code{-D}, ignored on VAX
42 @cindex @code{-S}, ignored on VAX
43 @cindex @code{-T}, ignored on VAX
44 @item @code{-D} (Debug)
45 @itemx @code{-S} (Symbol Table)
46 @itemx @code{-T} (Token Trace)
47 These are obsolete options used to debug old assemblers.
49 @cindex @code{-d}, VAX option
50 @item @code{-d} (Displacement size for JUMPs)
51 This option expects a number following the @samp{-d}. Like options
52 that expect filenames, the number may immediately follow the
53 @samp{-d} (old standard) or constitute the whole of the command-line
54 argument that follows @samp{-d} (@sc{gnu} standard).
56 @cindex @code{-V}, redundant on VAX
57 @item @code{-V} (Virtualize Interpass Temporary File)
58 Some other assemblers use a temporary file. This option
59 commanded them to keep the information in active memory rather
60 than in a disk file. @code{@value{AS}} always does this, so this
63 @cindex @code{-J}, ignored on VAX
64 @item @code{-J} (JUMPify Longer Branches)
65 Many 32-bit computers permit a variety of branch instructions
66 to do the same job. Some of these instructions are short (and
67 fast) but have a limited range; others are long (and slow) but
68 can branch anywhere in virtual memory. Often there are 3
69 flavors of branch: short, medium and long. Some other
70 assemblers would emit short and medium branches, unless told by
71 this option to emit short and long branches.
73 @cindex @code{-t}, ignored on VAX
74 @item @code{-t} (Temporary File Directory)
75 Some other assemblers may use a temporary file, and this option
76 takes a filename being the directory to site the temporary
77 file. Since @code{@value{AS}} does not use a temporary disk file, this
78 option makes no difference. @samp{-t} needs exactly one
82 @cindex VMS (VAX) options
83 @cindex options for VAX/VMS
84 @cindex VAX/VMS options
85 @cindex Vax-11 C compatibility
86 @cindex symbols with uppercase, VAX/VMS
87 The Vax version of the assembler accepts additional options when
91 @cindex @samp{-h} option, VAX/VMS
93 External symbol or section (used for global variables) names are not
94 case sensitive on VAX/VMS and always mapped to upper case. This is
95 contrary to the C language definition which explicitly distinguishes
96 upper and lower case. To implement a standard conforming C compiler,
97 names must be changed (mapped) to preserve the case information. The
98 default mapping is to convert all lower case characters to uppercase and
99 adding an underscore followed by a 6 digit hex value, representing a 24
100 digit binary value. The one digits in the binary value represent which
101 characters are uppercase in the original symbol name.
103 The @samp{-h @var{n}} option determines how we map names. This takes
104 several values. No @samp{-h} switch at all allows case hacking as
105 described above. A value of zero (@samp{-h0}) implies names should be
106 upper case, and inhibits the case hack. A value of 2 (@samp{-h2})
107 implies names should be all lower case, with no case hack. A value of 3
108 (@samp{-h3}) implies that case should be preserved. The value 1 is
109 unused. The @code{-H} option directs @code{@value{AS}} to display
110 every mapped symbol during assembly.
112 Symbols whose names include a dollar sign @samp{$} are exceptions to the
113 general name mapping. These symbols are normally only used to reference
114 VMS library names. Such symbols are always mapped to upper case.
116 @cindex @samp{-+} option, VAX/VMS
118 The @samp{-+} option causes @code{@value{AS}} to truncate any symbol
119 name larger than 31 characters. The @samp{-+} option also prevents some
120 code following the @samp{_main} symbol normally added to make the object
121 file compatible with Vax-11 "C".
123 @cindex @samp{-1} option, VAX/VMS
125 This option is ignored for backward compatibility with @code{@value{AS}}
128 @cindex @samp{-H} option, VAX/VMS
130 The @samp{-H} option causes @code{@value{AS}} to print every symbol
131 which was changed by case mapping.
135 @section VAX Floating Point
137 @cindex VAX floating point
138 @cindex floating point, VAX
139 Conversion of flonums to floating point is correct, and
140 compatible with previous assemblers. Rounding is
141 towards zero if the remainder is exactly half the least significant bit.
143 @code{D}, @code{F}, @code{G} and @code{H} floating point formats
146 Immediate floating literals (@emph{e.g.} @samp{S`$6.9})
147 are rendered correctly. Again, rounding is towards zero in the
150 @cindex @code{float} directive, VAX
151 @cindex @code{double} directive, VAX
152 The @code{.float} directive produces @code{f} format numbers.
153 The @code{.double} directive produces @code{d} format numbers.
156 @section Vax Machine Directives
158 @cindex machine directives, VAX
159 @cindex VAX machine directives
160 The Vax version of the assembler supports four directives for
161 generating Vax floating point constants. They are described in the
164 @cindex wide floating point directives, VAX
166 @cindex @code{dfloat} directive, VAX
168 This expects zero or more flonums, separated by commas, and
169 assembles Vax @code{d} format 64-bit floating point constants.
171 @cindex @code{ffloat} directive, VAX
173 This expects zero or more flonums, separated by commas, and
174 assembles Vax @code{f} format 32-bit floating point constants.
176 @cindex @code{gfloat} directive, VAX
178 This expects zero or more flonums, separated by commas, and
179 assembles Vax @code{g} format 64-bit floating point constants.
181 @cindex @code{hfloat} directive, VAX
183 This expects zero or more flonums, separated by commas, and
184 assembles Vax @code{h} format 128-bit floating point constants.
191 @cindex VAX opcode mnemonics
192 @cindex opcode mnemonics, VAX
193 @cindex mnemonics for opcodes, VAX
194 All DEC mnemonics are supported. Beware that @code{case@dots{}}
195 instructions have exactly 3 operands. The dispatch table that
196 follows the @code{case@dots{}} instruction should be made with
197 @code{.word} statements. This is compatible with all unix
198 assemblers we know of.
201 @section VAX Branch Improvement
203 @cindex VAX branch improvement
204 @cindex branch improvement, VAX
205 @cindex pseudo-ops for branch, VAX
206 Certain pseudo opcodes are permitted. They are for branch
207 instructions. They expand to the shortest branch instruction that
208 reaches the target. Generally these mnemonics are made by
209 substituting @samp{j} for @samp{b} at the start of a DEC mnemonic.
210 This feature is included both for compatibility and to help
211 compilers. If you do not need this feature, avoid these
212 opcodes. Here are the mnemonics, and the code they can expand into.
216 @samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}.
218 @item (byte displacement)
220 @item (word displacement)
222 @item (long displacement)
227 Unconditional branch.
229 @item (byte displacement)
231 @item (word displacement)
233 @item (long displacement)
237 @var{COND} may be any one of the conditional branches
238 @code{neq}, @code{nequ}, @code{eql}, @code{eqlu}, @code{gtr},
239 @code{geq}, @code{lss}, @code{gtru}, @code{lequ}, @code{vc}, @code{vs},
240 @code{gequ}, @code{cc}, @code{lssu}, @code{cs}.
241 @var{COND} may also be one of the bit tests
242 @code{bs}, @code{bc}, @code{bss}, @code{bcs}, @code{bsc}, @code{bcc},
243 @code{bssi}, @code{bcci}, @code{lbs}, @code{lbc}.
244 @var{NOTCOND} is the opposite condition to @var{COND}.
246 @item (byte displacement)
247 @kbd{b@var{COND} @dots{}}
248 @item (word displacement)
249 @kbd{b@var{NOTCOND} foo ; brw @dots{} ; foo:}
250 @item (long displacement)
251 @kbd{b@var{NOTCOND} foo ; jmp @dots{} ; foo:}
254 @var{X} may be one of @code{b d f g h l w}.
256 @item (word displacement)
257 @kbd{@var{OPCODE} @dots{}}
258 @item (long displacement)
260 @var{OPCODE} @dots{}, foo ;
267 @var{YYY} may be one of @code{lss leq}.
269 @var{ZZZ} may be one of @code{geq gtr}.
271 @item (byte displacement)
272 @kbd{@var{OPCODE} @dots{}}
273 @item (word displacement)
275 @var{OPCODE} @dots{}, foo ;
277 foo: brw @var{destination} ;
280 @item (long displacement)
282 @var{OPCODE} @dots{}, foo ;
284 foo: jmp @var{destination} ;
293 @item (byte displacement)
294 @kbd{@var{OPCODE} @dots{}}
295 @item (word displacement)
297 @var{OPCODE} @dots{}, foo ;
299 foo: brw @var{destination} ;
302 @item (long displacement)
304 @var{OPCODE} @dots{}, foo ;
306 foo: jmp @var{destination} ;
313 @section VAX Operands
315 @cindex VAX operand notation
316 @cindex operand notation, VAX
317 @cindex immediate character, VAX
318 @cindex VAX immediate character
319 The immediate character is @samp{$} for Unix compatibility, not
320 @samp{#} as DEC writes it.
322 @cindex indirect character, VAX
323 @cindex VAX indirect character
324 The indirect character is @samp{*} for Unix compatibility, not
325 @samp{@@} as DEC writes it.
327 @cindex displacement sizing character, VAX
328 @cindex VAX displacement sizing character
329 The displacement sizing character is @samp{`} (an accent grave) for
330 Unix compatibility, not @samp{^} as DEC writes it. The letter
331 preceding @samp{`} may have either case. @samp{G} is not
332 understood, but all other letters (@code{b i l s w}) are understood.
334 @cindex register names, VAX
335 @cindex VAX register names
336 Register names understood are @code{r0 r1 r2 @dots{} r15 ap fp sp
337 pc}. Upper and lower case letters are equivalent.
344 Any expression is permitted in an operand. Operands are comma
347 @c There is some bug to do with recognizing expressions
348 @c in operands, but I forget what it is. It is
349 @c a syntax clash because () is used as an address mode
350 @c and to encapsulate sub-expressions.
353 @section Not Supported on VAX
355 @cindex VAX bitfields not supported
356 @cindex bitfields, not supported on VAX
357 Vax bit fields can not be assembled with @code{@value{AS}}. Someone
358 can add the required code if they really need it.
363 * VAX-Chars:: Special Characters
367 @subsection Special Characters
369 @cindex line comment character, VAX
370 @cindex VAX line comment character
371 The presence of a @samp{#} appearing anywhere on a line indicates the
372 start of a comment that extends to the end of that line.
374 If a @samp{#} appears as the first character of a line then the whole
375 line is treated as a comment, but in this case the line can also be a
376 logical line number directive (@pxref{Comments}) or a preprocessor
377 control command (@pxref{Preprocessing}).
379 @cindex line separator, VAX
380 @cindex statement separator, VAX
381 @cindex VAX line separator
382 The @samp{;} character can be used to separate statements on the same