blob: bd3e3ceb99d8469a9f082586959009524b72508c [file] [log] [blame]
<html lang="en">
<head>
<title>Sparc-Size-Translations - 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="Sparc_002dSyntax.html#Sparc_002dSyntax" title="Sparc-Syntax">
<link rel="prev" href="Sparc_002dRelocs.html#Sparc_002dRelocs" title="Sparc-Relocs">
<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
<!--
This file documents the GNU Assembler "as".
Copyright (C) 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
2000, 2001, 2002, 2006, 2007, 2008, 2009, 2010 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>
<link rel="stylesheet" type="text/css" href="../cs.css">
</head>
<body>
<div class="node">
<a name="Sparc-Size-Translations"></a>
<a name="Sparc_002dSize_002dTranslations"></a>
<p>
Previous:&nbsp;<a rel="previous" accesskey="p" href="Sparc_002dRelocs.html#Sparc_002dRelocs">Sparc-Relocs</a>,
Up:&nbsp;<a rel="up" accesskey="u" href="Sparc_002dSyntax.html#Sparc_002dSyntax">Sparc-Syntax</a>
<hr>
</div>
<h5 class="subsubsection">9.35.3.5 Size Translations</h5>
<p><a name="index-Sparc-size-translations-1649"></a><a name="index-size_002c-translations_002c-Sparc-1650"></a>
Often it is desirable to write code in an operand size agnostic
manner. <code>as</code> provides support for this via
operand size opcode translations. Translations are supported
for loads, stores, shifts, compare-and-swap atomics, and the
&lsquo;<samp><span class="samp">clr</span></samp>&rsquo; synthetic instruction.
<p>If generating 32-bit code, <code>as</code> will generate the
32-bit opcode. Whereas if 64-bit code is being generated,
the 64-bit opcode will be emitted. For example <code>ldn</code>
will be transformed into <code>ld</code> for 32-bit code and
<code>ldx</code> for 64-bit code.
<p>Here is an example meant to demonstrate all the supported
opcode translations:
<pre class="example"> ldn [%o0], %o1
ldna [%o0] %asi, %o2
stn %o1, [%o0]
stna %o2, [%o0] %asi
slln %o3, 3, %o3
srln %o4, 8, %o4
sran %o5, 12, %o5
casn [%o0], %o1, %o2
casna [%o0] %asi, %o1, %o2
clrn %g1
</pre>
<p>In 32-bit mode <code>as</code> will emit:
<pre class="example"> ld [%o0], %o1
lda [%o0] %asi, %o2
st %o1, [%o0]
sta %o2, [%o0] %asi
sll %o3, 3, %o3
srl %o4, 8, %o4
sra %o5, 12, %o5
cas [%o0], %o1, %o2
casa [%o0] %asi, %o1, %o2
clr %g1
</pre>
<p>And in 64-bit mode <code>as</code> will emit:
<pre class="example"> ldx [%o0], %o1
ldxa [%o0] %asi, %o2
stx %o1, [%o0]
stxa %o2, [%o0] %asi
sllx %o3, 3, %o3
srlx %o4, 8, %o4
srax %o5, 12, %o5
casx [%o0], %o1, %o2
casxa [%o0] %asi, %o1, %o2
clrx %g1
</pre>
<p>Finally, the &lsquo;<samp><span class="samp">.nword</span></samp>&rsquo; translating directive is supported
as well. It is documented in the section on Sparc machine
directives.
</body></html>