@c Copyright 2000, 2002 Free Software Foundation, Inc.
@c This is part of the GAS manual.
@c For copying conditions, see the file as.texinfo.
@ifset GENERIC
@page
@node ESA/390-Dependent
@chapter ESA/390 Dependent Features
@end ifset
@ifclear GENERIC
@node Machine Dependencies
@chapter ESA/390 Dependent Features
@end ifclear

@cindex i370 support
@cindex ESA/390 support

@menu
* ESA/390 Notes::                Notes
* ESA/390 Options::              Options
* ESA/390 Syntax::               Syntax
* ESA/390 Floating Point::       Floating Point
* ESA/390 Directives::           ESA/390 Machine Directives
* ESA/390 Opcodes::              Opcodes
@end menu

@node ESA/390 Notes
@section Notes
The ESA/390 @code{@value{AS}} port is currently intended to be a back-end
for the @sc{gnu} @sc{cc} compiler.  It is not HLASM compatible, although
it does support a subset of some of the HLASM directives.  The only 
supported binary file format is ELF; none of the usual MVS/VM/OE/USS 
object file formats, such as ESD or XSD, are supported.

When used with the @sc{gnu} @sc{cc} compiler, the ESA/390 @code{@value{AS}}
will produce correct, fully relocated, functional binaries, and has been 
used to compile and execute large projects.  However, many aspects should 
still be considered experimental; these include shared library support, 
dynamically loadable objects, and any relocation other than the 31-bit 
relocation.

@node ESA/390 Options
@section Options
@code{@value{AS}} has no machine-dependent command-line options for the ESA/390.

@cindex ESA/390 Syntax
@node ESA/390 Syntax
@section Syntax
The opcode/operand syntax follows the ESA/390 Principles of Operation
manual; assembler directives and general syntax are loosely based on the 
prevailing AT&T/SVR4/ELF/Solaris style notation.  HLASM-style directives
are @emph{not} supported for the most part, with the exception of those 
described herein.

A leading dot in front of directives is optional, and the case of
directives is ignored; thus for example, .using and USING have the same
effect.

A colon may immediately follow a label definition.  This is
simply for compatibility with how most assembly language programmers
write code.

@samp{#} is the line comment character.

@samp{;} can be used instead of a newline to separate statements.

Since @samp{$} has no special meaning, you may use it in symbol names.

Registers can be given the symbolic names r0..r15, fp0, fp2, fp4, fp6.
By using thesse symbolic names, @code{@value{AS}} can detect simple 
syntax errors. The name rarg or r.arg is a synonym for r11, rtca or r.tca
for r12, sp, r.sp, dsa r.dsa for r13, lr or r.lr for r14, rbase or r.base 
for r3 and rpgt or r.pgt for r4.

@samp{*} is the current location counter.  Unlike @samp{.} it is always
relative to the last USING directive.  Note that this means that 
expressions cannot use multiplication, as any occurrence of @samp{*}
will be interpreted as a location counter.

All labels are relative to the last USING.  Thus, branches to a label 
always imply the use of base+displacement.

Many of the usual forms of address constants / address literals 
are supported.  Thus,
@example
	.using	*,r3
	L	r15,=A(some_routine)
	LM	r6,r7,=V(some_longlong_extern)
	A	r1,=F'12'
	AH	r0,=H'42'
	ME	r6,=E'3.1416'
	MD	r6,=D'3.14159265358979'
	O	r6,=XL4'cacad0d0'
	.ltorg
@end example
should all behave as expected: that is, an entry in the literal
pool will be created (or reused if it already exists), and the 
instruction operands will be the displacement into the literal pool
using the current base register (as last declared with the @code{.using}
directive).

@node ESA/390 Floating Point
@section Floating Point
@cindex floating point, ESA/390 (@sc{ieee})
@cindex ESA/390 floating point (@sc{ieee})
The assembler generates only @sc{ieee} floating-point numbers.  The older
floating point formats are not supported.


@node ESA/390 Directives
@section ESA/390 Assembler Directives

@code{@value{AS}} for the ESA/390 supports all of the standard ELF/SVR4 
assembler directives that are documented in the main part of this
documentation.  Several additional directives are supported in order
to implement the ESA/390 addressing model.  The most important of these
are @code{.using} and @code{.ltorg}

@cindex ESA/390-only directives
These are the additional directives in @code{@value{AS}} for the ESA/390:

@table @code
@item .dc 
A small subset of the usual DC directive is supported.

@item .drop @var{regno}
Stop using @var{regno} as the base register.  The @var{regno} must
have been previously declared with a @code{.using} directive in the
same section as the current section.

@item .ebcdic @var{string}
Emit the EBCDIC equivalent of the indicated string.  The emitted string
will be null terminated.  Note that the directives @code{.string} etc. emit
ascii strings by default.

@item EQU 
The standard HLASM-style EQU directive is not supported; however, the 
standard @code{@value{AS}} directive .equ can be used to the same effect.

@item .ltorg 
Dump the literal pool accumulated so far; begin a new literal pool.
The literal pool will be written in the current section; in order to
generate correct assembly, a @code{.using} must have been previously
specified in the same section.

@item .using @var{expr},@var{regno}
Use @var{regno} as the base register for all subsequent RX, RS, and SS form
instructions. The @var{expr} will be evaluated to obtain the base address;
usually, @var{expr} will merely be @samp{*}.

This assembler allows two @code{.using} directives to be simultaneously
outstanding, one in the @code{.text} section, and one in another section 
(typically, the @code{.data} section).  This feature allows 
dynamically loaded objects to be implemented in a relatively 
straightforward way.  A @code{.using} directive must always be specified 
in the @code{.text} section; this will specify the base register that
will be used for branches in the @code{.text} section.  A second
@code{.using} may be specified in another section; this will specify
the base register that is used for non-label address literals.
When a second @code{.using} is specified, then the subsequent
@code{.ltorg} must be put in the same section; otherwise an error will 
result.

Thus, for example, the following code uses @code{r3} to address branch 
targets and @code{r4} to address the literal pool, which has been written 
to the @code{.data} section.  The is, the constants @code{=A(some_routine)},
@code{=H'42'} and @code{=E'3.1416'} will all appear in the @code{.data}
section.

@example
.data
	.using  LITPOOL,r4
.text
	BASR	r3,0
	.using	*,r3
        B       START
	.long	LITPOOL
START:
	L	r4,4(,r3)
	L	r15,=A(some_routine)
	LTR	r15,r15
	BNE	LABEL
	AH	r0,=H'42'
LABEL:
	ME	r6,=E'3.1416'
.data
LITPOOL:
	.ltorg
@end example


Note that this dual-@code{.using} directive semantics extends 
and is not compatible with HLASM semantics.  Note that this assembler 
directive does not support the full range of HLASM semantics.

@end table

@node ESA/390 Opcodes
@section Opcodes
For detailed information on the ESA/390 machine instruction set, see
@cite{ESA/390 Principles of Operation} (IBM Publication Number DZ9AR004).
