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