@c Copyright 2012, 2013 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.

@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{got} 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})
@itemx %got(@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.
