Commit | Line | Data |
---|---|---|
2571583a | 1 | @c Copyright (C) 2000-2017 Free Software Foundation, Inc. |
5b93d8bb AM |
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 ESA/390-Dependent | |
7 | @chapter ESA/390 Dependent Features | |
8 | @end ifset | |
9 | @ifclear GENERIC | |
10 | @node Machine Dependencies | |
11 | @chapter ESA/390 Dependent Features | |
12 | @end ifclear | |
13 | ||
14 | @cindex i370 support | |
15 | @cindex ESA/390 support | |
16 | ||
17 | @menu | |
18 | * ESA/390 Notes:: Notes | |
19 | * ESA/390 Options:: Options | |
20 | * ESA/390 Syntax:: Syntax | |
21 | * ESA/390 Floating Point:: Floating Point | |
22 | * ESA/390 Directives:: ESA/390 Machine Directives | |
23 | * ESA/390 Opcodes:: Opcodes | |
24 | @end menu | |
25 | ||
26 | @node ESA/390 Notes | |
27 | @section Notes | |
28 | The ESA/390 @code{@value{AS}} port is currently intended to be a back-end | |
29 | for the @sc{gnu} @sc{cc} compiler. It is not HLASM compatible, although | |
34bca508 L |
30 | it does support a subset of some of the HLASM directives. The only |
31 | supported binary file format is ELF; none of the usual MVS/VM/OE/USS | |
5b93d8bb AM |
32 | object file formats, such as ESD or XSD, are supported. |
33 | ||
34 | When used with the @sc{gnu} @sc{cc} compiler, the ESA/390 @code{@value{AS}} | |
34bca508 L |
35 | will produce correct, fully relocated, functional binaries, and has been |
36 | used to compile and execute large projects. However, many aspects should | |
37 | still be considered experimental; these include shared library support, | |
38 | dynamically loadable objects, and any relocation other than the 31-bit | |
5b93d8bb AM |
39 | relocation. |
40 | ||
41 | @node ESA/390 Options | |
42 | @section Options | |
43 | @code{@value{AS}} has no machine-dependent command-line options for the ESA/390. | |
44 | ||
45 | @cindex ESA/390 Syntax | |
46 | @node ESA/390 Syntax | |
47 | @section Syntax | |
48 | The opcode/operand syntax follows the ESA/390 Principles of Operation | |
34bca508 | 49 | manual; assembler directives and general syntax are loosely based on the |
5b93d8bb | 50 | prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives |
34bca508 | 51 | are @emph{not} supported for the most part, with the exception of those |
5b93d8bb AM |
52 | described herein. |
53 | ||
54 | A leading dot in front of directives is optional, and the case of | |
55 | directives is ignored; thus for example, .using and USING have the same | |
56 | effect. | |
57 | ||
58 | A colon may immediately follow a label definition. This is | |
59 | simply for compatibility with how most assembly language programmers | |
60 | write code. | |
61 | ||
62 | @samp{#} is the line comment character. | |
63 | ||
64 | @samp{;} can be used instead of a newline to separate statements. | |
65 | ||
66 | Since @samp{$} has no special meaning, you may use it in symbol names. | |
67 | ||
68 | Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, fp6. | |
34bca508 | 69 | By using thesse symbolic names, @code{@value{AS}} can detect simple |
5b93d8bb | 70 | syntax errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca |
34bca508 | 71 | for r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base |
5b93d8bb AM |
72 | for r3 and rpgt or r.pgt for r4. |
73 | ||
74 | @samp{*} is the current location counter. Unlike @samp{.} it is always | |
34bca508 | 75 | relative to the last USING directive. Note that this means that |
062b7c0c | 76 | expressions cannot use multiplication, as any occurrence of @samp{*} |
5b93d8bb AM |
77 | will be interpreted as a location counter. |
78 | ||
34bca508 | 79 | All labels are relative to the last USING. Thus, branches to a label |
5b93d8bb AM |
80 | always imply the use of base+displacement. |
81 | ||
34bca508 | 82 | Many of the usual forms of address constants / address literals |
5b93d8bb AM |
83 | are supported. Thus, |
84 | @example | |
85 | .using *,r3 | |
86 | L r15,=A(some_routine) | |
87 | LM r6,r7,=V(some_longlong_extern) | |
88 | A r1,=F'12' | |
89 | AH r0,=H'42' | |
90 | ME r6,=E'3.1416' | |
91 | MD r6,=D'3.14159265358979' | |
92 | O r6,=XL4'cacad0d0' | |
93 | .ltorg | |
94 | @end example | |
95 | should all behave as expected: that is, an entry in the literal | |
34bca508 | 96 | pool will be created (or reused if it already exists), and the |
5b93d8bb AM |
97 | instruction operands will be the displacement into the literal pool |
98 | using the current base register (as last declared with the @code{.using} | |
99 | directive). | |
100 | ||
101 | @node ESA/390 Floating Point | |
102 | @section Floating Point | |
103 | @cindex floating point, ESA/390 (@sc{ieee}) | |
104 | @cindex ESA/390 floating point (@sc{ieee}) | |
105 | The assembler generates only @sc{ieee} floating-point numbers. The older | |
062b7c0c | 106 | floating point formats are not supported. |
5b93d8bb AM |
107 | |
108 | ||
109 | @node ESA/390 Directives | |
110 | @section ESA/390 Assembler Directives | |
111 | ||
34bca508 | 112 | @code{@value{AS}} for the ESA/390 supports all of the standard ELF/SVR4 |
5b93d8bb AM |
113 | assembler directives that are documented in the main part of this |
114 | documentation. Several additional directives are supported in order | |
115 | to implement the ESA/390 addressing model. The most important of these | |
116 | are @code{.using} and @code{.ltorg} | |
117 | ||
118 | @cindex ESA/390-only directives | |
119 | These are the additional directives in @code{@value{AS}} for the ESA/390: | |
120 | ||
121 | @table @code | |
34bca508 | 122 | @item .dc |
5b93d8bb AM |
123 | A small subset of the usual DC directive is supported. |
124 | ||
125 | @item .drop @var{regno} | |
126 | Stop using @var{regno} as the base register. The @var{regno} must | |
127 | have been previously declared with a @code{.using} directive in the | |
128 | same section as the current section. | |
129 | ||
130 | @item .ebcdic @var{string} | |
131 | Emit the EBCDIC equivalent of the indicated string. The emitted string | |
132 | will be null terminated. Note that the directives @code{.string} etc. emit | |
133 | ascii strings by default. | |
134 | ||
34bca508 L |
135 | @item EQU |
136 | The standard HLASM-style EQU directive is not supported; however, the | |
5b93d8bb AM |
137 | standard @code{@value{AS}} directive .equ can be used to the same effect. |
138 | ||
34bca508 | 139 | @item .ltorg |
5b93d8bb AM |
140 | Dump the literal pool accumulated so far; begin a new literal pool. |
141 | The literal pool will be written in the current section; in order to | |
142 | generate correct assembly, a @code{.using} must have been previously | |
143 | specified in the same section. | |
144 | ||
145 | @item .using @var{expr},@var{regno} | |
146 | Use @var{regno} as the base register for all subsequent RX, RS, and SS form | |
147 | instructions. The @var{expr} will be evaluated to obtain the base address; | |
148 | usually, @var{expr} will merely be @samp{*}. | |
149 | ||
150 | This assembler allows two @code{.using} directives to be simultaneously | |
34bca508 L |
151 | outstanding, one in the @code{.text} section, and one in another section |
152 | (typically, the @code{.data} section). This feature allows | |
153 | dynamically loaded objects to be implemented in a relatively | |
154 | straightforward way. A @code{.using} directive must always be specified | |
5b93d8bb AM |
155 | in the @code{.text} section; this will specify the base register that |
156 | will be used for branches in the @code{.text} section. A second | |
157 | @code{.using} may be specified in another section; this will specify | |
158 | the base register that is used for non-label address literals. | |
159 | When a second @code{.using} is specified, then the subsequent | |
34bca508 | 160 | @code{.ltorg} must be put in the same section; otherwise an error will |
5b93d8bb AM |
161 | result. |
162 | ||
34bca508 L |
163 | Thus, for example, the following code uses @code{r3} to address branch |
164 | targets and @code{r4} to address the literal pool, which has been written | |
5b93d8bb AM |
165 | to the @code{.data} section. The is, the constants @code{=A(some_routine)}, |
166 | @code{=H'42'} and @code{=E'3.1416'} will all appear in the @code{.data} | |
167 | section. | |
168 | ||
169 | @example | |
170 | .data | |
171 | .using LITPOOL,r4 | |
172 | .text | |
173 | BASR r3,0 | |
174 | .using *,r3 | |
175 | B START | |
176 | .long LITPOOL | |
177 | START: | |
178 | L r4,4(,r3) | |
179 | L r15,=A(some_routine) | |
180 | LTR r15,r15 | |
181 | BNE LABEL | |
182 | AH r0,=H'42' | |
183 | LABEL: | |
184 | ME r6,=E'3.1416' | |
185 | .data | |
186 | LITPOOL: | |
187 | .ltorg | |
188 | @end example | |
189 | ||
190 | ||
34bca508 L |
191 | Note that this dual-@code{.using} directive semantics extends |
192 | and is not compatible with HLASM semantics. Note that this assembler | |
5b93d8bb AM |
193 | directive does not support the full range of HLASM semantics. |
194 | ||
195 | @end table | |
196 | ||
197 | @node ESA/390 Opcodes | |
198 | @section Opcodes | |
199 | For detailed information on the ESA/390 machine instruction set, see | |
200 | @cite{ESA/390 Principles of Operation} (IBM Publication Number DZ9AR004). |