• 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>Multi-Alternative - 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="Constraints.html#Constraints" title="Constraints">
9<link rel="prev" href="Simple-Constraints.html#Simple-Constraints" title="Simple Constraints">
10<link rel="next" href="Modifiers.html#Modifiers" title="Modifiers">
11<link href="http://www.gnu.org/software/texinfo/" rel="generator-home" title="Texinfo Homepage">
12<!--
13Copyright (C) 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997,
141998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009,
152010 Free Software Foundation, Inc.
16
17Permission is granted to copy, distribute and/or modify this document
18under the terms of the GNU Free Documentation License, Version 1.3 or
19any later version published by the Free Software Foundation; with the
20Invariant Sections being ``Funding Free Software'', the Front-Cover
21Texts being (a) (see below), and with the Back-Cover Texts being (b)
22(see below).  A copy of the license is included in the section entitled
23``GNU Free Documentation License''.
24
25(a) The FSF's Front-Cover Text is:
26
27     A GNU Manual
28
29(b) The FSF's Back-Cover Text is:
30
31     You have freedom to copy and modify this GNU Manual, like GNU
32     software.  Copies published by the Free Software Foundation raise
33     funds for GNU development.-->
34<meta http-equiv="Content-Style-Type" content="text/css">
35<style type="text/css"><!--
36  pre.display { font-family:inherit }
37  pre.format  { font-family:inherit }
38  pre.smalldisplay { font-family:inherit; font-size:smaller }
39  pre.smallformat  { font-family:inherit; font-size:smaller }
40  pre.smallexample { font-size:smaller }
41  pre.smalllisp    { font-size:smaller }
42  span.sc    { font-variant:small-caps }
43  span.roman { font-family:serif; font-weight:normal; } 
44  span.sansserif { font-family:sans-serif; font-weight:normal; } 
45--></style>
46<link rel="stylesheet" type="text/css" href="../cs.css">
47</head>
48<body>
49<div class="node">
50<a name="Multi-Alternative"></a>
51<a name="Multi_002dAlternative"></a>
52<p>
53Next:&nbsp;<a rel="next" accesskey="n" href="Modifiers.html#Modifiers">Modifiers</a>,
54Previous:&nbsp;<a rel="previous" accesskey="p" href="Simple-Constraints.html#Simple-Constraints">Simple Constraints</a>,
55Up:&nbsp;<a rel="up" accesskey="u" href="Constraints.html#Constraints">Constraints</a>
56<hr>
57</div>
58
59<h4 class="subsection">6.42.2 Multiple Alternative Constraints</h4>
60
61<p><a name="index-multiple-alternative-constraints-2661"></a>
62Sometimes a single instruction has multiple alternative sets of possible
63operands.  For example, on the 68000, a logical-or instruction can combine
64register or an immediate value into memory, or it can combine any kind of
65operand into a register; but it cannot combine one memory location into
66another.
67
68 <p>These constraints are represented as multiple alternatives.  An alternative
69can be described by a series of letters for each operand.  The overall
70constraint for an operand is made from the letters for this operand
71from the first alternative, a comma, the letters for this operand from
72the second alternative, a comma, and so on until the last alternative.
73
74<!-- FIXME Is this ? and ! stuff of use in asm()?  If not, hide unless INTERNAL -->
75 <p>If all the operands fit any one alternative, the instruction is valid. 
76Otherwise, for each alternative, the compiler counts how many instructions
77must be added to copy the operands so that that alternative applies. 
78The alternative requiring the least copying is chosen.  If two alternatives
79need the same amount of copying, the one that comes first is chosen. 
80These choices can be altered with the &lsquo;<samp><span class="samp">?</span></samp>&rsquo; and &lsquo;<samp><span class="samp">!</span></samp>&rsquo; characters:
81
82     
83<a name="index-g_t_0040samp_007b_003f_007d-in-constraint-2662"></a>
84<a name="index-question-mark-2663"></a>
85<dl><dt><code>?</code><dd>Disparage slightly the alternative that the &lsquo;<samp><span class="samp">?</span></samp>&rsquo; appears in,
86as a choice when no alternative applies exactly.  The compiler regards
87this alternative as one unit more costly for each &lsquo;<samp><span class="samp">?</span></samp>&rsquo; that appears
88in it.
89
90     <p><a name="index-g_t_0040samp_007b_0021_007d-in-constraint-2664"></a><a name="index-exclamation-point-2665"></a><br><dt><code>!</code><dd>Disparage severely the alternative that the &lsquo;<samp><span class="samp">!</span></samp>&rsquo; appears in. 
91This alternative can still be used if it fits without reloading,
92but if reloading is needed, some other alternative will be used. 
93</dl>
94
95 </body></html>
96
97