886a250647
bfd * archures.c: Remove support for older ARC. Added support for new ARC cpus (ARC600, ARC601, ARC700, ARCV2). * bfd-in2.h: Likewise. * config.bfd: Likewise. * cpu-arc.c: Likewise. * elf32-arc.c: Totally changed file with a refactored inplementation of the ARC port. * libbfd.h: Added ARC specific relocation types. * reloc.c: Likewise. gas * config/tc-arc.c: Revamped file for ARC support. * config/tc-arc.h: Likewise. * doc/as.texinfo: Add new ARC options. * doc/c-arc.texi: Likewise. ld * configure.tgt: Added target arc-*-elf* and arc*-*-linux-uclibc*. * emulparams/arcebelf_prof.sh: New file * emulparams/arcebelf.sh: Likewise. * emulparams/arceblinux_prof.sh: Likewise. * emulparams/arceblinux.sh: Likewise. * emulparams/arcelf_prof.sh: Likewise. * emulparams/arcelf.sh: Likewise. * emulparams/arclinux_prof.sh: Likewise. * emulparams/arclinux.sh: Likewise. * emulparams/arcv2elfx.sh: Likewise. * emulparams/arcv2elf.sh: Likewise. * emultempl/arclinux.em: Likewise. * scripttempl/arclinux.sc: Likewise. * scripttempl/elfarc.sc: Likewise. * scripttempl/elfarcv2.sc: Likewise * Makefile.am: Add new ARC emulations. * Makefile.in: Regenerate. * NEWS: Mention the new feature. opcodes * arc-dis.c: Revamped file for ARC support * arc-dis.h: Likewise. * arc-ext.c: Likewise. * arc-ext.h: Likewise. * arc-opc.c: Likewise. * arc-fxi.h: New file. * arc-regs.h: Likewise. * arc-tbl.h: Likewise. binutils * readelf.c (get_machine_name): Remove A5 reference. Add ARCompact and ARCv2. (get_machine_flags): Handle EM_ARCV2 and EM_ARCOMPACT. (guess_is_rela): Likewise. (dump_relocations): Likewise. (is_32bit_abs_reloc): Likewise. (is_16bit_abs_reloc): Likewise. (is_none_reloc): Likewise. * NEWS: Mention the new feature. include * dis-asm.h (arc_get_disassembler): Correct declaration. * arc-reloc.def: Macro file with definition of all relocation types. * arc.h: Changed macros for the newly supported ARC cpus. Altered enum defining the supported relocations. * common.h: Changed EM_ARC_A5 definition to EM_ARC_COMPACT. Added macro for EM_ARC_COMPACT2. * arc-func.h: New file. * arc.h: Likewise.
423 lines
13 KiB
Text
423 lines
13 KiB
Text
@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.
|