• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/toolchains/hndtools-armeabi-2011.09/share/doc/arm-arm-none-eabi/html/gcc/
1<html lang="en">
2<head>
3<title>Local Reg Vars - Using the GNU Compiler Collection (GCC)</title>
4<meta http-equiv="Content-Type" content="text/html">
5<meta name="description" content="Using the GNU Compiler Collection (GCC)">
6<meta name="generator" content="makeinfo 4.13">
7<link title="Top" rel="start" href="index.html#Top">
8<link rel="up" href="Explicit-Reg-Vars.html#Explicit-Reg-Vars" title="Explicit Reg Vars">
9<link rel="prev" href="Global-Reg-Vars.html#Global-Reg-Vars" title="Global Reg Vars">
10<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
11<!--
12Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
131998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
142010 Free Software Foundation, Inc.
15
16Permission is granted to copy, distribute and/or modify this document
17under the terms of the GNU Free Documentation License, Version 1.3 or
18any later version published by the Free Software Foundation; with the
19Invariant Sections being ``Funding Free Software'', the Front-Cover
20Texts being (a) (see below), and with the Back-Cover Texts being (b)
21(see below).  A copy of the license is included in the section entitled
22``GNU Free Documentation License''.
23
24(a) The FSF's Front-Cover Text is:
25
26     A GNU Manual
27
28(b) The FSF's Back-Cover Text is:
29
30     You have freedom to copy and modify this GNU Manual, like GNU
31     software.  Copies published by the Free Software Foundation raise
32     funds for GNU development.-->
33<meta http-equiv="Content-Style-Type" content="text/css">
34<style type="text/css"><!--
35  pre.display { font-family:inherit }
36  pre.format  { font-family:inherit }
37  pre.smalldisplay { font-family:inherit; font-size:smaller }
38  pre.smallformat  { font-family:inherit; font-size:smaller }
39  pre.smallexample { font-size:smaller }
40  pre.smalllisp    { font-size:smaller }
41  span.sc    { font-variant:small-caps }
42  span.roman { font-family:serif; font-weight:normal; } 
43  span.sansserif { font-family:sans-serif; font-weight:normal; } 
44--></style>
45<link rel="stylesheet" type="text/css" href="../cs.css">
46</head>
47<body>
48<div class="node">
49<a name="Local-Reg-Vars"></a>
50<p>
51Previous:&nbsp;<a rel="previous" accesskey="p" href="Global-Reg-Vars.html#Global-Reg-Vars">Global Reg Vars</a>,
52Up:&nbsp;<a rel="up" accesskey="u" href="Explicit-Reg-Vars.html#Explicit-Reg-Vars">Explicit Reg Vars</a>
53<hr>
54</div>
55
56<h4 class="subsection">6.44.2 Specifying Registers for Local Variables</h4>
57
58<p><a name="index-local-variables_002c-specifying-registers-2692"></a><a name="index-specifying-registers-for-local-variables-2693"></a><a name="index-registers-for-local-variables-2694"></a>
59You can define a local register variable with a specified register
60like this:
61
62<pre class="smallexample">     register int *foo asm ("a5");
63</pre>
64 <p class="noindent">Here <code>a5</code> is the name of the register which should be used.  Note
65that this is the same syntax used for defining global register
66variables, but for a local variable it would appear within a function.
67
68 <p>Naturally the register name is cpu-dependent, but this is not a
69problem, since specific registers are most often useful with explicit
70assembler instructions (see <a href="Extended-Asm.html#Extended-Asm">Extended Asm</a>).  Both of these things
71generally require that you conditionalize your program according to
72cpu type.
73
74 <p>In addition, operating systems on one type of cpu may differ in how they
75name the registers; then you would need additional conditionals.  For
76example, some 68000 operating systems call this register <code>%a5</code>.
77
78 <p>Defining such a register variable does not reserve the register; it
79remains available for other uses in places where flow control determines
80the variable's value is not live.
81
82 <p>This option does not guarantee that GCC will generate code that has
83this variable in the register you specify at all times.  You may not
84code an explicit reference to this register in the <em>assembler
85instruction template</em> part of an <code>asm</code> statement and assume it will
86always refer to this variable.  However, using the variable as an
87<code>asm</code> <em>operand</em> guarantees that the specified register is used
88for the operand.
89
90 <p>Stores into local register variables may be deleted when they appear to be dead
91according to dataflow analysis.  References to local register variables may
92be deleted or moved or simplified.
93
94 <p>As for global register variables, it's recommended that you choose a
95register which is normally saved and restored by function calls on
96your machine, so that library routines will not clobber it.  A common
97pitfall is to initialize multiple call-clobbered registers with
98arbitrary expressions, where a function call or library call for an
99arithmetic operator will overwrite a register value from a previous
100assignment, for example <code>r0</code> below:
101<pre class="smallexample">     register int *p1 asm ("r0") = ...;
102     register int *p2 asm ("r1") = ...;
103</pre>
104 <p>In those cases, a solution is to use a temporary variable for
105each arbitrary expression.   See <a href="Example-of-asm-with-clobbered-asm-reg.html#Example-of-asm-with-clobbered-asm-reg">Example of asm with clobbered asm reg</a>.
106
107 </body></html>
108
109