blob: d70288546b5a8ef6ba81ca667e709b4bbd251614 [file] [log] [blame]
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 1988-2015 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 the
Invariant Sections being "Funding Free Software", the Front-Cover
Texts being (a) (see below), and with the Back-Cover Texts being (b)
(see below). A copy of the license is included in the section entitled
"GNU Free Documentation License".
(a) The FSF's Front-Cover Text is:
A GNU Manual
(b) The FSF's Back-Cover Text is:
You have freedom to copy and modify this GNU Manual, like GNU
software. Copies published by the Free Software Foundation raise
funds for GNU development. -->
<!-- Created by GNU Texinfo 5.2, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Using the GNU Compiler Collection (GCC): Explicit Reg Vars</title>
<meta name="description" content="Using the GNU Compiler Collection (GCC): Explicit Reg Vars">
<meta name="keywords" content="Using the GNU Compiler Collection (GCC): Explicit Reg Vars">
<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="Option-Index.html#Option-Index" rel="index" title="Option Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="C-Extensions.html#C-Extensions" rel="up" title="C Extensions">
<link href="Global-Reg-Vars.html#Global-Reg-Vars" rel="next" title="Global Reg Vars">
<link href="Asm-Labels.html#Asm-Labels" rel="prev" title="Asm Labels">
<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="Explicit-Reg-Vars"></a>
<div class="header">
<p>
Next: <a href="Alternate-Keywords.html#Alternate-Keywords" accesskey="n" rel="next">Alternate Keywords</a>, Previous: <a href="Asm-Labels.html#Asm-Labels" accesskey="p" rel="prev">Asm Labels</a>, Up: <a href="C-Extensions.html#C-Extensions" accesskey="u" rel="up">C Extensions</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Option-Index.html#Option-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Variables-in-Specified-Registers"></a>
<h3 class="section">6.44 Variables in Specified Registers</h3>
<a name="index-explicit-register-variables"></a>
<a name="index-variables-in-specified-registers"></a>
<a name="index-specified-registers"></a>
<a name="index-registers_002c-global-allocation"></a>
<p>GNU C allows you to put a few global variables into specified hardware
registers. You can also specify the register in which an ordinary
register variable should be allocated.
</p>
<ul>
<li> Global register variables reserve registers throughout the program.
This may be useful in programs such as programming language
interpreters that have a couple of global variables that are accessed
very often.
</li><li> Local register variables in specific registers do not reserve the
registers, except at the point where they are used as input or output
operands in an <code>asm</code> statement and the <code>asm</code> statement itself is
not deleted. The compiler&rsquo;s data flow analysis is capable of determining
where the specified registers contain live values, and where they are
available for other uses. Stores into local register variables may be deleted
when they appear to be dead according to dataflow analysis. References
to local register variables may be deleted or moved or simplified.
<p>These local variables are sometimes convenient for use with the extended
<code>asm</code> feature (see <a href="Extended-Asm.html#Extended-Asm">Extended Asm</a>), if you want to write one
output of the assembler instruction directly into a particular register.
(This works provided the register you specify fits the constraints
specified for that operand in the <code>asm</code>.)
</p></li></ul>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">&bull; <a href="Global-Reg-Vars.html#Global-Reg-Vars" accesskey="1">Global Reg Vars</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">&bull; <a href="Local-Reg-Vars.html#Local-Reg-Vars" accesskey="2">Local Reg Vars</a>:</td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
</td></tr>
</table>
</body>
</html>