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