1 |
179 |
jshamlet |
@c Copyright 2009, 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 |
|
|
@ifset GENERIC
|
6 |
|
|
@page
|
7 |
|
|
@node S/390-Dependent
|
8 |
|
|
@chapter IBM S/390 Dependent Features
|
9 |
|
|
@end ifset
|
10 |
|
|
@ifclear GENERIC
|
11 |
|
|
@node Machine Dependencies
|
12 |
|
|
@chapter IBM S/390 Dependent Features
|
13 |
|
|
@end ifclear
|
14 |
|
|
|
15 |
|
|
@cindex s390 support
|
16 |
|
|
|
17 |
|
|
The s390 version of @code{@value{AS}} supports two architectures modes
|
18 |
|
|
and seven chip levels. The architecture modes are the Enterprise System
|
19 |
|
|
Architecture (ESA) and the newer z/Architecture mode. The chip levels
|
20 |
|
|
are g5, g6, z900, z990, z9-109, z9-ec, z10 and z196.
|
21 |
|
|
|
22 |
|
|
@menu
|
23 |
|
|
* s390 Options:: Command-line Options.
|
24 |
|
|
* s390 Characters:: Special Characters.
|
25 |
|
|
* s390 Syntax:: Assembler Instruction syntax.
|
26 |
|
|
* s390 Directives:: Assembler Directives.
|
27 |
|
|
* s390 Floating Point:: Floating Point.
|
28 |
|
|
@end menu
|
29 |
|
|
|
30 |
|
|
@node s390 Options
|
31 |
|
|
@section Options
|
32 |
|
|
@cindex options for s390
|
33 |
|
|
@cindex s390 options
|
34 |
|
|
|
35 |
|
|
The following table lists all available s390 specific options:
|
36 |
|
|
|
37 |
|
|
@table @code
|
38 |
|
|
@cindex @samp{-m31} option, s390
|
39 |
|
|
@cindex @samp{-m64} option, s390
|
40 |
|
|
@item -m31 | -m64
|
41 |
|
|
Select 31- or 64-bit ABI implying a word size of 32- or 64-bit.
|
42 |
|
|
|
43 |
|
|
These options are only available with the ELF object file format, and
|
44 |
|
|
require that the necessary BFD support has been included (on a 31-bit
|
45 |
|
|
platform you must add --enable-64-bit-bfd on the call to the configure
|
46 |
|
|
script to enable 64-bit usage and use s390x as target platform).
|
47 |
|
|
|
48 |
|
|
@cindex @samp{-mesa} option, s390
|
49 |
|
|
@cindex @samp{-mzarch} option, s390
|
50 |
|
|
@item -mesa | -mzarch
|
51 |
|
|
Select the architecture mode, either the Enterprise System Architecture
|
52 |
|
|
(esa) mode or the z/Architecture mode (zarch).
|
53 |
|
|
|
54 |
|
|
The 64-bit instructions are only available with the z/Architecture mode.
|
55 |
|
|
The combination of @samp{-m64} and @samp{-mesa} results in a warning
|
56 |
|
|
message.
|
57 |
|
|
|
58 |
|
|
@cindex @samp{-march=} option, s390
|
59 |
|
|
@item -march=@var{CPU}
|
60 |
|
|
This option specifies the target processor. The following processor names
|
61 |
|
|
are recognized:
|
62 |
|
|
@code{g5},
|
63 |
|
|
@code{g6},
|
64 |
|
|
@code{z900},
|
65 |
|
|
@code{z990},
|
66 |
|
|
@code{z9-109},
|
67 |
|
|
@code{z9-ec},
|
68 |
|
|
@code{z10} and
|
69 |
|
|
@code{z196}.
|
70 |
|
|
Assembling an instruction that is not supported on the target processor
|
71 |
|
|
results in an error message. Do not specify @code{g5} or @code{g6}
|
72 |
|
|
with @samp{-mzarch}.
|
73 |
|
|
|
74 |
|
|
@cindex @samp{-mregnames} option, s390
|
75 |
|
|
@item -mregnames
|
76 |
|
|
Allow symbolic names for registers.
|
77 |
|
|
|
78 |
|
|
@cindex @samp{-mno-regnames} option, s390
|
79 |
|
|
@item -mno-regnames
|
80 |
|
|
Do not allow symbolic names for registers.
|
81 |
|
|
|
82 |
|
|
@cindex @samp{-mwarn-areg-zero} option, s390
|
83 |
|
|
@item -mwarn-areg-zero
|
84 |
|
|
Warn whenever the operand for a base or index register has been specified
|
85 |
|
|
but evaluates to zero. This can indicate the misuse of general purpose
|
86 |
|
|
register 0 as an address register.
|
87 |
|
|
|
88 |
|
|
@end table
|
89 |
|
|
|
90 |
|
|
@node s390 Characters
|
91 |
|
|
@section Special Characters
|
92 |
|
|
@cindex line comment character, s390
|
93 |
|
|
@cindex s390 line comment character
|
94 |
|
|
|
95 |
|
|
@samp{#} is the line comment character.
|
96 |
|
|
|
97 |
|
|
If a @samp{#} appears as the first character of a line then the whole
|
98 |
|
|
line is treated as a comment, but in this case the line could also be
|
99 |
|
|
a logical line number directive (@pxref{Comments}) or a preprocessor
|
100 |
|
|
control command (@pxref{Preprocessing}).
|
101 |
|
|
|
102 |
|
|
@cindex line separator, s390
|
103 |
|
|
@cindex statement separator, s390
|
104 |
|
|
@cindex s390 line separator
|
105 |
|
|
The @samp{;} character can be used instead of a newline to separate
|
106 |
|
|
statements.
|
107 |
|
|
|
108 |
|
|
@node s390 Syntax
|
109 |
|
|
@section Instruction syntax
|
110 |
|
|
@cindex instruction syntax, s390
|
111 |
|
|
@cindex s390 instruction syntax
|
112 |
|
|
|
113 |
|
|
The assembler syntax closely follows the syntax outlined in
|
114 |
|
|
Enterprise Systems Architecture/390 Principles of Operation (SA22-7201)
|
115 |
|
|
and the z/Architecture Principles of Operation (SA22-7832).
|
116 |
|
|
|
117 |
|
|
Each instruction has two major parts, the instruction mnemonic
|
118 |
|
|
and the instruction operands. The instruction format varies.
|
119 |
|
|
|
120 |
|
|
@menu
|
121 |
|
|
* s390 Register:: Register Naming
|
122 |
|
|
* s390 Mnemonics:: Instruction Mnemonics
|
123 |
|
|
* s390 Operands:: Instruction Operands
|
124 |
|
|
* s390 Formats:: Instruction Formats
|
125 |
|
|
* s390 Aliases:: Instruction Aliases
|
126 |
|
|
* s390 Operand Modifier:: Instruction Operand Modifier
|
127 |
|
|
* s390 Instruction Marker:: Instruction Marker
|
128 |
|
|
* s390 Literal Pool Entries:: Literal Pool Entries
|
129 |
|
|
@end menu
|
130 |
|
|
|
131 |
|
|
@node s390 Register
|
132 |
|
|
@subsection Register naming
|
133 |
|
|
@cindex register naming, s390
|
134 |
|
|
@cindex s390 register naming
|
135 |
|
|
|
136 |
|
|
The @code{@value{AS}} recognizes a number of predefined symbols for the
|
137 |
|
|
various processor registers. A register specification in one of the
|
138 |
|
|
instruction formats is an unsigned integer between 0 and 15. The specific
|
139 |
|
|
instruction and the position of the register in the instruction format
|
140 |
|
|
denotes the type of the register. The register symbols are prefixed with
|
141 |
|
|
@samp{%}:
|
142 |
|
|
|
143 |
|
|
@display
|
144 |
|
|
@multitable {%rN} {the 16 general purpose registers, 0 <= N <= 15}
|
145 |
|
|
@item %rN @tab the 16 general purpose registers, 0 <= N <= 15
|
146 |
|
|
@item %fN @tab the 16 floating point registers, 0 <= N <= 15
|
147 |
|
|
@item %aN @tab the 16 access registers, 0 <= N <= 15
|
148 |
|
|
@item %cN @tab the 16 control registers, 0 <= N <= 15
|
149 |
|
|
@item %lit @tab an alias for the general purpose register %r13
|
150 |
|
|
@item %sp @tab an alias for the general purpose register %r15
|
151 |
|
|
@end multitable
|
152 |
|
|
@end display
|
153 |
|
|
|
154 |
|
|
@node s390 Mnemonics
|
155 |
|
|
@subsection Instruction Mnemonics
|
156 |
|
|
@cindex instruction mnemonics, s390
|
157 |
|
|
@cindex s390 instruction mnemonics
|
158 |
|
|
|
159 |
|
|
All instructions documented in the Principles of Operation are supported
|
160 |
|
|
with the mnemonic and order of operands as described.
|
161 |
|
|
The instruction mnemonic identifies the instruction format
|
162 |
|
|
(@ref{s390 Formats}) and the specific operation code for the instruction.
|
163 |
|
|
For example, the @samp{lr} mnemonic denotes the instruction format @samp{RR}
|
164 |
|
|
with the operation code @samp{0x18}.
|
165 |
|
|
|
166 |
|
|
The definition of the various mnemonics follows a scheme, where the first
|
167 |
|
|
character usually hint at the type of the instruction:
|
168 |
|
|
|
169 |
|
|
@display
|
170 |
|
|
@multitable {sla, sll} {if r is the last character the instruction operates on registers}
|
171 |
|
|
@item a @tab add instruction, for example @samp{al} for add logical 32-bit
|
172 |
|
|
@item b @tab branch instruction, for example @samp{bc} for branch on condition
|
173 |
|
|
@item c @tab compare or convert instruction, for example @samp{cr} for compare
|
174 |
|
|
register 32-bit
|
175 |
|
|
@item d @tab divide instruction, for example @samp{dlr} devide logical register
|
176 |
|
|
64-bit to 32-bit
|
177 |
|
|
@item i @tab insert instruction, for example @samp{ic} insert character
|
178 |
|
|
@item l @tab load instruction, for example @samp{ltr} load and test register
|
179 |
|
|
@item mv @tab move instruction, for example @samp{mvc} move character
|
180 |
|
|
@item m @tab multiply instruction, for example @samp{mh} multiply halfword
|
181 |
|
|
@item n @tab and instruction, for example @samp{ni} and immediate
|
182 |
|
|
@item o @tab or instruction, for example @samp{oc} or character
|
183 |
|
|
@item sla, sll @tab shift left single instruction
|
184 |
|
|
@item sra, srl @tab shift right single instruction
|
185 |
|
|
@item st @tab store instruction, for example @samp{stm} store multiple
|
186 |
|
|
@item s @tab subtract instruction, for example @samp{slr} subtract
|
187 |
|
|
logical 32-bit
|
188 |
|
|
@item t @tab test or translate instruction, of example @samp{tm} test under mask
|
189 |
|
|
@item x @tab exclusive or instruction, for example @samp{xc} exclusive or
|
190 |
|
|
character
|
191 |
|
|
@end multitable
|
192 |
|
|
@end display
|
193 |
|
|
|
194 |
|
|
Certain characters at the end of the mnemonic may describe a property
|
195 |
|
|
of the instruction:
|
196 |
|
|
|
197 |
|
|
@display
|
198 |
|
|
@multitable {c} {if r is the last character the instruction operates on registers}
|
199 |
|
|
@item c @tab the instruction uses a 8-bit character operand
|
200 |
|
|
@item f @tab the instruction extends a 32-bit operand to 64 bit
|
201 |
|
|
@item g @tab the operands are treated as 64-bit values
|
202 |
|
|
@item h @tab the operand uses a 16-bit halfword operand
|
203 |
|
|
@item i @tab the instruction uses an immediate operand
|
204 |
|
|
@item l @tab the instruction uses unsigned, logical operands
|
205 |
|
|
@item m @tab the instruction uses a mask or operates on multiple values
|
206 |
|
|
@item r @tab if r is the last character, the instruction operates on registers
|
207 |
|
|
@item y @tab the instruction uses 20-bit displacements
|
208 |
|
|
@end multitable
|
209 |
|
|
@end display
|
210 |
|
|
|
211 |
|
|
There are many exceptions to the scheme outlined in the above lists, in
|
212 |
|
|
particular for the priviledged instructions. For non-priviledged
|
213 |
|
|
instruction it works quite well, for example the instruction @samp{clgfr}
|
214 |
|
|
c: compare instruction, l: unsigned operands, g: 64-bit operands,
|
215 |
|
|
f: 32- to 64-bit extension, r: register operands. The instruction compares
|
216 |
|
|
an 64-bit value in a register with the zero extended 32-bit value from
|
217 |
|
|
a second register.
|
218 |
|
|
For a complete list of all mnemonics see appendix B in the Principles
|
219 |
|
|
of Operation.
|
220 |
|
|
|
221 |
|
|
@node s390 Operands
|
222 |
|
|
@subsection Instruction Operands
|
223 |
|
|
@cindex instruction operands, s390
|
224 |
|
|
@cindex s390 instruction operands
|
225 |
|
|
|
226 |
|
|
Instruction operands can be grouped into three classes, operands located
|
227 |
|
|
in registers, immediate operands, and operands in storage.
|
228 |
|
|
|
229 |
|
|
A register operand can be located in general, floating-point, access,
|
230 |
|
|
or control register. The register is identified by a four-bit field.
|
231 |
|
|
The field containing the register operand is called the R field.
|
232 |
|
|
|
233 |
|
|
Immediate operands are contained within the instruction and can have
|
234 |
|
|
8, 16 or 32 bits. The field containing the immediate operand is called
|
235 |
|
|
the I field. Dependent on the instruction the I field is either signed
|
236 |
|
|
or unsigned.
|
237 |
|
|
|
238 |
|
|
A storage operand consists of an address and a length. The address of a
|
239 |
|
|
storage operands can be specified in any of these ways:
|
240 |
|
|
|
241 |
|
|
@itemize
|
242 |
|
|
@item The content of a single general R
|
243 |
|
|
@item The sum of the content of a general register called the base
|
244 |
|
|
register B plus the content of a displacement field D
|
245 |
|
|
@item The sum of the contents of two general registers called the
|
246 |
|
|
index register X and the base register B plus the content of a
|
247 |
|
|
displacement field
|
248 |
|
|
@item The sum of the current instruction address and a 32-bit signed
|
249 |
|
|
immediate field multiplied by two.
|
250 |
|
|
@end itemize
|
251 |
|
|
|
252 |
|
|
The length of a storage operand can be:
|
253 |
|
|
|
254 |
|
|
@itemize
|
255 |
|
|
@item Implied by the instruction
|
256 |
|
|
@item Specified by a bitmask
|
257 |
|
|
@item Specified by a four-bit or eight-bit length field L
|
258 |
|
|
@item Specified by the content of a general register
|
259 |
|
|
@end itemize
|
260 |
|
|
|
261 |
|
|
The notation for storage operand addresses formed from multiple fields is
|
262 |
|
|
as follows:
|
263 |
|
|
|
264 |
|
|
@table @code
|
265 |
|
|
@item Dn(Bn)
|
266 |
|
|
the address for operand number n is formed from the content of general
|
267 |
|
|
register Bn called the base register and the displacement field Dn.
|
268 |
|
|
@item Dn(Xn,Bn)
|
269 |
|
|
the address for operand number n is formed from the content of general
|
270 |
|
|
register Xn called the index register, general register Bn called the
|
271 |
|
|
base register and the displacement field Dn.
|
272 |
|
|
@item Dn(Ln,Bn)
|
273 |
|
|
the address for operand number n is formed from the content of general
|
274 |
|
|
regiser Bn called the base register and the displacement field Dn.
|
275 |
|
|
The length of the operand n is specified by the field Ln.
|
276 |
|
|
@end table
|
277 |
|
|
|
278 |
|
|
The base registers Bn and the index registers Xn of a storage operand can
|
279 |
|
|
be skipped. If Bn and Xn are skipped, a zero will be stored to the operand
|
280 |
|
|
field. The notation changes as follows:
|
281 |
|
|
|
282 |
|
|
@display
|
283 |
|
|
@multitable @columnfractions 0.30 0.30
|
284 |
|
|
@headitem full notation @tab short notation
|
285 |
|
|
@item Dn(0,Bn) @tab Dn(Bn)
|
286 |
|
|
@item Dn(0,0) @tab Dn
|
287 |
|
|
@item Dn(0) @tab Dn
|
288 |
|
|
@item Dn(Ln,0) @tab Dn(Ln)
|
289 |
|
|
@end multitable
|
290 |
|
|
@end display
|
291 |
|
|
|
292 |
|
|
|
293 |
|
|
@node s390 Formats
|
294 |
|
|
@subsection Instruction Formats
|
295 |
|
|
@cindex instruction formats, s390
|
296 |
|
|
@cindex s390 instruction formats
|
297 |
|
|
|
298 |
|
|
The Principles of Operation manuals lists 26 instruction formats where
|
299 |
|
|
some of the formats have multiple variants. For the @samp{.insn}
|
300 |
|
|
pseudo directive the assembler recognizes some of the formats.
|
301 |
|
|
Typically, the most general variant of the instruction format is used
|
302 |
|
|
by the @samp{.insn} directive.
|
303 |
|
|
|
304 |
|
|
The following table lists the abbreviations used in the table of
|
305 |
|
|
instruction formats:
|
306 |
|
|
|
307 |
|
|
@display
|
308 |
|
|
@multitable {OpCode / OpCd} {Displacement lower 12 bits for operand x.}
|
309 |
|
|
@item OpCode / OpCd @tab Part of the op code.
|
310 |
|
|
@item Bx @tab Base register number for operand x.
|
311 |
|
|
@item Dx @tab Displacement for operand x.
|
312 |
|
|
@item DLx @tab Displacement lower 12 bits for operand x.
|
313 |
|
|
@item DHx @tab Displacement higher 8-bits for operand x.
|
314 |
|
|
@item Rx @tab Register number for operand x.
|
315 |
|
|
@item Xx @tab Index register number for operand x.
|
316 |
|
|
@item Ix @tab Signed immediate for operand x.
|
317 |
|
|
@item Ux @tab Unsigned immediate for operand x.
|
318 |
|
|
@end multitable
|
319 |
|
|
@end display
|
320 |
|
|
|
321 |
|
|
An instruction is two, four, or six bytes in length and must be aligned
|
322 |
|
|
on a 2 byte boundary. The first two bits of the instruction specify the
|
323 |
|
|
length of the instruction, 00 indicates a two byte instruction, 01 and 10
|
324 |
|
|
indicates a four byte instruction, and 11 indicates a six byte instruction.
|
325 |
|
|
|
326 |
|
|
The following table lists the s390 instruction formats that are available
|
327 |
|
|
with the @samp{.insn} pseudo directive:
|
328 |
|
|
|
329 |
|
|
@table @code
|
330 |
|
|
@item E format
|
331 |
|
|
@verbatim
|
332 |
|
|
+-------------+
|
333 |
|
|
| OpCode |
|
334 |
|
|
+-------------+
|
335 |
|
|
|
336 |
|
|
@end verbatim
|
337 |
|
|
|
338 |
|
|
@item RI format: <insn> R1,I2
|
339 |
|
|
@verbatim
|
340 |
|
|
+--------+----+----+------------------+
|
341 |
|
|
| OpCode | R1 |OpCd| I2 |
|
342 |
|
|
+--------+----+----+------------------+
|
343 |
|
|
|
344 |
|
|
@end verbatim
|
345 |
|
|
|
346 |
|
|
@item RIE format: <insn> R1,R3,I2
|
347 |
|
|
@verbatim
|
348 |
|
|
+--------+----+----+------------------+--------+--------+
|
349 |
|
|
| OpCode | R1 | R3 | I2 |////////| OpCode |
|
350 |
|
|
+--------+----+----+------------------+--------+--------+
|
351 |
|
|
|
352 |
|
|
@end verbatim
|
353 |
|
|
|
354 |
|
|
@item RIL format: <insn> R1,I2
|
355 |
|
|
@verbatim
|
356 |
|
|
+--------+----+----+------------------------------------+
|
357 |
|
|
| OpCode | R1 |OpCd| I2 |
|
358 |
|
|
+--------+----+----+------------------------------------+
|
359 |
|
|
|
360 |
|
|
@end verbatim
|
361 |
|
|
|
362 |
|
|
@item RILU format: <insn> R1,U2
|
363 |
|
|
@verbatim
|
364 |
|
|
+--------+----+----+------------------------------------+
|
365 |
|
|
| OpCode | R1 |OpCd| U2 |
|
366 |
|
|
+--------+----+----+------------------------------------+
|
367 |
|
|
|
368 |
|
|
@end verbatim
|
369 |
|
|
|
370 |
|
|
@item RIS format: <insn> R1,I2,M3,D4(B4)
|
371 |
|
|
@verbatim
|
372 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
373 |
|
|
| OpCode | R1 | M3 | B4 | D4 | I2 | Opcode |
|
374 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
375 |
|
|
|
376 |
|
|
@end verbatim
|
377 |
|
|
|
378 |
|
|
@item RR format: <insn> R1,R2
|
379 |
|
|
@verbatim
|
380 |
|
|
+--------+----+----+
|
381 |
|
|
| OpCode | R1 | R2 |
|
382 |
|
|
+--------+----+----+
|
383 |
|
|
|
384 |
|
|
@end verbatim
|
385 |
|
|
|
386 |
|
|
@item RRE format: <insn> R1,R2
|
387 |
|
|
@verbatim
|
388 |
|
|
+------------------+--------+----+----+
|
389 |
|
|
| OpCode |////////| R1 | R2 |
|
390 |
|
|
+------------------+--------+----+----+
|
391 |
|
|
|
392 |
|
|
@end verbatim
|
393 |
|
|
|
394 |
|
|
@item RRF format: <insn> R1,R2,R3,M4
|
395 |
|
|
@verbatim
|
396 |
|
|
+------------------+----+----+----+----+
|
397 |
|
|
| OpCode | R3 | M4 | R1 | R2 |
|
398 |
|
|
+------------------+----+----+----+----+
|
399 |
|
|
|
400 |
|
|
@end verbatim
|
401 |
|
|
|
402 |
|
|
@item RRS format: <insn> R1,R2,M3,D4(B4)
|
403 |
|
|
@verbatim
|
404 |
|
|
+--------+----+----+----+-------------+----+----+--------+
|
405 |
|
|
| OpCode | R1 | R3 | B4 | D4 | M3 |////| OpCode |
|
406 |
|
|
+--------+----+----+----+-------------+----+----+--------+
|
407 |
|
|
|
408 |
|
|
@end verbatim
|
409 |
|
|
|
410 |
|
|
@item RS format: <insn> R1,R3,D2(B2)
|
411 |
|
|
@verbatim
|
412 |
|
|
+--------+----+----+----+-------------+
|
413 |
|
|
| OpCode | R1 | R3 | B2 | D2 |
|
414 |
|
|
+--------+----+----+----+-------------+
|
415 |
|
|
|
416 |
|
|
@end verbatim
|
417 |
|
|
|
418 |
|
|
@item RSE format: <insn> R1,R3,D2(B2)
|
419 |
|
|
@verbatim
|
420 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
421 |
|
|
| OpCode | R1 | R3 | B2 | D2 |////////| OpCode |
|
422 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
423 |
|
|
|
424 |
|
|
@end verbatim
|
425 |
|
|
|
426 |
|
|
@item RSI format: <insn> R1,R3,I2
|
427 |
|
|
@verbatim
|
428 |
|
|
+--------+----+----+------------------------------------+
|
429 |
|
|
| OpCode | R1 | R3 | I2 |
|
430 |
|
|
+--------+----+----+------------------------------------+
|
431 |
|
|
|
432 |
|
|
@end verbatim
|
433 |
|
|
|
434 |
|
|
@item RSY format: <insn> R1,R3,D2(B2)
|
435 |
|
|
@verbatim
|
436 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
437 |
|
|
| OpCode | R1 | R3 | B2 | DL2 | DH2 | OpCode |
|
438 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
439 |
|
|
|
440 |
|
|
@end verbatim
|
441 |
|
|
|
442 |
|
|
@item RX format: <insn> R1,D2(X2,B2)
|
443 |
|
|
@verbatim
|
444 |
|
|
+--------+----+----+----+-------------+
|
445 |
|
|
| OpCode | R1 | X2 | B2 | D2 |
|
446 |
|
|
+--------+----+----+----+-------------+
|
447 |
|
|
|
448 |
|
|
@end verbatim
|
449 |
|
|
|
450 |
|
|
@item RXE format: <insn> R1,D2(X2,B2)
|
451 |
|
|
@verbatim
|
452 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
453 |
|
|
| OpCode | R1 | X2 | B2 | D2 |////////| OpCode |
|
454 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
455 |
|
|
|
456 |
|
|
@end verbatim
|
457 |
|
|
|
458 |
|
|
@item RXF format: <insn> R1,R3,D2(X2,B2)
|
459 |
|
|
@verbatim
|
460 |
|
|
+--------+----+----+----+-------------+----+---+--------+
|
461 |
|
|
| OpCode | R3 | X2 | B2 | D2 | R1 |///| OpCode |
|
462 |
|
|
+--------+----+----+----+-------------+----+---+--------+
|
463 |
|
|
|
464 |
|
|
@end verbatim
|
465 |
|
|
|
466 |
|
|
@item RXY format: <insn> R1,D2(X2,B2)
|
467 |
|
|
@verbatim
|
468 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
469 |
|
|
| OpCode | R1 | X2 | B2 | DL2 | DH2 | OpCode |
|
470 |
|
|
+--------+----+----+----+-------------+--------+--------+
|
471 |
|
|
|
472 |
|
|
@end verbatim
|
473 |
|
|
|
474 |
|
|
@item S format: <insn> D2(B2)
|
475 |
|
|
@verbatim
|
476 |
|
|
+------------------+----+-------------+
|
477 |
|
|
| OpCode | B2 | D2 |
|
478 |
|
|
+------------------+----+-------------+
|
479 |
|
|
|
480 |
|
|
@end verbatim
|
481 |
|
|
|
482 |
|
|
@item SI format: <insn> D1(B1),I2
|
483 |
|
|
@verbatim
|
484 |
|
|
+--------+---------+----+-------------+
|
485 |
|
|
| OpCode | I2 | B1 | D1 |
|
486 |
|
|
+--------+---------+----+-------------+
|
487 |
|
|
|
488 |
|
|
@end verbatim
|
489 |
|
|
|
490 |
|
|
@item SIY format: <insn> D1(B1),U2
|
491 |
|
|
@verbatim
|
492 |
|
|
+--------+---------+----+-------------+--------+--------+
|
493 |
|
|
| OpCode | I2 | B1 | DL1 | DH1 | OpCode |
|
494 |
|
|
+--------+---------+----+-------------+--------+--------+
|
495 |
|
|
|
496 |
|
|
@end verbatim
|
497 |
|
|
|
498 |
|
|
@item SIL format: <insn> D1(B1),I2
|
499 |
|
|
@verbatim
|
500 |
|
|
+------------------+----+-------------+-----------------+
|
501 |
|
|
| OpCode | B1 | D1 | I2 |
|
502 |
|
|
+------------------+----+-------------+-----------------+
|
503 |
|
|
|
504 |
|
|
@end verbatim
|
505 |
|
|
|
506 |
|
|
@item SS format: <insn> D1(R1,B1),D2(B3),R3
|
507 |
|
|
@verbatim
|
508 |
|
|
+--------+----+----+----+-------------+----+------------+
|
509 |
|
|
| OpCode | R1 | R3 | B1 | D1 | B2 | D2 |
|
510 |
|
|
+--------+----+----+----+-------------+----+------------+
|
511 |
|
|
|
512 |
|
|
@end verbatim
|
513 |
|
|
|
514 |
|
|
@item SSE format: <insn> D1(B1),D2(B2)
|
515 |
|
|
@verbatim
|
516 |
|
|
+------------------+----+-------------+----+------------+
|
517 |
|
|
| OpCode | B1 | D1 | B2 | D2 |
|
518 |
|
|
+------------------+----+-------------+----+------------+
|
519 |
|
|
|
520 |
|
|
@end verbatim
|
521 |
|
|
|
522 |
|
|
@item SSF format: <insn> D1(B1),D2(B2),R3
|
523 |
|
|
@verbatim
|
524 |
|
|
+--------+----+----+----+-------------+----+------------+
|
525 |
|
|
| OpCode | R3 |OpCd| B1 | D1 | B2 | D2 |
|
526 |
|
|
+--------+----+----+----+-------------+----+------------+
|
527 |
|
|
|
528 |
|
|
@end verbatim
|
529 |
|
|
|
530 |
|
|
@end table
|
531 |
|
|
|
532 |
|
|
For the complete list of all instruction format variants see the
|
533 |
|
|
Principles of Operation manuals.
|
534 |
|
|
|
535 |
|
|
@node s390 Aliases
|
536 |
|
|
@subsection Instruction Aliases
|
537 |
|
|
@cindex instruction aliases, s390
|
538 |
|
|
@cindex s390 instruction aliases
|
539 |
|
|
|
540 |
|
|
A specific bit pattern can have multiple mnemonics, for example
|
541 |
|
|
the bit pattern @samp{0xa7000000} has the mnemonics @samp{tmh} and
|
542 |
|
|
@samp{tmlh}. In addition, there are a number of mnemonics recognized by
|
543 |
|
|
@code{@value{AS}} that are not present in the Principles of Operation.
|
544 |
|
|
These are the short forms of the branch instructions, where the condition
|
545 |
|
|
code mask operand is encoded in the mnemonic. This is relevant for the
|
546 |
|
|
branch instructions, the compare and branch instructions, and the
|
547 |
|
|
compare and trap instructions.
|
548 |
|
|
|
549 |
|
|
For the branch instructions there are 20 condition code strings that can
|
550 |
|
|
be used as part of the mnemonic in place of a mask operand in the instruction
|
551 |
|
|
format:
|
552 |
|
|
|
553 |
|
|
@display
|
554 |
|
|
@multitable @columnfractions .30 .30
|
555 |
|
|
@headitem instruction @tab short form
|
556 |
|
|
@item bcr M1,R2 @tab b<m>r R2
|
557 |
|
|
@item bc M1,D2(X2,B2) @tab b<m> D2(X2,B2)
|
558 |
|
|
@item brc M1,I2 @tab j<m> I2
|
559 |
|
|
@item brcl M1,I2 @tab jg<m> I2
|
560 |
|
|
@end multitable
|
561 |
|
|
@end display
|
562 |
|
|
|
563 |
|
|
In the mnemonic for a branch instruction the condition code string <m>
|
564 |
|
|
can be any of the following:
|
565 |
|
|
|
566 |
|
|
@display
|
567 |
|
|
@multitable {nle} {jump on not zero / if not zeros}
|
568 |
|
|
@item o @tab jump on overflow / if ones
|
569 |
|
|
@item h @tab jump on A high
|
570 |
|
|
@item p @tab jump on plus
|
571 |
|
|
@item nle @tab jump on not low or equal
|
572 |
|
|
@item l @tab jump on A low
|
573 |
|
|
@item m @tab jump on minus
|
574 |
|
|
@item nhe @tab jump on not high or equal
|
575 |
|
|
@item lh @tab jump on low or high
|
576 |
|
|
@item ne @tab jump on A not equal B
|
577 |
|
|
@item nz @tab jump on not zero / if not zeros
|
578 |
|
|
@item e @tab jump on A equal B
|
579 |
|
|
@item z @tab jump on zero / if zeroes
|
580 |
|
|
@item nlh @tab jump on not low or high
|
581 |
|
|
@item he @tab jump on high or equal
|
582 |
|
|
@item nl @tab jump on A not low
|
583 |
|
|
@item nm @tab jump on not minus / if not mixed
|
584 |
|
|
@item le @tab jump on low or equal
|
585 |
|
|
@item nh @tab jump on A not high
|
586 |
|
|
@item np @tab jump on not plus
|
587 |
|
|
@item no @tab jump on not overflow / if not ones
|
588 |
|
|
@end multitable
|
589 |
|
|
@end display
|
590 |
|
|
|
591 |
|
|
For the compare and branch, and compare and trap instructions there
|
592 |
|
|
are 12 condition code strings that can be used as part of the mnemonic in
|
593 |
|
|
place of a mask operand in the instruction format:
|
594 |
|
|
|
595 |
|
|
@display
|
596 |
|
|
@multitable @columnfractions .40 .40
|
597 |
|
|
@headitem instruction @tab short form
|
598 |
|
|
@item crb R1,R2,M3,D4(B4) @tab crb<m> R1,R2,D4(B4)
|
599 |
|
|
@item cgrb R1,R2,M3,D4(B4) @tab cgrb<m> R1,R2,D4(B4)
|
600 |
|
|
@item crj R1,R2,M3,I4 @tab crj<m> R1,R2,I4
|
601 |
|
|
@item cgrj R1,R2,M3,I4 @tab cgrj<m> R1,R2,I4
|
602 |
|
|
@item cib R1,I2,M3,D4(B4) @tab cib<m> R1,I2,D4(B4)
|
603 |
|
|
@item cgib R1,I2,M3,D4(B4) @tab cgib<m> R1,I2,D4(B4)
|
604 |
|
|
@item cij R1,I2,M3,I4 @tab cij<m> R1,I2,I4
|
605 |
|
|
@item cgij R1,I2,M3,I4 @tab cgij<m> R1,I2,I4
|
606 |
|
|
@item crt R1,R2,M3 @tab crt<m> R1,R2
|
607 |
|
|
@item cgrt R1,R2,M3 @tab cgrt<m> R1,R2
|
608 |
|
|
@item cit R1,I2,M3 @tab cit<m> R1,I2
|
609 |
|
|
@item cgit R1,I2,M3 @tab cgit<m> R1,I2
|
610 |
|
|
@item clrb R1,R2,M3,D4(B4) @tab clrb<m> R1,R2,D4(B4)
|
611 |
|
|
@item clgrb R1,R2,M3,D4(B4) @tab clgrb<m> R1,R2,D4(B4)
|
612 |
|
|
@item clrj R1,R2,M3,I4 @tab clrj<m> R1,R2,I4
|
613 |
|
|
@item clgrj R1,R2,M3,I4 @tab clgrj<m> R1,R2,I4
|
614 |
|
|
@item clib R1,I2,M3,D4(B4) @tab clib<m> R1,I2,D4(B4)
|
615 |
|
|
@item clgib R1,I2,M3,D4(B4) @tab clgib<m> R1,I2,D4(B4)
|
616 |
|
|
@item clij R1,I2,M3,I4 @tab clij<m> R1,I2,I4
|
617 |
|
|
@item clgij R1,I2,M3,I4 @tab clgij<m> R1,I2,I4
|
618 |
|
|
@item clrt R1,R2,M3 @tab clrt<m> R1,R2
|
619 |
|
|
@item clgrt R1,R2,M3 @tab clgrt<m> R1,R2
|
620 |
|
|
@item clfit R1,I2,M3 @tab clfit<m> R1,I2
|
621 |
|
|
@item clgit R1,I2,M3 @tab clgit<m> R1,I2
|
622 |
|
|
@end multitable
|
623 |
|
|
@end display
|
624 |
|
|
|
625 |
|
|
In the mnemonic for a compare and branch and compare and trap instruction
|
626 |
|
|
the condition code string <m> can be any of the following:
|
627 |
|
|
|
628 |
|
|
@display
|
629 |
|
|
@multitable {nle} {jump on not zero / if not zeros}
|
630 |
|
|
@item h @tab jump on A high
|
631 |
|
|
@item nle @tab jump on not low or equal
|
632 |
|
|
@item l @tab jump on A low
|
633 |
|
|
@item nhe @tab jump on not high or equal
|
634 |
|
|
@item ne @tab jump on A not equal B
|
635 |
|
|
@item lh @tab jump on low or high
|
636 |
|
|
@item e @tab jump on A equal B
|
637 |
|
|
@item nlh @tab jump on not low or high
|
638 |
|
|
@item nl @tab jump on A not low
|
639 |
|
|
@item he @tab jump on high or equal
|
640 |
|
|
@item nh @tab jump on A not high
|
641 |
|
|
@item le @tab jump on low or equal
|
642 |
|
|
@end multitable
|
643 |
|
|
@end display
|
644 |
|
|
|
645 |
|
|
@node s390 Operand Modifier
|
646 |
|
|
@subsection Instruction Operand Modifier
|
647 |
|
|
@cindex instruction operand modifier, s390
|
648 |
|
|
@cindex s390 instruction operand modifier
|
649 |
|
|
|
650 |
|
|
If a symbol modifier is attached to a symbol in an expression for an
|
651 |
|
|
instruction operand field, the symbol term is replaced with a reference
|
652 |
|
|
to an object in the global offset table (GOT) or the procedure linkage
|
653 |
|
|
table (PLT). The following expressions are allowed:
|
654 |
|
|
@samp{symbol@@modifier + constant},
|
655 |
|
|
@samp{symbol@@modifier + label + constant}, and
|
656 |
|
|
@samp{symbol@@modifier - label + constant}.
|
657 |
|
|
The term @samp{symbol} is the symbol that will be entered into the GOT or
|
658 |
|
|
PLT, @samp{label} is a local label, and @samp{constant} is an arbitrary
|
659 |
|
|
expression that the assembler can evaluate to a constant value.
|
660 |
|
|
|
661 |
|
|
The term @samp{(symbol + constant1)@@modifier +/- label + constant2}
|
662 |
|
|
is also accepted but a warning message is printed and the term is
|
663 |
|
|
converted to @samp{symbol@@modifier +/- label + constant1 + constant2}.
|
664 |
|
|
|
665 |
|
|
@table @code
|
666 |
|
|
@item @@got
|
667 |
|
|
@itemx @@got12
|
668 |
|
|
The @@got modifier can be used for displacement fields, 16-bit immediate
|
669 |
|
|
fields and 32-bit pc-relative immediate fields. The @@got12 modifier is
|
670 |
|
|
synonym to @@got. The symbol is added to the GOT. For displacement
|
671 |
|
|
fields and 16-bit immediate fields the symbol term is replaced with
|
672 |
|
|
the offset from the start of the GOT to the GOT slot for the symbol.
|
673 |
|
|
For a 32-bit pc-relative field the pc-relative offset to the GOT
|
674 |
|
|
slot from the current instruction address is used.
|
675 |
|
|
@item @@gotent
|
676 |
|
|
The @@gotent modifier can be used for 32-bit pc-relative immediate fields.
|
677 |
|
|
The symbol is added to the GOT and the symbol term is replaced with
|
678 |
|
|
the pc-relative offset from the current instruction to the GOT slot for the
|
679 |
|
|
symbol.
|
680 |
|
|
@item @@gotoff
|
681 |
|
|
The @@gotoff modifier can be used for 16-bit immediate fields. The symbol
|
682 |
|
|
term is replaced with the offset from the start of the GOT to the
|
683 |
|
|
address of the symbol.
|
684 |
|
|
@item @@gotplt
|
685 |
|
|
The @@gotplt modifier can be used for displacement fields, 16-bit immediate
|
686 |
|
|
fields, and 32-bit pc-relative immediate fields. A procedure linkage
|
687 |
|
|
table entry is generated for the symbol and a jump slot for the symbol
|
688 |
|
|
is added to the GOT. For displacement fields and 16-bit immediate
|
689 |
|
|
fields the symbol term is replaced with the offset from the start of the
|
690 |
|
|
GOT to the jump slot for the symbol. For a 32-bit pc-relative field
|
691 |
|
|
the pc-relative offset to the jump slot from the current instruction
|
692 |
|
|
address is used.
|
693 |
|
|
@item @@plt
|
694 |
|
|
The @@plt modifier can be used for 16-bit and 32-bit pc-relative immediate
|
695 |
|
|
fields. A procedure linkage table entry is generated for the symbol.
|
696 |
|
|
The symbol term is replaced with the relative offset from the current
|
697 |
|
|
instruction to the PLT entry for the symbol.
|
698 |
|
|
@item @@pltoff
|
699 |
|
|
The @@pltoff modifier can be used for 16-bit immediate fields. The symbol
|
700 |
|
|
term is replaced with the offset from the start of the PLT to the address
|
701 |
|
|
of the symbol.
|
702 |
|
|
@item @@gotntpoff
|
703 |
|
|
The @@gotntpoff modifier can be used for displacement fields. The symbol
|
704 |
|
|
is added to the static TLS block and the negated offset to the symbol
|
705 |
|
|
in the static TLS block is added to the GOT. The symbol term is replaced
|
706 |
|
|
with the offset to the GOT slot from the start of the GOT.
|
707 |
|
|
@item @@indntpoff
|
708 |
|
|
The @@indntpoff modifier can be used for 32-bit pc-relative immediate
|
709 |
|
|
fields. The symbol is added to the static TLS block and the negated offset
|
710 |
|
|
to the symbol in the static TLS block is added to the GOT. The symbol term
|
711 |
|
|
is replaced with the pc-relative offset to the GOT slot from the current
|
712 |
|
|
instruction address.
|
713 |
|
|
@end table
|
714 |
|
|
|
715 |
|
|
For more information about the thread local storage modifiers
|
716 |
|
|
@samp{gotntpoff} and @samp{indntpoff} see the ELF extension documentation
|
717 |
|
|
@samp{ELF Handling For Thread-Local Storage}.
|
718 |
|
|
|
719 |
|
|
@node s390 Instruction Marker
|
720 |
|
|
@subsection Instruction Marker
|
721 |
|
|
@cindex instruction marker, s390
|
722 |
|
|
@cindex s390 instruction marker
|
723 |
|
|
|
724 |
|
|
The thread local storage instruction markers are used by the linker to
|
725 |
|
|
perform code optimization.
|
726 |
|
|
|
727 |
|
|
@table @code
|
728 |
|
|
@item :tls_load
|
729 |
|
|
The :tls_load marker is used to flag the load instruction in the initial
|
730 |
|
|
exec TLS model that retrieves the offset from the thread pointer to a
|
731 |
|
|
thread local storage variable from the GOT.
|
732 |
|
|
@item :tls_gdcall
|
733 |
|
|
The :tls_gdcall marker is used to flag the branch-and-save instruction to
|
734 |
|
|
the __tls_get_offset function in the global dynamic TLS model.
|
735 |
|
|
@item :tls_ldcall
|
736 |
|
|
The :tls_ldcall marker is used to flag the branch-and-save instruction to
|
737 |
|
|
the __tls_get_offset function in the local dynamic TLS model.
|
738 |
|
|
@end table
|
739 |
|
|
|
740 |
|
|
For more information about the thread local storage instruction marker
|
741 |
|
|
and the linker optimizations see the ELF extension documentation
|
742 |
|
|
@samp{ELF Handling For Thread-Local Storage}.
|
743 |
|
|
|
744 |
|
|
@node s390 Literal Pool Entries
|
745 |
|
|
@subsection Literal Pool Entries
|
746 |
|
|
@cindex literal pool entries, s390
|
747 |
|
|
@cindex s390 literal pool entries
|
748 |
|
|
|
749 |
|
|
A literal pool is a collection of values. To access the values a pointer
|
750 |
|
|
to the literal pool is loaded to a register, the literal pool register.
|
751 |
|
|
Usually, register %r13 is used as the literal pool register
|
752 |
|
|
(@ref{s390 Register}). Literal pool entries are created by adding the
|
753 |
|
|
suffix :lit1, :lit2, :lit4, or :lit8 to the end of an expression for an
|
754 |
|
|
instruction operand. The expression is added to the literal pool and the
|
755 |
|
|
operand is replaced with the offset to the literal in the literal pool.
|
756 |
|
|
|
757 |
|
|
@table @code
|
758 |
|
|
@item :lit1
|
759 |
|
|
The literal pool entry is created as an 8-bit value. An operand modifier
|
760 |
|
|
must not be used for the original expression.
|
761 |
|
|
@item :lit2
|
762 |
|
|
The literal pool entry is created as a 16 bit value. The operand modifier
|
763 |
|
|
@@got may be used in the original expression. The term @samp{x@@got:lit2}
|
764 |
|
|
will put the got offset for the global symbol x to the literal pool as
|
765 |
|
|
16 bit value.
|
766 |
|
|
@item :lit4
|
767 |
|
|
The literal pool entry is created as a 32-bit value. The operand modifier
|
768 |
|
|
@@got and @@plt may be used in the original expression. The term
|
769 |
|
|
@samp{x@@got:lit4} will put the got offset for the global symbol x to the
|
770 |
|
|
literal pool as a 32-bit value. The term @samp{x@@plt:lit4} will put the
|
771 |
|
|
plt offset for the global symbol x to the literal pool as a 32-bit value.
|
772 |
|
|
@item :lit8
|
773 |
|
|
The literal pool entry is created as a 64-bit value. The operand modifier
|
774 |
|
|
@@got and @@plt may be used in the original expression. The term
|
775 |
|
|
@samp{x@@got:lit8} will put the got offset for the global symbol x to the
|
776 |
|
|
literal pool as a 64-bit value. The term @samp{x@@plt:lit8} will put the
|
777 |
|
|
plt offset for the global symbol x to the literal pool as a 64-bit value.
|
778 |
|
|
@end table
|
779 |
|
|
|
780 |
|
|
The assembler directive @samp{.ltorg} is used to emit all literal pool
|
781 |
|
|
entries to the current position.
|
782 |
|
|
|
783 |
|
|
@node s390 Directives
|
784 |
|
|
@section Assembler Directives
|
785 |
|
|
|
786 |
|
|
@code{@value{AS}} for s390 supports all of the standard ELF
|
787 |
|
|
assembler directives as outlined in the main part of this document.
|
788 |
|
|
Some directives have been extended and there are some additional
|
789 |
|
|
directives, which are only available for the s390 @code{@value{AS}}.
|
790 |
|
|
|
791 |
|
|
@table @code
|
792 |
|
|
@cindex @code{.insn} directive, s390
|
793 |
|
|
@item .insn
|
794 |
|
|
This directive permits the numeric representation of an instructions
|
795 |
|
|
and makes the assembler insert the operands according to one of the
|
796 |
|
|
instructions formats for @samp{.insn} (@ref{s390 Formats}).
|
797 |
|
|
For example, the instruction @samp{l %r1,24(%r15)} could be written as
|
798 |
|
|
@samp{.insn rx,0x58000000,%r1,24(%r15)}.
|
799 |
|
|
@cindex @code{.short} directive, s390
|
800 |
|
|
@cindex @code{.long} directive, s390
|
801 |
|
|
@cindex @code{.quad} directive, s390
|
802 |
|
|
@item .short
|
803 |
|
|
@itemx .long
|
804 |
|
|
@itemx .quad
|
805 |
|
|
This directive places one or more 16-bit (.short), 32-bit (.long), or
|
806 |
|
|
64-bit (.quad) values into the current section. If an ELF or TLS modifier
|
807 |
|
|
is used only the following expressions are allowed:
|
808 |
|
|
@samp{symbol@@modifier + constant},
|
809 |
|
|
@samp{symbol@@modifier + label + constant}, and
|
810 |
|
|
@samp{symbol@@modifier - label + constant}.
|
811 |
|
|
The following modifiers are available:
|
812 |
|
|
@table @code
|
813 |
|
|
@item @@got
|
814 |
|
|
@itemx @@got12
|
815 |
|
|
The @@got modifier can be used for .short, .long and .quad. The @@got12
|
816 |
|
|
modifier is synonym to @@got. The symbol is added to the GOT. The symbol
|
817 |
|
|
term is replaced with offset from the start of the GOT to the GOT slot for
|
818 |
|
|
the symbol.
|
819 |
|
|
@item @@gotoff
|
820 |
|
|
The @@gotoff modifier can be used for .short, .long and .quad. The symbol
|
821 |
|
|
term is replaced with the offset from the start of the GOT to the address
|
822 |
|
|
of the symbol.
|
823 |
|
|
@item @@gotplt
|
824 |
|
|
The @@gotplt modifier can be used for .long and .quad. A procedure linkage
|
825 |
|
|
table entry is generated for the symbol and a jump slot for the symbol
|
826 |
|
|
is added to the GOT. The symbol term is replaced with the offset from the
|
827 |
|
|
start of the GOT to the jump slot for the symbol.
|
828 |
|
|
@item @@plt
|
829 |
|
|
The @@plt modifier can be used for .long and .quad. A procedure linkage
|
830 |
|
|
table entry us generated for the symbol. The symbol term is replaced with
|
831 |
|
|
the address of the PLT entry for the symbol.
|
832 |
|
|
@item @@pltoff
|
833 |
|
|
The @@pltoff modifier can be used for .short, .long and .quad. The symbol
|
834 |
|
|
term is replaced with the offset from the start of the PLT to the address
|
835 |
|
|
of the symbol.
|
836 |
|
|
@item @@tlsgd
|
837 |
|
|
@itemx @@tlsldm
|
838 |
|
|
The @@tlsgd and @@tlsldm modifier can be used for .long and .quad. A
|
839 |
|
|
tls_index structure for the symbol is added to the GOT. The symbol term is
|
840 |
|
|
replaced with the offset from the start of the GOT to the tls_index structure.
|
841 |
|
|
@item @@gotntpoff
|
842 |
|
|
@itemx @@indntpoff
|
843 |
|
|
The @@gotntpoff and @@indntpoff modifier can be used for .long and .quad.
|
844 |
|
|
The symbol is added to the static TLS block and the negated offset to the
|
845 |
|
|
symbol in the static TLS block is added to the GOT. For @@gotntpoff the
|
846 |
|
|
symbol term is replaced with the offset from the start of the GOT to the
|
847 |
|
|
GOT slot, for @@indntpoff the symbol term is replaced with the address
|
848 |
|
|
of the GOT slot.
|
849 |
|
|
@item @@dtpoff
|
850 |
|
|
The @@dtpoff modifier can be used for .long and .quad. The symbol term
|
851 |
|
|
is replaced with the offset of the symbol relative to the start of the
|
852 |
|
|
TLS block it is contained in.
|
853 |
|
|
@item @@ntpoff
|
854 |
|
|
The @@ntpoff modifier can be used for .long and .quad. The symbol term
|
855 |
|
|
is replaced with the offset of the symbol relative to the TCB pointer.
|
856 |
|
|
@end table
|
857 |
|
|
|
858 |
|
|
For more information about the thread local storage modifiers see the
|
859 |
|
|
ELF extension documentation @samp{ELF Handling For Thread-Local Storage}.
|
860 |
|
|
|
861 |
|
|
@cindex @code{.ltorg} directive, s390
|
862 |
|
|
@item .ltorg
|
863 |
|
|
This directive causes the current contents of the literal pool to be
|
864 |
|
|
dumped to the current location (@ref{s390 Literal Pool Entries}).
|
865 |
|
|
|
866 |
|
|
@cindex @code{.machine} directive, s390
|
867 |
|
|
@item .machine string
|
868 |
|
|
This directive allows you to change the machine for which code is
|
869 |
|
|
generated. @code{string} may be any of the @code{-march=} selection
|
870 |
|
|
options (without the -march=), @code{push}, or @code{pop}.
|
871 |
|
|
@code{.machine push} saves the currently selected cpu, which may be
|
872 |
|
|
restored with @code{.machine pop}. Be aware that the cpu string has
|
873 |
|
|
to be put into double quotes in case it contains characters not
|
874 |
|
|
appropriate for identifiers. So you have to write @code{"z9-109"}
|
875 |
|
|
instead of just @code{z9-109}.
|
876 |
|
|
@end table
|
877 |
|
|
|
878 |
|
|
@node s390 Floating Point
|
879 |
|
|
@section Floating Point
|
880 |
|
|
@cindex floating point, s390
|
881 |
|
|
@cindex s390 floating point
|
882 |
|
|
|
883 |
|
|
The assembler recognizes both the @sc{ieee} floating-point instruction and
|
884 |
|
|
the hexadecimal floating-point instructions. The floating-point constructors
|
885 |
|
|
@samp{.float}, @samp{.single}, and @samp{.double} always emit the
|
886 |
|
|
@sc{ieee} format. To assemble hexadecimal floating-point constants the
|
887 |
|
|
@samp{.long} and @samp{.quad} directives must be used.
|