123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424 |
- @c Copyright (C) 2000-2015 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 ARC-Dependent
- @chapter ARC Dependent Features
- @end ifset
- @ifclear GENERIC
- @node Machine Dependencies
- @chapter ARC Dependent Features
- @end ifclear
- @set ARC_CORE_DEFAULT 6
- @cindex ARC support
- @menu
- * ARC Options:: Options
- * ARC Syntax:: Syntax
- * ARC Directives:: ARC Machine Directives
- * ARC Modifiers:: ARC Assembler Modifiers
- * ARC Symbols:: ARC Pre-defined Symbols
- * ARC Opcodes:: Opcodes
- @end menu
- @node ARC Options
- @section Options
- @cindex ARC options
- @cindex options for ARC
- The following options control the type of CPU for which code is
- assembled, and generic constraints on the code generated:
- @table @code
- @item -mcpu=@var{cpu}
- @cindex @code{-mcpu=@var{cpu}} command line option, ARC
- Set architecture type and register usage for @var{cpu}. There are
- also shortcut alias options available for backward compatibility and
- convenience. Supported values for @var{cpu} are
- @table @code
- @cindex @code{mA6} command line option, ARC
- @cindex @code{marc600} command line option, ARC
- @item arc600
- Assemble for ARC 600. Aliases: @code{-mA6}, @code{-mARC600}.
- @item arc601
- @cindex @code{mARC601} command line option, ARC
- Assemble for ARC 601. Alias: @code{-mARC601}.
- @item arc700
- @cindex @code{mA7} command line option, ARC
- @cindex @code{mARC700} command line option, ARC
- Assemble for ARC 700. Aliases: @code{-mA7}, @code{-mARC700}.
- @item arcem
- @cindex @code{mEM} command line option, ARC
- Assemble for ARC EM. Aliases: @code{-mEM}
- @item archs
- @cindex @code{mHS} command line option, ARC
- Assemble for ARC HS. Aliases: @code{-mHS}, @code{-mav2hs}.
- @end table
- Note: the @code{.cpu} directive can to be used to select a core
- variant from within assembly code.
- @cindex @code{-EB} command line option, ARC
- @item -EB
- This option specifies that the output generated by the assembler should
- be marked as being encoded for a big-endian processor.
- @cindex @code{-EL} command line option, ARC
- @item -EL
- This option specifies that the output generated by the assembler should
- be marked as being encoded for a little-endian processor - this is the
- default.
- @cindex @code{-mcode-density} command line option, ARC
- @item -mcode-density
- This option turns on Code Density instructions. Only valid for ARC EM
- processors.
- @end table
- @node ARC Syntax
- @section Syntax
- @menu
- * ARC-Chars:: Special Characters
- * ARC-Regs:: Register Names
- @end menu
- @node ARC-Chars
- @subsection Special Characters
- @table @code
- @item %
- @cindex register name prefix character, ARC
- @cindex ARC register name prefix character
- A register name can optionally be prefixed by a @samp{%} character. So
- register @code{%r0} is equivalent to @code{r0} in the assembly code.
- @item #
- @cindex line comment character, ARC
- @cindex ARC line comment character
- The presence of a @samp{#} character within a line (but not at the
- start of a line) indicates the start of a comment that extends to the
- end of the current line.
- @emph{Note:} if a line starts with a @samp{#} character then it can
- also be a logical line number directive (@pxref{Comments}) or a
- preprocessor control command (@pxref{Preprocessing}).
- @item @@
- @cindex symbol prefix character, ARC
- @cindex ARC symbol prefix character
- Prefixing an operand with an @samp{@@} specifies that the operand is a
- symbol and not a register. This is how the assembler disambiguates
- the use of an ARC register name as a symbol. So the instruction
- @example
- mov r0, @@r0
- @end example
- moves the address of symbol @code{r0} into register @code{r0}.
- @item `
- @cindex line separator, ARC
- @cindex statement separator, ARC
- @cindex ARC line separator
- The @samp{`} (backtick) character is used to separate statements on a
- single line.
- @cindex line
- @item -
- @cindex C preprocessor macro separator, ARC
- @cindex ARC C preprocessor macro separator
- Used as a separator to obtain a sequence of commands from a C
- preprocessor macro.
- @end table
- @node ARC-Regs
- @subsection Register Names
- @cindex ARC register names
- @cindex register names, ARC
- The ARC assembler uses the following register names for its core
- registers:
- @table @code
- @item r0-r31
- @cindex core general registers, ARC
- @cindex ARC core general registers
- The core general registers. Registers @code{r26} through @code{r31}
- have special functions, and are usually referred to by those synonyms.
- @item gp
- @cindex global pointer, ARC
- @cindex ARC global pointer
- The global pointer and a synonym for @code{r26}.
- @item fp
- @cindex frame pointer, ARC
- @cindex ARC frame pointer
- The frame pointer and a synonym for @code{r27}.
- @item sp
- @cindex stack pointer, ARC
- @cindex ARC stack pointer
- The stack pointer and a synonym for @code{r28}.
- @item ilink1
- @cindex level 1 interrupt link register, ARC
- @cindex ARC level 1 interrupt link register
- For ARC 600 and ARC 700, the level 1 interrupt link register and a
- synonym for @code{r29}. Not supported for ARCv2.
- @item ilink
- @cindex interrupt link register, ARC
- @cindex ARC interrupt link register
- For ARCv2, the interrupt link register and a synonym for @code{r29}.
- Not supported for ARC 600 and ARC 700.
- @item ilink2
- @cindex level 2 interrupt link register, ARC
- @cindex ARC level 2 interrupt link register
- For ARC 600 and ARC 700, the level 2 interrupt link register and a
- synonym for @code{r30}. Not supported for ARC v2.
- @item blink
- @cindex link register, ARC
- @cindex ARC link register
- The link register and a synonym for @code{r31}.
- @item r32-r59
- @cindex extension core registers, ARC
- @cindex ARC extension core registers
- The extension core registers.
- @item lp_count
- @cindex loop counter, ARC
- @cindex ARC loop counter
- The loop count register.
- @item pcl
- @cindex word aligned program counter, ARC
- @cindex ARC word aligned program counter
- The word aligned program counter.
- @end table
- In addition the ARC processor has a large number of @emph{auxiliary
- registers}. The precise set depends on the extensions being
- supported, but the following baseline set are always defined:
- @table @code
- @item identity
- @cindex Processor Identification register, ARC
- @cindex ARC Processor Identification register
- Processor Identification register. Auxiliary register address 0x4.
- @item pc
- @cindex Program Counter, ARC
- @cindex ARC Program Counter
- Program Counter. Auxiliary register address 0x6.
- @item status32
- @cindex Status register, ARC
- @cindex ARC Status register
- Status register. Auxiliary register address 0x0a.
- @item bta
- @cindex Branch Target Address, ARC
- @cindex ARC Branch Target Address
- Branch Target Address. Auxiliary register address 0x412.
- @item ecr
- @cindex Exception Cause Register, ARC
- @cindex ARC Exception Cause Register
- Exception Cause Register. Auxiliary register address 0x403.
- @item int_vector_base
- @cindex Interrupt Vector Base address, ARC
- @cindex ARC Interrupt Vector Base address
- Interrupt Vector Base address. Auxiliary register address 0x25.
- @item status32_p0
- @cindex Stored STATUS32 register on entry to level P0 interrupts, ARC
- @cindex ARC Stored STATUS32 register on entry to level P0 interrupts
- Stored STATUS32 register on entry to level P0 interrupts. Auxiliary
- register address 0xb.
- @item aux_user_sp
- @cindex Saved User Stack Pointer, ARC
- @cindex ARC Saved User Stack Pointer
- Saved User Stack Pointer. Auxiliary register address 0xd.
- @item eret
- @cindex Exception Return Address, ARC
- @cindex ARC Exception Return Address
- Exception Return Address. Auxiliary register address 0x400.
- @item erbta
- @cindex BTA saved on exception entry, ARC
- @cindex ARC BTA saved on exception entry
- BTA saved on exception entry. Auxiliary register address 0x401.
- @item erstatus
- @cindex STATUS32 saved on exception, ARC
- @cindex ARC STATUS32 saved on exception
- STATUS32 saved on exception. Auxiliary register address 0x402.
- @item bcr_ver
- @cindex Build Configuration Registers Version, ARC
- @cindex ARC Build Configuration Registers Version
- Build Configuration Registers Version. Auxiliary register address 0x60.
- @item bta_link_build
- @cindex Build configuration for: BTA Registers, ARC
- @cindex ARC Build configuration for: BTA Registers
- Build configuration for: BTA Registers. Auxiliary register address 0x63.
- @item vecbase_ac_build
- @cindex Build configuration for: Interrupts, ARC
- @cindex ARC Build configuration for: Interrupts
- Build configuration for: Interrupts. Auxiliary register address 0x68.
- @item rf_build
- @cindex Build configuration for: Core Registers, ARC
- @cindex ARC Build configuration for: Core Registers
- Build configuration for: Core Registers. Auxiliary register address 0x6e.
- @item dccm_build
- @cindex DCCM RAM Configuration Register, ARC
- @cindex ARC DCCM RAM Configuration Register
- DCCM RAM Configuration Register. Auxiliary register address 0xc1.
- @end table
- Additional auxiliary register names are defined according to the
- processor architecture version and extensions selected by the options.
- @node ARC Directives
- @section ARC Machine Directives
- @cindex machine directives, ARC
- @cindex ARC machine directives
- The ARC version of @code{@value{AS}} supports the following additional
- machine directives:
- @table @code
- @cindex @code{lcomm} directive
- @item .lcomm @var{symbol} , @var{length}[, @var{alignment}]
- Reserve @var{length} (an absolute expression) bytes for a local common
- denoted by @var{symbol}. The section and value of @var{symbol} are
- those of the new local common. The addresses are allocated in the bss
- section, so that at run-time the bytes start off zeroed. Since
- @var{symbol} is not declared global, it is normally not visible to
- @code{@value{LD}}. The optional third parameter, @var{alignment},
- specifies the desired alignment of the symbol in the bss section,
- specified as a byte boundary (for example, an alignment of 16 means
- that the least significant 4 bits of the address should be zero). The
- alignment must be an absolute expression, and it must be a power of
- two. If no alignment is specified, as will set the alignment to the
- largest power of two less than or equal to the size of the symbol, up
- to a maximum of 16.
- @cindex @code{lcommon} directive
- @item .lcommon @var{symbol} , @var{length}[, @var{alignment}]
- The same as @code{lcomm} directive.
- @cindex @code{cpu} directive, ARC
- @cindex @code{cpu} directive, ARC
- The @code{.cpu} directive must be followed by the desired core
- version. Permitted values for CPU are:
- @table @code
- @item ARC600
- Assemble for the ARC600 instruction set.
- @item ARC700
- Assemble for the ARC700 instruction set.
- @item EM
- Assemble for the ARC EM instruction set.
- @item HS
- Assemble for the ARC HS instruction set.
- @end table
- Note: the @code{.cpu} directive overrides the command line option
- @code{-mcpu=@var{cpu}}; a warning is emitted when the version is not
- consistent between the two.
- @end table
- @node ARC Modifiers
- @section ARC Assembler Modifiers
- The following additional assembler modifiers have been added for
- position-independent code. These modifiers are available only with
- the ARC 700 and above processors and generate relocation entries,
- which are interpreted by the linker as follows:
- @table @code
- @item @@pcl(@var{symbol})
- @cindex @@pcl(@var{symbol}), ARC modifier
- Relative distance of @var{symbol}'s from the current program counter
- location.
- @item @@gotpc(@var{symbol})
- @cindex @@gotpc(@var{symbol}), ARC modifier
- Relative distance of @var{symbol}'s Global Offset Table entry from the
- current program counter location.
- @item @@gotoff(@var{symbol})
- @cindex @@gotoff(@var{symbol}), ARC modifier
- Distance of @var{symbol} from the base of the Global Offset Table.
- @item @@plt(@var{symbol})
- @cindex @@plt(@var{symbol}), ARC modifier
- Distance of @var{symbol}'s Procedure Linkage Table entry from the
- current program counter. This is valid only with branch and link
- instructions and PC-relative calls.
- @item @@sda(@var{symbol})
- @cindex @@sda(@var{symbol}), ARC modifier
- Relative distance of @var{symbol} from the base of the Small Data
- Pointer.
- @end table
- @node ARC Symbols
- @section ARC Pre-defined Symbols
- The following assembler symbols will prove useful when developing
- position-independent code. These symbols are available only with the
- ARC 700 and above processors.
- @table @code
- @item __GLOBAL_OFFSET_TABLE__
- @cindex __GLOBAL_OFFSET_TABLE__, ARC pre-defined symbol
- Symbol referring to the base of the Global Offset Table.
- @item __DYNAMIC__
- @cindex __DYNAMIC__, ARC pre-defined symbol
- An alias for the Global Offset Table
- @code{Base__GLOBAL_OFFSET_TABLE__}. It can be used only with
- @code{@@gotpc} modifiers.
- @end table
- @node ARC Opcodes
- @section Opcodes
- @cindex ARC opcodes
- @cindex opcodes for ARC
- For information on the ARC instruction set, see @cite{ARC Programmers
- Reference Manual}, available where you download the processor IP library.
|