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