1 @c Copyright 2005, 2006, 2009
2 @c Free Software Foundation, Inc.
3 @c This is part of the GAS manual.
4 @c For copying conditions, see the file as.texinfo.
7 @node Blackfin-Dependent
8 @chapter Blackfin Dependent Features
11 @node Machine Dependencies
12 @chapter Blackfin Dependent Features
15 @cindex Blackfin support
17 * Blackfin Options:: Blackfin Options
18 * Blackfin Syntax:: Blackfin Syntax
19 * Blackfin Directives:: Blackfin Directives
22 @node Blackfin Options
24 @cindex Blackfin options (none)
25 @cindex options for Blackfin (none)
29 @cindex @code{-mcpu=} command line option, Blackfin
30 @item -mcpu=@var{processor}@r{[}-@var{sirevision}@r{]}
31 This option specifies the target processor. The optional @var{sirevision}
32 is not used in assembler. It's here such that GCC can easily pass down its
33 @code{-mcpu=} option. The assembler will issue an
34 error message if an attempt is made to assemble an instruction which
35 will not execute on the target processor. The following processor names are
51 @code{bf535} (not implemented yet),
73 @cindex Blackfin syntax
74 @cindex syntax, Blackfin
77 @item Special Characters
78 Assembler input is free format and may appear anywhere on the line.
79 One instruction may extend across multiple lines or more than one
80 instruction may appear on the same line. White space (space, tab,
81 comments or newline) may appear anywhere between tokens. A token must
82 not have embedded spaces. Tokens include numbers, register names,
83 keywords, user identifiers, and also some multicharacter special
84 symbols like "+=", "/*" or "||".
86 @item Instruction Delimiting
87 A semicolon must terminate every instruction. Sometimes a complete
88 instruction will consist of more than one operation. There are two
89 cases where this occurs. The first is when two general operations
90 are combined. Normally a comma separates the different parts, as in
93 a0= r3.h * r2.l, a1 = r3.l * r2.h ;
96 The second case occurs when a general instruction is combined with one
97 or two memory references for joint issue. The latter portions are
98 set off by a "||" token.
101 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
106 The assembler treats register names and instruction keywords in a case
107 insensitive manner. User identifiers are case sensitive. Thus, R3.l,
108 R3.L, r3.l and r3.L are all equivalent input to the assembler.
110 Register names are reserved and may not be used as program identifiers.
112 Some operations (such as "Move Register") require a register pair.
113 Register pairs are always data registers and are denoted using a colon,
114 eg., R3:2. The larger number must be written firsts. Note that the
115 hardware only supports odd-even pairs, eg., R7:6, R5:4, R3:2, and R1:0.
117 Some instructions (such as --SP (Push Multiple)) require a group of
118 adjacent registers. Adjacent registers are denoted in the syntax by
119 the range enclosed in parentheses and separated by a colon, eg., (R7:3).
120 Again, the larger number appears first.
122 Portions of a particular register may be individually specified. This
123 is written with a dot (".") following the register name and then a
124 letter denoting the desired portion. For 32-bit registers, ".H"
125 denotes the most significant ("High") portion. ".L" denotes the
126 least-significant portion. The subdivisions of the 40-bit registers
130 The set of 40-bit registers A1 and A0 that normally contain data that
131 is being manipulated. Each accumulator can be accessed in four ways.
134 @item one 40-bit register
135 The register will be referred to as A1 or A0.
136 @item one 32-bit register
137 The registers are designated as A1.W or A0.W.
138 @item two 16-bit registers
139 The registers are designated as A1.H, A1.L, A0.H or A0.L.
140 @item one 8-bit register
141 The registers are designated as A1.X or A0.X for the bits that
142 extend beyond bit 31.
146 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) that
147 normally contain data for manipulation. These are abbreviated as
148 D-register or Dreg. Data registers can be accessed as 32-bit registers
149 or as two independent 16-bit registers. The least significant 16 bits
150 of each register is called the "low" half and is designated with ".L"
151 following the register name. The most significant 16 bits are called
152 the "high" half and is designated with ".H" following the name.
155 R7.L, r2.h, r4.L, R0.H
158 @item Pointer Registers
159 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) that
160 normally contain byte addresses of data structures. These are
161 abbreviated as P-register or Preg.
167 @item Stack Pointer SP
168 The stack pointer contains the 32-bit address of the last occupied
169 byte location in the stack. The stack grows by decrementing the
172 @item Frame Pointer FP
173 The frame pointer contains the 32-bit address of the previous frame
174 pointer in the stack. It is located at the top of a frame.
177 LT0 and LT1. These registers contain the 32-bit address of the top of
178 a zero overhead loop.
181 LC0 and LC1. These registers contain the 32-bit counter of the zero
182 overhead loop executions.
185 LB0 and LB1. These registers contain the 32-bit address of the bottom
186 of a zero overhead loop.
188 @item Index Registers
189 The set of 32-bit registers (I0, I1, I2, I3) that normally contain byte
190 addresses of data structures. Abbreviated I-register or Ireg.
192 @item Modify Registers
193 The set of 32-bit registers (M0, M1, M2, M3) that normally contain
194 offset values that are added and subracted to one of the index
195 registers. Abbreviated as Mreg.
197 @item Length Registers
198 The set of 32-bit registers (L0, L1, L2, L3) that normally contain the
199 length in bytes of the circular buffer. Abbreviated as Lreg. Clear
200 the Lreg to disable circular addressing for the corresponding Ireg.
203 The set of 32-bit registers (B0, B1, B2, B3) that normally contain the
204 base address in bytes of the circular buffer. Abbreviated as Breg.
207 The Blackfin family has no hardware floating point but the .float
208 directive generates ieee floating point numbers for use with software
209 floating point libraries.
211 @item Blackfin Opcodes
212 For detailed information on the Blackfin machine instruction set, see
213 the Blackfin(r) Processor Instruction Set Reference.
217 @node Blackfin Directives
219 @cindex Blackfin directives
220 @cindex directives, Blackfin
222 The following directives are provided for compatibility with the VDSP assembler.
226 Initializes a four byte data object.
228 Initializes a two byte data object.
236 Define and initialize a 32 bit data object.