255 lines
12 KiB
HTML
255 lines
12 KiB
HTML
<!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: Sparc-Regs</title>
|
|
|
|
<meta name="description" content="Using as: Sparc-Regs">
|
|
<meta name="keywords" content="Using as: Sparc-Regs">
|
|
<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="Sparc_002dSyntax.html#Sparc_002dSyntax" rel="up" title="Sparc-Syntax">
|
|
<link href="Sparc_002dConstants.html#Sparc_002dConstants" rel="next" title="Sparc-Constants">
|
|
<link href="Sparc_002dChars.html#Sparc_002dChars" rel="prev" title="Sparc-Chars">
|
|
<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="Sparc_002dRegs"></a>
|
|
<div class="header">
|
|
<p>
|
|
Next: <a href="Sparc_002dConstants.html#Sparc_002dConstants" accesskey="n" rel="next">Sparc-Constants</a>, Previous: <a href="Sparc_002dChars.html#Sparc_002dChars" accesskey="p" rel="prev">Sparc-Chars</a>, Up: <a href="Sparc_002dSyntax.html#Sparc_002dSyntax" accesskey="u" rel="up">Sparc-Syntax</a> [<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="Register-Names-15"></a>
|
|
<h4 class="subsubsection">9.42.3.2 Register Names</h4>
|
|
<a name="index-Sparc-registers"></a>
|
|
<a name="index-register-names_002c-Sparc"></a>
|
|
|
|
<p>The Sparc integer register file is broken down into global,
|
|
outgoing, local, and incoming.
|
|
</p>
|
|
<ul>
|
|
<li> The 8 global registers are referred to as ‘<samp>%g<var>n</var></samp>’.
|
|
|
|
</li><li> The 8 outgoing registers are referred to as ‘<samp>%o<var>n</var></samp>’.
|
|
|
|
</li><li> The 8 local registers are referred to as ‘<samp>%l<var>n</var></samp>’.
|
|
|
|
</li><li> The 8 incoming registers are referred to as ‘<samp>%i<var>n</var></samp>’.
|
|
|
|
</li><li> The frame pointer register ‘<samp>%i6</samp>’ can be referenced using
|
|
the alias ‘<samp>%fp</samp>’.
|
|
|
|
</li><li> The stack pointer register ‘<samp>%o6</samp>’ can be referenced using
|
|
the alias ‘<samp>%sp</samp>’.
|
|
</li></ul>
|
|
|
|
<p>Floating point registers are simply referred to as ‘<samp>%f<var>n</var></samp>’.
|
|
When assembling for pre-V9, only 32 floating point registers
|
|
are available. For V9 and later there are 64, but there are
|
|
restrictions when referencing the upper 32 registers. They
|
|
can only be accessed as double or quad, and thus only even
|
|
or quad numbered accesses are allowed. For example, ‘<samp>%f34</samp>’
|
|
is a legal floating point register, but ‘<samp>%f35</samp>’ is not.
|
|
</p>
|
|
<p>Floating point registers accessed as double can also be referred using
|
|
the ‘<samp>%d<var>n</var></samp>’ notation, where <var>n</var> is even. Similarly,
|
|
floating point registers accessed as quad can be referred using the
|
|
‘<samp>%q<var>n</var></samp>’ notation, where <var>n</var> is a multiple of 4. For
|
|
example, ‘<samp>%f4</samp>’ can be denoted as both ‘<samp>%d4</samp>’ and ‘<samp>%q4</samp>’.
|
|
On the other hand, ‘<samp>%f2</samp>’ can be denoted as ‘<samp>%d2</samp>’ but not as
|
|
‘<samp>%q2</samp>’.
|
|
</p>
|
|
<p>Certain V9 instructions allow access to ancillary state registers.
|
|
Most simply they can be referred to as ‘<samp>%asr<var>n</var></samp>’ where
|
|
<var>n</var> can be from 16 to 31. However, there are some aliases
|
|
defined to reference ASR registers defined for various UltraSPARC
|
|
processors:
|
|
</p>
|
|
<ul>
|
|
<li> The tick compare register is referred to as ‘<samp>%tick_cmpr</samp>’.
|
|
|
|
</li><li> The system tick register is referred to as ‘<samp>%stick</samp>’. An alias,
|
|
‘<samp>%sys_tick</samp>’, exists but is deprecated and should not be used
|
|
by new software.
|
|
|
|
</li><li> The system tick compare register is referred to as ‘<samp>%stick_cmpr</samp>’.
|
|
An alias, ‘<samp>%sys_tick_cmpr</samp>’, exists but is deprecated and should
|
|
not be used by new software.
|
|
|
|
</li><li> The software interrupt register is referred to as ‘<samp>%softint</samp>’.
|
|
|
|
</li><li> The set software interrupt register is referred to as ‘<samp>%set_softint</samp>’.
|
|
The mnemonic ‘<samp>%softint_set</samp>’ is provided as an alias.
|
|
|
|
</li><li> The clear software interrupt register is referred to as
|
|
‘<samp>%clear_softint</samp>’. The mnemonic ‘<samp>%softint_clear</samp>’ is provided
|
|
as an alias.
|
|
|
|
</li><li> The performance instrumentation counters register is referred to as
|
|
‘<samp>%pic</samp>’.
|
|
|
|
</li><li> The performance control register is referred to as ‘<samp>%pcr</samp>’.
|
|
|
|
</li><li> The graphics status register is referred to as ‘<samp>%gsr</samp>’.
|
|
|
|
</li><li> The V9 dispatch control register is referred to as ‘<samp>%dcr</samp>’.
|
|
</li></ul>
|
|
|
|
<p>Various V9 branch and conditional move instructions allow
|
|
specification of which set of integer condition codes to
|
|
test. These are referred to as ‘<samp>%xcc</samp>’ and ‘<samp>%icc</samp>’.
|
|
</p>
|
|
<p>Additionally, GAS supports the so-called “natural” condition codes;
|
|
these are referred to as ‘<samp>%ncc</samp>’ and reference to ‘<samp>%icc</samp>’ if
|
|
the word size is 32, ‘<samp>%xcc</samp>’ if the word size is 64.
|
|
</p>
|
|
<p>In V9, there are 4 sets of floating point condition codes
|
|
which are referred to as ‘<samp>%fcc<var>n</var></samp>’.
|
|
</p>
|
|
<p>Several special privileged and non-privileged registers
|
|
exist:
|
|
</p>
|
|
<ul>
|
|
<li> The V9 address space identifier register is referred to as ‘<samp>%asi</samp>’.
|
|
|
|
</li><li> The V9 restorable windows register is referred to as ‘<samp>%canrestore</samp>’.
|
|
|
|
</li><li> The V9 savable windows register is referred to as ‘<samp>%cansave</samp>’.
|
|
|
|
</li><li> The V9 clean windows register is referred to as ‘<samp>%cleanwin</samp>’.
|
|
|
|
</li><li> The V9 current window pointer register is referred to as ‘<samp>%cwp</samp>’.
|
|
|
|
</li><li> The floating-point queue register is referred to as ‘<samp>%fq</samp>’.
|
|
|
|
</li><li> The V8 co-processor queue register is referred to as ‘<samp>%cq</samp>’.
|
|
|
|
</li><li> The floating point status register is referred to as ‘<samp>%fsr</samp>’.
|
|
|
|
</li><li> The other windows register is referred to as ‘<samp>%otherwin</samp>’.
|
|
|
|
</li><li> The V9 program counter register is referred to as ‘<samp>%pc</samp>’.
|
|
|
|
</li><li> The V9 next program counter register is referred to as ‘<samp>%npc</samp>’.
|
|
|
|
</li><li> The V9 processor interrupt level register is referred to as ‘<samp>%pil</samp>’.
|
|
|
|
</li><li> The V9 processor state register is referred to as ‘<samp>%pstate</samp>’.
|
|
|
|
</li><li> The trap base address register is referred to as ‘<samp>%tba</samp>’.
|
|
|
|
</li><li> The V9 tick register is referred to as ‘<samp>%tick</samp>’.
|
|
|
|
</li><li> The V9 trap level is referred to as ‘<samp>%tl</samp>’.
|
|
|
|
</li><li> The V9 trap program counter is referred to as ‘<samp>%tpc</samp>’.
|
|
|
|
</li><li> The V9 trap next program counter is referred to as ‘<samp>%tnpc</samp>’.
|
|
|
|
</li><li> The V9 trap state is referred to as ‘<samp>%tstate</samp>’.
|
|
|
|
</li><li> The V9 trap type is referred to as ‘<samp>%tt</samp>’.
|
|
|
|
</li><li> The V9 condition codes is referred to as ‘<samp>%ccr</samp>’.
|
|
|
|
</li><li> The V9 floating-point registers state is referred to as ‘<samp>%fprs</samp>’.
|
|
|
|
</li><li> The V9 version register is referred to as ‘<samp>%ver</samp>’.
|
|
|
|
</li><li> The V9 window state register is referred to as ‘<samp>%wstate</samp>’.
|
|
|
|
</li><li> The Y register is referred to as ‘<samp>%y</samp>’.
|
|
|
|
</li><li> The V8 window invalid mask register is referred to as ‘<samp>%wim</samp>’.
|
|
|
|
</li><li> The V8 processor state register is referred to as ‘<samp>%psr</samp>’.
|
|
|
|
</li><li> The V9 global register level register is referred to as ‘<samp>%gl</samp>’.
|
|
</li></ul>
|
|
|
|
<p>Several special register names exist for hypervisor mode code:
|
|
</p>
|
|
<ul>
|
|
<li> The hyperprivileged processor state register is referred to as
|
|
‘<samp>%hpstate</samp>’.
|
|
|
|
</li><li> The hyperprivileged trap state register is referred to as ‘<samp>%htstate</samp>’.
|
|
|
|
</li><li> The hyperprivileged interrupt pending register is referred to as
|
|
‘<samp>%hintp</samp>’.
|
|
|
|
</li><li> The hyperprivileged trap base address register is referred to as
|
|
‘<samp>%htba</samp>’.
|
|
|
|
</li><li> The hyperprivileged implementation version register is referred
|
|
to as ‘<samp>%hver</samp>’.
|
|
|
|
</li><li> The hyperprivileged system tick offset register is referred to as
|
|
‘<samp>%hstick_offset</samp>’. Note that there is no ‘<samp>%hstick</samp>’ register,
|
|
the normal ‘<samp>%stick</samp>’ is used.
|
|
|
|
</li><li> The hyperprivileged system tick enable register is referred to as
|
|
‘<samp>%hstick_enable</samp>’.
|
|
|
|
</li><li> The hyperprivileged system tick compare register is referred
|
|
to as ‘<samp>%hstick_cmpr</samp>’.
|
|
</li></ul>
|
|
|
|
<hr>
|
|
<div class="header">
|
|
<p>
|
|
Next: <a href="Sparc_002dConstants.html#Sparc_002dConstants" accesskey="n" rel="next">Sparc-Constants</a>, Previous: <a href="Sparc_002dChars.html#Sparc_002dChars" accesskey="p" rel="prev">Sparc-Chars</a>, Up: <a href="Sparc_002dSyntax.html#Sparc_002dSyntax" accesskey="u" rel="up">Sparc-Syntax</a> [<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>
|