1 |
6 |
jlechner |
@c Copyright 2000, 2002 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 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
|
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
|
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}}
|
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
|
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
|
49 |
|
|
manual; assembler directives and general syntax are loosely based on the
|
50 |
|
|
prevailing AT&T/SVR4/ELF/Solaris style notation. HLASM-style directives
|
51 |
|
|
are @emph{not} supported for the most part, with the exception of those
|
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.
|
69 |
|
|
By using thesse symbolic names, @code{@value{AS}} can detect simple
|
70 |
|
|
syntax errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca
|
71 |
|
|
for r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base
|
72 |
|
|
for r3 and rpgt or r.pgt for r4.
|
73 |
|
|
|
74 |
|
|
@samp{*} is the current location counter. Unlike @samp{.} it is always
|
75 |
|
|
relative to the last USING directive. Note that this means that
|
76 |
|
|
expressions cannot use multiplication, as any occurrence of @samp{*}
|
77 |
|
|
will be interpreted as a location counter.
|
78 |
|
|
|
79 |
|
|
All labels are relative to the last USING. Thus, branches to a label
|
80 |
|
|
always imply the use of base+displacement.
|
81 |
|
|
|
82 |
|
|
Many of the usual forms of address constants / address literals
|
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
|
96 |
|
|
pool will be created (or reused if it already exists), and the
|
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
|
106 |
|
|
floating point formats are not supported.
|
107 |
|
|
|
108 |
|
|
|
109 |
|
|
@node ESA/390 Directives
|
110 |
|
|
@section ESA/390 Assembler Directives
|
111 |
|
|
|
112 |
|
|
@code{@value{AS}} for the ESA/390 supports all of the standard ELF/SVR4
|
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
|
122 |
|
|
@item .dc
|
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 |
|
|
|
135 |
|
|
@item EQU
|
136 |
|
|
The standard HLASM-style EQU directive is not supported; however, the
|
137 |
|
|
standard @code{@value{AS}} directive .equ can be used to the same effect.
|
138 |
|
|
|
139 |
|
|
@item .ltorg
|
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
|
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
|
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
|
160 |
|
|
@code{.ltorg} must be put in the same section; otherwise an error will
|
161 |
|
|
result.
|
162 |
|
|
|
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
|
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 |
|
|
|
191 |
|
|
Note that this dual-@code{.using} directive semantics extends
|
192 |
|
|
and is not compatible with HLASM semantics. Note that this assembler
|
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).
|