[.]
[deliverable/binutils-gdb.git] / gas / doc / c-vax.texi
CommitLineData
7c31ae13 1@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2002, 2011
f7e42eb4 2@c Free Software Foundation, Inc.
252b5132
RH
3@c This is part of the GAS manual.
4@c For copying conditions, see the file as.texinfo.
062b7c0c 5@c VAX/VMS description enhanced and corrected by Klaus K"aempf, kkaempf@progis.de
252b5132
RH
6@ifset GENERIC
7@node Vax-Dependent
8@chapter VAX Dependent Features
9@cindex VAX support
10
11@end ifset
12@ifclear GENERIC
13@node Machine Dependencies
14@chapter VAX Dependent Features
15@cindex VAX support
16
17@end ifclear
18
19@menu
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
7c31ae13 27* VAX-Syntax:: VAX Syntax
252b5132
RH
28@end menu
29
30
31@node VAX-Opts
32@section VAX Command-Line Options
33
34@cindex command-line options ignored, VAX
35@cindex VAX command-line options ignored
36The Vax version of @code{@value{AS}} accepts any of the following options,
37gives a warning message that the option was ignored and proceeds.
38These options are for compatibility with scripts designed for other
39people's assemblers.
40
41@table @code
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)
48These are obsolete options used to debug old assemblers.
49
50@cindex @code{-d}, VAX option
51@item @code{-d} (Displacement size for JUMPs)
52This option expects a number following the @samp{-d}. Like options
53that expect filenames, the number may immediately follow the
54@samp{-d} (old standard) or constitute the whole of the command line
55argument that follows @samp{-d} (@sc{gnu} standard).
56
57@cindex @code{-V}, redundant on VAX
58@item @code{-V} (Virtualize Interpass Temporary File)
59Some other assemblers use a temporary file. This option
60commanded them to keep the information in active memory rather
61than in a disk file. @code{@value{AS}} always does this, so this
62option is redundant.
63
64@cindex @code{-J}, ignored on VAX
65@item @code{-J} (JUMPify Longer Branches)
66Many 32-bit computers permit a variety of branch instructions
67to do the same job. Some of these instructions are short (and
68fast) but have a limited range; others are long (and slow) but
69can branch anywhere in virtual memory. Often there are 3
70flavors of branch: short, medium and long. Some other
71assemblers would emit short and medium branches, unless told by
72this option to emit short and long branches.
73
74@cindex @code{-t}, ignored on VAX
75@item @code{-t} (Temporary File Directory)
76Some other assemblers may use a temporary file, and this option
77takes a filename being the directory to site the temporary
78file. Since @code{@value{AS}} does not use a temporary disk file, this
79option makes no difference. @samp{-t} needs exactly one
80filename.
81@end table
82
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
88The Vax version of the assembler accepts additional options when
89compiled for VMS:
90
91@table @samp
92@cindex @samp{-h} option, VAX/VMS
93@item -h @var{n}
94External symbol or section (used for global variables) names are not
95case sensitive on VAX/VMS and always mapped to upper case. This is
96contrary to the C language definition which explicitly distinguishes
97upper and lower case. To implement a standard conforming C compiler,
98names must be changed (mapped) to preserve the case information. The
99default mapping is to convert all lower case characters to uppercase and
100adding an underscore followed by a 6 digit hex value, representing a 24
101digit binary value. The one digits in the binary value represent which
102characters are uppercase in the original symbol name.
103
104The @samp{-h @var{n}} option determines how we map names. This takes
105several values. No @samp{-h} switch at all allows case hacking as
106described above. A value of zero (@samp{-h0}) implies names should be
107upper case, and inhibits the case hack. A value of 2 (@samp{-h2})
108implies 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
110unused. The @code{-H} option directs @code{@value{AS}} to display
111every mapped symbol during assembly.
112
113Symbols whose names include a dollar sign @samp{$} are exceptions to the
114general name mapping. These symbols are normally only used to reference
115VMS library names. Such symbols are always mapped to upper case.
116
117@cindex @samp{-+} option, VAX/VMS
118@item -+
119The @samp{-+} option causes @code{@value{AS}} to truncate any symbol
120name larger than 31 characters. The @samp{-+} option also prevents some
121code following the @samp{_main} symbol normally added to make the object
122file compatible with Vax-11 "C".
123
124@cindex @samp{-1} option, VAX/VMS
125@item -1
126This option is ignored for backward compatibility with @code{@value{AS}}
127version 1.x.
128
129@cindex @samp{-H} option, VAX/VMS
130@item -H
131The @samp{-H} option causes @code{@value{AS}} to print every symbol
132which was changed by case mapping.
133@end table
134
135@node VAX-float
136@section VAX Floating Point
137
138@cindex VAX floating point
139@cindex floating point, VAX
140Conversion of flonums to floating point is correct, and
141compatible with previous assemblers. Rounding is
142towards zero if the remainder is exactly half the least significant bit.
143
144@code{D}, @code{F}, @code{G} and @code{H} floating point formats
145are understood.
146
147Immediate floating literals (@emph{e.g.} @samp{S`$6.9})
148are rendered correctly. Again, rounding is towards zero in the
149boundary case.
150
151@cindex @code{float} directive, VAX
152@cindex @code{double} directive, VAX
153The @code{.float} directive produces @code{f} format numbers.
154The @code{.double} directive produces @code{d} format numbers.
155
156@node VAX-directives
157@section Vax Machine Directives
158
159@cindex machine directives, VAX
160@cindex VAX machine directives
161The Vax version of the assembler supports four directives for
162generating Vax floating point constants. They are described in the
163table below.
164
165@cindex wide floating point directives, VAX
166@table @code
167@cindex @code{dfloat} directive, VAX
168@item .dfloat
169This expects zero or more flonums, separated by commas, and
170assembles Vax @code{d} format 64-bit floating point constants.
171
172@cindex @code{ffloat} directive, VAX
173@item .ffloat
174This expects zero or more flonums, separated by commas, and
175assembles Vax @code{f} format 32-bit floating point constants.
176
177@cindex @code{gfloat} directive, VAX
178@item .gfloat
179This expects zero or more flonums, separated by commas, and
180assembles Vax @code{g} format 64-bit floating point constants.
181
182@cindex @code{hfloat} directive, VAX
183@item .hfloat
184This expects zero or more flonums, separated by commas, and
185assembles Vax @code{h} format 128-bit floating point constants.
186
187@end table
188
189@node VAX-opcodes
190@section VAX Opcodes
191
192@cindex VAX opcode mnemonics
193@cindex opcode mnemonics, VAX
194@cindex mnemonics for opcodes, VAX
195All DEC mnemonics are supported. Beware that @code{case@dots{}}
196instructions have exactly 3 operands. The dispatch table that
197follows the @code{case@dots{}} instruction should be made with
198@code{.word} statements. This is compatible with all unix
199assemblers we know of.
200
201@node VAX-branch
202@section VAX Branch Improvement
203
204@cindex VAX branch improvement
205@cindex branch improvement, VAX
206@cindex pseudo-ops for branch, VAX
207Certain pseudo opcodes are permitted. They are for branch
208instructions. They expand to the shortest branch instruction that
209reaches the target. Generally these mnemonics are made by
210substituting @samp{j} for @samp{b} at the start of a DEC mnemonic.
211This feature is included both for compatibility and to help
212compilers. If you do not need this feature, avoid these
213opcodes. Here are the mnemonics, and the code they can expand into.
214
215@table @code
216@item jbsb
217@samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}.
218@table @asis
219@item (byte displacement)
220@kbd{bsbb @dots{}}
221@item (word displacement)
222@kbd{bsbw @dots{}}
223@item (long displacement)
224@kbd{jsb @dots{}}
225@end table
226@item jbr
227@itemx jr
228Unconditional branch.
229@table @asis
230@item (byte displacement)
231@kbd{brb @dots{}}
232@item (word displacement)
233@kbd{brw @dots{}}
234@item (long displacement)
235@kbd{jmp @dots{}}
236@end table
237@item j@var{COND}
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}.
246@table @asis
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:}
253@end table
254@item jacb@var{X}
255@var{X} may be one of @code{b d f g h l w}.
256@table @asis
257@item (word displacement)
258@kbd{@var{OPCODE} @dots{}}
259@item (long displacement)
260@example
261@var{OPCODE} @dots{}, foo ;
262brb bar ;
263foo: jmp @dots{} ;
264bar:
265@end example
266@end table
267@item jaob@var{YYY}
268@var{YYY} may be one of @code{lss leq}.
269@item jsob@var{ZZZ}
270@var{ZZZ} may be one of @code{geq gtr}.
271@table @asis
272@item (byte displacement)
273@kbd{@var{OPCODE} @dots{}}
274@item (word displacement)
275@example
276@var{OPCODE} @dots{}, foo ;
277brb bar ;
278foo: brw @var{destination} ;
279bar:
280@end example
281@item (long displacement)
282@example
283@var{OPCODE} @dots{}, foo ;
284brb bar ;
285foo: jmp @var{destination} ;
286bar:
287@end example
288@end table
289@item aobleq
290@itemx aoblss
291@itemx sobgeq
292@itemx sobgtr
293@table @asis
294@item (byte displacement)
295@kbd{@var{OPCODE} @dots{}}
296@item (word displacement)
297@example
298@var{OPCODE} @dots{}, foo ;
299brb bar ;
300foo: brw @var{destination} ;
301bar:
302@end example
303@item (long displacement)
304@example
305@var{OPCODE} @dots{}, foo ;
306brb bar ;
307foo: jmp @var{destination} ;
308bar:
309@end example
310@end table
311@end table
312
313@node VAX-operands
314@section VAX Operands
315
316@cindex VAX operand notation
317@cindex operand notation, VAX
318@cindex immediate character, VAX
319@cindex VAX immediate character
320The immediate character is @samp{$} for Unix compatibility, not
321@samp{#} as DEC writes it.
322
323@cindex indirect character, VAX
324@cindex VAX indirect character
325The indirect character is @samp{*} for Unix compatibility, not
326@samp{@@} as DEC writes it.
327
328@cindex displacement sizing character, VAX
329@cindex VAX displacement sizing character
330The displacement sizing character is @samp{`} (an accent grave) for
331Unix compatibility, not @samp{^} as DEC writes it. The letter
332preceding @samp{`} may have either case. @samp{G} is not
333understood, but all other letters (@code{b i l s w}) are understood.
334
335@cindex register names, VAX
336@cindex VAX register names
337Register names understood are @code{r0 r1 r2 @dots{} r15 ap fp sp
338pc}. Upper and lower case letters are equivalent.
339
340For instance
341@smallexample
342tstb *w`$4(r5)
343@end smallexample
344
345Any expression is permitted in an operand. Operands are comma
346separated.
347
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.
352
353@node VAX-no
354@section Not Supported on VAX
355
356@cindex VAX bitfields not supported
357@cindex bitfields, not supported on VAX
358Vax bit fields can not be assembled with @code{@value{AS}}. Someone
359can add the required code if they really need it.
7c31ae13
NC
360
361@node VAX-Syntax
362@section VAX Syntax
363@menu
364* VAX-Chars:: Special Characters
365@end menu
366
367@node VAX-Chars
368@subsection Special Characters
369
370@cindex line comment character, VAX
371@cindex VAX line comment character
372The presence of a @samp{#} appearing anywhere on a line indicates the
373start of a comment that extends to the end of that line.
374
375If a @samp{#} appears as the first character of a line then the whole
376line is treated as a comment, but in this case the line can also be a
377logical line number directive (@pxref{Comments}) or a preprocessor
378control command (@pxref{Preprocessing}).
379
380@cindex line separator, VAX
381@cindex statement separator, VAX
382@cindex VAX line separator
383The @samp{;} character can be used to separate statements on the same
384line.
This page took 0.517777 seconds and 4 git commands to generate.