@c Copyright (C) 2005-2021 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 M32C-Dependent @chapter M32C Dependent Features @end ifset @ifclear GENERIC @node Machine Dependencies @chapter M32C Dependent Features @end ifclear @cindex M32C support @code{@value{AS}} can assemble code for several different members of the Renesas M32C family. Normally the default is to assemble code for the M16C microprocessor. The @code{-m32c} option may be used to change the default to the M32C microprocessor. @menu * M32C-Opts:: M32C Options * M32C-Syntax:: M32C Syntax @end menu @node M32C-Opts @section M32C Options @cindex options, M32C @cindex M32C options The Renesas M32C version of @code{@value{AS}} has these machine-dependent options: @table @code @item -m32c @cindex @samp{-m32c} option, M32C @cindex architecture options, M32C @cindex M32C architecture option Assemble M32C instructions. @item -m16c @cindex @samp{-m16c} option, M16C @cindex architecture options, M16C @cindex M16C architecture option Assemble M16C instructions (default). @item -relax Enable support for link-time relaxations. @item -h-tick-hex Support H'00 style hex constants in addition to 0x00 style. @end table @node M32C-Syntax @section M32C Syntax @menu * M32C-Modifiers:: Symbolic Operand Modifiers * M32C-Chars:: Special Characters @end menu @node M32C-Modifiers @subsection Symbolic Operand Modifiers @cindex M32C modifiers @cindex modifiers, M32C The assembler supports several modifiers when using symbol addresses in M32C instruction operands. The general syntax is the following: @smallexample %modifier(symbol) @end smallexample @table @code @cindex symbol modifiers @item %dsp8 @itemx %dsp16 These modifiers override the assembler's assumptions about how big a symbol's address is. Normally, when it sees an operand like @samp{sym[a0]} it assumes @samp{sym} may require the widest displacement field (16 bits for @samp{-m16c}, 24 bits for @samp{-m32c}). These modifiers tell it to assume the address will fit in an 8 or 16 bit (respectively) unsigned displacement. Note that, of course, if it doesn't actually fit you will get linker errors. Example: @smallexample mov.w %dsp8(sym)[a0],r1 mov.b #0,%dsp8(sym)[a0] @end smallexample @item %hi8 This modifier allows you to load bits 16 through 23 of a 24 bit address into an 8 bit register. This is useful with, for example, the M16C @samp{smovf} instruction, which expects a 20 bit address in @samp{r1h} and @samp{a0}. Example: @smallexample mov.b #%hi8(sym),r1h mov.w #%lo16(sym),a0 smovf.b @end smallexample @item %lo16 Likewise, this modifier allows you to load bits 0 through 15 of a 24 bit address into a 16 bit register. @item %hi16 This modifier allows you to load bits 16 through 31 of a 32 bit address into a 16 bit register. While the M32C family only has 24 bits of address space, it does support addresses in pairs of 16 bit registers (like @samp{a1a0} for the @samp{lde} instruction). This modifier is for loading the upper half in such cases. Example: @smallexample mov.w #%hi16(sym),a1 mov.w #%lo16(sym),a0 @dots{} lde.w [a1a0],r1 @end smallexample @end table @node M32C-Chars @subsection Special Characters @cindex line comment character, M32C @cindex M32C line comment character The presence of a @samp{;} character 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, 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, M32C @cindex statement separator, M32C @cindex M32C line separator The @samp{|} character can be used to separate statements on the same line.