xref: /netbsd-src/external/gpl3/binutils.old/dist/gas/doc/c-m32c.texi (revision e992f068c547fd6e84b3f104dc2340adcc955732)
1*e992f068Schristos@c Copyright (C) 2005-2022 Free Software Foundation, Inc.
216dce513Schristos@c This is part of the GAS manual.
316dce513Schristos@c For copying conditions, see the file as.texinfo.
416dce513Schristos@ifset GENERIC
516dce513Schristos@page
616dce513Schristos@node M32C-Dependent
716dce513Schristos@chapter M32C Dependent Features
816dce513Schristos@end ifset
916dce513Schristos@ifclear GENERIC
1016dce513Schristos@node Machine Dependencies
1116dce513Schristos@chapter M32C Dependent Features
1216dce513Schristos@end ifclear
1316dce513Schristos
1416dce513Schristos@cindex M32C support
1516dce513Schristos
1616dce513Schristos@code{@value{AS}} can assemble code for several different members of
1716dce513Schristosthe Renesas M32C family.  Normally the default is to assemble code for
1816dce513Schristosthe M16C microprocessor.  The @code{-m32c} option may be used to
1916dce513Schristoschange the default to the M32C microprocessor.
2016dce513Schristos
2116dce513Schristos@menu
2216dce513Schristos* M32C-Opts::                   M32C Options
2316dce513Schristos* M32C-Syntax::                 M32C Syntax
2416dce513Schristos@end menu
2516dce513Schristos
2616dce513Schristos@node M32C-Opts
2716dce513Schristos@section M32C Options
2816dce513Schristos
2916dce513Schristos@cindex options, M32C
3016dce513Schristos@cindex M32C options
3116dce513Schristos
3216dce513SchristosThe Renesas M32C version of @code{@value{AS}} has these
3316dce513Schristosmachine-dependent options:
3416dce513Schristos
3516dce513Schristos@table @code
3616dce513Schristos@item -m32c
3716dce513Schristos@cindex @samp{-m32c} option, M32C
3816dce513Schristos@cindex architecture options, M32C
3916dce513Schristos@cindex M32C architecture option
4016dce513SchristosAssemble M32C instructions.
4116dce513Schristos
4216dce513Schristos@item -m16c
4316dce513Schristos@cindex @samp{-m16c} option, M16C
4416dce513Schristos@cindex architecture options, M16C
4516dce513Schristos@cindex M16C architecture option
4616dce513SchristosAssemble M16C instructions (default).
4716dce513Schristos
4816dce513Schristos@item -relax
4916dce513SchristosEnable support for link-time relaxations.
5016dce513Schristos
5116dce513Schristos@item -h-tick-hex
5216dce513SchristosSupport H'00 style hex constants in addition to 0x00 style.
5316dce513Schristos
5416dce513Schristos
5516dce513Schristos@end table
5616dce513Schristos
5716dce513Schristos@node M32C-Syntax
5816dce513Schristos@section M32C Syntax
5916dce513Schristos@menu
6016dce513Schristos* M32C-Modifiers::              Symbolic Operand Modifiers
6116dce513Schristos* M32C-Chars::                  Special Characters
6216dce513Schristos@end menu
6316dce513Schristos
6416dce513Schristos@node M32C-Modifiers
6516dce513Schristos@subsection Symbolic Operand Modifiers
6616dce513Schristos
6716dce513Schristos@cindex M32C modifiers
6816dce513Schristos@cindex modifiers, M32C
6916dce513Schristos
7016dce513SchristosThe assembler supports several modifiers when using symbol addresses
7116dce513Schristosin M32C instruction operands.  The general syntax is the following:
7216dce513Schristos
7316dce513Schristos@smallexample
7416dce513Schristos%modifier(symbol)
7516dce513Schristos@end smallexample
7616dce513Schristos
7716dce513Schristos@table @code
7816dce513Schristos@cindex symbol modifiers
7916dce513Schristos
8016dce513Schristos@item %dsp8
8116dce513Schristos@itemx %dsp16
8216dce513Schristos
8316dce513SchristosThese modifiers override the assembler's assumptions about how big a
8416dce513Schristossymbol's address is.  Normally, when it sees an operand like
8516dce513Schristos@samp{sym[a0]} it assumes @samp{sym} may require the widest
8616dce513Schristosdisplacement field (16 bits for @samp{-m16c}, 24 bits for
8716dce513Schristos@samp{-m32c}).  These modifiers tell it to assume the address will fit
8816dce513Schristosin an 8 or 16 bit (respectively) unsigned displacement.  Note that, of
8916dce513Schristoscourse, if it doesn't actually fit you will get linker errors.  Example:
9016dce513Schristos
9116dce513Schristos@smallexample
9216dce513Schristosmov.w %dsp8(sym)[a0],r1
9316dce513Schristosmov.b #0,%dsp8(sym)[a0]
9416dce513Schristos@end smallexample
9516dce513Schristos
9616dce513Schristos@item %hi8
9716dce513Schristos
9816dce513SchristosThis modifier allows you to load bits 16 through 23 of a 24 bit
9916dce513Schristosaddress into an 8 bit register.  This is useful with, for example, the
10016dce513SchristosM16C @samp{smovf} instruction, which expects a 20 bit address in
10116dce513Schristos@samp{r1h} and @samp{a0}.  Example:
10216dce513Schristos
10316dce513Schristos@smallexample
10416dce513Schristosmov.b #%hi8(sym),r1h
10516dce513Schristosmov.w #%lo16(sym),a0
10616dce513Schristossmovf.b
10716dce513Schristos@end smallexample
10816dce513Schristos
10916dce513Schristos@item %lo16
11016dce513Schristos
11116dce513SchristosLikewise, this modifier allows you to load bits 0 through 15 of a 24
11216dce513Schristosbit address into a 16 bit register.
11316dce513Schristos
11416dce513Schristos@item %hi16
11516dce513Schristos
11616dce513SchristosThis modifier allows you to load bits 16 through 31 of a 32 bit
11716dce513Schristosaddress into a 16 bit register.  While the M32C family only has 24
11816dce513Schristosbits of address space, it does support addresses in pairs of 16 bit
11916dce513Schristosregisters (like @samp{a1a0} for the @samp{lde} instruction).  This
12016dce513Schristosmodifier is for loading the upper half in such cases.  Example:
12116dce513Schristos
12216dce513Schristos@smallexample
12316dce513Schristosmov.w #%hi16(sym),a1
12416dce513Schristosmov.w #%lo16(sym),a0
12516dce513Schristos@dots{}
12616dce513Schristoslde.w [a1a0],r1
12716dce513Schristos@end smallexample
12816dce513Schristos
12916dce513Schristos@end table
13016dce513Schristos
13116dce513Schristos@node M32C-Chars
13216dce513Schristos@subsection Special Characters
13316dce513Schristos
13416dce513Schristos@cindex line comment character, M32C
13516dce513Schristos@cindex M32C line comment character
13616dce513SchristosThe presence of a @samp{;} character on a line indicates the start of
13716dce513Schristosa comment that extends to the end of that line.
13816dce513Schristos
13916dce513SchristosIf a @samp{#} appears as the first character of a line, the whole line
14016dce513Schristosis treated as a comment, but in this case the line can also be a
14116dce513Schristoslogical line number directive (@pxref{Comments}) or a
14216dce513Schristospreprocessor control command (@pxref{Preprocessing}).
14316dce513Schristos
14416dce513Schristos@cindex line separator, M32C
14516dce513Schristos@cindex statement separator, M32C
14616dce513Schristos@cindex M32C line separator
14716dce513SchristosThe @samp{|} character can be used to separate statements on the same
14816dce513Schristosline.
149