* value.c (show_convenience): Tweak comment.
[deliverable/binutils-gdb.git] / gas / doc / c-tilegx.texi
CommitLineData
aa137e4d
NC
1@c Copyright 2011
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.
5@c man end
6
7@ifset GENERIC
8@page
9@node TILE-Gx-Dependent
10@chapter TILE-Gx Dependent Features
11@end ifset
12@ifclear GENERIC
13@node Machine Dependencies
14@chapter TILE-Gx Dependent Features
15@end ifclear
16
17@cindex TILE-Gx support
18@menu
19* TILE-Gx Options:: TILE-Gx Options
20* TILE-Gx Syntax:: TILE-Gx Syntax
21* TILE-Gx Directives:: TILE-Gx Directives
22@end menu
23
24@node TILE-Gx Options
25@section Options
26
27The following table lists all available TILE-Gx specific options:
28
29@c man begin OPTIONS
30@table @gcctabopt
31@cindex @samp{-m32} option, TILE-Gx
32@cindex @samp{-m64} option, TILE-Gx
33@item -m32 | -m64
34Select the word size, either 32 bits or 64 bits.
35
fb6cedde
WL
36@cindex @samp{-EB} option, TILE-Gx
37@cindex @samp{-EL} option, TILE-Gx
38@item -EB | -EL
39Select the endianness, either big-endian (-EB) or little-endian (-EL).
40
aa137e4d
NC
41@end table
42@c man end
43
44@node TILE-Gx Syntax
45@section Syntax
46@cindex TILE-Gx syntax
47@cindex syntax, TILE-Gx
48
49Block comments are delimited by @samp{/*} and @samp{*/}. End of line
50comments may be introduced by @samp{#}.
51
52Instructions consist of a leading opcode or macro name followed by
53whitespace and an optional comma-separated list of operands:
54
55@smallexample
56@var{opcode} [@var{operand}, @dots{}]
57@end smallexample
58
59Instructions must be separated by a newline or semicolon.
60
61There are two ways to write code: either write naked instructions,
62which the assembler is free to combine into VLIW bundles, or specify
63the VLIW bundles explicitly.
64
65Bundles are specified using curly braces:
66
67@smallexample
68@{ @var{add} r3,r4,r5 ; @var{add} r7,r8,r9 ; @var{lw} r10,r11 @}
69@end smallexample
70
71A bundle can span multiple lines. If you want to put multiple
72instructions on a line, whether in a bundle or not, you need to
73separate them with semicolons as in this example.
74
75A bundle may contain one or more instructions, up to the limit
76specified by the ISA (currently three). If fewer instructions are
77specified than the hardware supports in a bundle, the assembler
78inserts @code{fnop} instructions automatically.
79
80The assembler will prefer to preserve the ordering of instructions
81within the bundle, putting the first instruction in a lower-numbered
82pipeline than the next one, etc. This fact, combined with the
83optional use of explicit @code{fnop} or @code{nop} instructions,
84allows precise control over which pipeline executes each instruction.
85
86If the instructions cannot be bundled in the listed order, the
87assembler will automatically try to find a valid pipeline
88assignment. If there is no way to bundle the instructions together,
89the assembler reports an error.
90
91The assembler does not yet auto-bundle (automatically combine multiple
92instructions into one bundle), but it reserves the right to do so in
93the future. If you want to force an instruction to run by itself, put
94it in a bundle explicitly with curly braces and use @code{nop}
95instructions (not @code{fnop}) to fill the remaining pipeline slots in
96that bundle.
97
98@menu
99* TILE-Gx Opcodes:: Opcode Naming Conventions.
100* TILE-Gx Registers:: Register Naming.
101* TILE-Gx Modifiers:: Symbolic Operand Modifiers.
102@end menu
103
104@node TILE-Gx Opcodes
105@subsection Opcode Names
106@cindex TILE-Gx opcode names
107@cindex opcode names, TILE-Gx
108
109For a complete list of opcodes and descriptions of their semantics,
110see @cite{TILE-Gx Instruction Set Architecture}, available upon
111request at www.tilera.com.
112
113@node TILE-Gx Registers
114@subsection Register Names
115@cindex TILE-Gx register names
116@cindex register names, TILE-Gx
117
118General-purpose registers are represented by predefined symbols of the
119form @samp{r@var{N}}, where @var{N} represents a number between
120@code{0} and @code{63}. However, the following registers have
121canonical names that must be used instead:
122
123@table @code
124@item r54
125sp
126
127@item r55
128lr
129
130@item r56
131sn
132
133@item r57
134idn0
135
136@item r58
137idn1
138
139@item r59
140udn0
141
142@item r60
143udn1
144
145@item r61
146udn2
147
148@item r62
149udn3
150
151@item r63
152zero
153
154@end table
155
156The assembler will emit a warning if a numeric name is used instead of
157the non-numeric name. The @code{.no_require_canonical_reg_names}
158assembler pseudo-op turns off this
159warning. @code{.require_canonical_reg_names} turns it back on.
160
161@node TILE-Gx Modifiers
162@subsection Symbolic Operand Modifiers
163@cindex TILE-Gx modifiers
164@cindex symbol modifiers, TILE-Gx
165
166The assembler supports several modifiers when using symbol addresses
167in TILE-Gx instruction operands. The general syntax is the following:
168
169@smallexample
170modifier(symbol)
171@end smallexample
172
173The following modifiers are supported:
174
175@table @code
176
177@item hw0
178
179This modifier is used to load bits 0-15 of the symbol's address.
180
181@item hw1
182
183This modifier is used to load bits 16-31 of the symbol's address.
184
185@item hw2
186
187This modifier is used to load bits 32-47 of the symbol's address.
188
189@item hw3
190
191This modifier is used to load bits 48-63 of the symbol's address.
192
193@item hw0_last
194
195This modifier yields the same value as @code{hw0}, but it also checks
196that the value does not overflow.
197
198@item hw1_last
199
200This modifier yields the same value as @code{hw1}, but it also checks
201that the value does not overflow.
202
203@item hw2_last
204
205This modifier yields the same value as @code{hw2}, but it also checks
206that the value does not overflow.
207
208A 48-bit symbolic value is constructed by using the following idiom:
209
210@smallexample
211moveli r0, hw2_last(sym)
212shl16insli r0, r0, hw1(sym)
213shl16insli r0, r0, hw0(sym)
214@end smallexample
215
216@item hw0_got
217
218This modifier is used to load bits 0-15 of the symbol's offset in the
219GOT entry corresponding to the symbol.
220
aa137e4d
NC
221@item hw0_last_got
222
223This modifier yields the same value as @code{hw0_got}, but it also
224checks that the value does not overflow.
225
226@item hw1_last_got
227
6f7be959
WL
228This modifier is used to load bits 16-31 of the symbol's offset in the
229GOT entry corresponding to the symbol, and it also checks that the
230value does not overflow.
aa137e4d
NC
231
232@item plt
233
234This modifier is used for function symbols. It causes a
235@emph{procedure linkage table}, an array of code stubs, to be created
236at the time the shared object is created or linked against, together
237with a global offset table entry. The value is a pc-relative offset
238to the corresponding stub code in the procedure linkage table. This
239arrangement causes the run-time symbol resolver to be called to look
240up and set the value of the symbol the first time the function is
241called (at latest; depending environment variables). It is only safe
242to leave the symbol unresolved this way if all references are function
243calls.
244
245@item hw0_tls_gd
246
247This modifier is used to load bits 0-15 of the offset of the GOT entry
248of the symbol's TLS descriptor, to be used for general-dynamic TLS
249accesses.
250
aa137e4d
NC
251@item hw0_last_tls_gd
252
253This modifier yields the same value as @code{hw0_tls_gd}, but it also
254checks that the value does not overflow.
255
256@item hw1_last_tls_gd
257
6f7be959
WL
258This modifier is used to load bits 16-31 of the offset of the GOT
259entry of the symbol's TLS descriptor, to be used for general-dynamic
260TLS accesses. It also checks that the value does not overflow.
aa137e4d
NC
261
262@item hw0_tls_ie
263
264This modifier is used to load bits 0-15 of the offset of the GOT entry
265containing the offset of the symbol's address from the TCB, to be used
266for initial-exec TLS accesses.
267
6f7be959
WL
268@item hw0_last_tls_ie
269
270This modifier yields the same value as @code{hw0_tls_ie}, but it also
271checks that the value does not overflow.
272
273@item hw1_last_tls_ie
aa137e4d
NC
274
275This modifier is used to load bits 16-31 of the offset of the GOT
276entry containing the offset of the symbol's address from the TCB, to
6f7be959
WL
277be used for initial-exec TLS accesses. It also checks that the value
278does not overflow.
aa137e4d 279
6f7be959 280@item hw0_tls_le
aa137e4d 281
6f7be959
WL
282This modifier is used to load bits 0-15 of the offset of the symbol's
283address from the TCB, to be used for local-exec TLS accesses.
aa137e4d 284
6f7be959 285@item hw0_last_tls_le
aa137e4d 286
6f7be959
WL
287This modifier yields the same value as @code{hw0_tls_le}, but it also
288checks that the value does not overflow.
aa137e4d 289
6f7be959 290@item hw1_last_tls_le
aa137e4d 291
6f7be959
WL
292This modifier is used to load bits 16-31 of the offset of the symbol's
293address from the TCB, to be used for local-exec TLS accesses. It
294also checks that the value does not overflow.
aa137e4d 295
6f7be959 296@item tls_gd_call
aa137e4d 297
6f7be959
WL
298This modifier is used to tag an instrution as the ``call'' part of a
299calling sequence for a TLS GD reference of its operand.
aa137e4d 300
6f7be959 301@item tls_gd_add
aa137e4d 302
6f7be959
WL
303This modifier is used to tag an instruction as the ``add'' part of a
304calling sequence for a TLS GD reference of its operand.
305
306@item tls_ie_load
307
308This modifier is used to tag an instruction as the ``load'' part of a
309calling sequence for a TLS IE reference of its operand.
aa137e4d
NC
310
311@end table
312
313@node TILE-Gx Directives
314@section TILE-Gx Directives
315@cindex machine directives, TILE-Gx
316@cindex TILE-Gx machine directives
317
318@table @code
319
320@cindex @code{.align} directive, TILE-Gx
321@item .align @var{expression} [, @var{expression}]
322This is the generic @var{.align} directive. The first argument is the
323requested alignment in bytes.
324
325@cindex @code{.allow_suspicious_bundles} directive, TILE-Gx
326@item .allow_suspicious_bundles
327Turns on error checking for combinations of instructions in a bundle
328that probably indicate a programming error. This is on by default.
329
330@item .no_allow_suspicious_bundles
331Turns off error checking for combinations of instructions in a bundle
332that probably indicate a programming error.
333
334@cindex @code{.require_canonical_reg_names} directive, TILE-Gx
335@item .require_canonical_reg_names
336Require that canonical register names be used, and emit a warning if
337the numeric names are used. This is on by default.
338
339@item .no_require_canonical_reg_names
340Permit the use of numeric names for registers that have canonical
341names.
342
343@end table
This page took 0.076062 seconds and 4 git commands to generate.