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