1 @c Copyright (C) 2002-2014 Free Software Foundation, Inc. 2 @c Contributed by David Mosberger-Tang <davidm (a] hpl.hp.com> 3 @c This is part of the GAS manual. 4 @c For copying conditions, see the file as.texinfo. 5 6 @ifset GENERIC 7 @page 8 @node IA-64-Dependent 9 @chapter IA-64 Dependent Features 10 @end ifset 11 12 @ifclear GENERIC 13 @node Machine Dependencies 14 @chapter IA-64 Dependent Features 15 @end ifclear 16 17 @cindex IA-64 support 18 @menu 19 * IA-64 Options:: Options 20 * IA-64 Syntax:: Syntax 21 @c * IA-64 Floating Point:: Floating Point // to be written 22 @c * IA-64 Directives:: IA-64 Machine Directives // to be written 23 * IA-64 Opcodes:: Opcodes 24 @end menu 25 26 @node IA-64 Options 27 @section Options 28 @cindex IA-64 options 29 @cindex options for IA-64 30 31 @table @option 32 @cindex @code{-mconstant-gp} command line option, IA-64 33 34 @item -mconstant-gp 35 This option instructs the assembler to mark the resulting object file 36 as using the ``constant GP'' model. With this model, it is assumed 37 that the entire program uses a single global pointer (GP) value. Note 38 that this option does not in any fashion affect the machine code 39 emitted by the assembler. All it does is turn on the EF_IA_64_CONS_GP 40 flag in the ELF file header. 41 42 @item -mauto-pic 43 This option instructs the assembler to mark the resulting object file 44 as using the ``constant GP without function descriptor'' data model. 45 This model is like the ``constant GP'' model, except that it 46 additionally does away with function descriptors. What this means is 47 that the address of a function refers directly to the function's code 48 entry-point. Normally, such an address would refer to a function 49 descriptor, which contains both the code entry-point and the GP-value 50 needed by the function. Note that this option does not in any fashion 51 affect the machine code emitted by the assembler. All it does is 52 turn on the EF_IA_64_NOFUNCDESC_CONS_GP flag in the ELF file header. 53 54 @item -milp32 55 @itemx -milp64 56 @itemx -mlp64 57 @itemx -mp64 58 These options select the data model. The assembler defaults to @code{-mlp64} 59 (LP64 data model). 60 61 @item -mle 62 @itemx -mbe 63 These options select the byte order. The @code{-mle} option selects little-endian 64 byte order (default) and @code{-mbe} selects big-endian byte order. Note that 65 IA-64 machine code always uses little-endian byte order. 66 67 @item -mtune=itanium1 68 @itemx -mtune=itanium2 69 Tune for a particular IA-64 CPU, @var{itanium1} or @var{itanium2}. The 70 default is @var{itanium2}. 71 72 @item -munwind-check=warning 73 @itemx -munwind-check=error 74 These options control what the assembler will do when performing 75 consistency checks on unwind directives. @code{-munwind-check=warning} 76 will make the assembler issue a warning when an unwind directive check 77 fails. This is the default. @code{-munwind-check=error} will make the 78 assembler issue an error when an unwind directive check fails. 79 80 @item -mhint.b=ok 81 @itemx -mhint.b=warning 82 @itemx -mhint.b=error 83 These options control what the assembler will do when the @samp{hint.b} 84 instruction is used. @code{-mhint.b=ok} will make the assembler accept 85 @samp{hint.b}. @code{-mint.b=warning} will make the assembler issue a 86 warning when @samp{hint.b} is used. @code{-mhint.b=error} will make 87 the assembler treat @samp{hint.b} as an error, which is the default. 88 89 @item -x 90 @itemx -xexplicit 91 These options turn on dependency violation checking. 92 93 @item -xauto 94 This option instructs the assembler to automatically insert stop bits where necessary 95 to remove dependency violations. This is the default mode. 96 97 @item -xnone 98 This option turns off dependency violation checking. 99 100 @item -xdebug 101 This turns on debug output intended to help tracking down bugs in the dependency 102 violation checker. 103 104 @item -xdebugn 105 This is a shortcut for -xnone -xdebug. 106 107 @item -xdebugx 108 This is a shortcut for -xexplicit -xdebug. 109 110 @end table 111 112 @cindex IA-64 Syntax 113 @node IA-64 Syntax 114 @section Syntax 115 The assembler syntax closely follows the IA-64 Assembly Language 116 Reference Guide. 117 118 @menu 119 * IA-64-Chars:: Special Characters 120 * IA-64-Regs:: Register Names 121 * IA-64-Bits:: Bit Names 122 * IA-64-Relocs:: Relocations 123 @end menu 124 125 @node IA-64-Chars 126 @subsection Special Characters 127 128 @cindex line comment character, IA-64 129 @cindex IA-64 line comment character 130 @samp{//} is the line comment token. 131 132 @cindex line separator, IA-64 133 @cindex statement separator, IA-64 134 @cindex IA-64 line separator 135 @samp{;} can be used instead of a newline to separate statements. 136 137 @node IA-64-Regs 138 @subsection Register Names 139 @cindex IA-64 registers 140 @cindex register names, IA-64 141 142 The 128 integer registers are referred to as @samp{r@var{n}}. 143 The 128 floating-point registers are referred to as @samp{f@var{n}}. 144 The 128 application registers are referred to as @samp{ar@var{n}}. 145 The 128 control registers are referred to as @samp{cr@var{n}}. 146 The 64 one-bit predicate registers are referred to as @samp{p@var{n}}. 147 The 8 branch registers are referred to as @samp{b@var{n}}. 148 In addition, the assembler defines a number of aliases: 149 @samp{gp} (@samp{r1}), @samp{sp} (@samp{r12}), @samp{rp} (@samp{b0}), 150 @samp{ret0} (@samp{r8}), @samp{ret1} (@samp{r9}), @samp{ret2} (@samp{r10}), 151 @samp{ret3} (@samp{r9}), @samp{farg@var{n}} (@samp{f8+@var{n}}), and 152 @samp{fret@var{n}} (@samp{f8+@var{n}}). 153 154 For convenience, the assembler also defines aliases for all named application 155 and control registers. For example, @samp{ar.bsp} refers to the register 156 backing store pointer (@samp{ar17}). Similarly, @samp{cr.eoi} refers to 157 the end-of-interrupt register (@samp{cr67}). 158 159 @node IA-64-Bits 160 @subsection IA-64 Processor-Status-Register (PSR) Bit Names 161 @cindex IA-64 Processor-status-Register bit names 162 @cindex PSR bits 163 @cindex bit names, IA-64 164 165 The assembler defines bit masks for each of the bits in the IA-64 166 processor status register. For example, @samp{psr.ic} corresponds to 167 a value of 0x2000. These masks are primarily intended for use with 168 the @samp{ssm}/@samp{sum} and @samp{rsm}/@samp{rum} 169 instructions, but they can be used anywhere else where an integer 170 constant is expected. 171 172 @node IA-64-Relocs 173 @subsection Relocations 174 @cindex IA-64 relocations 175 176 In addition to the standard IA-64 relocations, the following relocations are 177 implemented by @code{@value{AS}}: 178 179 @table @code 180 @item @@slotcount(@var{V}) 181 Convert the address offset @var{V} into a slot count. This pseudo 182 function is available only on VMS. The expression @var{V} must be 183 known at assembly time: it can't reference undefined symbols or symbols in 184 different sections. 185 @end table 186 187 @node IA-64 Opcodes 188 @section Opcodes 189 For detailed information on the IA-64 machine instruction set, see the 190 @c Attempt to work around a very overfull hbox. 191 @iftex 192 IA-64 Assembly Language Reference Guide available at 193 @smallfonts 194 @example 195 http://developer.intel.com/design/itanium/arch_spec.htm 196 @end example 197 @textfonts 198 @end iftex 199 @ifnottex 200 @uref{http://developer.intel.com/design/itanium/arch_spec.htm,IA-64 Architecture Handbook}. 201 @end ifnottex 202