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 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 27* VAX-Syntax:: VAX Syntax 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. 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. 385