Merge branch 'vendor/LIBRESSL'
[dragonfly.git] / contrib / binutils-2.25 / gas / doc / c-bfin.texi
1 @c Copyright (C) 2005-2014 Free Software Foundation, Inc.
2 @c This is part of the GAS manual.
3 @c For copying conditions, see the file as.texinfo.
4 @c man end
5
6 @ifset GENERIC
7 @page
8 @node Blackfin-Dependent
9 @chapter Blackfin Dependent Features
10 @end ifset
11
12 @ifclear GENERIC
13 @node Machine Dependencies
14 @chapter Blackfin Dependent Features
15 @end ifclear
16
17 @cindex Blackfin support
18 @menu
19 * Blackfin Options::            Blackfin Options
20 * Blackfin Syntax::             Blackfin Syntax
21 * Blackfin Directives::         Blackfin Directives
22 @end menu
23
24 @node Blackfin Options
25 @section Options
26 @cindex Blackfin options (none)
27 @cindex options for Blackfin (none)
28
29 @c man begin OPTIONS
30 @table @gcctabopt
31
32 @cindex @code{-mcpu=} command line option, Blackfin
33 @item -mcpu=@var{processor}@r{[}-@var{sirevision}@r{]}
34 This option specifies the target processor.  The optional @var{sirevision}
35 is not used in assembler.  It's here such that GCC can easily pass down its
36 @code{-mcpu=} option.  The assembler will issue an
37 error message if an attempt is made to assemble an instruction which
38 will not execute on the target processor.  The following processor names are
39 recognized:
40 @code{bf504},
41 @code{bf506},
42 @code{bf512},
43 @code{bf514},
44 @code{bf516},
45 @code{bf518},
46 @code{bf522},
47 @code{bf523},
48 @code{bf524},
49 @code{bf525},
50 @code{bf526},
51 @code{bf527},
52 @code{bf531},
53 @code{bf532},
54 @code{bf533},
55 @code{bf534},
56 @code{bf535} (not implemented yet),
57 @code{bf536},
58 @code{bf537},
59 @code{bf538},
60 @code{bf539},
61 @code{bf542},
62 @code{bf542m},
63 @code{bf544},
64 @code{bf544m},
65 @code{bf547},
66 @code{bf547m},
67 @code{bf548},
68 @code{bf548m},
69 @code{bf549},
70 @code{bf549m},
71 @code{bf561},
72 and
73 @code{bf592}.
74
75 @cindex @code{-mfdpic} command line option, Blackfin
76 @item -mfdpic
77 Assemble for the FDPIC ABI.
78
79 @cindex @code{-mno-fdpic} command line option, Blackfin
80 @cindex @code{-mnopic} command line option, Blackfin
81 @item -mno-fdpic
82 @itemx -mnopic
83 Disable -mfdpic.
84 @end table
85 @c man end
86
87 @node Blackfin Syntax
88 @section Syntax
89 @cindex Blackfin syntax
90 @cindex syntax, Blackfin
91
92 @table @code
93 @item Special Characters
94 Assembler input is free format and may appear anywhere on the line.
95 One instruction may extend across multiple lines or more than one
96 instruction may appear on the same line.  White space (space, tab,
97 comments or newline) may appear anywhere between tokens.  A token must
98 not have embedded spaces.  Tokens include numbers, register names,
99 keywords, user identifiers, and also some multicharacter special
100 symbols like "+=", "/*" or "||".
101
102 Comments are introduced by the @samp{#} character and extend to the
103 end of the current line.  If the @samp{#} appears as the first
104 character of a line, the whole line is treated as a comment, but in
105 this case the line can also be a logical line number directive
106 (@pxref{Comments}) or a preprocessor control command
107 (@pxref{Preprocessing}).
108
109 @item Instruction Delimiting
110 A semicolon must terminate every instruction.  Sometimes a complete
111 instruction will consist of more than one operation.  There are two
112 cases where this occurs.  The first is when two general operations
113 are combined.  Normally a comma separates the different parts, as in
114
115 @smallexample
116 a0= r3.h * r2.l, a1 = r3.l * r2.h ;
117 @end smallexample
118
119 The second case occurs when a general instruction is combined with one
120 or two memory references for joint issue.  The latter portions are
121 set off by a "||" token.
122
123 @smallexample
124 a0 = r3.h * r2.l || r1 = [p3++] || r4 = [i2++];
125 @end smallexample
126
127 Multiple instructions can occur on the same line.  Each must be
128 terminated by a semicolon character.
129
130 @item Register Names
131
132 The assembler treats register names and instruction keywords in a case
133 insensitive manner.  User identifiers are case sensitive.  Thus, R3.l,
134 R3.L, r3.l and r3.L are all equivalent input to the assembler.
135
136 Register names are reserved and may not be used as program identifiers.
137
138 Some operations (such as "Move Register") require a register pair.
139 Register pairs are always data registers and are denoted using a colon,
140 eg., R3:2.  The larger number must be written firsts.  Note that the
141 hardware only supports odd-even pairs, eg., R7:6, R5:4, R3:2, and R1:0.
142
143 Some instructions (such as --SP (Push Multiple)) require a group of
144 adjacent registers.  Adjacent registers are denoted in the syntax by
145 the range enclosed in parentheses and separated by a colon, eg., (R7:3).
146 Again, the larger number appears first.
147
148 Portions of a particular register may be individually specified.  This
149 is written with a dot (".") following the register name and then a
150 letter denoting the desired portion.  For 32-bit registers, ".H"
151 denotes the most significant ("High") portion.  ".L" denotes the
152 least-significant portion.  The subdivisions of the 40-bit registers
153 are described later.
154
155 @item Accumulators
156 The set of 40-bit registers A1 and A0 that normally contain data that
157 is being manipulated.  Each accumulator can be accessed in four ways.
158
159 @table @code
160 @item one 40-bit register
161 The register will be referred to as A1 or A0.
162 @item one 32-bit register
163 The registers are designated as A1.W or A0.W.
164 @item two 16-bit registers
165 The registers are designated as A1.H, A1.L, A0.H or A0.L.
166 @item one 8-bit register
167 The registers are designated as A1.X or A0.X for the bits that
168 extend beyond bit 31.
169 @end table
170
171 @item Data Registers
172 The set of 32-bit registers (R0, R1, R2, R3, R4, R5, R6 and R7) that
173 normally contain data for manipulation.  These are abbreviated as
174 D-register or Dreg.  Data registers can be accessed as 32-bit registers
175 or as two independent 16-bit registers.  The least significant 16 bits
176 of each register is called the "low" half and is designated with ".L"
177 following the register name.  The most significant 16 bits are called
178 the "high" half and is designated with ".H" following the name.
179
180 @smallexample
181    R7.L, r2.h, r4.L, R0.H
182 @end smallexample
183
184 @item Pointer Registers
185 The set of 32-bit registers (P0, P1, P2, P3, P4, P5, SP and FP) that
186 normally contain byte addresses of data structures.  These are
187 abbreviated as P-register or Preg.
188
189 @smallexample
190 p2, p5, fp, sp
191 @end smallexample
192
193 @item Stack Pointer SP
194 The stack pointer contains the 32-bit address of the last occupied
195 byte location in the stack.  The stack grows by decrementing the
196 stack pointer.
197
198 @item Frame Pointer FP
199 The frame pointer contains the 32-bit address of the previous frame
200 pointer in the stack.  It is located at the top of a frame.
201
202 @item Loop Top
203 LT0 and LT1.  These registers contain the 32-bit address of the top of
204 a zero overhead loop.
205
206 @item Loop Count
207 LC0 and LC1.  These registers contain the 32-bit counter of the zero
208 overhead loop executions.
209
210 @item Loop Bottom
211 LB0 and LB1.  These registers contain the 32-bit address of the bottom
212 of a zero overhead loop.
213
214 @item Index Registers
215 The set of 32-bit registers (I0, I1, I2, I3) that normally contain byte
216 addresses of data structures.  Abbreviated I-register or Ireg.
217
218 @item Modify Registers
219 The set of 32-bit registers (M0, M1, M2, M3) that normally contain
220 offset values that are added and subtracted to one of the index
221 registers.  Abbreviated as Mreg.
222
223 @item Length Registers
224 The set of 32-bit registers (L0, L1, L2, L3) that normally contain the
225 length in bytes of the circular buffer.  Abbreviated as Lreg.  Clear
226 the Lreg to disable circular addressing for the corresponding Ireg.
227
228 @item Base Registers
229 The set of 32-bit registers (B0, B1, B2, B3) that normally contain the
230 base address in bytes of the circular buffer.  Abbreviated as Breg.
231
232 @item Floating Point
233 The Blackfin family has no hardware floating point but the .float
234 directive generates ieee floating point numbers for use with software
235 floating point libraries.
236
237 @item Blackfin Opcodes
238 For detailed information on the Blackfin machine instruction set, see
239 the Blackfin(r) Processor Instruction Set Reference.
240
241 @end table
242
243 @node Blackfin Directives
244 @section Directives
245 @cindex Blackfin directives
246 @cindex directives, Blackfin
247
248 The following directives are provided for compatibility with the VDSP assembler.
249
250 @table @code
251 @item .byte2
252 Initializes a two byte data object.
253
254 This maps to the @code{.short} directive.
255 @item .byte4
256 Initializes a four byte data object.
257
258 This maps to the @code{.int} directive.
259 @item .db
260 Initializes a single byte data object.
261
262 This directive is a synonym for @code{.byte}.
263 @item .dw
264 Initializes a two byte data object.
265
266 This directive is a synonym for @code{.byte2}.
267 @item .dd
268 Initializes a four byte data object.
269
270 This directive is a synonym for @code{.byte4}.
271 @item .var
272 Define and initialize a 32 bit data object.
273 @end table