1 @c Copyright (C) 2012-2016 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 man end 5 @ifset GENERIC 6 @page 7 @node NiosII-Dependent 8 @chapter Nios II Dependent Features 9 @end ifset 10 @ifclear GENERIC 11 @node Machine Dependencies 12 @chapter Nios II Dependent Features 13 @end ifclear 14 15 @cindex Altera Nios II support 16 @cindex Nios support 17 @cindex Nios II support 18 @menu 19 * Nios II Options:: Options 20 * Nios II Syntax:: Syntax 21 * Nios II Relocations:: Relocations 22 * Nios II Directives:: Nios II Machine Directives 23 * Nios II Opcodes:: Opcodes 24 @end menu 25 26 @node Nios II Options 27 @section Options 28 @cindex Nios II options 29 @cindex options for Nios II 30 31 @c man begin OPTIONS 32 @table @gcctabopt 33 34 @cindex @code{relax-section} command line option, Nios II 35 @item -relax-section 36 Replace identified out-of-range branches with PC-relative @code{jmp} 37 sequences when possible. The generated code sequences are suitable 38 for use in position-independent code, but there is a practical limit 39 on the extended branch range because of the length of the sequences. 40 This option is the default. 41 42 @cindex @code{relax-all} command line option, Nios II 43 @item -relax-all 44 Replace branch instructions not determinable to be in range 45 and all call instructions with @code{jmp} and @code{callr} sequences 46 (respectively). This option generates absolute relocations against the 47 target symbols and is not appropriate for position-independent code. 48 49 @cindex @code{no-relax} command line option, Nios II 50 @item -no-relax 51 Do not replace any branches or calls. 52 53 @cindex @code{EB} command line option, Nios II 54 @item -EB 55 Generate big-endian output. 56 57 @cindex @code{EL} command line option, Nios II 58 @item -EL 59 Generate little-endian output. This is the default. 60 61 @cindex @code{march} command line option, Nios II 62 @item -march=@var{architecture} 63 This option specifies the target architecture. The assembler issues 64 an error message if an attempt is made to assemble an instruction which 65 will not execute on the target architecture. The following architecture 66 names are recognized: 67 @code{r1}, 68 @code{r2}. 69 The default is @code{r1}. 70 71 @end table 72 @c man end 73 74 @node Nios II Syntax 75 @section Syntax 76 @menu 77 * Nios II Chars:: Special Characters 78 @end menu 79 80 81 @node Nios II Chars 82 @subsection Special Characters 83 84 @cindex line comment character, Nios II 85 @cindex Nios II line comment character 86 @cindex line separator character, Nios II 87 @cindex Nios II line separator character 88 @samp{#} is the line comment character. 89 @samp{;} is the line separator character. 90 91 92 @node Nios II Relocations 93 @section Nios II Machine Relocations 94 95 @cindex machine relocations, Nios II 96 @cindex Nios II machine relocations 97 98 @table @code 99 @cindex @code{hiadj} directive, Nios II 100 @item %hiadj(@var{expression}) 101 Extract the upper 16 bits of @var{expression} and add 102 one if the 15th bit is set. 103 104 The value of @code{%hiadj(@var{expression})} is: 105 @smallexample 106 ((@var{expression} >> 16) & 0xffff) + ((@var{expression} >> 15) & 0x01) 107 @end smallexample 108 109 The @code{%hiadj} relocation is intended to be used with 110 the @code{addi}, @code{ld} or @code{st} instructions 111 along with a @code{%lo}, in order to load a 32-bit constant. 112 113 @smallexample 114 movhi r2, %hiadj(symbol) 115 addi r2, r2, %lo(symbol) 116 @end smallexample 117 118 @cindex @code{hi} directive, Nios II 119 @item %hi(@var{expression}) 120 Extract the upper 16 bits of @var{expression}. 121 122 @cindex @code{lo} directive, Nios II 123 @item %lo(@var{expression}) 124 Extract the lower 16 bits of @var{expression}. 125 126 @cindex @code{gprel} directive, Nios II 127 @item %gprel(@var{expression}) 128 Subtract the value of the symbol @code{_gp} from 129 @var{expression}. 130 131 The intention of the @code{%gprel} relocation is 132 to have a fast small area of memory which only 133 takes a 16-bit immediate to access. 134 135 @smallexample 136 .section .sdata 137 fastint: 138 .int 123 139 .section .text 140 ldw r4, %gprel(fastint)(gp) 141 @end smallexample 142 143 @cindex @code{call} directive, Nios II 144 @cindex @code{call_lo} directive, Nios II 145 @cindex @code{call_hiadj} directive, Nios II 146 @cindex @code{got} directive, Nios II 147 @cindex @code{got_lo} directive, Nios II 148 @cindex @code{got_hiadj} directive, Nios II 149 @cindex @code{gotoff} directive, Nios II 150 @cindex @code{gotoff_lo} directive, Nios II 151 @cindex @code{gotoff_hiadj} directive, Nios II 152 @cindex @code{tls_gd} directive, Nios II 153 @cindex @code{tls_ie} directive, Nios II 154 @cindex @code{tls_le} directive, Nios II 155 @cindex @code{tls_ldm} directive, Nios II 156 @cindex @code{tls_ldo} directive, Nios II 157 @item %call(@var{expression}) 158 @item %call_lo(@var{expression}) 159 @item %call_hiadj(@var{expression}) 160 @itemx %got(@var{expression}) 161 @itemx %got_lo(@var{expression}) 162 @itemx %got_hiadj(@var{expression}) 163 @itemx %gotoff(@var{expression}) 164 @itemx %gotoff_lo(@var{expression}) 165 @itemx %gotoff_hiadj(@var{expression}) 166 @itemx %tls_gd(@var{expression}) 167 @itemx %tls_ie(@var{expression}) 168 @itemx %tls_le(@var{expression}) 169 @itemx %tls_ldm(@var{expression}) 170 @itemx %tls_ldo(@var{expression}) 171 172 These relocations support the ABI for Linux Systems documented in the 173 @cite{Nios II Processor Reference Handbook}. 174 @end table 175 176 177 @node Nios II Directives 178 @section Nios II Machine Directives 179 180 @cindex machine directives, Nios II 181 @cindex Nios II machine directives 182 183 @table @code 184 185 @cindex @code{align} directive, Nios II 186 @item .align @var{expression} [, @var{expression}] 187 This is the generic @code{.align} directive, however 188 this aligns to a power of two. 189 190 @cindex @code{half} directive, Nios II 191 @item .half @var{expression} 192 Create an aligned constant 2 bytes in size. 193 194 @cindex @code{word} directive, Nios II 195 @item .word @var{expression} 196 Create an aligned constant 4 bytes in size. 197 198 @cindex @code{dword} directive, Nios II 199 @item .dword @var{expression} 200 Create an aligned constant 8 bytes in size. 201 202 @cindex @code{2byte} directive, Nios II 203 @item .2byte @var{expression} 204 Create an unaligned constant 2 bytes in size. 205 206 @cindex @code{4byte} directive, Nios II 207 @item .4byte @var{expression} 208 Create an unaligned constant 4 bytes in size. 209 210 @cindex @code{8byte} directive, Nios II 211 @item .8byte @var{expression} 212 Create an unaligned constant 8 bytes in size. 213 214 @cindex @code{16byte} directive, Nios II 215 @item .16byte @var{expression} 216 Create an unaligned constant 16 bytes in size. 217 218 @cindex @code{set noat} directive, Nios II 219 @item .set noat 220 Allows assembly code to use @code{at} register without 221 warning. Macro or relaxation expansions 222 generate warnings. 223 224 @cindex @code{set at} directive, Nios II 225 @item .set at 226 Assembly code using @code{at} register generates 227 warnings, and macro expansion and relaxation are 228 enabled. 229 230 @cindex @code{set nobreak} directive, Nios II 231 @item .set nobreak 232 Allows assembly code to use @code{ba} and @code{bt} 233 registers without warning. 234 235 @cindex @code{set break} directive, Nios II 236 @item .set break 237 Turns warnings back on for using @code{ba} and @code{bt} 238 registers. 239 240 @cindex @code{set norelax} directive, Nios II 241 @item .set norelax 242 Do not replace any branches or calls. 243 244 @cindex @code{set relaxsection} directive, Nios II 245 @item .set relaxsection 246 Replace identified out-of-range branches with 247 @code{jmp} sequences (default). 248 249 @cindex @code{set relaxall} directive, Nios II 250 @item .set relaxsection 251 Replace all branch and call instructions with 252 @code{jmp} and @code{callr} sequences. 253 254 @cindex @code{set} directive, Nios II 255 @item .set @dots{} 256 All other @code{.set} are the normal use. 257 258 @end table 259 260 @node Nios II Opcodes 261 @section Opcodes 262 263 @cindex Nios II opcodes 264 @cindex opcodes for Nios II 265 @code{@value{AS}} implements all the standard Nios II opcodes documented in the 266 @cite{Nios II Processor Reference Handbook}, including the assembler 267 pseudo-instructions. 268