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: <a rel="next" accesskey="n" href="Modifiers.html#Modifiers">Modifiers</a>, 54Previous: <a rel="previous" accesskey="p" href="Simple-Constraints.html#Simple-Constraints">Simple Constraints</a>, 55Up: <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 ‘<samp><span class="samp">?</span></samp>’ and ‘<samp><span class="samp">!</span></samp>’ 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 ‘<samp><span class="samp">?</span></samp>’ appears in, 86as a choice when no alternative applies exactly. The compiler regards 87this alternative as one unit more costly for each ‘<samp><span class="samp">?</span></samp>’ 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 ‘<samp><span class="samp">!</span></samp>’ 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