743 lines
21 KiB
Plaintext
743 lines
21 KiB
Plaintext
@c Copyright (C) 2000-2020 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 arc600_norm
|
|
Assemble for ARC 600 with norm instructions.
|
|
|
|
@item arc600_mul64
|
|
Assemble for ARC 600 with mul64 instructions.
|
|
|
|
@item arc600_mul32x16
|
|
Assemble for ARC 600 with mul32x16 instructions.
|
|
|
|
@item arc601
|
|
@cindex @code{mARC601} command-line option, ARC
|
|
Assemble for ARC 601. Alias: @code{-mARC601}.
|
|
|
|
@item arc601_norm
|
|
Assemble for ARC 601 with norm instructions.
|
|
|
|
@item arc601_mul64
|
|
Assemble for ARC 601 with mul64 instructions.
|
|
|
|
@item arc601_mul32x16
|
|
Assemble for ARC 601 with mul32x16 instructions.
|
|
|
|
@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 em
|
|
Assemble for ARC EM, identical as arcem variant.
|
|
|
|
@item em4
|
|
Assemble for ARC EM with code-density instructions.
|
|
|
|
@item em4_dmips
|
|
Assemble for ARC EM with code-density instructions.
|
|
|
|
@item em4_fpus
|
|
Assemble for ARC EM with code-density instructions.
|
|
|
|
@item em4_fpuda
|
|
Assemble for ARC EM with code-density, and double-precision assist
|
|
instructions.
|
|
|
|
@item quarkse_em
|
|
Assemble for QuarkSE-EM cpu.
|
|
|
|
@item archs
|
|
@cindex @code{mHS} command-line option, ARC
|
|
Assemble for ARC HS. Aliases: @code{-mHS}, @code{-mav2hs}.
|
|
|
|
@item hs
|
|
Assemble for ARC HS.
|
|
|
|
@item hs34
|
|
Assemble for ARC HS34.
|
|
|
|
@item hs38
|
|
Assemble for ARC HS38.
|
|
|
|
@item hs38_linux
|
|
Assemble for ARC HS38 with floating point support on.
|
|
|
|
@item nps400
|
|
@cindex @code{mnps400} command-line option, ARC
|
|
Assemble for ARC 700 with NPS-400 extended instructions.
|
|
|
|
@end table
|
|
|
|
Note: the @code{.cpu} directive (@pxref{ARC Directives}) 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.
|
|
|
|
@cindex @code{-mrelax} command-line option, ARC
|
|
@item -mrelax
|
|
Enable support for assembly-time relaxation. The assembler will
|
|
replace a longer version of an instruction with a shorter one,
|
|
whenever it is possible.
|
|
|
|
@cindex @code{-mnps400} command-line option, ARC
|
|
@item -mnps400
|
|
Enable support for NPS-400 extended instructions.
|
|
|
|
@cindex @code{-mspfp} command-line option, ARC
|
|
@item -mspfp
|
|
Enable support for single-precision floating point instructions.
|
|
|
|
@cindex @code{-mdpfp} command-line option, ARC
|
|
@item -mdpfp
|
|
Enable support for double-precision floating point instructions.
|
|
|
|
@cindex @code{-mfpuda} command-line option, ARC
|
|
@item -mfpuda
|
|
Enable support for double-precision assist floating point 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, ARC
|
|
@item .lcommon @var{symbol}, @var{length}[, @var{alignment}]
|
|
The same as @code{lcomm} directive.
|
|
|
|
@cindex @code{cpu} directive, ARC
|
|
@item .cpu @var{cpu}
|
|
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 arc600_norm
|
|
Assemble for ARC 600 with norm instructions.
|
|
|
|
@item arc600_mul64
|
|
Assemble for ARC 600 with mul64 instructions.
|
|
|
|
@item arc600_mul32x16
|
|
Assemble for ARC 600 with mul32x16 instructions.
|
|
|
|
@item arc601
|
|
Assemble for ARC 601 instruction set.
|
|
|
|
@item arc601_norm
|
|
Assemble for ARC 601 with norm instructions.
|
|
|
|
@item arc601_mul64
|
|
Assemble for ARC 601 with mul64 instructions.
|
|
|
|
@item arc601_mul32x16
|
|
Assemble for ARC 601 with mul32x16 instructions.
|
|
|
|
@item ARC700
|
|
Assemble for the ARC700 instruction set.
|
|
|
|
@item NPS400
|
|
Assemble for the NPS400 instruction set.
|
|
|
|
@item EM
|
|
Assemble for the ARC EM instruction set.
|
|
|
|
@item arcem
|
|
Assemble for ARC EM instruction set
|
|
|
|
@item em4
|
|
Assemble for ARC EM with code-density instructions.
|
|
|
|
@item em4_dmips
|
|
Assemble for ARC EM with code-density instructions.
|
|
|
|
@item em4_fpus
|
|
Assemble for ARC EM with code-density instructions.
|
|
|
|
@item em4_fpuda
|
|
Assemble for ARC EM with code-density, and double-precision assist
|
|
instructions.
|
|
|
|
@item quarkse_em
|
|
Assemble for QuarkSE-EM instruction set.
|
|
|
|
@item HS
|
|
Assemble for the ARC HS instruction set.
|
|
|
|
@item archs
|
|
Assemble for ARC HS instruction set.
|
|
|
|
@item hs
|
|
Assemble for ARC HS instruction set.
|
|
|
|
@item hs34
|
|
Assemble for ARC HS34 instruction set.
|
|
|
|
@item hs38
|
|
Assemble for ARC HS38 instruction set.
|
|
|
|
@item hs38_linux
|
|
Assemble for ARC HS38 with floating point support on.
|
|
|
|
@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.
|
|
|
|
@item .extAuxRegister @var{name}, @var{addr}, @var{mode}
|
|
@cindex @code{extAuxRegister} directive, ARC
|
|
Auxiliary registers can be defined in the assembler source code by
|
|
using this directive. The first parameter, @var{name}, is the name of the
|
|
new auxiliary register. The second parameter, @var{addr}, is
|
|
address the of the auxiliary register. The third parameter,
|
|
@var{mode}, specifies whether the register is readable and/or writable
|
|
and is one of:
|
|
@table @code
|
|
@item r
|
|
Read only;
|
|
|
|
@item w
|
|
Write only;
|
|
|
|
@item r|w
|
|
Read and write.
|
|
|
|
@end table
|
|
|
|
For example:
|
|
@example
|
|
.extAuxRegister mulhi, 0x12, w
|
|
@end example
|
|
specifies a write only extension auxiliary register, @var{mulhi} at
|
|
address 0x12.
|
|
|
|
@item .extCondCode @var{suffix}, @var{val}
|
|
@cindex @code{extCondCode} directive, ARC
|
|
ARC supports extensible condition codes. This directive defines a new
|
|
condition code, to be known by the suffix, @var{suffix} and will
|
|
depend on the value, @var{val} in the condition code.
|
|
|
|
For example:
|
|
@example
|
|
.extCondCode is_busy,0x14
|
|
add.is_busy r1,r2,r3
|
|
@end example
|
|
will only execute the @code{add} instruction if the condition code
|
|
value is 0x14.
|
|
|
|
@item .extCoreRegister @var{name}, @var{regnum}, @var{mode}, @var{shortcut}
|
|
@cindex @code{extCoreRegister} directive, ARC
|
|
Specifies an extension core register named @var{name} as a synonym for
|
|
the register numbered @var{regnum}. The register number must be
|
|
between 32 and 59. The third argument, @var{mode}, indicates whether
|
|
the register is readable and/or writable and is one of:
|
|
@table @code
|
|
@item r
|
|
Read only;
|
|
|
|
@item w
|
|
Write only;
|
|
|
|
@item r|w
|
|
Read and write.
|
|
|
|
@end table
|
|
|
|
The final parameter, @var{shortcut} indicates whether the register has
|
|
a short cut in the pipeline. The valid values are:
|
|
@table @code
|
|
@item can_shortcut
|
|
The register has a short cut in the pipeline;
|
|
|
|
@item cannot_shortcut
|
|
The register does not have a short cut in the pipeline.
|
|
@end table
|
|
|
|
For example:
|
|
@example
|
|
.extCoreRegister mlo, 57, r , can_shortcut
|
|
@end example
|
|
defines a read only extension core register, @code{mlo}, which is
|
|
register 57, and can short cut the pipeline.
|
|
|
|
@item .extInstruction @var{name}, @var{opcode}, @var{subopcode}, @var{suffixclass}, @var{syntaxclass}
|
|
@cindex @code{extInstruction} directive, ARC
|
|
ARC allows the user to specify extension instructions. These
|
|
extension instructions are not macros; the assembler creates encodings
|
|
for use of these instructions according to the specification by the
|
|
user.
|
|
|
|
The first argument, @var{name}, gives the name of the instruction.
|
|
|
|
The second argument, @var{opcode}, is the opcode to be used (bits 31:27
|
|
in the encoding).
|
|
|
|
The third argument, @var{subopcode}, is the sub-opcode to be used, but
|
|
the correct value also depends on the fifth argument,
|
|
@var{syntaxclass}
|
|
|
|
The fourth argument, @var{suffixclass}, determines the kinds of
|
|
suffixes to be allowed. Valid values are:
|
|
@table @code
|
|
@item SUFFIX_NONE
|
|
No suffixes are permitted;
|
|
|
|
@item SUFFIX_COND
|
|
Conditional suffixes are permitted;
|
|
|
|
@item SUFFIX_FLAG
|
|
Flag setting suffixes are permitted.
|
|
|
|
@item SUFFIX_COND|SUFFIX_FLAG
|
|
Both conditional and flag setting suffices are permitted.
|
|
|
|
@end table
|
|
|
|
The fifth and final argument, @var{syntaxclass}, determines the syntax
|
|
class for the instruction. It can have the following values:
|
|
@table @code
|
|
@item SYNTAX_2OP
|
|
Two Operand Instruction;
|
|
|
|
@item SYNTAX_3OP
|
|
Three Operand Instruction.
|
|
|
|
@item SYNTAX_1OP
|
|
One Operand Instruction.
|
|
|
|
@item SYNTAX_NOP
|
|
No Operand Instruction.
|
|
@end table
|
|
|
|
The syntax class may be followed by @samp{|} and one of the following
|
|
modifiers.
|
|
@table @code
|
|
|
|
@item OP1_MUST_BE_IMM
|
|
Modifies syntax class @code{SYNTAX_3OP}, specifying that the first
|
|
operand of a three-operand instruction must be an immediate (i.e., the
|
|
result is discarded). This is usually used to set the flags using
|
|
specific instructions and not retain results.
|
|
|
|
@item OP1_IMM_IMPLIED
|
|
Modifies syntax class @code{SYNTAX_20P}, specifying that there is an
|
|
implied immediate destination operand which does not appear in the
|
|
syntax.
|
|
|
|
For example, if the source code contains an instruction like:
|
|
@example
|
|
inst r1,r2
|
|
@end example
|
|
the first argument is an implied immediate (that is, the result is
|
|
discarded). This is the same as though the source code were: inst
|
|
0,r1,r2.
|
|
|
|
@end table
|
|
|
|
For example, defining a 64-bit multiplier with immediate operands:
|
|
@example
|
|
.extInstruction mp64, 0x07, 0x2d, SUFFIX_COND|SUFFIX_FLAG,
|
|
SYNTAX_3OP|OP1_MUST_BE_IMM
|
|
@end example
|
|
which specifies an extension instruction named @code{mp64} with 3
|
|
operands. It sets the flags and can be used with a condition code,
|
|
for which the first operand is an immediate, i.e. equivalent to
|
|
discarding the result of the operation.
|
|
|
|
A two operands instruction variant would be:
|
|
@example
|
|
.extInstruction mul64, 0x07, 0x2d, SUFFIX_COND,
|
|
SYNTAX_2OP|OP1_IMM_IMPLIED
|
|
@end example
|
|
which describes a two operand instruction with an implicit first
|
|
immediate operand. The result of this operation would be discarded.
|
|
|
|
@cindex @code{.arc_attribute} directive, ARC
|
|
@item .arc_attribute @var{tag}, @var{value}
|
|
Set the ARC object attribute @var{tag} to @var{value}.
|
|
|
|
The @var{tag} is either an attribute number, or one of the following:
|
|
@code{Tag_ARC_PCS_config}, @code{Tag_ARC_CPU_base},
|
|
@code{Tag_ARC_CPU_variation}, @code{Tag_ARC_CPU_name},
|
|
@code{Tag_ARC_ABI_rf16}, @code{Tag_ARC_ABI_osver}, @code{Tag_ARC_ABI_sda},
|
|
@code{Tag_ARC_ABI_pic}, @code{Tag_ARC_ABI_tls}, @code{Tag_ARC_ABI_enumsize},
|
|
@code{Tag_ARC_ABI_exceptions}, @code{Tag_ARC_ABI_double_size},
|
|
@code{Tag_ARC_ISA_config}, @code{Tag_ARC_ISA_apex},
|
|
@code{Tag_ARC_ISA_mpy_option}
|
|
|
|
The @var{value} is either a @code{number}, @code{"string"}, or
|
|
@code{number, "string"} depending on the tag.
|
|
|
|
@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.
|