131 lines
7.0 KiB
HTML
131 lines
7.0 KiB
HTML
<html lang="en">
|
|
<head>
|
|
<title>RISC-V-Directives - Using as</title>
|
|
<meta http-equiv="Content-Type" content="text/html">
|
|
<meta name="description" content="Using as">
|
|
<meta name="generator" content="makeinfo 4.13">
|
|
<link title="Top" rel="start" href="index.html#Top">
|
|
<link rel="up" href="RISC_002dV_002dDependent.html#RISC_002dV_002dDependent" title="RISC-V-Dependent">
|
|
<link rel="prev" href="RISC_002dV_002dOptions.html#RISC_002dV_002dOptions" title="RISC-V-Options">
|
|
<link rel="next" href="RISC_002dV_002dFormats.html#RISC_002dV_002dFormats" title="RISC-V-Formats">
|
|
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
|
|
<!--
|
|
This file documents the GNU Assembler "as".
|
|
|
|
Copyright (C) 1991-2019 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''.
|
|
|
|
-->
|
|
<meta http-equiv="Content-Style-Type" content="text/css">
|
|
<style type="text/css"><!--
|
|
pre.display { font-family:inherit }
|
|
pre.format { font-family:inherit }
|
|
pre.smalldisplay { font-family:inherit; font-size:smaller }
|
|
pre.smallformat { font-family:inherit; font-size:smaller }
|
|
pre.smallexample { font-size:smaller }
|
|
pre.smalllisp { font-size:smaller }
|
|
span.sc { font-variant:small-caps }
|
|
span.roman { font-family:serif; font-weight:normal; }
|
|
span.sansserif { font-family:sans-serif; font-weight:normal; }
|
|
--></style>
|
|
</head>
|
|
<body>
|
|
<div class="node">
|
|
<a name="RISC-V-Directives"></a>
|
|
<a name="RISC_002dV_002dDirectives"></a>
|
|
<p>
|
|
Next: <a rel="next" accesskey="n" href="RISC_002dV_002dFormats.html#RISC_002dV_002dFormats">RISC-V-Formats</a>,
|
|
Previous: <a rel="previous" accesskey="p" href="RISC_002dV_002dOptions.html#RISC_002dV_002dOptions">RISC-V-Options</a>,
|
|
Up: <a rel="up" accesskey="u" href="RISC_002dV_002dDependent.html#RISC_002dV_002dDependent">RISC-V-Dependent</a>
|
|
<hr>
|
|
</div>
|
|
|
|
<h4 class="subsection">9.38.2 RISC-V Directives</h4>
|
|
|
|
<p><a name="index-machine-directives_002c-RISC_002dV-1988"></a><a name="index-RISC_002dV-machine-directives-1989"></a>
|
|
The following table lists all available RISC-V specific directives.
|
|
|
|
|
|
<a name="index-g_t_0040code_007balign_007d-directive-1990"></a>
|
|
<dl><dt><code>.align </code><var>size-log-2</var><dd>Align to the given boundary, with the size given as log2 the number of bytes to
|
|
align to.
|
|
|
|
<p><a name="index-Data-directives-1991"></a><br><dt><code>.half </code><var>value</var><dt><code>.word </code><var>value</var><dt><code>.dword </code><var>value</var><dd>Emits a half-word, word, or double-word value at the current position.
|
|
|
|
<p><a name="index-DTP_002drelative-data-directives-1992"></a><br><dt><code>.dtprelword </code><var>value</var><dt><code>.dtpreldword </code><var>value</var><dd>Emits a DTP-relative word (or double-word) at the current position. This is
|
|
meant to be used by the compiler in shared libraries for DWARF debug info for
|
|
thread local variables.
|
|
|
|
<p><a name="index-BSS-directive-1993"></a><br><dt><code>.bss</code><dd>Sets the current section to the BSS section.
|
|
|
|
<p><a name="index-LEB128-directives-1994"></a><br><dt><code>.uleb128 </code><var>value</var><dt><code>.sleb128 </code><var>value</var><dd>Emits a signed or unsigned LEB128 value at the current position. This only
|
|
accepts constant expressions, because symbol addresses can change with
|
|
relaxation, and we don't support relocations to modify LEB128 values at link
|
|
time.
|
|
|
|
<p><a name="index-Option-directive-1995"></a><a name="index-g_t_0040code_007boption_007d-directive-1996"></a><br><dt><code>.option </code><var>argument</var><dd>Modifies RISC-V specific assembler options inline with the assembly code.
|
|
This is used when particular instruction sequences must be assembled with a
|
|
specific set of options. For example, since we relax addressing sequences to
|
|
shorter GP-relative sequences when possible the initial load of GP must not be
|
|
relaxed and should be emitted as something like
|
|
|
|
<pre class="smallexample"> .option push
|
|
.option norelax
|
|
la gp, __global_pointer$
|
|
.option pop
|
|
</pre>
|
|
<p>in order to produce after linker relaxation the expected
|
|
|
|
<pre class="smallexample"> auipc gp, %pcrel_hi(__global_pointer$)
|
|
addi gp, gp, %pcrel_lo(__global_pointer$)
|
|
</pre>
|
|
<p>instead of just
|
|
|
|
<pre class="smallexample"> addi gp, gp, 0
|
|
</pre>
|
|
<p>It's not expected that options are changed in this manner during regular use,
|
|
but there are a handful of esoteric cases like the one above where users need
|
|
to disable particular features of the assembler for particular code sequences.
|
|
The complete list of option arguments is shown below:
|
|
|
|
<dl>
|
|
<dt><code>push</code><dt><code>pop</code><dd>Pushes or pops the current option stack. These should be used whenever
|
|
changing an option in line with assembly code in order to ensure the user's
|
|
command-line options are respected for the bulk of the file being assembled.
|
|
|
|
<br><dt><code>rvc</code><dt><code>norvc</code><dd>Enables or disables the generation of compressed instructions. Instructions
|
|
are opportunistically compressed by the RISC-V assembler when possible, but
|
|
sometimes this behavior is not desirable.
|
|
|
|
<br><dt><code>pic</code><dt><code>nopic</code><dd>Enables or disables position-independent code generation. Unless you really
|
|
know what you're doing, this should only be at the top of a file.
|
|
|
|
<br><dt><code>relax</code><dt><code>norelax</code><dd>Enables or disables relaxation. The RISC-V assembler and linker
|
|
opportunistically relax some code sequences, but sometimes this behavior is not
|
|
desirable.
|
|
</dl>
|
|
|
|
<p><a name="index-INSN-directives-1997"></a><br><dt><code>.insn </code><var>value</var><dt><code>.insn </code><var>value</var><dd>This directive permits the numeric representation of an instructions
|
|
and makes the assembler insert the operands according to one of the
|
|
instruction formats for ‘<samp><span class="samp">.insn</span></samp>’ (<a href="RISC_002dV_002dFormats.html#RISC_002dV_002dFormats">RISC-V-Formats</a>).
|
|
For example, the instruction ‘<samp><span class="samp">add a0, a1, a2</span></samp>’ could be written as
|
|
‘<samp><span class="samp">.insn r 0x33, 0, 0, a0, a1, a2</span></samp>’.
|
|
|
|
<p><a name="index-g_t_0040code_007b_002eattribute_007d-directive_002c-RISC_002dV-1998"></a><br><dt><code>.attribute </code><var>tag</var><code>, </code><var>value</var><dd>Set the object attribute <var>tag</var> to <var>value</var>.
|
|
|
|
<p>The <var>tag</var> is either an attribute number, or one of the following:
|
|
<code>Tag_RISCV_arch</code>, <code>Tag_RISCV_stack_align</code>,
|
|
<code>Tag_RISCV_unaligned_access</code>, <code>Tag_RISCV_priv_spec</code>,
|
|
<code>Tag_RISCV_priv_spec_minor</code>, <code>Tag_RISCV_priv_spec_revision</code>.
|
|
|
|
</dl>
|
|
|
|
</body></html>
|
|
|