@c Copyright 2009, 2011
@c Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@ifset GENERIC
@page
@node MicroBlaze-Dependent
@chapter MicroBlaze Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter MicroBlaze Dependent Features
@end ifclear

@cindex MicroBlaze architectures
The Xilinx MicroBlaze processor family includes several variants, all using 
the same core instruction set.  This chapter covers features of the @sc{gnu} 
assembler that are specific to the MicroBlaze architecture.  For details about 
the MicroBlaze instruction set, please see the @cite{MicroBlaze Processor
Reference Guide (UG081)} available at www.xilinx.com.

@cindex MicroBlaze support
@menu
* MicroBlaze Directives::           Directives for MicroBlaze Processors.
* MicroBlaze Syntax::               Syntax for the MicroBlaze
@end menu

@node MicroBlaze Directives
@section Directives
@cindex MicroBlaze directives 
A number of assembler directives are available for MicroBlaze. 

@table @code
@item .data8 @var{expression},...
This directive is an alias for @code{.byte}. Each expression is assembled 
into an eight-bit value.

@item .data16 @var{expression},...
This directive is an alias for @code{.hword}. Each expression is assembled 
into an 16-bit value.

@item .data32 @var{expression},...
This directive is an alias for @code{.word}. Each expression is assembled 
into an 32-bit value.

@item .ent @var{name}[,@var{label}]
This directive is an alias for @code{.func} denoting the start of function 
@var{name} at (optional) @var{label}.  

@item .end @var{name}[,@var{label}]
This directive is an alias for @code{.endfunc} denoting the end of function 
@var{name}.

@item .gpword @var{label},...
This directive is an alias for @code{.rva}.  The resolved address of @var{label}
is stored in the data section.

@item .weakext @var{label}
Declare that @var{label} is a weak external symbol.

@item .rodata
Switch to .rodata section. Equivalent to @code{.section .rodata}

@item .sdata2
Switch to .sdata2 section. Equivalent to @code{.section .sdata2}

@item .sdata
Switch to .sdata section. Equivalent to @code{.section .sdata}

@item .bss
Switch to .bss section. Equivalent to @code{.section .bss}

@item .sbss
Switch to .sbss section. Equivalent to @code{.section .sbss}
@end table

@node MicroBlaze Syntax
@section Syntax for the MicroBlaze
@menu
* MicroBlaze-Chars::                Special Characters
@end menu

@node MicroBlaze-Chars
@subsection Special Characters

@cindex line comment character, MicroBlaze
@cindex MicroBlaze line comment character
The presence of a @samp{#} on a line indicates the start of a comment
that extends to the end of the current line.

If a @samp{#} appears as the first character of a line, the whole line
is treated as a comment, but in this case the line can also be a
logical line number directive (@pxref{Comments}) or a
preprocessor control command (@pxref{Preprocessing}).

@cindex line separator, MicroBlaze
@cindex statement separator, MicroBlaze
@cindex MicroBlaze line separator
The @samp{;} character can be used to separate statements on the same
line.
