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