1 @c Copyright (C) 1991-2014 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 (a] progis.de 5 @ifset GENERIC 6 @node Vax-Dependent 7 @chapter VAX Dependent Features 8 @cindex VAX support 9 10 @end ifset 11 @ifclear GENERIC 12 @node Machine Dependencies 13 @chapter VAX Dependent Features 14 @cindex VAX support 15 16 @end ifclear 17 18 @menu 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 27 @end menu 28 29 30 @node VAX-Opts 31 @section VAX Command-Line Options 32 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 38 people's assemblers. 39 40 @table @code 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. 48 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). 55 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 61 option is redundant. 62 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. 72 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 79 filename. 80 @end table 81 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 88 compiled for VMS: 89 90 @table @samp 91 @cindex @samp{-h} option, VAX/VMS 92 @item -h @var{n} 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. 102 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. 111 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. 115 116 @cindex @samp{-+} option, VAX/VMS 117 @item -+ 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". 122 123 @cindex @samp{-1} option, VAX/VMS 124 @item -1 125 This option is ignored for backward compatibility with @code{@value{AS}} 126 version 1.x. 127 128 @cindex @samp{-H} option, VAX/VMS 129 @item -H 130 The @samp{-H} option causes @code{@value{AS}} to print every symbol 131 which was changed by case mapping. 132 @end table 133 134 @node VAX-float 135 @section VAX Floating Point 136 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. 142 143 @code{D}, @code{F}, @code{G} and @code{H} floating point formats 144 are understood. 145 146 Immediate floating literals (@emph{e.g.} @samp{S`$6.9}) 147 are rendered correctly. Again, rounding is towards zero in the 148 boundary case. 149 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. 154 155 @node VAX-directives 156 @section Vax Machine Directives 157 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 162 table below. 163 164 @cindex wide floating point directives, VAX 165 @table @code 166 @cindex @code{dfloat} directive, VAX 167 @item .dfloat 168 This expects zero or more flonums, separated by commas, and 169 assembles Vax @code{d} format 64-bit floating point constants. 170 171 @cindex @code{ffloat} directive, VAX 172 @item .ffloat 173 This expects zero or more flonums, separated by commas, and 174 assembles Vax @code{f} format 32-bit floating point constants. 175 176 @cindex @code{gfloat} directive, VAX 177 @item .gfloat 178 This expects zero or more flonums, separated by commas, and 179 assembles Vax @code{g} format 64-bit floating point constants. 180 181 @cindex @code{hfloat} directive, VAX 182 @item .hfloat 183 This expects zero or more flonums, separated by commas, and 184 assembles Vax @code{h} format 128-bit floating point constants. 185 186 @end table 187 188 @node VAX-opcodes 189 @section VAX Opcodes 190 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. 199 200 @node VAX-branch 201 @section VAX Branch Improvement 202 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. 213 214 @table @code 215 @item jbsb 216 @samp{Jsb} is already an instruction mnemonic, so we chose @samp{jbsb}. 217 @table @asis 218 @item (byte displacement) 219 @kbd{bsbb @dots{}} 220 @item (word displacement) 221 @kbd{bsbw @dots{}} 222 @item (long displacement) 223 @kbd{jsb @dots{}} 224 @end table 225 @item jbr 226 @itemx jr 227 Unconditional branch. 228 @table @asis 229 @item (byte displacement) 230 @kbd{brb @dots{}} 231 @item (word displacement) 232 @kbd{brw @dots{}} 233 @item (long displacement) 234 @kbd{jmp @dots{}} 235 @end table 236 @item j@var{COND} 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}. 245 @table @asis 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:} 252 @end table 253 @item jacb@var{X} 254 @var{X} may be one of @code{b d f g h l w}. 255 @table @asis 256 @item (word displacement) 257 @kbd{@var{OPCODE} @dots{}} 258 @item (long displacement) 259 @example 260 @var{OPCODE} @dots{}, foo ; 261 brb bar ; 262 foo: jmp @dots{} ; 263 bar: 264 @end example 265 @end table 266 @item jaob@var{YYY} 267 @var{YYY} may be one of @code{lss leq}. 268 @item jsob@var{ZZZ} 269 @var{ZZZ} may be one of @code{geq gtr}. 270 @table @asis 271 @item (byte displacement) 272 @kbd{@var{OPCODE} @dots{}} 273 @item (word displacement) 274 @example 275 @var{OPCODE} @dots{}, foo ; 276 brb bar ; 277 foo: brw @var{destination} ; 278 bar: 279 @end example 280 @item (long displacement) 281 @example 282 @var{OPCODE} @dots{}, foo ; 283 brb bar ; 284 foo: jmp @var{destination} ; 285 bar: 286 @end example 287 @end table 288 @item aobleq 289 @itemx aoblss 290 @itemx sobgeq 291 @itemx sobgtr 292 @table @asis 293 @item (byte displacement) 294 @kbd{@var{OPCODE} @dots{}} 295 @item (word displacement) 296 @example 297 @var{OPCODE} @dots{}, foo ; 298 brb bar ; 299 foo: brw @var{destination} ; 300 bar: 301 @end example 302 @item (long displacement) 303 @example 304 @var{OPCODE} @dots{}, foo ; 305 brb bar ; 306 foo: jmp @var{destination} ; 307 bar: 308 @end example 309 @end table 310 @end table 311 312 @node VAX-operands 313 @section VAX Operands 314 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. 321 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. 326 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. 333 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. 338 339 For instance 340 @smallexample 341 tstb *w`$4(r5) 342 @end smallexample 343 344 Any expression is permitted in an operand. Operands are comma 345 separated. 346 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. 351 352 @node VAX-no 353 @section Not Supported on VAX 354 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. 359 360 @node VAX-Syntax 361 @section VAX Syntax 362 @menu 363 * VAX-Chars:: Special Characters 364 @end menu 365 366 @node VAX-Chars 367 @subsection Special Characters 368 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. 373 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}). 378 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 383 line. 384