xref: /netbsd-src/external/gpl3/binutils.old/dist/gas/doc/c-arc.texi (revision e992f068c547fd6e84b3f104dc2340adcc955732)
1*e992f068Schristos@c Copyright (C) 2000-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
516dce513Schristos@ifset GENERIC
616dce513Schristos@page
716dce513Schristos@node ARC-Dependent
816dce513Schristos@chapter ARC Dependent Features
916dce513Schristos@end ifset
1016dce513Schristos
1116dce513Schristos@ifclear GENERIC
1216dce513Schristos@node Machine Dependencies
1316dce513Schristos@chapter ARC Dependent Features
1416dce513Schristos@end ifclear
1516dce513Schristos
1616dce513Schristos@set ARC_CORE_DEFAULT 6
1716dce513Schristos
1816dce513Schristos@cindex ARC support
1916dce513Schristos@menu
2016dce513Schristos* ARC Options::              Options
2116dce513Schristos* ARC Syntax::               Syntax
2216dce513Schristos* ARC Directives::           ARC Machine Directives
2316dce513Schristos* ARC Modifiers::            ARC Assembler Modifiers
2416dce513Schristos* ARC Symbols::              ARC Pre-defined Symbols
2516dce513Schristos* ARC Opcodes::              Opcodes
2616dce513Schristos@end menu
2716dce513Schristos
2816dce513Schristos@node ARC Options
2916dce513Schristos@section Options
3016dce513Schristos@cindex ARC options
3116dce513Schristos@cindex options for ARC
3216dce513Schristos
3316dce513SchristosThe following options control the type of CPU for which code is
3416dce513Schristosassembled, and generic constraints on the code generated:
3516dce513Schristos
3616dce513Schristos@table @code
3716dce513Schristos
3816dce513Schristos@item -mcpu=@var{cpu}
39012573ebSchristos@cindex @code{-mcpu=@var{cpu}} command-line option, ARC
4016dce513SchristosSet architecture type and register usage for @var{cpu}.  There are
4116dce513Schristosalso shortcut alias options available for backward compatibility and
4216dce513Schristosconvenience.  Supported values for @var{cpu} are
4316dce513Schristos
4416dce513Schristos@table @code
45012573ebSchristos@cindex @code{mA6} command-line option, ARC
46012573ebSchristos@cindex @code{marc600} command-line option, ARC
4716dce513Schristos@item arc600
4816dce513SchristosAssemble for ARC 600.  Aliases: @code{-mA6}, @code{-mARC600}.
4916dce513Schristos
50ede78133Schristos@item arc600_norm
51ede78133SchristosAssemble for ARC 600 with norm instructions.
52ede78133Schristos
53ede78133Schristos@item arc600_mul64
54ede78133SchristosAssemble for ARC 600 with mul64 instructions.
55ede78133Schristos
56ede78133Schristos@item arc600_mul32x16
57ede78133SchristosAssemble for ARC 600 with mul32x16 instructions.
58ede78133Schristos
5916dce513Schristos@item arc601
60012573ebSchristos@cindex @code{mARC601} command-line option, ARC
6116dce513SchristosAssemble for ARC 601.  Alias: @code{-mARC601}.
6216dce513Schristos
63ede78133Schristos@item arc601_norm
64ede78133SchristosAssemble for ARC 601 with norm instructions.
65ede78133Schristos
66ede78133Schristos@item arc601_mul64
67ede78133SchristosAssemble for ARC 601 with mul64 instructions.
68ede78133Schristos
69ede78133Schristos@item arc601_mul32x16
70ede78133SchristosAssemble for ARC 601 with mul32x16 instructions.
71ede78133Schristos
7216dce513Schristos@item arc700
73012573ebSchristos@cindex @code{mA7} command-line option, ARC
74012573ebSchristos@cindex @code{mARC700} command-line option, ARC
7516dce513SchristosAssemble for ARC 700.  Aliases: @code{-mA7}, @code{-mARC700}.
7616dce513Schristos
7716dce513Schristos@item arcem
78012573ebSchristos@cindex @code{mEM} command-line option, ARC
7916dce513SchristosAssemble for ARC EM.  Aliases: @code{-mEM}
8016dce513Schristos
81ede78133Schristos@item em
82ede78133SchristosAssemble for ARC EM, identical as arcem variant.
83ede78133Schristos
84ede78133Schristos@item em4
85ede78133SchristosAssemble for ARC EM with code-density instructions.
86ede78133Schristos
87ede78133Schristos@item em4_dmips
88ede78133SchristosAssemble for ARC EM with code-density instructions.
89ede78133Schristos
90ede78133Schristos@item em4_fpus
91ede78133SchristosAssemble for ARC EM with code-density instructions.
92ede78133Schristos
93ede78133Schristos@item em4_fpuda
94ede78133SchristosAssemble for ARC EM with code-density, and double-precision assist
95ede78133Schristosinstructions.
96ede78133Schristos
97ede78133Schristos@item quarkse_em
98ede78133SchristosAssemble for QuarkSE-EM cpu.
99ede78133Schristos
10016dce513Schristos@item archs
101012573ebSchristos@cindex @code{mHS} command-line option, ARC
10216dce513SchristosAssemble for ARC HS.  Aliases: @code{-mHS}, @code{-mav2hs}.
10316dce513Schristos
104ede78133Schristos@item hs
105ede78133SchristosAssemble for ARC HS.
106ede78133Schristos
107ede78133Schristos@item hs34
108ede78133SchristosAssemble for ARC HS34.
109ede78133Schristos
110ede78133Schristos@item hs38
111ede78133SchristosAssemble for ARC HS38.
112ede78133Schristos
113ede78133Schristos@item hs38_linux
114ede78133SchristosAssemble for ARC HS38 with floating point support on.
115ede78133Schristos
11616dce513Schristos@item nps400
117012573ebSchristos@cindex @code{mnps400} command-line option, ARC
11816dce513SchristosAssemble for ARC 700 with NPS-400 extended instructions.
11916dce513Schristos
12016dce513Schristos@end table
12116dce513Schristos
12216dce513SchristosNote: the @code{.cpu} directive (@pxref{ARC Directives}) can
12316dce513Schristosto be used to select a core variant from within assembly code.
12416dce513Schristos
125012573ebSchristos@cindex @code{-EB} command-line option, ARC
12616dce513Schristos@item -EB
12716dce513SchristosThis option specifies that the output generated by the assembler should
12816dce513Schristosbe marked as being encoded for a big-endian processor.
12916dce513Schristos
130012573ebSchristos@cindex @code{-EL} command-line option, ARC
13116dce513Schristos@item -EL
13216dce513SchristosThis option specifies that the output generated by the assembler should
13316dce513Schristosbe marked as being encoded for a little-endian processor - this is the
13416dce513Schristosdefault.
13516dce513Schristos
136012573ebSchristos@cindex @code{-mcode-density} command-line option, ARC
13716dce513Schristos@item -mcode-density
13816dce513SchristosThis option turns on Code Density instructions.  Only valid for ARC EM
13916dce513Schristosprocessors.
14016dce513Schristos
141012573ebSchristos@cindex @code{-mrelax} command-line option, ARC
14216dce513Schristos@item -mrelax
14316dce513SchristosEnable support for assembly-time relaxation.  The assembler will
14416dce513Schristosreplace a longer version of an instruction with a shorter one,
14516dce513Schristoswhenever it is possible.
14616dce513Schristos
147012573ebSchristos@cindex @code{-mnps400} command-line option, ARC
14816dce513Schristos@item -mnps400
14916dce513SchristosEnable support for NPS-400 extended instructions.
15016dce513Schristos
151012573ebSchristos@cindex @code{-mspfp} command-line option, ARC
15216dce513Schristos@item -mspfp
15316dce513SchristosEnable support for single-precision floating point instructions.
15416dce513Schristos
155012573ebSchristos@cindex @code{-mdpfp} command-line option, ARC
15616dce513Schristos@item -mdpfp
15716dce513SchristosEnable support for double-precision floating point instructions.
15816dce513Schristos
159012573ebSchristos@cindex @code{-mfpuda} command-line option, ARC
16016dce513Schristos@item -mfpuda
16116dce513SchristosEnable support for double-precision assist floating point instructions.
16216dce513SchristosOnly valid for ARC EM processors.
16316dce513Schristos
16416dce513Schristos@end table
16516dce513Schristos
16616dce513Schristos@node ARC Syntax
16716dce513Schristos@section Syntax
16816dce513Schristos@menu
16916dce513Schristos* ARC-Chars::                Special Characters
17016dce513Schristos* ARC-Regs::                 Register Names
17116dce513Schristos@end menu
17216dce513Schristos
17316dce513Schristos@node ARC-Chars
17416dce513Schristos@subsection Special Characters
17516dce513Schristos
17616dce513Schristos@table @code
17716dce513Schristos@item %
17816dce513Schristos@cindex register name prefix character, ARC
17916dce513Schristos@cindex ARC register name prefix character
18016dce513SchristosA register name can optionally be prefixed by a @samp{%} character.  So
18116dce513Schristosregister @code{%r0} is equivalent to @code{r0} in the assembly code.
18216dce513Schristos
18316dce513Schristos@item #
18416dce513Schristos@cindex line comment character, ARC
18516dce513Schristos@cindex ARC line comment character
18616dce513SchristosThe presence of a @samp{#} character within a line (but not at the
18716dce513Schristosstart of a line) indicates the start of a comment that extends to the
18816dce513Schristosend of the current line.
18916dce513Schristos
19016dce513Schristos@emph{Note:} if a line starts with a @samp{#} character then it can
19116dce513Schristosalso be a logical line number directive (@pxref{Comments}) or a
19216dce513Schristospreprocessor control command (@pxref{Preprocessing}).
19316dce513Schristos
19416dce513Schristos@item @@
19516dce513Schristos@cindex symbol prefix character, ARC
19616dce513Schristos@cindex ARC symbol prefix character
19716dce513SchristosPrefixing an operand with an @samp{@@} specifies that the operand is a
19816dce513Schristossymbol and not a register.  This is how the assembler disambiguates
19916dce513Schristosthe use of an ARC register name as a symbol.  So the instruction
20016dce513Schristos@example
20116dce513Schristosmov r0, @@r0
20216dce513Schristos@end example
20316dce513Schristosmoves the address of symbol @code{r0} into register @code{r0}.
20416dce513Schristos
20516dce513Schristos@item `
20616dce513Schristos@cindex line separator, ARC
20716dce513Schristos@cindex statement separator, ARC
20816dce513Schristos@cindex ARC line separator
20916dce513SchristosThe @samp{`} (backtick) character is used to separate statements on a
21016dce513Schristossingle line.
21116dce513Schristos
21216dce513Schristos@cindex line
21316dce513Schristos@item -
21416dce513Schristos@cindex C preprocessor macro separator, ARC
21516dce513Schristos@cindex ARC C preprocessor macro separator
21616dce513SchristosUsed as a separator to obtain a sequence of commands from a C
21716dce513Schristospreprocessor macro.
21816dce513Schristos
21916dce513Schristos@end table
22016dce513Schristos
22116dce513Schristos@node ARC-Regs
22216dce513Schristos@subsection Register Names
22316dce513Schristos
22416dce513Schristos@cindex ARC register names
22516dce513Schristos@cindex register names, ARC
22616dce513SchristosThe ARC assembler uses the following register names for its core
22716dce513Schristosregisters:
22816dce513Schristos
22916dce513Schristos@table @code
23016dce513Schristos@item r0-r31
23116dce513Schristos@cindex core general registers, ARC
23216dce513Schristos@cindex ARC core general registers
23316dce513SchristosThe core general registers.  Registers @code{r26} through @code{r31}
23416dce513Schristoshave special functions, and are usually referred to by those synonyms.
23516dce513Schristos
23616dce513Schristos@item gp
23716dce513Schristos@cindex global pointer, ARC
23816dce513Schristos@cindex ARC global pointer
23916dce513SchristosThe global pointer and a synonym for @code{r26}.
24016dce513Schristos
24116dce513Schristos@item fp
24216dce513Schristos@cindex frame pointer, ARC
24316dce513Schristos@cindex ARC frame pointer
24416dce513SchristosThe frame pointer and a synonym for @code{r27}.
24516dce513Schristos
24616dce513Schristos@item sp
24716dce513Schristos@cindex stack pointer, ARC
24816dce513Schristos@cindex ARC stack pointer
24916dce513SchristosThe stack pointer and a synonym for @code{r28}.
25016dce513Schristos
25116dce513Schristos@item ilink1
25216dce513Schristos@cindex level 1 interrupt link register, ARC
25316dce513Schristos@cindex ARC level 1 interrupt link register
25416dce513SchristosFor ARC 600 and ARC 700, the level 1 interrupt link register and a
25516dce513Schristossynonym for @code{r29}.  Not supported for ARCv2.
25616dce513Schristos
25716dce513Schristos@item ilink
25816dce513Schristos@cindex interrupt link register, ARC
25916dce513Schristos@cindex ARC interrupt link register
26016dce513SchristosFor ARCv2, the interrupt link register and a synonym for @code{r29}.
26116dce513SchristosNot supported for ARC 600 and ARC 700.
26216dce513Schristos
26316dce513Schristos@item ilink2
26416dce513Schristos@cindex level 2 interrupt link register, ARC
26516dce513Schristos@cindex ARC level 2 interrupt link register
26616dce513SchristosFor ARC 600 and ARC 700, the level 2 interrupt link register and a
26716dce513Schristossynonym for @code{r30}.  Not supported for ARC v2.
26816dce513Schristos
26916dce513Schristos@item blink
27016dce513Schristos@cindex link register, ARC
27116dce513Schristos@cindex ARC link register
27216dce513SchristosThe link register and a synonym for @code{r31}.
27316dce513Schristos
27416dce513Schristos@item r32-r59
27516dce513Schristos@cindex extension core registers, ARC
27616dce513Schristos@cindex ARC extension core registers
27716dce513SchristosThe extension core registers.
27816dce513Schristos
27916dce513Schristos@item lp_count
28016dce513Schristos@cindex loop counter, ARC
28116dce513Schristos@cindex ARC loop counter
28216dce513SchristosThe loop count register.
28316dce513Schristos
28416dce513Schristos@item pcl
28516dce513Schristos@cindex word aligned program counter, ARC
28616dce513Schristos@cindex ARC word aligned program counter
28716dce513SchristosThe word aligned program counter.
28816dce513Schristos
28916dce513Schristos@end table
29016dce513Schristos
29116dce513SchristosIn addition the ARC processor has a large number of @emph{auxiliary
29216dce513Schristosregisters}.  The precise set depends on the extensions being
29316dce513Schristossupported, but the following baseline set are always defined:
29416dce513Schristos
29516dce513Schristos@table @code
29616dce513Schristos@item identity
29716dce513Schristos@cindex Processor Identification register, ARC
29816dce513Schristos@cindex ARC Processor Identification register
29916dce513SchristosProcessor Identification register.  Auxiliary register address 0x4.
30016dce513Schristos
30116dce513Schristos@item pc
30216dce513Schristos@cindex Program Counter, ARC
30316dce513Schristos@cindex ARC Program Counter
30416dce513SchristosProgram Counter.  Auxiliary register address 0x6.
30516dce513Schristos
30616dce513Schristos@item status32
30716dce513Schristos@cindex Status register, ARC
30816dce513Schristos@cindex ARC Status register
30916dce513SchristosStatus register.  Auxiliary register address 0x0a.
31016dce513Schristos
31116dce513Schristos@item bta
31216dce513Schristos@cindex Branch Target Address, ARC
31316dce513Schristos@cindex ARC Branch Target Address
31416dce513SchristosBranch Target Address.  Auxiliary register address 0x412.
31516dce513Schristos
31616dce513Schristos@item ecr
31716dce513Schristos@cindex Exception Cause Register, ARC
31816dce513Schristos@cindex ARC Exception Cause Register
31916dce513SchristosException Cause Register.  Auxiliary register address 0x403.
32016dce513Schristos
32116dce513Schristos@item int_vector_base
32216dce513Schristos@cindex Interrupt Vector Base address, ARC
32316dce513Schristos@cindex ARC Interrupt Vector Base address
32416dce513SchristosInterrupt Vector Base address.  Auxiliary register address 0x25.
32516dce513Schristos
32616dce513Schristos@item status32_p0
32716dce513Schristos@cindex Stored STATUS32 register on entry to level P0 interrupts, ARC
32816dce513Schristos@cindex ARC Stored STATUS32 register on entry to level P0 interrupts
32916dce513SchristosStored STATUS32 register on entry to level P0 interrupts.  Auxiliary
33016dce513Schristosregister address 0xb.
33116dce513Schristos
33216dce513Schristos@item aux_user_sp
33316dce513Schristos@cindex Saved User Stack Pointer, ARC
33416dce513Schristos@cindex ARC Saved User Stack Pointer
33516dce513SchristosSaved User Stack Pointer.  Auxiliary register address 0xd.
33616dce513Schristos
33716dce513Schristos@item eret
33816dce513Schristos@cindex Exception Return Address, ARC
33916dce513Schristos@cindex ARC Exception Return Address
34016dce513SchristosException Return Address.  Auxiliary register address 0x400.
34116dce513Schristos
34216dce513Schristos@item erbta
34316dce513Schristos@cindex BTA saved on exception entry, ARC
34416dce513Schristos@cindex ARC BTA saved on exception entry
34516dce513SchristosBTA saved on exception entry.  Auxiliary register address 0x401.
34616dce513Schristos
34716dce513Schristos@item erstatus
34816dce513Schristos@cindex STATUS32 saved on exception, ARC
34916dce513Schristos@cindex ARC STATUS32 saved on exception
35016dce513SchristosSTATUS32 saved on exception.  Auxiliary register address 0x402.
35116dce513Schristos
35216dce513Schristos@item bcr_ver
35316dce513Schristos@cindex Build Configuration Registers Version, ARC
35416dce513Schristos@cindex ARC Build Configuration Registers Version
35516dce513SchristosBuild Configuration Registers Version.  Auxiliary register address 0x60.
35616dce513Schristos
35716dce513Schristos@item bta_link_build
35816dce513Schristos@cindex Build configuration for: BTA Registers, ARC
35916dce513Schristos@cindex ARC Build configuration for: BTA Registers
36016dce513SchristosBuild configuration for: BTA Registers.  Auxiliary register address 0x63.
36116dce513Schristos
36216dce513Schristos@item vecbase_ac_build
36316dce513Schristos@cindex Build configuration for: Interrupts, ARC
36416dce513Schristos@cindex ARC Build configuration for: Interrupts
36516dce513SchristosBuild configuration for: Interrupts.  Auxiliary register address 0x68.
36616dce513Schristos
36716dce513Schristos@item rf_build
36816dce513Schristos@cindex Build configuration for: Core Registers, ARC
36916dce513Schristos@cindex ARC Build configuration for: Core Registers
37016dce513SchristosBuild configuration for: Core Registers.  Auxiliary register address 0x6e.
37116dce513Schristos
37216dce513Schristos@item dccm_build
37316dce513Schristos@cindex DCCM RAM Configuration Register, ARC
37416dce513Schristos@cindex ARC DCCM RAM Configuration Register
37516dce513SchristosDCCM RAM Configuration Register.  Auxiliary register address 0xc1.
37616dce513Schristos
37716dce513Schristos@end table
37816dce513Schristos
37916dce513SchristosAdditional auxiliary register names are defined according to the
38016dce513Schristosprocessor architecture version and extensions selected by the options.
38116dce513Schristos
38216dce513Schristos@node ARC Directives
38316dce513Schristos@section ARC Machine Directives
38416dce513Schristos
38516dce513Schristos@cindex machine directives, ARC
38616dce513Schristos@cindex ARC machine directives
38716dce513SchristosThe ARC version of @code{@value{AS}} supports the following additional
38816dce513Schristosmachine directives:
38916dce513Schristos
39016dce513Schristos@table @code
39116dce513Schristos
39216dce513Schristos@cindex @code{lcomm} directive
39316dce513Schristos@item .lcomm @var{symbol}, @var{length}[, @var{alignment}]
39416dce513SchristosReserve @var{length} (an absolute expression) bytes for a local common
39516dce513Schristosdenoted by @var{symbol}.  The section and value of @var{symbol} are
39616dce513Schristosthose of the new local common.  The addresses are allocated in the bss
39716dce513Schristossection, so that at run-time the bytes start off zeroed.  Since
39816dce513Schristos@var{symbol} is not declared global, it is normally not visible to
39916dce513Schristos@code{@value{LD}}.  The optional third parameter, @var{alignment},
40016dce513Schristosspecifies the desired alignment of the symbol in the bss section,
40116dce513Schristosspecified as a byte boundary (for example, an alignment of 16 means
40216dce513Schristosthat the least significant 4 bits of the address should be zero).  The
40316dce513Schristosalignment must be an absolute expression, and it must be a power of
40416dce513Schristostwo.  If no alignment is specified, as will set the alignment to the
40516dce513Schristoslargest power of two less than or equal to the size of the symbol, up
40616dce513Schristosto a maximum of 16.
40716dce513Schristos
40816dce513Schristos@cindex @code{lcommon} directive, ARC
40916dce513Schristos@item .lcommon @var{symbol}, @var{length}[, @var{alignment}]
41016dce513SchristosThe same as @code{lcomm} directive.
41116dce513Schristos
41216dce513Schristos@cindex @code{cpu} directive, ARC
41316dce513Schristos@item .cpu @var{cpu}
41416dce513SchristosThe @code{.cpu} directive must be followed by the desired core
41516dce513Schristosversion.  Permitted values for CPU are:
41616dce513Schristos@table @code
41716dce513Schristos@item ARC600
41816dce513SchristosAssemble for the ARC600 instruction set.
41916dce513Schristos
420ede78133Schristos@item arc600_norm
421ede78133SchristosAssemble for ARC 600 with norm instructions.
422ede78133Schristos
423ede78133Schristos@item arc600_mul64
424ede78133SchristosAssemble for ARC 600 with mul64 instructions.
425ede78133Schristos
426ede78133Schristos@item arc600_mul32x16
427ede78133SchristosAssemble for ARC 600 with mul32x16 instructions.
428ede78133Schristos
429ede78133Schristos@item arc601
430ede78133SchristosAssemble for ARC 601 instruction set.
431ede78133Schristos
432ede78133Schristos@item arc601_norm
433ede78133SchristosAssemble for ARC 601 with norm instructions.
434ede78133Schristos
435ede78133Schristos@item arc601_mul64
436ede78133SchristosAssemble for ARC 601 with mul64 instructions.
437ede78133Schristos
438ede78133Schristos@item arc601_mul32x16
439ede78133SchristosAssemble for ARC 601 with mul32x16 instructions.
440ede78133Schristos
44116dce513Schristos@item ARC700
44216dce513SchristosAssemble for the ARC700 instruction set.
44316dce513Schristos
44416dce513Schristos@item NPS400
44516dce513SchristosAssemble for the NPS400 instruction set.
44616dce513Schristos
44716dce513Schristos@item EM
44816dce513SchristosAssemble for the ARC EM instruction set.
44916dce513Schristos
450ede78133Schristos@item arcem
451ede78133SchristosAssemble for ARC EM instruction set
452ede78133Schristos
453ede78133Schristos@item em4
454ede78133SchristosAssemble for ARC EM with code-density instructions.
455ede78133Schristos
456ede78133Schristos@item em4_dmips
457ede78133SchristosAssemble for ARC EM with code-density instructions.
458ede78133Schristos
459ede78133Schristos@item em4_fpus
460ede78133SchristosAssemble for ARC EM with code-density instructions.
461ede78133Schristos
462ede78133Schristos@item em4_fpuda
463ede78133SchristosAssemble for ARC EM with code-density, and double-precision assist
464ede78133Schristosinstructions.
465ede78133Schristos
466ede78133Schristos@item quarkse_em
467ede78133SchristosAssemble for QuarkSE-EM instruction set.
468ede78133Schristos
46916dce513Schristos@item HS
47016dce513SchristosAssemble for the ARC HS instruction set.
47116dce513Schristos
472ede78133Schristos@item archs
473ede78133SchristosAssemble for ARC HS instruction set.
474ede78133Schristos
475ede78133Schristos@item hs
476ede78133SchristosAssemble for ARC HS instruction set.
477ede78133Schristos
478ede78133Schristos@item hs34
479ede78133SchristosAssemble for ARC HS34 instruction set.
480ede78133Schristos
481ede78133Schristos@item hs38
482ede78133SchristosAssemble for ARC HS38 instruction set.
483ede78133Schristos
484ede78133Schristos@item hs38_linux
485ede78133SchristosAssemble for ARC HS38 with floating point support on.
486ede78133Schristos
48716dce513Schristos@end table
48816dce513Schristos
489012573ebSchristosNote: the @code{.cpu} directive overrides the command-line option
49016dce513Schristos@code{-mcpu=@var{cpu}}; a warning is emitted when the version is not
49116dce513Schristosconsistent between the two.
49216dce513Schristos
49316dce513Schristos@item .extAuxRegister @var{name}, @var{addr}, @var{mode}
49416dce513Schristos@cindex @code{extAuxRegister} directive, ARC
49516dce513SchristosAuxiliary registers can be defined in the assembler source code by
49616dce513Schristosusing this directive.  The first parameter, @var{name}, is the name of the
49716dce513Schristosnew auxiliary register.  The second parameter, @var{addr}, is
49816dce513Schristosaddress the of the auxiliary register.  The third parameter,
49916dce513Schristos@var{mode}, specifies whether the register is readable and/or writable
50016dce513Schristosand is one of:
50116dce513Schristos@table @code
50216dce513Schristos@item r
50316dce513SchristosRead only;
50416dce513Schristos
50516dce513Schristos@item w
50616dce513SchristosWrite only;
50716dce513Schristos
50816dce513Schristos@item r|w
50916dce513SchristosRead and write.
51016dce513Schristos
51116dce513Schristos@end table
51216dce513Schristos
51316dce513SchristosFor example:
51416dce513Schristos@example
51516dce513Schristos	.extAuxRegister mulhi, 0x12, w
51616dce513Schristos@end example
51716dce513Schristosspecifies a write only extension auxiliary register, @var{mulhi} at
51816dce513Schristosaddress 0x12.
51916dce513Schristos
52016dce513Schristos@item .extCondCode @var{suffix}, @var{val}
52116dce513Schristos@cindex @code{extCondCode} directive, ARC
52216dce513SchristosARC supports extensible condition codes.  This directive defines a new
52316dce513Schristoscondition code, to be known by the suffix, @var{suffix} and will
52416dce513Schristosdepend on the value, @var{val} in the condition code.
52516dce513Schristos
52616dce513SchristosFor example:
52716dce513Schristos@example
52816dce513Schristos	.extCondCode is_busy,0x14
52916dce513Schristos	add.is_busy  r1,r2,r3
53016dce513Schristos@end example
53116dce513Schristoswill only execute the @code{add} instruction if the condition code
53216dce513Schristosvalue is 0x14.
53316dce513Schristos
53416dce513Schristos@item .extCoreRegister @var{name}, @var{regnum}, @var{mode}, @var{shortcut}
53516dce513Schristos@cindex @code{extCoreRegister} directive, ARC
53616dce513SchristosSpecifies an extension core register named @var{name} as a synonym for
53716dce513Schristosthe register numbered @var{regnum}.  The register number must be
53816dce513Schristosbetween 32 and 59.  The third argument, @var{mode}, indicates whether
53916dce513Schristosthe register is readable and/or writable and is one of:
54016dce513Schristos@table @code
54116dce513Schristos@item r
54216dce513SchristosRead only;
54316dce513Schristos
54416dce513Schristos@item w
54516dce513SchristosWrite only;
54616dce513Schristos
54716dce513Schristos@item r|w
54816dce513SchristosRead and write.
54916dce513Schristos
55016dce513Schristos@end table
55116dce513Schristos
55216dce513SchristosThe final parameter, @var{shortcut} indicates whether the register has
55316dce513Schristosa short cut in the pipeline.  The valid values are:
55416dce513Schristos@table @code
55516dce513Schristos@item can_shortcut
55616dce513SchristosThe register has a short cut in the pipeline;
55716dce513Schristos
55816dce513Schristos@item cannot_shortcut
55916dce513SchristosThe register does not have a short cut in the pipeline.
56016dce513Schristos@end table
56116dce513Schristos
56216dce513SchristosFor example:
56316dce513Schristos@example
56416dce513Schristos	.extCoreRegister mlo, 57, r , can_shortcut
56516dce513Schristos@end example
56616dce513Schristosdefines a read only extension core register, @code{mlo}, which is
56716dce513Schristosregister 57, and can short cut the pipeline.
56816dce513Schristos
56916dce513Schristos@item .extInstruction @var{name}, @var{opcode}, @var{subopcode}, @var{suffixclass}, @var{syntaxclass}
57016dce513Schristos@cindex @code{extInstruction} directive, ARC
57116dce513SchristosARC allows the user to specify extension instructions.  These
57216dce513Schristosextension instructions are not macros; the assembler creates encodings
57316dce513Schristosfor use of these instructions according to the specification by the
57416dce513Schristosuser.
57516dce513Schristos
57616dce513SchristosThe first argument, @var{name}, gives the name of the instruction.
57716dce513Schristos
57816dce513SchristosThe second argument, @var{opcode}, is the opcode to be used (bits 31:27
57916dce513Schristosin the encoding).
58016dce513Schristos
58116dce513SchristosThe third argument, @var{subopcode}, is the sub-opcode to be used, but
58216dce513Schristosthe correct value also depends on the fifth argument,
58316dce513Schristos@var{syntaxclass}
58416dce513Schristos
58516dce513SchristosThe fourth argument, @var{suffixclass}, determines the kinds of
58616dce513Schristossuffixes to be allowed.  Valid values are:
58716dce513Schristos@table @code
58816dce513Schristos@item SUFFIX_NONE
58916dce513SchristosNo suffixes are permitted;
59016dce513Schristos
59116dce513Schristos@item SUFFIX_COND
59216dce513SchristosConditional suffixes are permitted;
59316dce513Schristos
59416dce513Schristos@item SUFFIX_FLAG
59516dce513SchristosFlag setting suffixes are permitted.
59616dce513Schristos
59716dce513Schristos@item SUFFIX_COND|SUFFIX_FLAG
59816dce513SchristosBoth conditional and flag setting suffices are permitted.
59916dce513Schristos
60016dce513Schristos@end table
60116dce513Schristos
60216dce513SchristosThe fifth and final argument, @var{syntaxclass}, determines the syntax
60316dce513Schristosclass for the instruction.  It can have the following values:
60416dce513Schristos@table @code
60516dce513Schristos@item SYNTAX_2OP
60616dce513SchristosTwo Operand Instruction;
60716dce513Schristos
60816dce513Schristos@item SYNTAX_3OP
60916dce513SchristosThree Operand Instruction.
61016dce513Schristos
61116dce513Schristos@item SYNTAX_1OP
61216dce513SchristosOne Operand Instruction.
61316dce513Schristos
61416dce513Schristos@item SYNTAX_NOP
61516dce513SchristosNo Operand Instruction.
61616dce513Schristos@end table
61716dce513Schristos
61816dce513SchristosThe syntax class may be followed by @samp{|} and one of the following
61916dce513Schristosmodifiers.
62016dce513Schristos@table @code
62116dce513Schristos
62216dce513Schristos@item OP1_MUST_BE_IMM
62316dce513SchristosModifies syntax class @code{SYNTAX_3OP}, specifying that the first
62416dce513Schristosoperand of a three-operand instruction must be an immediate (i.e., the
62516dce513Schristosresult is discarded).  This is usually used to set the flags using
62616dce513Schristosspecific instructions and not retain results.
62716dce513Schristos
62816dce513Schristos@item OP1_IMM_IMPLIED
62916dce513SchristosModifies syntax class @code{SYNTAX_20P}, specifying that there is an
63016dce513Schristosimplied immediate destination operand which does not appear in the
63116dce513Schristossyntax.
63216dce513Schristos
63316dce513SchristosFor example, if the source code contains an instruction like:
63416dce513Schristos@example
63516dce513Schristosinst r1,r2
63616dce513Schristos@end example
63716dce513Schristosthe first argument is an implied immediate (that is, the result is
63816dce513Schristosdiscarded).  This is the same as though the source code were: inst
63916dce513Schristos0,r1,r2.
64016dce513Schristos
64116dce513Schristos@end table
64216dce513Schristos
64316dce513SchristosFor example, defining a 64-bit multiplier with immediate operands:
64416dce513Schristos@example
64516dce513Schristos	.extInstruction  mp64, 0x07, 0x2d, SUFFIX_COND|SUFFIX_FLAG,
64616dce513Schristos			 SYNTAX_3OP|OP1_MUST_BE_IMM
64716dce513Schristos@end example
64816dce513Schristoswhich specifies an extension instruction named @code{mp64} with 3
64916dce513Schristosoperands.  It sets the flags and can be used with a condition code,
65016dce513Schristosfor which the first operand is an immediate, i.e. equivalent to
65116dce513Schristosdiscarding the result of the operation.
65216dce513Schristos
65316dce513SchristosA two operands instruction variant would be:
65416dce513Schristos@example
65516dce513Schristos	.extInstruction mul64, 0x07, 0x2d, SUFFIX_COND,
65616dce513Schristos	SYNTAX_2OP|OP1_IMM_IMPLIED
65716dce513Schristos@end example
65816dce513Schristoswhich describes a two operand instruction with an implicit first
65916dce513Schristosimmediate operand.  The result of this operation would be discarded.
66016dce513Schristos
661ede78133Schristos@cindex @code{.arc_attribute} directive, ARC
662ede78133Schristos@item .arc_attribute @var{tag}, @var{value}
663ede78133SchristosSet the ARC object attribute @var{tag} to @var{value}.
664ede78133Schristos
665ede78133SchristosThe @var{tag} is either an attribute number, or one of the following:
666ede78133Schristos@code{Tag_ARC_PCS_config}, @code{Tag_ARC_CPU_base},
667ede78133Schristos@code{Tag_ARC_CPU_variation}, @code{Tag_ARC_CPU_name},
668ede78133Schristos@code{Tag_ARC_ABI_rf16}, @code{Tag_ARC_ABI_osver}, @code{Tag_ARC_ABI_sda},
669ede78133Schristos@code{Tag_ARC_ABI_pic}, @code{Tag_ARC_ABI_tls}, @code{Tag_ARC_ABI_enumsize},
670ede78133Schristos@code{Tag_ARC_ABI_exceptions}, @code{Tag_ARC_ABI_double_size},
671ede78133Schristos@code{Tag_ARC_ISA_config}, @code{Tag_ARC_ISA_apex},
672ede78133Schristos@code{Tag_ARC_ISA_mpy_option}
673ede78133Schristos
674ede78133SchristosThe @var{value} is either a @code{number}, @code{"string"}, or
675ede78133Schristos@code{number, "string"} depending on the tag.
676ede78133Schristos
67716dce513Schristos@end table
67816dce513Schristos
67916dce513Schristos@node ARC Modifiers
68016dce513Schristos@section ARC Assembler Modifiers
68116dce513Schristos
68216dce513SchristosThe following additional assembler modifiers have been added for
68316dce513Schristosposition-independent code.  These modifiers are available only with
68416dce513Schristosthe ARC 700 and above processors and generate relocation entries,
68516dce513Schristoswhich are interpreted by the linker as follows:
68616dce513Schristos
68716dce513Schristos@table @code
68816dce513Schristos@item @@pcl(@var{symbol})
68916dce513Schristos@cindex @@pcl(@var{symbol}), ARC modifier
69016dce513SchristosRelative distance of @var{symbol}'s from the current program counter
69116dce513Schristoslocation.
69216dce513Schristos
69316dce513Schristos@item @@gotpc(@var{symbol})
69416dce513Schristos@cindex @@gotpc(@var{symbol}), ARC modifier
69516dce513SchristosRelative distance of @var{symbol}'s Global Offset Table entry from the
69616dce513Schristoscurrent program counter location.
69716dce513Schristos
69816dce513Schristos@item @@gotoff(@var{symbol})
69916dce513Schristos@cindex @@gotoff(@var{symbol}), ARC modifier
70016dce513SchristosDistance of @var{symbol} from the base of the Global Offset Table.
70116dce513Schristos
70216dce513Schristos@item @@plt(@var{symbol})
70316dce513Schristos@cindex @@plt(@var{symbol}), ARC modifier
70416dce513SchristosDistance of @var{symbol}'s Procedure Linkage Table entry from the
70516dce513Schristoscurrent program counter.  This is valid only with branch and link
70616dce513Schristosinstructions and PC-relative calls.
70716dce513Schristos
70816dce513Schristos@item @@sda(@var{symbol})
70916dce513Schristos@cindex @@sda(@var{symbol}), ARC modifier
71016dce513SchristosRelative distance of @var{symbol} from the base of the Small Data
71116dce513SchristosPointer.
71216dce513Schristos
71316dce513Schristos@end table
71416dce513Schristos
71516dce513Schristos@node ARC Symbols
71616dce513Schristos@section ARC Pre-defined Symbols
71716dce513Schristos
71816dce513SchristosThe following assembler symbols will prove useful when developing
71916dce513Schristosposition-independent code.  These symbols are available only with the
72016dce513SchristosARC 700 and above processors.
72116dce513Schristos
72216dce513Schristos@table @code
72316dce513Schristos@item __GLOBAL_OFFSET_TABLE__
72416dce513Schristos@cindex __GLOBAL_OFFSET_TABLE__, ARC pre-defined symbol
72516dce513SchristosSymbol referring to the base of the Global Offset Table.
72616dce513Schristos
72716dce513Schristos@item __DYNAMIC__
72816dce513Schristos@cindex __DYNAMIC__, ARC pre-defined symbol
72916dce513SchristosAn alias for the Global Offset Table
73016dce513Schristos@code{Base__GLOBAL_OFFSET_TABLE__}.  It can be used only with
73116dce513Schristos@code{@@gotpc} modifiers.
73216dce513Schristos
73316dce513Schristos@end table
73416dce513Schristos
73516dce513Schristos@node ARC Opcodes
73616dce513Schristos@section Opcodes
73716dce513Schristos
73816dce513Schristos@cindex ARC opcodes
73916dce513Schristos@cindex opcodes for ARC
74016dce513Schristos
74116dce513SchristosFor information on the ARC instruction set, see @cite{ARC Programmers
74216dce513SchristosReference Manual}, available where you download the processor IP library.
743