| @c Copyright (C) 2012-2021 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. |