hc
2023-11-06 15ade055295d13f95d49e3d99b09f3bbfb4a43e7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This file documents the GNU Assembler "as".
 
Copyright (C) 1991-2016 Free Software Foundation, Inc.
 
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3
or any later version published by the Free Software Foundation;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts.  A copy of the license is included in the
section entitled "GNU Free Documentation License".
 -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Using as: Alpha Directives</title>
 
<meta name="description" content="Using as: Alpha Directives">
<meta name="keywords" content="Using as: Alpha Directives">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="AS-Index.html#AS-Index" rel="index" title="AS Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Alpha_002dDependent.html#Alpha_002dDependent" rel="up" title="Alpha-Dependent">
<link href="Alpha-Opcodes.html#Alpha-Opcodes" rel="next" title="Alpha Opcodes">
<link href="Alpha-Floating-Point.html#Alpha-Floating-Point" rel="prev" title="Alpha Floating Point">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.indentedblock {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smallindentedblock {margin-left: 3.2em; font-size: smaller}
div.smalllisp {margin-left: 3.2em}
kbd {font-style:oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space:nowrap}
span.nolinebreak {white-space:nowrap}
span.roman {font-family:serif; font-weight:normal}
span.sansserif {font-family:sans-serif; font-weight:normal}
ul.no-bullet {list-style: none}
-->
</style>
 
 
</head>
 
<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000">
<a name="Alpha-Directives"></a>
<div class="header">
<p>
Next: <a href="Alpha-Opcodes.html#Alpha-Opcodes" accesskey="n" rel="next">Alpha Opcodes</a>, Previous: <a href="Alpha-Floating-Point.html#Alpha-Floating-Point" accesskey="p" rel="prev">Alpha Floating Point</a>, Up: <a href="Alpha_002dDependent.html#Alpha_002dDependent" accesskey="u" rel="up">Alpha-Dependent</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="AS-Index.html#AS-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Alpha-Assembler-Directives"></a>
<h4 class="subsection">9.2.5 Alpha Assembler Directives</h4>
 
<p><code>as</code> for the Alpha supports many additional directives for
compatibility with the native assembler.  This section describes them only
briefly.
</p>
<a name="index-Alpha_002donly-directives"></a>
<p>These are the additional directives in <code>as</code> for the Alpha:
</p>
<dl compact="compact">
<dt><code>.arch <var>cpu</var></code></dt>
<dd><p>Specifies the target processor.  This is equivalent to the
<samp>-m<var>cpu</var></samp> command-line option.  See <a href="Alpha-Options.html#Alpha-Options">Options</a>,
for a list of values for <var>cpu</var>.
</p>
</dd>
<dt><code>.ent <var>function</var>[, <var>n</var>]</code></dt>
<dd><p>Mark the beginning of <var>function</var>.  An optional number may follow for
compatibility with the OSF/1 assembler, but is ignored.  When generating
<code>.mdebug</code> information, this will create a procedure descriptor for
the function.  In ELF, it will mark the symbol as a function a-la the
generic <code>.type</code> directive.
</p>
</dd>
<dt><code>.end <var>function</var></code></dt>
<dd><p>Mark the end of <var>function</var>.  In ELF, it will set the size of the symbol
a-la the generic <code>.size</code> directive.
</p>
</dd>
<dt><code>.mask <var>mask</var>, <var>offset</var></code></dt>
<dd><p>Indicate which of the integer registers are saved in the current
function&rsquo;s stack frame.  <var>mask</var> is interpreted a bit mask in which
bit <var>n</var> set indicates that register <var>n</var> is saved.  The registers
are saved in a block located <var>offset</var> bytes from the <em>canonical
frame address</em> (CFA) which is the value of the stack pointer on entry to
the function.  The registers are saved sequentially, except that the
return address register (normally <code>$26</code>) is saved first.
</p>
<p>This and the other directives that describe the stack frame are
currently only used when generating <code>.mdebug</code> information.  They
may in the future be used to generate DWARF2 <code>.debug_frame</code> unwind
information for hand written assembly.
</p>
</dd>
<dt><code>.fmask <var>mask</var>, <var>offset</var></code></dt>
<dd><p>Indicate which of the floating-point registers are saved in the current
stack frame.  The <var>mask</var> and <var>offset</var> parameters are interpreted
as with <code>.mask</code>.
</p>
</dd>
<dt><code>.frame <var>framereg</var>, <var>frameoffset</var>, <var>retreg</var>[, <var>argoffset</var>]</code></dt>
<dd><p>Describes the shape of the stack frame.  The frame pointer in use is
<var>framereg</var>; normally this is either <code>$fp</code> or <code>$sp</code>.  The
frame pointer is <var>frameoffset</var> bytes below the CFA.  The return
address is initially located in <var>retreg</var> until it is saved as
indicated in <code>.mask</code>.  For compatibility with OSF/1 an optional
<var>argoffset</var> parameter is accepted and ignored.  It is believed to
indicate the offset from the CFA to the saved argument registers.
</p>
</dd>
<dt><code>.prologue <var>n</var></code></dt>
<dd><p>Indicate that the stack frame is set up and all registers have been
spilled.  The argument <var>n</var> indicates whether and how the function
uses the incoming <em>procedure vector</em> (the address of the called
function) in <code>$27</code>.  0 indicates that <code>$27</code> is not used; 1
indicates that the first two instructions of the function use <code>$27</code>
to perform a load of the GP register; 2 indicates that <code>$27</code> is
used in some non-standard way and so the linker cannot elide the load of
the procedure vector during relaxation.
</p>
</dd>
<dt><code>.usepv <var>function</var>, <var>which</var></code></dt>
<dd><p>Used to indicate the use of the <code>$27</code> register, similar to
<code>.prologue</code>, but without the other semantics of needing to
be inside an open <code>.ent</code>/<code>.end</code> block.
</p>
<p>The <var>which</var> argument should be either <code>no</code>, indicating that
<code>$27</code> is not used, or <code>std</code>, indicating that the first two
instructions of the function perform a GP load.
</p>
<p>One might use this directive instead of <code>.prologue</code> if you are
also using dwarf2 CFI directives.
</p>
</dd>
<dt><code>.gprel32 <var>expression</var></code></dt>
<dd><p>Computes the difference between the address in <var>expression</var> and the
GP for the current object file, and stores it in 4 bytes.  In addition
to being smaller than a full 8 byte address, this also does not require
a dynamic relocation when used in a shared library.
</p>
</dd>
<dt><code>.t_floating <var>expression</var></code></dt>
<dd><p>Stores <var>expression</var> as an <small>IEEE</small> double precision value.
</p>
</dd>
<dt><code>.s_floating <var>expression</var></code></dt>
<dd><p>Stores <var>expression</var> as an <small>IEEE</small> single precision value.
</p>
</dd>
<dt><code>.f_floating <var>expression</var></code></dt>
<dd><p>Stores <var>expression</var> as a VAX F format value.
</p>
</dd>
<dt><code>.g_floating <var>expression</var></code></dt>
<dd><p>Stores <var>expression</var> as a VAX G format value.
</p>
</dd>
<dt><code>.d_floating <var>expression</var></code></dt>
<dd><p>Stores <var>expression</var> as a VAX D format value.
</p>
</dd>
<dt><code>.set <var>feature</var></code></dt>
<dd><p>Enables or disables various assembler features.  Using the positive
name of the feature enables while using &lsquo;<samp>no<var>feature</var></samp>&rsquo; disables.
</p>
<dl compact="compact">
<dt><code>at</code></dt>
<dd><p>Indicates that macro expansions may clobber the <em>assembler
temporary</em> (<code>$at</code> or <code>$28</code>) register.  Some macros may not be
expanded without this and will generate an error message if <code>noat</code>
is in effect.  When <code>at</code> is in effect, a warning will be generated
if <code>$at</code> is used by the programmer.
</p>
</dd>
<dt><code>macro</code></dt>
<dd><p>Enables the expansion of macro instructions.  Note that variants of real
instructions, such as <code>br label</code> vs <code>br $31,label</code> are
considered alternate forms and not macros.
</p>
</dd>
<dt><code>move</code></dt>
<dt><code>reorder</code></dt>
<dt><code>volatile</code></dt>
<dd><p>These control whether and how the assembler may re-order instructions.
Accepted for compatibility with the OSF/1 assembler, but <code>as</code>
does not do instruction scheduling, so these features are ignored.
</p></dd>
</dl>
</dd>
</dl>
 
<p>The following directives are recognized for compatibility with the OSF/1
assembler but are ignored.
</p>
<div class="example">
<pre class="example">.proc           .aproc
.reguse         .livereg
.option         .aent
.ugen           .eflag
.alias          .noalias
</pre></div>
 
<hr>
<div class="header">
<p>
Next: <a href="Alpha-Opcodes.html#Alpha-Opcodes" accesskey="n" rel="next">Alpha Opcodes</a>, Previous: <a href="Alpha-Floating-Point.html#Alpha-Floating-Point" accesskey="p" rel="prev">Alpha Floating Point</a>, Up: <a href="Alpha_002dDependent.html#Alpha_002dDependent" accesskey="u" rel="up">Alpha-Dependent</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="AS-Index.html#AS-Index" title="Index" rel="index">Index</a>]</p>
</div>
 
 
 
</body>
</html>