@c Copyright 2011-2013 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 RL78-Dependent
@chapter RL78 Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter RL78 Dependent Features
@end ifclear

@cindex RL78 support
@menu
* RL78-Opts::                   RL78 Assembler Command Line Options
* RL78-Modifiers::              Symbolic Operand Modifiers
* RL78-Directives::             Assembler Directives
* RL78-Syntax::                 Syntax
@end menu

@node RL78-Opts
@section RL78 Options
@cindex options, RL78
@cindex RL78 options

@table @code
@item relax
Enable support for link-time relaxation.

@item mg10
Mark the generated binary as targeting the G10 variant of the RL78
architecture.

@end table

@node RL78-Modifiers
@section Symbolic Operand Modifiers

@cindex RL78 modifiers
@cindex syntax, RL78

The RL78 has three modifiers that adjust the relocations used by the
linker:

@table @code

@item %lo16()

When loading a 20-bit (or wider) address into registers, this modifier
selects the 16 least significant bits.

@smallexample
  movw ax,#%lo16(_sym)
@end smallexample

@item %hi16()

When loading a 20-bit (or wider) address into registers, this modifier
selects the 16 most significant bits.

@smallexample
  movw ax,#%hi16(_sym)
@end smallexample

@item %hi8()

When loading a 20-bit (or wider) address into registers, this modifier
selects the 8 bits that would go into CS or ES (i.e. bits 23..16).

@smallexample
  mov es, #%hi8(_sym)
@end smallexample

@end table

@node RL78-Directives
@section Assembler Directives

@cindex assembler directives, RL78
@cindex RL78 assembler directives

In addition to the common directives, the RL78 adds these:

@table @code

@item .double
Output a constant in ``double'' format, which is a 32-bit floating
point value on RL78.

@item .bss
Select the BSS section.

@item .3byte
Output a constant value in a three byte format.

@item .int
@itemx .word
Output a constant value in a four byte format.

@end table

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

@node RL78-Chars
@subsection Special Characters

@cindex line comment character, RL78
@cindex RL78 line comment character
The presence of a @samp{;} appearing anywhere on a line indicates the
start of a comment that extends to the end of that line.

If a @samp{#} appears as the first character of a line then 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, RL78
@cindex statement separator, RL78
@cindex RL78 line separator
The @samp{|} character can be used to separate statements on the same
line.
