xref: /openbsd-src/gnu/usr.bin/binutils-2.17/gas/doc/c-vax.texi (revision 3d8817e467ea46cf4772788d6804dd293abfb01a)
1*3d8817e4Smiod@c Copyright 1991, 1992, 1993, 1994, 1995, 1996, 1998, 2002
2*3d8817e4Smiod@c Free Software Foundation, Inc.
3*3d8817e4Smiod@c This is part of the GAS manual.
4*3d8817e4Smiod@c For copying conditions, see the file as.texinfo.
5*3d8817e4Smiod@c VAX/VMS description enhanced and corrected by Klaus K"aempf, kkaempf@progis.de
6*3d8817e4Smiod@ifset GENERIC
7*3d8817e4Smiod@node Vax-Dependent
8*3d8817e4Smiod@chapter VAX Dependent Features
9*3d8817e4Smiod@cindex VAX support
10*3d8817e4Smiod
11*3d8817e4Smiod@end ifset
12*3d8817e4Smiod@ifclear GENERIC
13*3d8817e4Smiod@node Machine Dependencies
14*3d8817e4Smiod@chapter VAX Dependent Features
15*3d8817e4Smiod@cindex VAX support
16*3d8817e4Smiod
17*3d8817e4Smiod@end ifclear
18*3d8817e4Smiod
19*3d8817e4Smiod@menu
20*3d8817e4Smiod* VAX-Opts::                    VAX Command-Line Options
21*3d8817e4Smiod* VAX-float::                   VAX Floating Point
22*3d8817e4Smiod* VAX-directives::              Vax Machine Directives
23*3d8817e4Smiod* VAX-opcodes::                 VAX Opcodes
24*3d8817e4Smiod* VAX-branch::                  VAX Branch Improvement
25*3d8817e4Smiod* VAX-operands::                VAX Operands
26*3d8817e4Smiod* VAX-no::                      Not Supported on VAX
27*3d8817e4Smiod@end menu
28*3d8817e4Smiod
29*3d8817e4Smiod
30*3d8817e4Smiod@node VAX-Opts
31*3d8817e4Smiod@section VAX Command-Line Options
32*3d8817e4Smiod
33*3d8817e4Smiod@cindex command-line options ignored, VAX
34*3d8817e4Smiod@cindex VAX command-line options ignored
35*3d8817e4SmiodThe Vax version of @code{@value{AS}} accepts any of the following options,
36*3d8817e4Smiodgives a warning message that the option was ignored and proceeds.
37*3d8817e4SmiodThese options are for compatibility with scripts designed for other
38*3d8817e4Smiodpeople's assemblers.
39*3d8817e4Smiod
40*3d8817e4Smiod@table @code
41*3d8817e4Smiod@cindex @code{-D}, ignored on VAX
42*3d8817e4Smiod@cindex @code{-S}, ignored on VAX
43*3d8817e4Smiod@cindex @code{-T}, ignored on VAX
44*3d8817e4Smiod@item @code{-D} (Debug)
45*3d8817e4Smiod@itemx @code{-S} (Symbol Table)
46*3d8817e4Smiod@itemx @code{-T} (Token Trace)
47*3d8817e4SmiodThese are obsolete options used to debug old assemblers.
48*3d8817e4Smiod
49*3d8817e4Smiod@cindex @code{-d}, VAX option
50*3d8817e4Smiod@item @code{-d} (Displacement size for JUMPs)
51*3d8817e4SmiodThis option expects a number following the @samp{-d}.  Like options
52*3d8817e4Smiodthat expect filenames, the number may immediately follow the
53*3d8817e4Smiod@samp{-d} (old standard) or constitute the whole of the command line
54*3d8817e4Smiodargument that follows @samp{-d} (@sc{gnu} standard).
55*3d8817e4Smiod
56*3d8817e4Smiod@cindex @code{-V}, redundant on VAX
57*3d8817e4Smiod@item @code{-V} (Virtualize Interpass Temporary File)
58*3d8817e4SmiodSome other assemblers use a temporary file.  This option
59*3d8817e4Smiodcommanded them to keep the information in active memory rather
60*3d8817e4Smiodthan in a disk file.  @code{@value{AS}} always does this, so this
61*3d8817e4Smiodoption is redundant.
62*3d8817e4Smiod
63*3d8817e4Smiod@cindex @code{-J}, ignored on VAX
64*3d8817e4Smiod@item @code{-J} (JUMPify Longer Branches)
65*3d8817e4SmiodMany 32-bit computers permit a variety of branch instructions
66*3d8817e4Smiodto do the same job.  Some of these instructions are short (and
67*3d8817e4Smiodfast) but have a limited range; others are long (and slow) but
68*3d8817e4Smiodcan branch anywhere in virtual memory.  Often there are 3
69*3d8817e4Smiodflavors of branch: short, medium and long.  Some other
70*3d8817e4Smiodassemblers would emit short and medium branches, unless told by
71*3d8817e4Smiodthis option to emit short and long branches.
72*3d8817e4Smiod
73*3d8817e4Smiod@cindex @code{-t}, ignored on VAX
74*3d8817e4Smiod@item @code{-t} (Temporary File Directory)
75*3d8817e4SmiodSome other assemblers may use a temporary file, and this option
76*3d8817e4Smiodtakes a filename being the directory to site the temporary
77*3d8817e4Smiodfile.  Since @code{@value{AS}} does not use a temporary disk file, this
78*3d8817e4Smiodoption makes no difference.  @samp{-t} needs exactly one
79*3d8817e4Smiodfilename.
80*3d8817e4Smiod@end table
81*3d8817e4Smiod
82*3d8817e4Smiod@cindex VMS (VAX) options
83*3d8817e4Smiod@cindex options for VAX/VMS
84*3d8817e4Smiod@cindex VAX/VMS options
85*3d8817e4Smiod@cindex Vax-11 C compatibility
86*3d8817e4Smiod@cindex symbols with uppercase, VAX/VMS
87*3d8817e4SmiodThe Vax version of the assembler accepts additional options when
88*3d8817e4Smiodcompiled for VMS:
89*3d8817e4Smiod
90*3d8817e4Smiod@table @samp
91*3d8817e4Smiod@cindex @samp{-h} option, VAX/VMS
92*3d8817e4Smiod@item -h @var{n}
93*3d8817e4SmiodExternal symbol or section (used for global variables) names are not
94*3d8817e4Smiodcase sensitive on VAX/VMS and always mapped to upper case.  This is
95*3d8817e4Smiodcontrary to the C language definition which explicitly distinguishes
96*3d8817e4Smiodupper and lower case.  To implement a standard conforming C compiler,
97*3d8817e4Smiodnames must be changed (mapped) to preserve the case information.  The
98*3d8817e4Smioddefault mapping is to convert all lower case characters to uppercase and
99*3d8817e4Smiodadding an underscore followed by a 6 digit hex value, representing a 24
100*3d8817e4Smioddigit binary value.  The one digits in the binary value represent which
101*3d8817e4Smiodcharacters are uppercase in the original symbol name.
102*3d8817e4Smiod
103*3d8817e4SmiodThe @samp{-h @var{n}} option determines how we map names.  This takes
104*3d8817e4Smiodseveral values.  No @samp{-h} switch at all allows case hacking as
105*3d8817e4Smioddescribed above.  A value of zero (@samp{-h0}) implies names should be
106*3d8817e4Smiodupper case, and inhibits the case hack.  A value of 2 (@samp{-h2})
107*3d8817e4Smiodimplies names should be all lower case, with no case hack.  A value of 3
108*3d8817e4Smiod(@samp{-h3}) implies that case should be preserved.  The value 1 is
109*3d8817e4Smiodunused.  The @code{-H} option directs @code{@value{AS}} to display
110*3d8817e4Smiodevery mapped symbol during assembly.
111*3d8817e4Smiod
112*3d8817e4SmiodSymbols whose names include a dollar sign @samp{$} are exceptions to the
113*3d8817e4Smiodgeneral name mapping.  These symbols are normally only used to reference
114*3d8817e4SmiodVMS library names.  Such symbols are always mapped to upper case.
115*3d8817e4Smiod
116*3d8817e4Smiod@cindex @samp{-+} option, VAX/VMS
117*3d8817e4Smiod@item -+
118*3d8817e4SmiodThe @samp{-+} option causes @code{@value{AS}} to truncate any symbol
119*3d8817e4Smiodname larger than 31 characters.  The @samp{-+} option also prevents some
120*3d8817e4Smiodcode following the @samp{_main} symbol normally added to make the object
121*3d8817e4Smiodfile compatible with Vax-11 "C".
122*3d8817e4Smiod
123*3d8817e4Smiod@cindex @samp{-1} option, VAX/VMS
124*3d8817e4Smiod@item -1
125*3d8817e4SmiodThis option is ignored for backward compatibility with @code{@value{AS}}
126*3d8817e4Smiodversion 1.x.
127*3d8817e4Smiod
128*3d8817e4Smiod@cindex @samp{-H} option, VAX/VMS
129*3d8817e4Smiod@item -H
130*3d8817e4SmiodThe @samp{-H} option causes @code{@value{AS}} to print every symbol
131*3d8817e4Smiodwhich was changed by case mapping.
132*3d8817e4Smiod@end table
133*3d8817e4Smiod
134*3d8817e4Smiod@node VAX-float
135*3d8817e4Smiod@section VAX Floating Point
136*3d8817e4Smiod
137*3d8817e4Smiod@cindex VAX floating point
138*3d8817e4Smiod@cindex floating point, VAX
139*3d8817e4SmiodConversion of flonums to floating point is correct, and
140*3d8817e4Smiodcompatible with previous assemblers.  Rounding is
141*3d8817e4Smiodtowards zero if the remainder is exactly half the least significant bit.
142*3d8817e4Smiod
143*3d8817e4Smiod@code{D}, @code{F}, @code{G} and @code{H} floating point formats
144*3d8817e4Smiodare understood.
145*3d8817e4Smiod
146*3d8817e4SmiodImmediate floating literals (@emph{e.g.} @samp{S`$6.9})
147*3d8817e4Smiodare rendered correctly.  Again, rounding is towards zero in the
148*3d8817e4Smiodboundary case.
149*3d8817e4Smiod
150*3d8817e4Smiod@cindex @code{float} directive, VAX
151*3d8817e4Smiod@cindex @code{double} directive, VAX
152*3d8817e4SmiodThe @code{.float} directive produces @code{f} format numbers.
153*3d8817e4SmiodThe @code{.double} directive produces @code{d} format numbers.
154*3d8817e4Smiod
155*3d8817e4Smiod@node VAX-directives
156*3d8817e4Smiod@section Vax Machine Directives
157*3d8817e4Smiod
158*3d8817e4Smiod@cindex machine directives, VAX
159*3d8817e4Smiod@cindex VAX machine directives
160*3d8817e4SmiodThe Vax version of the assembler supports four directives for
161*3d8817e4Smiodgenerating Vax floating point constants.  They are described in the
162*3d8817e4Smiodtable below.
163*3d8817e4Smiod
164*3d8817e4Smiod@cindex wide floating point directives, VAX
165*3d8817e4Smiod@table @code
166*3d8817e4Smiod@cindex @code{dfloat} directive, VAX
167*3d8817e4Smiod@item .dfloat
168*3d8817e4SmiodThis expects zero or more flonums, separated by commas, and
169*3d8817e4Smiodassembles Vax @code{d} format 64-bit floating point constants.
170*3d8817e4Smiod
171*3d8817e4Smiod@cindex @code{ffloat} directive, VAX
172*3d8817e4Smiod@item .ffloat
173*3d8817e4SmiodThis expects zero or more flonums, separated by commas, and
174*3d8817e4Smiodassembles Vax @code{f} format 32-bit floating point constants.
175*3d8817e4Smiod
176*3d8817e4Smiod@cindex @code{gfloat} directive, VAX
177*3d8817e4Smiod@item .gfloat
178*3d8817e4SmiodThis expects zero or more flonums, separated by commas, and
179*3d8817e4Smiodassembles Vax @code{g} format 64-bit floating point constants.
180*3d8817e4Smiod
181*3d8817e4Smiod@cindex @code{hfloat} directive, VAX
182*3d8817e4Smiod@item .hfloat
183*3d8817e4SmiodThis expects zero or more flonums, separated by commas, and
184*3d8817e4Smiodassembles Vax @code{h} format 128-bit floating point constants.
185*3d8817e4Smiod
186*3d8817e4Smiod@end table
187*3d8817e4Smiod
188*3d8817e4Smiod@node VAX-opcodes
189*3d8817e4Smiod@section VAX Opcodes
190*3d8817e4Smiod
191*3d8817e4Smiod@cindex VAX opcode mnemonics
192*3d8817e4Smiod@cindex opcode mnemonics, VAX
193*3d8817e4Smiod@cindex mnemonics for opcodes, VAX
194*3d8817e4SmiodAll DEC mnemonics are supported.  Beware that @code{case@dots{}}
195*3d8817e4Smiodinstructions have exactly 3 operands.  The dispatch table that
196*3d8817e4Smiodfollows the @code{case@dots{}} instruction should be made with
197*3d8817e4Smiod@code{.word} statements.  This is compatible with all unix
198*3d8817e4Smiodassemblers we know of.
199*3d8817e4Smiod
200*3d8817e4Smiod@node VAX-branch
201*3d8817e4Smiod@section VAX Branch Improvement
202*3d8817e4Smiod
203*3d8817e4Smiod@cindex VAX branch improvement
204*3d8817e4Smiod@cindex branch improvement, VAX
205*3d8817e4Smiod@cindex pseudo-ops for branch, VAX
206*3d8817e4SmiodCertain pseudo opcodes are permitted.  They are for branch
207*3d8817e4Smiodinstructions.  They expand to the shortest branch instruction that
208*3d8817e4Smiodreaches the target.  Generally these mnemonics are made by
209*3d8817e4Smiodsubstituting @samp{j} for @samp{b} at the start of a DEC mnemonic.
210*3d8817e4SmiodThis feature is included both for compatibility and to help
211*3d8817e4Smiodcompilers.  If you do not need this feature, avoid these
212*3d8817e4Smiodopcodes.  Here are the mnemonics, and the code they can expand into.
213*3d8817e4Smiod
214*3d8817e4Smiod@table @code
215*3d8817e4Smiod@item jbsb
216*3d8817e4Smiod@samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}.
217*3d8817e4Smiod@table @asis
218*3d8817e4Smiod@item (byte displacement)
219*3d8817e4Smiod@kbd{bsbb @dots{}}
220*3d8817e4Smiod@item (word displacement)
221*3d8817e4Smiod@kbd{bsbw @dots{}}
222*3d8817e4Smiod@item (long displacement)
223*3d8817e4Smiod@kbd{jsb @dots{}}
224*3d8817e4Smiod@end table
225*3d8817e4Smiod@item jbr
226*3d8817e4Smiod@itemx jr
227*3d8817e4SmiodUnconditional branch.
228*3d8817e4Smiod@table @asis
229*3d8817e4Smiod@item (byte displacement)
230*3d8817e4Smiod@kbd{brb @dots{}}
231*3d8817e4Smiod@item (word displacement)
232*3d8817e4Smiod@kbd{brw @dots{}}
233*3d8817e4Smiod@item (long displacement)
234*3d8817e4Smiod@kbd{jmp @dots{}}
235*3d8817e4Smiod@end table
236*3d8817e4Smiod@item j@var{COND}
237*3d8817e4Smiod@var{COND} may be any one of the conditional branches
238*3d8817e4Smiod@code{neq}, @code{nequ}, @code{eql}, @code{eqlu}, @code{gtr},
239*3d8817e4Smiod@code{geq}, @code{lss}, @code{gtru}, @code{lequ}, @code{vc}, @code{vs},
240*3d8817e4Smiod@code{gequ}, @code{cc}, @code{lssu}, @code{cs}.
241*3d8817e4Smiod@var{COND} may also be one of the bit tests
242*3d8817e4Smiod@code{bs}, @code{bc}, @code{bss}, @code{bcs}, @code{bsc}, @code{bcc},
243*3d8817e4Smiod@code{bssi}, @code{bcci}, @code{lbs}, @code{lbc}.
244*3d8817e4Smiod@var{NOTCOND} is the opposite condition to @var{COND}.
245*3d8817e4Smiod@table @asis
246*3d8817e4Smiod@item (byte displacement)
247*3d8817e4Smiod@kbd{b@var{COND} @dots{}}
248*3d8817e4Smiod@item (word displacement)
249*3d8817e4Smiod@kbd{b@var{NOTCOND} foo ; brw @dots{} ; foo:}
250*3d8817e4Smiod@item (long displacement)
251*3d8817e4Smiod@kbd{b@var{NOTCOND} foo ; jmp @dots{} ; foo:}
252*3d8817e4Smiod@end table
253*3d8817e4Smiod@item jacb@var{X}
254*3d8817e4Smiod@var{X} may be one of @code{b d f g h l w}.
255*3d8817e4Smiod@table @asis
256*3d8817e4Smiod@item (word displacement)
257*3d8817e4Smiod@kbd{@var{OPCODE} @dots{}}
258*3d8817e4Smiod@item (long displacement)
259*3d8817e4Smiod@example
260*3d8817e4Smiod@var{OPCODE} @dots{}, foo ;
261*3d8817e4Smiodbrb bar ;
262*3d8817e4Smiodfoo: jmp @dots{} ;
263*3d8817e4Smiodbar:
264*3d8817e4Smiod@end example
265*3d8817e4Smiod@end table
266*3d8817e4Smiod@item jaob@var{YYY}
267*3d8817e4Smiod@var{YYY} may be one of @code{lss leq}.
268*3d8817e4Smiod@item jsob@var{ZZZ}
269*3d8817e4Smiod@var{ZZZ} may be one of @code{geq gtr}.
270*3d8817e4Smiod@table @asis
271*3d8817e4Smiod@item (byte displacement)
272*3d8817e4Smiod@kbd{@var{OPCODE} @dots{}}
273*3d8817e4Smiod@item (word displacement)
274*3d8817e4Smiod@example
275*3d8817e4Smiod@var{OPCODE} @dots{}, foo ;
276*3d8817e4Smiodbrb bar ;
277*3d8817e4Smiodfoo: brw @var{destination} ;
278*3d8817e4Smiodbar:
279*3d8817e4Smiod@end example
280*3d8817e4Smiod@item (long displacement)
281*3d8817e4Smiod@example
282*3d8817e4Smiod@var{OPCODE} @dots{}, foo ;
283*3d8817e4Smiodbrb bar ;
284*3d8817e4Smiodfoo: jmp @var{destination} ;
285*3d8817e4Smiodbar:
286*3d8817e4Smiod@end example
287*3d8817e4Smiod@end table
288*3d8817e4Smiod@item aobleq
289*3d8817e4Smiod@itemx aoblss
290*3d8817e4Smiod@itemx sobgeq
291*3d8817e4Smiod@itemx sobgtr
292*3d8817e4Smiod@table @asis
293*3d8817e4Smiod@item (byte displacement)
294*3d8817e4Smiod@kbd{@var{OPCODE} @dots{}}
295*3d8817e4Smiod@item (word displacement)
296*3d8817e4Smiod@example
297*3d8817e4Smiod@var{OPCODE} @dots{}, foo ;
298*3d8817e4Smiodbrb bar ;
299*3d8817e4Smiodfoo: brw @var{destination} ;
300*3d8817e4Smiodbar:
301*3d8817e4Smiod@end example
302*3d8817e4Smiod@item (long displacement)
303*3d8817e4Smiod@example
304*3d8817e4Smiod@var{OPCODE} @dots{}, foo ;
305*3d8817e4Smiodbrb bar ;
306*3d8817e4Smiodfoo: jmp @var{destination} ;
307*3d8817e4Smiodbar:
308*3d8817e4Smiod@end example
309*3d8817e4Smiod@end table
310*3d8817e4Smiod@end table
311*3d8817e4Smiod
312*3d8817e4Smiod@node VAX-operands
313*3d8817e4Smiod@section VAX Operands
314*3d8817e4Smiod
315*3d8817e4Smiod@cindex VAX operand notation
316*3d8817e4Smiod@cindex operand notation, VAX
317*3d8817e4Smiod@cindex immediate character, VAX
318*3d8817e4Smiod@cindex VAX immediate character
319*3d8817e4SmiodThe immediate character is @samp{$} for Unix compatibility, not
320*3d8817e4Smiod@samp{#} as DEC writes it.
321*3d8817e4Smiod
322*3d8817e4Smiod@cindex indirect character, VAX
323*3d8817e4Smiod@cindex VAX indirect character
324*3d8817e4SmiodThe indirect character is @samp{*} for Unix compatibility, not
325*3d8817e4Smiod@samp{@@} as DEC writes it.
326*3d8817e4Smiod
327*3d8817e4Smiod@cindex displacement sizing character, VAX
328*3d8817e4Smiod@cindex VAX displacement sizing character
329*3d8817e4SmiodThe displacement sizing character is @samp{`} (an accent grave) for
330*3d8817e4SmiodUnix compatibility, not @samp{^} as DEC writes it.  The letter
331*3d8817e4Smiodpreceding @samp{`} may have either case.  @samp{G} is not
332*3d8817e4Smiodunderstood, but all other letters (@code{b i l s w}) are understood.
333*3d8817e4Smiod
334*3d8817e4Smiod@cindex register names, VAX
335*3d8817e4Smiod@cindex VAX register names
336*3d8817e4SmiodRegister names understood are @code{r0 r1 r2 @dots{} r15 ap fp sp
337*3d8817e4Smiodpc}.  Upper and lower case letters are equivalent.
338*3d8817e4Smiod
339*3d8817e4SmiodFor instance
340*3d8817e4Smiod@smallexample
341*3d8817e4Smiodtstb *w`$4(r5)
342*3d8817e4Smiod@end smallexample
343*3d8817e4Smiod
344*3d8817e4SmiodAny expression is permitted in an operand.  Operands are comma
345*3d8817e4Smiodseparated.
346*3d8817e4Smiod
347*3d8817e4Smiod@c There is some bug to do with recognizing expressions
348*3d8817e4Smiod@c in operands, but I forget what it is.  It is
349*3d8817e4Smiod@c a syntax clash because () is used as an address mode
350*3d8817e4Smiod@c and to encapsulate sub-expressions.
351*3d8817e4Smiod
352*3d8817e4Smiod@node VAX-no
353*3d8817e4Smiod@section Not Supported on VAX
354*3d8817e4Smiod
355*3d8817e4Smiod@cindex VAX bitfields not supported
356*3d8817e4Smiod@cindex bitfields, not supported on VAX
357*3d8817e4SmiodVax bit fields can not be assembled with @code{@value{AS}}.  Someone
358*3d8817e4Smiodcan add the required code if they really need it.
359