|  | @c Copyright (C) 2012-2016 Free Software Foundation, Inc. | 
|  | @c This is part of the GAS manual. | 
|  | @c For copying conditions, see the file as.texinfo. | 
|  | @c man end | 
|  | @ifset GENERIC | 
|  | @page | 
|  | @node NiosII-Dependent | 
|  | @chapter Nios II Dependent Features | 
|  | @end ifset | 
|  | @ifclear GENERIC | 
|  | @node Machine Dependencies | 
|  | @chapter Nios II Dependent Features | 
|  | @end ifclear | 
|  |  | 
|  | @cindex Altera Nios II support | 
|  | @cindex Nios support | 
|  | @cindex Nios II support | 
|  | @menu | 
|  | * Nios II Options::              Options | 
|  | * Nios II Syntax::               Syntax | 
|  | * Nios II Relocations::          Relocations | 
|  | * Nios II Directives::           Nios II Machine Directives | 
|  | * Nios II Opcodes::              Opcodes | 
|  | @end menu | 
|  |  | 
|  | @node Nios II Options | 
|  | @section Options | 
|  | @cindex Nios II options | 
|  | @cindex options for Nios II | 
|  |  | 
|  | @c man begin OPTIONS | 
|  | @table @gcctabopt | 
|  |  | 
|  | @cindex @code{relax-section} command line option, Nios II | 
|  | @item -relax-section | 
|  | Replace identified out-of-range branches with PC-relative @code{jmp} | 
|  | sequences when possible.  The generated code sequences are suitable | 
|  | for use in position-independent code, but there is a practical limit | 
|  | on the extended branch range because of the length of the sequences. | 
|  | This option is the default. | 
|  |  | 
|  | @cindex @code{relax-all} command line option, Nios II | 
|  | @item -relax-all | 
|  | Replace branch instructions not determinable to be in range | 
|  | and all call instructions with @code{jmp} and @code{callr} sequences | 
|  | (respectively).  This option generates absolute relocations against the | 
|  | target symbols and is not appropriate for position-independent code. | 
|  |  | 
|  | @cindex @code{no-relax} command line option, Nios II | 
|  | @item -no-relax | 
|  | Do not replace any branches or calls. | 
|  |  | 
|  | @cindex @code{EB} command line option, Nios II | 
|  | @item -EB | 
|  | Generate big-endian output. | 
|  |  | 
|  | @cindex @code{EL} command line option, Nios II | 
|  | @item -EL | 
|  | Generate little-endian output.  This is the default. | 
|  |  | 
|  | @cindex @code{march} command line option, Nios II | 
|  | @item -march=@var{architecture} | 
|  | This option specifies the target architecture.  The assembler issues | 
|  | an error message if an attempt is made to assemble an instruction which | 
|  | will not execute on the target architecture.  The following architecture | 
|  | names are recognized: | 
|  | @code{r1}, | 
|  | @code{r2}. | 
|  | The default is @code{r1}. | 
|  |  | 
|  | @end table | 
|  | @c man end | 
|  |  | 
|  | @node Nios II Syntax | 
|  | @section Syntax | 
|  | @menu | 
|  | * Nios II Chars::                Special Characters | 
|  | @end menu | 
|  |  | 
|  |  | 
|  | @node Nios II Chars | 
|  | @subsection Special Characters | 
|  |  | 
|  | @cindex line comment character, Nios II | 
|  | @cindex Nios II line comment character | 
|  | @cindex line separator character, Nios II | 
|  | @cindex Nios II line separator character | 
|  | @samp{#} is the line comment character. | 
|  | @samp{;} is the line separator character. | 
|  |  | 
|  |  | 
|  | @node Nios II Relocations | 
|  | @section Nios II Machine Relocations | 
|  |  | 
|  | @cindex machine relocations, Nios II | 
|  | @cindex Nios II machine relocations | 
|  |  | 
|  | @table @code | 
|  | @cindex @code{hiadj} directive, Nios II | 
|  | @item %hiadj(@var{expression}) | 
|  | Extract the upper 16 bits of @var{expression} and add | 
|  | one if the 15th bit is set. | 
|  |  | 
|  | The value of @code{%hiadj(@var{expression})} is: | 
|  | @smallexample | 
|  | ((@var{expression} >> 16) & 0xffff) + ((@var{expression} >> 15) & 0x01) | 
|  | @end smallexample | 
|  |  | 
|  | The @code{%hiadj} relocation is intended to be used with | 
|  | the @code{addi}, @code{ld} or @code{st} instructions | 
|  | along with a @code{%lo}, in order to load a 32-bit constant. | 
|  |  | 
|  | @smallexample | 
|  | movhi r2, %hiadj(symbol) | 
|  | addi r2, r2, %lo(symbol) | 
|  | @end smallexample | 
|  |  | 
|  | @cindex @code{hi} directive, Nios II | 
|  | @item %hi(@var{expression}) | 
|  | Extract the upper 16 bits of @var{expression}. | 
|  |  | 
|  | @cindex @code{lo} directive, Nios II | 
|  | @item %lo(@var{expression}) | 
|  | Extract the lower 16 bits of @var{expression}. | 
|  |  | 
|  | @cindex @code{gprel} directive, Nios II | 
|  | @item %gprel(@var{expression}) | 
|  | Subtract the value of the symbol @code{_gp} from | 
|  | @var{expression}. | 
|  |  | 
|  | The intention of the @code{%gprel} relocation is | 
|  | to have a fast small area of memory which only | 
|  | takes a 16-bit immediate to access. | 
|  |  | 
|  | @smallexample | 
|  | .section .sdata | 
|  | fastint: | 
|  | .int 123 | 
|  | .section .text | 
|  | ldw r4, %gprel(fastint)(gp) | 
|  | @end smallexample | 
|  |  | 
|  | @cindex @code{call} directive, Nios II | 
|  | @cindex @code{call_lo} directive, Nios II | 
|  | @cindex @code{call_hiadj} directive, Nios II | 
|  | @cindex @code{got} directive, Nios II | 
|  | @cindex @code{got_lo} directive, Nios II | 
|  | @cindex @code{got_hiadj} directive, Nios II | 
|  | @cindex @code{gotoff} directive, Nios II | 
|  | @cindex @code{gotoff_lo} directive, Nios II | 
|  | @cindex @code{gotoff_hiadj} directive, Nios II | 
|  | @cindex @code{tls_gd} directive, Nios II | 
|  | @cindex @code{tls_ie} directive, Nios II | 
|  | @cindex @code{tls_le} directive, Nios II | 
|  | @cindex @code{tls_ldm} directive, Nios II | 
|  | @cindex @code{tls_ldo} directive, Nios II | 
|  | @item %call(@var{expression}) | 
|  | @item %call_lo(@var{expression}) | 
|  | @item %call_hiadj(@var{expression}) | 
|  | @itemx %got(@var{expression}) | 
|  | @itemx %got_lo(@var{expression}) | 
|  | @itemx %got_hiadj(@var{expression}) | 
|  | @itemx %gotoff(@var{expression}) | 
|  | @itemx %gotoff_lo(@var{expression}) | 
|  | @itemx %gotoff_hiadj(@var{expression}) | 
|  | @itemx %tls_gd(@var{expression}) | 
|  | @itemx %tls_ie(@var{expression}) | 
|  | @itemx %tls_le(@var{expression}) | 
|  | @itemx %tls_ldm(@var{expression}) | 
|  | @itemx %tls_ldo(@var{expression}) | 
|  |  | 
|  | These relocations support the ABI for Linux Systems documented in the | 
|  | @cite{Nios II Processor Reference Handbook}. | 
|  | @end table | 
|  |  | 
|  |  | 
|  | @node Nios II Directives | 
|  | @section Nios II Machine Directives | 
|  |  | 
|  | @cindex machine directives, Nios II | 
|  | @cindex Nios II machine directives | 
|  |  | 
|  | @table @code | 
|  |  | 
|  | @cindex @code{align} directive, Nios II | 
|  | @item .align @var{expression} [, @var{expression}] | 
|  | This is the generic @code{.align} directive, however | 
|  | this aligns to a power of two. | 
|  |  | 
|  | @cindex @code{half} directive, Nios II | 
|  | @item .half @var{expression} | 
|  | Create an aligned constant 2 bytes in size. | 
|  |  | 
|  | @cindex @code{word} directive, Nios II | 
|  | @item .word @var{expression} | 
|  | Create an aligned constant 4 bytes in size. | 
|  |  | 
|  | @cindex @code{dword} directive, Nios II | 
|  | @item .dword @var{expression} | 
|  | Create an aligned constant 8 bytes in size. | 
|  |  | 
|  | @cindex @code{2byte} directive, Nios II | 
|  | @item .2byte @var{expression} | 
|  | Create an unaligned constant 2 bytes in size. | 
|  |  | 
|  | @cindex @code{4byte} directive, Nios II | 
|  | @item .4byte @var{expression} | 
|  | Create an unaligned constant 4 bytes in size. | 
|  |  | 
|  | @cindex @code{8byte} directive, Nios II | 
|  | @item .8byte @var{expression} | 
|  | Create an unaligned constant 8 bytes in size. | 
|  |  | 
|  | @cindex @code{16byte} directive, Nios II | 
|  | @item .16byte @var{expression} | 
|  | Create an unaligned constant 16 bytes in size. | 
|  |  | 
|  | @cindex @code{set noat} directive, Nios II | 
|  | @item .set noat | 
|  | Allows assembly code to use @code{at} register without | 
|  | warning.  Macro or relaxation expansions | 
|  | generate warnings. | 
|  |  | 
|  | @cindex @code{set at} directive, Nios II | 
|  | @item .set at | 
|  | Assembly code using @code{at} register generates | 
|  | warnings, and macro expansion and relaxation are | 
|  | enabled. | 
|  |  | 
|  | @cindex @code{set nobreak} directive, Nios II | 
|  | @item .set nobreak | 
|  | Allows assembly code to use @code{ba} and @code{bt} | 
|  | registers without warning. | 
|  |  | 
|  | @cindex @code{set break} directive, Nios II | 
|  | @item .set break | 
|  | Turns warnings back on for using @code{ba} and @code{bt} | 
|  | registers. | 
|  |  | 
|  | @cindex @code{set norelax} directive, Nios II | 
|  | @item .set norelax | 
|  | Do not replace any branches or calls. | 
|  |  | 
|  | @cindex @code{set relaxsection} directive, Nios II | 
|  | @item .set relaxsection | 
|  | Replace identified out-of-range branches with | 
|  | @code{jmp} sequences (default). | 
|  |  | 
|  | @cindex @code{set relaxall} directive, Nios II | 
|  | @item .set relaxsection | 
|  | Replace all branch and call instructions with | 
|  | @code{jmp} and @code{callr} sequences. | 
|  |  | 
|  | @cindex @code{set} directive, Nios II | 
|  | @item .set @dots{} | 
|  | All other @code{.set} are the normal use. | 
|  |  | 
|  | @end table | 
|  |  | 
|  | @node Nios II Opcodes | 
|  | @section Opcodes | 
|  |  | 
|  | @cindex Nios II opcodes | 
|  | @cindex opcodes for Nios II | 
|  | @code{@value{AS}} implements all the standard Nios II opcodes documented in the | 
|  | @cite{Nios II Processor Reference Handbook}, including the assembler | 
|  | pseudo-instructions. |