[llvm-commits] [www-releases] r170845 [4/55] - in /www-releases/trunk/3.2/docs: ./ CommandGuide/ HistoricalNotes/ _static/ _templates/ _themes/ _themes/llvm-theme/ _themes/llvm-theme/static/ doxygen/ doxygen/html/ llvm-theme/ llvm-theme/static/ tutorial/

Tanya Lattner tonic at nondot.org
Thu Dec 20 22:58:17 PST 2012


Added: www-releases/trunk/3.2/docs/doxygen/html/APFloat_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/APFloat_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/APFloat_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/APFloat_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,3637 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: APFloat.cpp Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3927ff15cdce1d22d8dcb33a29894069.html">Support</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">APFloat.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="APFloat_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- APFloat.cpp - Implement APFloat class -----------------------------===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file implements a class to represent arbitrary precision floating</span>
+<a name="l00011"></a>00011 <span class="comment">// point values and provide a variety of arithmetic operations on them.</span>
+<a name="l00012"></a>00012 <span class="comment">//</span>
+<a name="l00013"></a>00013 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00014"></a>00014 
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="APFloat_8h.html">llvm/ADT/APFloat.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="APSInt_8h.html">llvm/ADT/APSInt.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="FoldingSet_8h.html">llvm/ADT/FoldingSet.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="Hashing_8h.html">llvm/ADT/Hashing.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="StringRef_8h.html">llvm/ADT/StringRef.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="ErrorHandling_8h.html">llvm/Support/ErrorHandling.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="MathExtras_8h.html">llvm/Support/MathExtras.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include <limits.h></span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include <cstring></span>
+<a name="l00024"></a>00024 
+<a name="l00025"></a>00025 <span class="keyword">using namespace </span>llvm;
+<a name="l00026"></a>00026 
+<a name="l00027"></a><a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">00027</a> <span class="preprocessor">#define convolve(lhs, rhs) ((lhs) * 4 + (rhs))</span>
+<a name="l00028"></a>00028 <span class="preprocessor"></span>
+<a name="l00029"></a>00029 <span class="comment">/* Assumed in hexadecimal significand parsing, and conversion to</span>
+<a name="l00030"></a>00030 <span class="comment">   hexadecimal strings.  */</span>
+<a name="l00031"></a><a class="code" href="APFloat_8cpp.html#a7a14f772ba33630fcb09163ed22e4f2e">00031</a> <span class="preprocessor">#define COMPILE_TIME_ASSERT(cond) extern int CTAssert[(cond) ? 1 : -1]</span>
+<a name="l00032"></a>00032 <span class="preprocessor"></span><a class="code" href="APFloat_8cpp.html#a7a14f772ba33630fcb09163ed22e4f2e">COMPILE_TIME_ASSERT</a>(<a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a> % 4 == 0);
+<a name="l00033"></a>00033 
+<a name="l00034"></a>00034 <span class="keyword">namespace </span>llvm {
+<a name="l00035"></a>00035 
+<a name="l00036"></a>00036   <span class="comment">/* Represents floating point arithmetic semantics.  */</span>
+<a name="l00037"></a><a class="code" href="structllvm_1_1fltSemantics.html">00037</a>   <span class="keyword">struct </span><a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> {
+<a name="l00038"></a>00038     <span class="comment">/* The largest E such that 2^E is representable; this matches the</span>
+<a name="l00039"></a>00039 <span class="comment">       definition of IEEE 754.  */</span>
+<a name="l00040"></a><a class="code" href="structllvm_1_1fltSemantics.html#a60ad2894b47852a4b60af1b89a3d38ae">00040</a>     <a class="code" href="namespacellvm.html#afe3253dc54e986c3504af514c451897b">exponent_t</a> <a class="code" href="structllvm_1_1fltSemantics.html#a60ad2894b47852a4b60af1b89a3d38ae">maxExponent</a>;
+<a name="l00041"></a>00041 
+<a name="l00042"></a>00042     <span class="comment">/* The smallest E such that 2^E is a normalized number; this</span>
+<a name="l00043"></a>00043 <span class="comment">       matches the definition of IEEE 754.  */</span>
+<a name="l00044"></a><a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">00044</a>     <a class="code" href="namespacellvm.html#afe3253dc54e986c3504af514c451897b">exponent_t</a> <a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a>;
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046     <span class="comment">/* Number of bits in the significand.  This includes the integer</span>
+<a name="l00047"></a>00047 <span class="comment">       bit.  */</span>
+<a name="l00048"></a><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">00048</a>     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l00049"></a>00049   };
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051   <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> <a class="code" href="classllvm_1_1APFloat.html#acd77961b2028e148c829b18ceaef81c4">APFloat::IEEEhalf</a> = { 15, -14, 11 };
+<a name="l00052"></a>00052   <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> <a class="code" href="classllvm_1_1APFloat.html#a43f6e79227388f373628e8ddd27df965">APFloat::IEEEsingle</a> = { 127, -126, 24 };
+<a name="l00053"></a>00053   <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> <a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">APFloat::IEEEdouble</a> = { 1023, -1022, 53 };
+<a name="l00054"></a>00054   <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> <a class="code" href="classllvm_1_1APFloat.html#a05a01faa391a74f808c372231207cf1a">APFloat::IEEEquad</a> = { 16383, -16382, 113 };
+<a name="l00055"></a>00055   <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> <a class="code" href="classllvm_1_1APFloat.html#a8fb913b1bed6dfe011696fe4e287ca70">APFloat::x87DoubleExtended</a> = { 16383, -16382, 64 };
+<a name="l00056"></a>00056   <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> <a class="code" href="classllvm_1_1APFloat.html#af6ed1a67bcd006fbc1e13b4c24aecb46">APFloat::Bogus</a> = { 0, 0, 0 };
+<a name="l00057"></a>00057 
+<a name="l00058"></a>00058   <span class="comment">/* The PowerPC format consists of two doubles.  It does not map cleanly</span>
+<a name="l00059"></a>00059 <span class="comment">     onto the usual format above.  It is approximated using twice the</span>
+<a name="l00060"></a>00060 <span class="comment">     mantissa bits.  Note that for exponents near the double minimum,</span>
+<a name="l00061"></a>00061 <span class="comment">     we no longer can represent the full 106 mantissa bits, so those</span>
+<a name="l00062"></a>00062 <span class="comment">     will be treated as denormal numbers.</span>
+<a name="l00063"></a>00063 <span class="comment"></span>
+<a name="l00064"></a>00064 <span class="comment">     FIXME: While this approximation is equivalent to what GCC uses for</span>
+<a name="l00065"></a>00065 <span class="comment">     compile-time arithmetic on PPC double-double numbers, it is not able</span>
+<a name="l00066"></a>00066 <span class="comment">     to represent all possible values held by a PPC double-double number,</span>
+<a name="l00067"></a>00067 <span class="comment">     for example: (long double) 1.0 + (long double) 0x1p-106</span>
+<a name="l00068"></a>00068 <span class="comment">     Should this be replaced by a full emulation of PPC double-double?  */</span>
+<a name="l00069"></a>00069   <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> <a class="code" href="classllvm_1_1APFloat.html#a2065ce1bee75d8e883077a752dc33081">APFloat::PPCDoubleDouble</a> = { 1023, -1022 + 53, 53 + 53 };
+<a name="l00070"></a>00070 
+<a name="l00071"></a>00071   <span class="comment">/* A tight upper bound on number of parts required to hold the value</span>
+<a name="l00072"></a>00072 <span class="comment">     pow(5, power) is</span>
+<a name="l00073"></a>00073 <span class="comment"></span>
+<a name="l00074"></a>00074 <span class="comment">       power * 815 / (351 * integerPartWidth) + 1</span>
+<a name="l00075"></a>00075 <span class="comment"></span>
+<a name="l00076"></a>00076 <span class="comment">     However, whilst the result may require only this many parts,</span>
+<a name="l00077"></a>00077 <span class="comment">     because we are multiplying two values to get it, the</span>
+<a name="l00078"></a>00078 <span class="comment">     multiplication may require an extra part with the excess part</span>
+<a name="l00079"></a>00079 <span class="comment">     being zero (consider the trivial case of 1 * 1, tcFullMultiply</span>
+<a name="l00080"></a>00080 <span class="comment">     requires two parts to hold the single-part result).  So we add an</span>
+<a name="l00081"></a>00081 <span class="comment">     extra one to guarantee enough space whilst multiplying.  */</span>
+<a name="l00082"></a><a class="code" href="namespacellvm.html#aa2356c8c049af2c0e4a5e4892e5a48d1">00082</a>   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacellvm.html#aa2356c8c049af2c0e4a5e4892e5a48d1">maxExponent</a> = 16383;
+<a name="l00083"></a><a class="code" href="namespacellvm.html#a4fc0551303dc77bf30c5487aea4b4c5e">00083</a>   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacellvm.html#a4fc0551303dc77bf30c5487aea4b4c5e">maxPrecision</a> = 113;
+<a name="l00084"></a><a class="code" href="namespacellvm.html#a4642be0121438a6a6e4e28ad42a98b60">00084</a>   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacellvm.html#a4642be0121438a6a6e4e28ad42a98b60">maxPowerOfFiveExponent</a> = <a class="code" href="namespacellvm.html#aa2356c8c049af2c0e4a5e4892e5a48d1">maxExponent</a> + <a class="code" href="namespacellvm.html#a4fc0551303dc77bf30c5487aea4b4c5e">maxPrecision</a> - 1;
+<a name="l00085"></a><a class="code" href="namespacellvm.html#a769f4d371efd3462f20b02b7cd8fba79">00085</a>   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="namespacellvm.html#a769f4d371efd3462f20b02b7cd8fba79">maxPowerOfFiveParts</a> = 2 + ((<a class="code" href="namespacellvm.html#a4642be0121438a6a6e4e28ad42a98b60">maxPowerOfFiveExponent</a> * 815)
+<a name="l00086"></a>00086                                                 / (351 * <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>));
+<a name="l00087"></a>00087 }
+<a name="l00088"></a>00088 
+<a name="l00089"></a>00089 <span class="comment">/* A bunch of private, handy routines.  */</span>
+<a name="l00090"></a>00090 
+<a name="l00091"></a>00091 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00092"></a><a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">00092</a> <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits)
+<a name="l00093"></a>00093 {
+<a name="l00094"></a>00094   <span class="keywordflow">return</span> ((bits) + <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a> - 1) / <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>;
+<a name="l00095"></a>00095 }
+<a name="l00096"></a>00096 
+<a name="l00097"></a>00097 <span class="comment">/* Returns 0U-9U.  Return values >= 10U are not digits.  */</span>
+<a name="l00098"></a>00098 <span class="keyword">static</span> <span class="keyword">inline</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00099"></a><a class="code" href="APFloat_8cpp.html#aef45d072a8d986f88b8a599f66516ffa">00099</a> <a class="code" href="APFloat_8cpp.html#aef45d072a8d986f88b8a599f66516ffa">decDigitValue</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c)
+<a name="l00100"></a>00100 {
+<a name="l00101"></a>00101   <span class="keywordflow">return</span> c - <span class="charliteral">'0'</span>;
+<a name="l00102"></a>00102 }
+<a name="l00103"></a>00103 
+<a name="l00104"></a>00104 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00105"></a><a class="code" href="APFloat_8cpp.html#a10de524dcc1e204bf4ff4592d45f2dd5">00105</a> <a class="code" href="APFloat_8cpp.html#a10de524dcc1e204bf4ff4592d45f2dd5">hexDigitValue</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> c)
+<a name="l00106"></a>00106 {
+<a name="l00107"></a>00107   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> r;
+<a name="l00108"></a>00108 
+<a name="l00109"></a>00109   r = c - <span class="charliteral">'0'</span>;
+<a name="l00110"></a>00110   <span class="keywordflow">if</span> (r <= 9)
+<a name="l00111"></a>00111     <span class="keywordflow">return</span> r;
+<a name="l00112"></a>00112 
+<a name="l00113"></a>00113   r = c - <span class="charliteral">'A'</span>;
+<a name="l00114"></a>00114   <span class="keywordflow">if</span> (r <= 5)
+<a name="l00115"></a>00115     <span class="keywordflow">return</span> r + 10;
+<a name="l00116"></a>00116 
+<a name="l00117"></a>00117   r = c - <span class="charliteral">'a'</span>;
+<a name="l00118"></a>00118   <span class="keywordflow">if</span> (r <= 5)
+<a name="l00119"></a>00119     <span class="keywordflow">return</span> r + 10;
+<a name="l00120"></a>00120 
+<a name="l00121"></a>00121   <span class="keywordflow">return</span> -1U;
+<a name="l00122"></a>00122 }
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124 <span class="comment">/* Return the value of a decimal exponent of the form</span>
+<a name="l00125"></a>00125 <span class="comment">   [+-]ddddddd.</span>
+<a name="l00126"></a>00126 <span class="comment"></span>
+<a name="l00127"></a>00127 <span class="comment">   If the exponent overflows, returns a large exponent with the</span>
+<a name="l00128"></a>00128 <span class="comment">   appropriate sign.  */</span>
+<a name="l00129"></a>00129 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00130"></a><a class="code" href="APFloat_8cpp.html#a74f900d08953d743bd204e6cb480cadc">00130</a> <a class="code" href="APFloat_8cpp.html#a74f900d08953d743bd204e6cb480cadc">readExponent</a>(<a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a33706aab89e700b8f79e1fa6f4f0e3ee" title="Get begin iterator over path.">begin</a>, <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>)
+<a name="l00131"></a>00131 {
+<a name="l00132"></a>00132   <span class="keywordtype">bool</span> isNegative;
+<a name="l00133"></a>00133   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> absExponent;
+<a name="l00134"></a>00134   <span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> overlargeExponent = 24000;  <span class="comment">/* FIXME.  */</span>
+<a name="l00135"></a>00135   <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> p = <a class="code" href="namespacellvm_1_1sys_1_1path.html#a33706aab89e700b8f79e1fa6f4f0e3ee" title="Get begin iterator over path.">begin</a>;
+<a name="l00136"></a>00136 
+<a name="l00137"></a>00137   assert(p != end && <span class="stringliteral">"Exponent has no digits"</span>);
+<a name="l00138"></a>00138 
+<a name="l00139"></a>00139   isNegative = (*p == <span class="charliteral">'-'</span>);
+<a name="l00140"></a>00140   <span class="keywordflow">if</span> (*p == <span class="charliteral">'-'</span> || *p == <span class="charliteral">'+'</span>) {
+<a name="l00141"></a>00141     p++;
+<a name="l00142"></a>00142     assert(p != end && <span class="stringliteral">"Exponent has no digits"</span>);
+<a name="l00143"></a>00143   }
+<a name="l00144"></a>00144 
+<a name="l00145"></a>00145   absExponent = <a class="code" href="APFloat_8cpp.html#aef45d072a8d986f88b8a599f66516ffa">decDigitValue</a>(*p++);
+<a name="l00146"></a>00146   assert(absExponent < 10U && <span class="stringliteral">"Invalid character in exponent"</span>);
+<a name="l00147"></a>00147 
+<a name="l00148"></a>00148   <span class="keywordflow">for</span> (; p != <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>; ++p) {
+<a name="l00149"></a>00149     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> value;
+<a name="l00150"></a>00150 
+<a name="l00151"></a>00151     value = <a class="code" href="APFloat_8cpp.html#aef45d072a8d986f88b8a599f66516ffa">decDigitValue</a>(*p);
+<a name="l00152"></a>00152     assert(value < 10U && <span class="stringliteral">"Invalid character in exponent"</span>);
+<a name="l00153"></a>00153 
+<a name="l00154"></a>00154     value += absExponent * 10;
+<a name="l00155"></a>00155     <span class="keywordflow">if</span> (absExponent >= overlargeExponent) {
+<a name="l00156"></a>00156       absExponent = overlargeExponent;
+<a name="l00157"></a>00157       p = <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>;  <span class="comment">/* outwit assert below */</span>
+<a name="l00158"></a>00158       <span class="keywordflow">break</span>;
+<a name="l00159"></a>00159     }
+<a name="l00160"></a>00160     absExponent = value;
+<a name="l00161"></a>00161   }
+<a name="l00162"></a>00162 
+<a name="l00163"></a>00163   assert(p == end && <span class="stringliteral">"Invalid exponent in exponent"</span>);
+<a name="l00164"></a>00164 
+<a name="l00165"></a>00165   <span class="keywordflow">if</span> (isNegative)
+<a name="l00166"></a>00166     <span class="keywordflow">return</span> -(int) absExponent;
+<a name="l00167"></a>00167   <span class="keywordflow">else</span>
+<a name="l00168"></a>00168     <span class="keywordflow">return</span> (<span class="keywordtype">int</span>) absExponent;
+<a name="l00169"></a>00169 }
+<a name="l00170"></a>00170 
+<a name="l00171"></a>00171 <span class="comment">/* This is ugly and needs cleaning up, but I don't immediately see</span>
+<a name="l00172"></a>00172 <span class="comment">   how whilst remaining safe.  */</span>
+<a name="l00173"></a>00173 <span class="keyword">static</span> <span class="keywordtype">int</span>
+<a name="l00174"></a><a class="code" href="APFloat_8cpp.html#a3bdf019ebb92670864ec41312e0e8421">00174</a> <a class="code" href="APFloat_8cpp.html#a3bdf019ebb92670864ec41312e0e8421">totalExponent</a>(<a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> p, <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>,
+<a name="l00175"></a>00175               <span class="keywordtype">int</span> exponentAdjustment)
+<a name="l00176"></a>00176 {
+<a name="l00177"></a>00177   <span class="keywordtype">int</span> unsignedExponent;
+<a name="l00178"></a>00178   <span class="keywordtype">bool</span> negative, overflow;
+<a name="l00179"></a>00179   <span class="keywordtype">int</span> exponent = 0;
+<a name="l00180"></a>00180 
+<a name="l00181"></a>00181   assert(p != end && <span class="stringliteral">"Exponent has no digits"</span>);
+<a name="l00182"></a>00182 
+<a name="l00183"></a>00183   negative = *p == <span class="charliteral">'-'</span>;
+<a name="l00184"></a>00184   <span class="keywordflow">if</span> (*p == <span class="charliteral">'-'</span> || *p == <span class="charliteral">'+'</span>) {
+<a name="l00185"></a>00185     p++;
+<a name="l00186"></a>00186     assert(p != end && <span class="stringliteral">"Exponent has no digits"</span>);
+<a name="l00187"></a>00187   }
+<a name="l00188"></a>00188 
+<a name="l00189"></a>00189   unsignedExponent = 0;
+<a name="l00190"></a>00190   overflow = <span class="keyword">false</span>;
+<a name="l00191"></a>00191   <span class="keywordflow">for</span> (; p != <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>; ++p) {
+<a name="l00192"></a>00192     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> value;
+<a name="l00193"></a>00193 
+<a name="l00194"></a>00194     value = <a class="code" href="APFloat_8cpp.html#aef45d072a8d986f88b8a599f66516ffa">decDigitValue</a>(*p);
+<a name="l00195"></a>00195     assert(value < 10U && <span class="stringliteral">"Invalid character in exponent"</span>);
+<a name="l00196"></a>00196 
+<a name="l00197"></a>00197     unsignedExponent = unsignedExponent * 10 + value;
+<a name="l00198"></a>00198     <span class="keywordflow">if</span> (unsignedExponent > 32767) {
+<a name="l00199"></a>00199       overflow = <span class="keyword">true</span>;
+<a name="l00200"></a>00200       <span class="keywordflow">break</span>;
+<a name="l00201"></a>00201     }
+<a name="l00202"></a>00202   }
+<a name="l00203"></a>00203 
+<a name="l00204"></a>00204   <span class="keywordflow">if</span> (exponentAdjustment > 32767 || exponentAdjustment < -32768)
+<a name="l00205"></a>00205     overflow = <span class="keyword">true</span>;
+<a name="l00206"></a>00206 
+<a name="l00207"></a>00207   <span class="keywordflow">if</span> (!overflow) {
+<a name="l00208"></a>00208     exponent = unsignedExponent;
+<a name="l00209"></a>00209     <span class="keywordflow">if</span> (negative)
+<a name="l00210"></a>00210       exponent = -exponent;
+<a name="l00211"></a>00211     exponent += exponentAdjustment;
+<a name="l00212"></a>00212     <span class="keywordflow">if</span> (exponent > 32767 || exponent < -32768)
+<a name="l00213"></a>00213       overflow = <span class="keyword">true</span>;
+<a name="l00214"></a>00214   }
+<a name="l00215"></a>00215 
+<a name="l00216"></a>00216   <span class="keywordflow">if</span> (overflow)
+<a name="l00217"></a>00217     exponent = negative ? -32768: 32767;
+<a name="l00218"></a>00218 
+<a name="l00219"></a>00219   <span class="keywordflow">return</span> exponent;
+<a name="l00220"></a>00220 }
+<a name="l00221"></a>00221 
+<a name="l00222"></a>00222 <span class="keyword">static</span> <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a>
+<a name="l00223"></a><a class="code" href="APFloat_8cpp.html#ab19689a7583f4396682fe3dad076354f">00223</a> <a class="code" href="APFloat_8cpp.html#ab19689a7583f4396682fe3dad076354f">skipLeadingZeroesAndAnyDot</a>(<a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a33706aab89e700b8f79e1fa6f4f0e3ee" title="Get begin iterator over path.">begin</a>, <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>,
+<a name="l00224"></a>00224                            <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> *dot)
+<a name="l00225"></a>00225 {
+<a name="l00226"></a>00226   <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> p = <a class="code" href="namespacellvm_1_1sys_1_1path.html#a33706aab89e700b8f79e1fa6f4f0e3ee" title="Get begin iterator over path.">begin</a>;
+<a name="l00227"></a>00227   *dot = <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>;
+<a name="l00228"></a>00228   <span class="keywordflow">while</span> (*p == <span class="charliteral">'0'</span> && p != end)
+<a name="l00229"></a>00229     p++;
+<a name="l00230"></a>00230 
+<a name="l00231"></a>00231   <span class="keywordflow">if</span> (*p == <span class="charliteral">'.'</span>) {
+<a name="l00232"></a>00232     *dot = p++;
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234     assert(end - begin != 1 && <span class="stringliteral">"Significand has no digits"</span>);
+<a name="l00235"></a>00235 
+<a name="l00236"></a>00236     <span class="keywordflow">while</span> (*p == <span class="charliteral">'0'</span> && p != end)
+<a name="l00237"></a>00237       p++;
+<a name="l00238"></a>00238   }
+<a name="l00239"></a>00239 
+<a name="l00240"></a>00240   <span class="keywordflow">return</span> p;
+<a name="l00241"></a>00241 }
+<a name="l00242"></a>00242 
+<a name="l00243"></a>00243 <span class="comment">/* Given a normal decimal floating point number of the form</span>
+<a name="l00244"></a>00244 <span class="comment"></span>
+<a name="l00245"></a>00245 <span class="comment">     dddd.dddd[eE][+-]ddd</span>
+<a name="l00246"></a>00246 <span class="comment"></span>
+<a name="l00247"></a>00247 <span class="comment">   where the decimal point and exponent are optional, fill out the</span>
+<a name="l00248"></a>00248 <span class="comment">   structure D.  Exponent is appropriate if the significand is</span>
+<a name="l00249"></a>00249 <span class="comment">   treated as an integer, and normalizedExponent if the significand</span>
+<a name="l00250"></a>00250 <span class="comment">   is taken to have the decimal point after a single leading</span>
+<a name="l00251"></a>00251 <span class="comment">   non-zero digit.</span>
+<a name="l00252"></a>00252 <span class="comment"></span>
+<a name="l00253"></a>00253 <span class="comment">   If the value is zero, V->firstSigDigit points to a non-digit, and</span>
+<a name="l00254"></a>00254 <span class="comment">   the return exponent is zero.</span>
+<a name="l00255"></a>00255 <span class="comment">*/</span>
+<a name="l00256"></a><a class="code" href="structdecimalInfo.html">00256</a> <span class="keyword">struct </span><a class="code" href="structdecimalInfo.html">decimalInfo</a> {
+<a name="l00257"></a><a class="code" href="structdecimalInfo.html#ad1b78dfd6678a8588c948dd1abcdd953">00257</a>   <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structdecimalInfo.html#ad1b78dfd6678a8588c948dd1abcdd953">firstSigDigit</a>;
+<a name="l00258"></a><a class="code" href="structdecimalInfo.html#a494df17d17f18d1dea6340877fc598ea">00258</a>   <span class="keyword">const</span> <span class="keywordtype">char</span> *<a class="code" href="structdecimalInfo.html#a494df17d17f18d1dea6340877fc598ea">lastSigDigit</a>;
+<a name="l00259"></a><a class="code" href="structdecimalInfo.html#a007a759de40999aa7dab5606693d6bcf">00259</a>   <span class="keywordtype">int</span> <a class="code" href="structdecimalInfo.html#a007a759de40999aa7dab5606693d6bcf">exponent</a>;
+<a name="l00260"></a><a class="code" href="structdecimalInfo.html#a8dbd8aeed256ae53a487a45e408db743">00260</a>   <span class="keywordtype">int</span> <a class="code" href="structdecimalInfo.html#a8dbd8aeed256ae53a487a45e408db743">normalizedExponent</a>;
+<a name="l00261"></a>00261 };
+<a name="l00262"></a>00262 
+<a name="l00263"></a>00263 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00264"></a><a class="code" href="APFloat_8cpp.html#a669d56bdff1ba3eb178fe8c9cbaf7f52">00264</a> <a class="code" href="APFloat_8cpp.html#a669d56bdff1ba3eb178fe8c9cbaf7f52">interpretDecimal</a>(<a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a33706aab89e700b8f79e1fa6f4f0e3ee" title="Get begin iterator over path.">begin</a>, <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>,
+<a name="l00265"></a>00265                  <a class="code" href="structdecimalInfo.html">decimalInfo</a> *D)
+<a name="l00266"></a>00266 {
+<a name="l00267"></a>00267   <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> dot = <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>;
+<a name="l00268"></a>00268   <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> p = <a class="code" href="APFloat_8cpp.html#ab19689a7583f4396682fe3dad076354f">skipLeadingZeroesAndAnyDot</a> (begin, end, &dot);
+<a name="l00269"></a>00269 
+<a name="l00270"></a>00270   D-><a class="code" href="structdecimalInfo.html#ad1b78dfd6678a8588c948dd1abcdd953">firstSigDigit</a> = p;
+<a name="l00271"></a>00271   D-><a class="code" href="structdecimalInfo.html#a007a759de40999aa7dab5606693d6bcf">exponent</a> = 0;
+<a name="l00272"></a>00272   D-><a class="code" href="structdecimalInfo.html#a8dbd8aeed256ae53a487a45e408db743">normalizedExponent</a> = 0;
+<a name="l00273"></a>00273 
+<a name="l00274"></a>00274   <span class="keywordflow">for</span> (; p != <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>; ++p) {
+<a name="l00275"></a>00275     <span class="keywordflow">if</span> (*p == <span class="charliteral">'.'</span>) {
+<a name="l00276"></a>00276       assert(dot == end && <span class="stringliteral">"String contains multiple dots"</span>);
+<a name="l00277"></a>00277       dot = p++;
+<a name="l00278"></a>00278       <span class="keywordflow">if</span> (p == end)
+<a name="l00279"></a>00279         <span class="keywordflow">break</span>;
+<a name="l00280"></a>00280     }
+<a name="l00281"></a>00281     <span class="keywordflow">if</span> (<a class="code" href="APFloat_8cpp.html#aef45d072a8d986f88b8a599f66516ffa">decDigitValue</a>(*p) >= 10U)
+<a name="l00282"></a>00282       <span class="keywordflow">break</span>;
+<a name="l00283"></a>00283   }
+<a name="l00284"></a>00284 
+<a name="l00285"></a>00285   <span class="keywordflow">if</span> (p != end) {
+<a name="l00286"></a>00286     assert((*p == <span class="charliteral">'e'</span> || *p == <span class="charliteral">'E'</span>) && <span class="stringliteral">"Invalid character in significand"</span>);
+<a name="l00287"></a>00287     assert(p != begin && <span class="stringliteral">"Significand has no digits"</span>);
+<a name="l00288"></a>00288     assert((dot == end || p - begin != 1) && <span class="stringliteral">"Significand has no digits"</span>);
+<a name="l00289"></a>00289 
+<a name="l00290"></a>00290     <span class="comment">/* p points to the first non-digit in the string */</span>
+<a name="l00291"></a>00291     D-><a class="code" href="structdecimalInfo.html#a007a759de40999aa7dab5606693d6bcf">exponent</a> = <a class="code" href="APFloat_8cpp.html#a74f900d08953d743bd204e6cb480cadc">readExponent</a>(p + 1, end);
+<a name="l00292"></a>00292 
+<a name="l00293"></a>00293     <span class="comment">/* Implied decimal point?  */</span>
+<a name="l00294"></a>00294     <span class="keywordflow">if</span> (dot == end)
+<a name="l00295"></a>00295       dot = p;
+<a name="l00296"></a>00296   }
+<a name="l00297"></a>00297 
+<a name="l00298"></a>00298   <span class="comment">/* If number is all zeroes accept any exponent.  */</span>
+<a name="l00299"></a>00299   <span class="keywordflow">if</span> (p != D-><a class="code" href="structdecimalInfo.html#ad1b78dfd6678a8588c948dd1abcdd953">firstSigDigit</a>) {
+<a name="l00300"></a>00300     <span class="comment">/* Drop insignificant trailing zeroes.  */</span>
+<a name="l00301"></a>00301     <span class="keywordflow">if</span> (p != begin) {
+<a name="l00302"></a>00302       <span class="keywordflow">do</span>
+<a name="l00303"></a>00303         <span class="keywordflow">do</span>
+<a name="l00304"></a>00304           p--;
+<a name="l00305"></a>00305         <span class="keywordflow">while</span> (p != begin && *p == <span class="charliteral">'0'</span>);
+<a name="l00306"></a>00306       <span class="keywordflow">while</span> (p != begin && *p == <span class="charliteral">'.'</span>);
+<a name="l00307"></a>00307     }
+<a name="l00308"></a>00308 
+<a name="l00309"></a>00309     <span class="comment">/* Adjust the exponents for any decimal point.  */</span>
+<a name="l00310"></a>00310     D-><a class="code" href="structdecimalInfo.html#a007a759de40999aa7dab5606693d6bcf">exponent</a> += <span class="keyword">static_cast<</span><a class="code" href="namespacellvm.html#afe3253dc54e986c3504af514c451897b">exponent_t</a><span class="keyword">></span>((dot - p) - (dot > p));
+<a name="l00311"></a>00311     D-><a class="code" href="structdecimalInfo.html#a8dbd8aeed256ae53a487a45e408db743">normalizedExponent</a> = (D-><a class="code" href="structdecimalInfo.html#a007a759de40999aa7dab5606693d6bcf">exponent</a> +
+<a name="l00312"></a>00312               <span class="keyword">static_cast<</span><a class="code" href="namespacellvm.html#afe3253dc54e986c3504af514c451897b">exponent_t</a><span class="keyword">></span>((p - D-><a class="code" href="structdecimalInfo.html#ad1b78dfd6678a8588c948dd1abcdd953">firstSigDigit</a>)
+<a name="l00313"></a>00313                                       - (dot > D-><a class="code" href="structdecimalInfo.html#ad1b78dfd6678a8588c948dd1abcdd953">firstSigDigit</a> && dot < p)));
+<a name="l00314"></a>00314   }
+<a name="l00315"></a>00315 
+<a name="l00316"></a>00316   D-><a class="code" href="structdecimalInfo.html#a494df17d17f18d1dea6340877fc598ea">lastSigDigit</a> = p;
+<a name="l00317"></a>00317 }
+<a name="l00318"></a>00318 
+<a name="l00319"></a>00319 <span class="comment">/* Return the trailing fraction of a hexadecimal number.</span>
+<a name="l00320"></a>00320 <span class="comment">   DIGITVALUE is the first hex digit of the fraction, P points to</span>
+<a name="l00321"></a>00321 <span class="comment">   the next digit.  */</span>
+<a name="l00322"></a>00322 <span class="keyword">static</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>
+<a name="l00323"></a><a class="code" href="APFloat_8cpp.html#aea19fbfc9a25e79db6edd3bdce73e223">00323</a> <a class="code" href="APFloat_8cpp.html#aea19fbfc9a25e79db6edd3bdce73e223">trailingHexadecimalFraction</a>(<a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> p, <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>,
+<a name="l00324"></a>00324                             <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> digitValue)
+<a name="l00325"></a>00325 {
+<a name="l00326"></a>00326   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hexDigit;
+<a name="l00327"></a>00327 
+<a name="l00328"></a>00328   <span class="comment">/* If the first trailing digit isn't 0 or 8 we can work out the</span>
+<a name="l00329"></a>00329 <span class="comment">     fraction immediately.  */</span>
+<a name="l00330"></a>00330   <span class="keywordflow">if</span> (digitValue > 8)
+<a name="l00331"></a>00331     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>;
+<a name="l00332"></a>00332   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (digitValue < 8 && digitValue > 0)
+<a name="l00333"></a>00333     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a92e4eb4d28972e2a645ec9fdb438a938">lfLessThanHalf</a>;
+<a name="l00334"></a>00334 
+<a name="l00335"></a>00335   <span class="comment">/* Otherwise we need to find the first non-zero digit.  */</span>
+<a name="l00336"></a>00336   <span class="keywordflow">while</span> (*p == <span class="charliteral">'0'</span>)
+<a name="l00337"></a>00337     p++;
+<a name="l00338"></a>00338 
+<a name="l00339"></a>00339   assert(p != end && <span class="stringliteral">"Invalid trailing hexadecimal fraction!"</span>);
+<a name="l00340"></a>00340 
+<a name="l00341"></a>00341   hexDigit = <a class="code" href="APFloat_8cpp.html#a10de524dcc1e204bf4ff4592d45f2dd5">hexDigitValue</a>(*p);
+<a name="l00342"></a>00342 
+<a name="l00343"></a>00343   <span class="comment">/* If we ran off the end it is exactly zero or one-half, otherwise</span>
+<a name="l00344"></a>00344 <span class="comment">     a little more.  */</span>
+<a name="l00345"></a>00345   <span class="keywordflow">if</span> (hexDigit == -1U)
+<a name="l00346"></a>00346     <span class="keywordflow">return</span> digitValue == 0 ? <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>: <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286ac0b9d05de9b62ebe41facd1bbb21aca6">lfExactlyHalf</a>;
+<a name="l00347"></a>00347   <span class="keywordflow">else</span>
+<a name="l00348"></a>00348     <span class="keywordflow">return</span> digitValue == 0 ? <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a92e4eb4d28972e2a645ec9fdb438a938">lfLessThanHalf</a>: <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>;
+<a name="l00349"></a>00349 }
+<a name="l00350"></a>00350 
+<a name="l00351"></a>00351 <span class="comment">/* Return the fraction lost were a bignum truncated losing the least</span>
+<a name="l00352"></a>00352 <span class="comment">   significant BITS bits.  */</span>
+<a name="l00353"></a>00353 <span class="keyword">static</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>
+<a name="l00354"></a><a class="code" href="APFloat_8cpp.html#abc47f2d3773defbbd5a684a71cbf2200">00354</a> <a class="code" href="APFloat_8cpp.html#abc47f2d3773defbbd5a684a71cbf2200">lostFractionThroughTruncation</a>(<span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *parts,
+<a name="l00355"></a>00355                               <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partCount,
+<a name="l00356"></a>00356                               <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits)
+<a name="l00357"></a>00357 {
+<a name="l00358"></a>00358   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> lsb;
+<a name="l00359"></a>00359 
+<a name="l00360"></a>00360   lsb = <a class="code" href="classllvm_1_1APInt.html#a08a1c76eb1face84272c736e6349562d">APInt::tcLSB</a>(parts, partCount);
+<a name="l00361"></a>00361 
+<a name="l00362"></a>00362   <span class="comment">/* Note this is guaranteed true if bits == 0, or LSB == -1U.  */</span>
+<a name="l00363"></a>00363   <span class="keywordflow">if</span> (bits <= lsb)
+<a name="l00364"></a>00364     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>;
+<a name="l00365"></a>00365   <span class="keywordflow">if</span> (bits == lsb + 1)
+<a name="l00366"></a>00366     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286ac0b9d05de9b62ebe41facd1bbb21aca6">lfExactlyHalf</a>;
+<a name="l00367"></a>00367   <span class="keywordflow">if</span> (bits <= partCount * <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a> &&
+<a name="l00368"></a>00368       <a class="code" href="classllvm_1_1APInt.html#ad1b485c8171a1de8391ca44e69f0d573" title="Extract the given bit of a bignum; returns 0 or 1. Zero-based.">APInt::tcExtractBit</a>(parts, bits - 1))
+<a name="l00369"></a>00369     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>;
+<a name="l00370"></a>00370 
+<a name="l00371"></a>00371   <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a92e4eb4d28972e2a645ec9fdb438a938">lfLessThanHalf</a>;
+<a name="l00372"></a>00372 }
+<a name="l00373"></a>00373 
+<a name="l00374"></a>00374 <span class="comment">/* Shift DST right BITS bits noting lost fraction.  */</span>
+<a name="l00375"></a>00375 <span class="keyword">static</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>
+<a name="l00376"></a><a class="code" href="APFloat_8cpp.html#aa9b0da389e5fb14fc522819904e4fa24">00376</a> <a class="code" href="APFloat_8cpp.html#aa9b0da389e5fb14fc522819904e4fa24">shiftRight</a>(<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *dst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> parts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits)
+<a name="l00377"></a>00377 {
+<a name="l00378"></a>00378   <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction;
+<a name="l00379"></a>00379 
+<a name="l00380"></a>00380   lost_fraction = <a class="code" href="APFloat_8cpp.html#abc47f2d3773defbbd5a684a71cbf2200">lostFractionThroughTruncation</a>(dst, parts, bits);
+<a name="l00381"></a>00381 
+<a name="l00382"></a>00382   <a class="code" href="classllvm_1_1APInt.html#a5be8eecedb07dfb3c6cb06fefefb8836">APInt::tcShiftRight</a>(dst, parts, bits);
+<a name="l00383"></a>00383 
+<a name="l00384"></a>00384   <span class="keywordflow">return</span> lost_fraction;
+<a name="l00385"></a>00385 }
+<a name="l00386"></a>00386 
+<a name="l00387"></a>00387 <span class="comment">/* Combine the effect of two lost fractions.  */</span>
+<a name="l00388"></a>00388 <span class="keyword">static</span> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>
+<a name="l00389"></a><a class="code" href="APFloat_8cpp.html#a3abab7f1d3f67611acf79520a03f2769">00389</a> <a class="code" href="APFloat_8cpp.html#a3abab7f1d3f67611acf79520a03f2769">combineLostFractions</a>(<a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> moreSignificant,
+<a name="l00390"></a>00390                      <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lessSignificant)
+<a name="l00391"></a>00391 {
+<a name="l00392"></a>00392   <span class="keywordflow">if</span> (lessSignificant != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>) {
+<a name="l00393"></a>00393     <span class="keywordflow">if</span> (moreSignificant == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>)
+<a name="l00394"></a>00394       moreSignificant = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a92e4eb4d28972e2a645ec9fdb438a938">lfLessThanHalf</a>;
+<a name="l00395"></a>00395     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (moreSignificant == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286ac0b9d05de9b62ebe41facd1bbb21aca6">lfExactlyHalf</a>)
+<a name="l00396"></a>00396       moreSignificant = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>;
+<a name="l00397"></a>00397   }
+<a name="l00398"></a>00398 
+<a name="l00399"></a>00399   <span class="keywordflow">return</span> moreSignificant;
+<a name="l00400"></a>00400 }
+<a name="l00401"></a>00401 
+<a name="l00402"></a>00402 <span class="comment">/* The error from the true value, in half-ulps, on multiplying two</span>
+<a name="l00403"></a>00403 <span class="comment">   floating point numbers, which differ from the value they</span>
+<a name="l00404"></a>00404 <span class="comment">   approximate by at most HUE1 and HUE2 half-ulps, is strictly less</span>
+<a name="l00405"></a>00405 <span class="comment">   than the returned value.</span>
+<a name="l00406"></a>00406 <span class="comment"></span>
+<a name="l00407"></a>00407 <span class="comment">   See "How to Read Floating Point Numbers Accurately" by William D</span>
+<a name="l00408"></a>00408 <span class="comment">   Clinger.  */</span>
+<a name="l00409"></a>00409 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00410"></a><a class="code" href="APFloat_8cpp.html#ac0e2174b46ccea3f1de0a0edafcbc4c8">00410</a> <a class="code" href="APFloat_8cpp.html#ac0e2174b46ccea3f1de0a0edafcbc4c8">HUerrBound</a>(<span class="keywordtype">bool</span> inexactMultiply, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> HUerr1, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> HUerr2)
+<a name="l00411"></a>00411 {
+<a name="l00412"></a>00412   assert(HUerr1 < 2 || HUerr2 < 2 || (HUerr1 + HUerr2 < 8));
+<a name="l00413"></a>00413 
+<a name="l00414"></a>00414   <span class="keywordflow">if</span> (HUerr1 + HUerr2 == 0)
+<a name="l00415"></a>00415     <span class="keywordflow">return</span> inexactMultiply * 2;  <span class="comment">/* <= inexactMultiply half-ulps.  */</span>
+<a name="l00416"></a>00416   <span class="keywordflow">else</span>
+<a name="l00417"></a>00417     <span class="keywordflow">return</span> inexactMultiply + 2 * (HUerr1 + HUerr2);
+<a name="l00418"></a>00418 }
+<a name="l00419"></a>00419 
+<a name="l00420"></a>00420 <span class="comment">/* The number of ulps from the boundary (zero, or half if ISNEAREST)</span>
+<a name="l00421"></a>00421 <span class="comment">   when the least significant BITS are truncated.  BITS cannot be</span>
+<a name="l00422"></a>00422 <span class="comment">   zero.  */</span>
+<a name="l00423"></a>00423 <span class="keyword">static</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>
+<a name="l00424"></a><a class="code" href="APFloat_8cpp.html#a6dcd1d74694d39c377bf23f58d70db37">00424</a> <a class="code" href="APFloat_8cpp.html#a6dcd1d74694d39c377bf23f58d70db37">ulpsFromBoundary</a>(<span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *parts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits, <span class="keywordtype">bool</span> isNearest)
+<a name="l00425"></a>00425 {
+<a name="l00426"></a>00426   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, partBits;
+<a name="l00427"></a>00427   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> part, boundary;
+<a name="l00428"></a>00428 
+<a name="l00429"></a>00429   assert(bits != 0);
+<a name="l00430"></a>00430 
+<a name="l00431"></a>00431   bits--;
+<a name="l00432"></a>00432   count = bits / <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>;
+<a name="l00433"></a>00433   partBits = bits % <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a> + 1;
+<a name="l00434"></a>00434 
+<a name="l00435"></a>00435   part = parts[count] & (~(<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 0 >> (<a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a> - partBits));
+<a name="l00436"></a>00436 
+<a name="l00437"></a>00437   <span class="keywordflow">if</span> (isNearest)
+<a name="l00438"></a>00438     boundary = (<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 1 << (partBits - 1);
+<a name="l00439"></a>00439   <span class="keywordflow">else</span>
+<a name="l00440"></a>00440     boundary = 0;
+<a name="l00441"></a>00441 
+<a name="l00442"></a>00442   <span class="keywordflow">if</span> (count == 0) {
+<a name="l00443"></a>00443     <span class="keywordflow">if</span> (part - boundary <= boundary - part)
+<a name="l00444"></a>00444       <span class="keywordflow">return</span> part - boundary;
+<a name="l00445"></a>00445     <span class="keywordflow">else</span>
+<a name="l00446"></a>00446       <span class="keywordflow">return</span> boundary - part;
+<a name="l00447"></a>00447   }
+<a name="l00448"></a>00448 
+<a name="l00449"></a>00449   <span class="keywordflow">if</span> (part == boundary) {
+<a name="l00450"></a>00450     <span class="keywordflow">while</span> (--count)
+<a name="l00451"></a>00451       <span class="keywordflow">if</span> (parts[count])
+<a name="l00452"></a>00452         <span class="keywordflow">return</span> ~(<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 0; <span class="comment">/* A lot.  */</span>
+<a name="l00453"></a>00453 
+<a name="l00454"></a>00454     <span class="keywordflow">return</span> parts[0];
+<a name="l00455"></a>00455   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (part == boundary - 1) {
+<a name="l00456"></a>00456     <span class="keywordflow">while</span> (--count)
+<a name="l00457"></a>00457       <span class="keywordflow">if</span> (~parts[count])
+<a name="l00458"></a>00458         <span class="keywordflow">return</span> ~(<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 0; <span class="comment">/* A lot.  */</span>
+<a name="l00459"></a>00459 
+<a name="l00460"></a>00460     <span class="keywordflow">return</span> -parts[0];
+<a name="l00461"></a>00461   }
+<a name="l00462"></a>00462 
+<a name="l00463"></a>00463   <span class="keywordflow">return</span> ~(<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 0; <span class="comment">/* A lot.  */</span>
+<a name="l00464"></a>00464 }
+<a name="l00465"></a>00465 
+<a name="l00466"></a>00466 <span class="comment">/* Place pow(5, power) in DST, and return the number of parts used.</span>
+<a name="l00467"></a>00467 <span class="comment">   DST must be at least one part larger than size of the answer.  */</span>
+<a name="l00468"></a>00468 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00469"></a><a class="code" href="APFloat_8cpp.html#a96301256190ab1a39c3ff646d467345c">00469</a> <a class="code" href="APFloat_8cpp.html#a96301256190ab1a39c3ff646d467345c">powerOf5</a>(<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *dst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> power)
+<a name="l00470"></a>00470 {
+<a name="l00471"></a>00471   <span class="keyword">static</span> <span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> firstEightPowers[] = { 1, 5, 25, 125, 625, 3125,
+<a name="l00472"></a>00472                                                   15625, 78125 };
+<a name="l00473"></a>00473   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> pow5s[<a class="code" href="namespacellvm.html#a769f4d371efd3462f20b02b7cd8fba79">maxPowerOfFiveParts</a> * 2 + 5];
+<a name="l00474"></a>00474   pow5s[0] = 78125 * 5;
+<a name="l00475"></a>00475 
+<a name="l00476"></a>00476   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partsCount[16] = { 1 };
+<a name="l00477"></a>00477   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> scratch[<a class="code" href="namespacellvm.html#a769f4d371efd3462f20b02b7cd8fba79">maxPowerOfFiveParts</a>], *p1, *p2, *pow5;
+<a name="l00478"></a>00478   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> result;
+<a name="l00479"></a>00479   assert(power <= <a class="code" href="namespacellvm.html#aa2356c8c049af2c0e4a5e4892e5a48d1">maxExponent</a>);
+<a name="l00480"></a>00480 
+<a name="l00481"></a>00481   p1 = dst;
+<a name="l00482"></a>00482   p2 = scratch;
+<a name="l00483"></a>00483 
+<a name="l00484"></a>00484   *p1 = firstEightPowers[power & 7];
+<a name="l00485"></a>00485   power >>= 3;
+<a name="l00486"></a>00486 
+<a name="l00487"></a>00487   result = 1;
+<a name="l00488"></a>00488   pow5 = pow5s;
+<a name="l00489"></a>00489 
+<a name="l00490"></a>00490   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n = 0; power; power >>= 1, n++) {
+<a name="l00491"></a>00491     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> pc;
+<a name="l00492"></a>00492 
+<a name="l00493"></a>00493     pc = partsCount[n];
+<a name="l00494"></a>00494 
+<a name="l00495"></a>00495     <span class="comment">/* Calculate pow(5,pow(2,n+3)) if we haven't yet.  */</span>
+<a name="l00496"></a>00496     <span class="keywordflow">if</span> (pc == 0) {
+<a name="l00497"></a>00497       pc = partsCount[n - 1];
+<a name="l00498"></a>00498       <a class="code" href="classllvm_1_1APInt.html#a6164c05fd6cfc95aeb6bb8b00a194fa0">APInt::tcFullMultiply</a>(pow5, pow5 - pc, pow5 - pc, pc, pc);
+<a name="l00499"></a>00499       pc *= 2;
+<a name="l00500"></a>00500       <span class="keywordflow">if</span> (pow5[pc - 1] == 0)
+<a name="l00501"></a>00501         pc--;
+<a name="l00502"></a>00502       partsCount[n] = pc;
+<a name="l00503"></a>00503     }
+<a name="l00504"></a>00504 
+<a name="l00505"></a>00505     <span class="keywordflow">if</span> (power & 1) {
+<a name="l00506"></a>00506       <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *tmp;
+<a name="l00507"></a>00507 
+<a name="l00508"></a>00508       <a class="code" href="classllvm_1_1APInt.html#a6164c05fd6cfc95aeb6bb8b00a194fa0">APInt::tcFullMultiply</a>(p2, p1, pow5, result, pc);
+<a name="l00509"></a>00509       result += pc;
+<a name="l00510"></a>00510       <span class="keywordflow">if</span> (p2[result - 1] == 0)
+<a name="l00511"></a>00511         result--;
+<a name="l00512"></a>00512 
+<a name="l00513"></a>00513       <span class="comment">/* Now result is in p1 with partsCount parts and p2 is scratch</span>
+<a name="l00514"></a>00514 <span class="comment">         space.  */</span>
+<a name="l00515"></a>00515       tmp = p1, p1 = p2, p2 = tmp;
+<a name="l00516"></a>00516     }
+<a name="l00517"></a>00517 
+<a name="l00518"></a>00518     pow5 += pc;
+<a name="l00519"></a>00519   }
+<a name="l00520"></a>00520 
+<a name="l00521"></a>00521   <span class="keywordflow">if</span> (p1 != dst)
+<a name="l00522"></a>00522     <a class="code" href="classllvm_1_1APInt.html#a0075077383b560290d112b29a155db08" title="Assign one bignum to another.">APInt::tcAssign</a>(dst, p1, result);
+<a name="l00523"></a>00523 
+<a name="l00524"></a>00524   <span class="keywordflow">return</span> result;
+<a name="l00525"></a>00525 }
+<a name="l00526"></a>00526 
+<a name="l00527"></a>00527 <span class="comment">/* Zero at the end to avoid modular arithmetic when adding one; used</span>
+<a name="l00528"></a>00528 <span class="comment">   when rounding up during hexadecimal output.  */</span>
+<a name="l00529"></a><a class="code" href="APFloat_8cpp.html#af9abe1eccbdf18c2b773fbbedac485f7">00529</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="APFloat_8cpp.html#af9abe1eccbdf18c2b773fbbedac485f7">hexDigitsLower</a>[] = <span class="stringliteral">"0123456789abcdef0"</span>;
+<a name="l00530"></a><a class="code" href="APFloat_8cpp.html#a7f2bc01bca929634845a725ed2606ac8">00530</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="APFloat_8cpp.html#a7f2bc01bca929634845a725ed2606ac8">hexDigitsUpper</a>[] = <span class="stringliteral">"0123456789ABCDEF0"</span>;
+<a name="l00531"></a><a class="code" href="APFloat_8cpp.html#a0977e6844c4d5463565fdd9bc4b6c44d">00531</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="APFloat_8cpp.html#a0977e6844c4d5463565fdd9bc4b6c44d">infinityL</a>[] = <span class="stringliteral">"infinity"</span>;
+<a name="l00532"></a><a class="code" href="APFloat_8cpp.html#a7a9dcda856681ca710637c95323ce9c6">00532</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="APFloat_8cpp.html#a7a9dcda856681ca710637c95323ce9c6">infinityU</a>[] = <span class="stringliteral">"INFINITY"</span>;
+<a name="l00533"></a><a class="code" href="APFloat_8cpp.html#ad415bb19cda3e6f052af23868a7bd415">00533</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="APFloat_8cpp.html#ad415bb19cda3e6f052af23868a7bd415">NaNL</a>[] = <span class="stringliteral">"nan"</span>;
+<a name="l00534"></a><a class="code" href="APFloat_8cpp.html#a7c308edd4d5bd059ee5cbae38f464084">00534</a> <span class="keyword">static</span> <span class="keyword">const</span> <span class="keywordtype">char</span> <a class="code" href="APFloat_8cpp.html#a7c308edd4d5bd059ee5cbae38f464084">NaNU</a>[] = <span class="stringliteral">"NAN"</span>;
+<a name="l00535"></a>00535 
+<a name="l00536"></a>00536 <span class="comment">/* Write out an integerPart in hexadecimal, starting with the most</span>
+<a name="l00537"></a>00537 <span class="comment">   significant nibble.  Write out exactly COUNT hexdigits, return</span>
+<a name="l00538"></a>00538 <span class="comment">   COUNT.  */</span>
+<a name="l00539"></a>00539 <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00540"></a><a class="code" href="APFloat_8cpp.html#addf55de6ea6941c9fabcbaa054128767">00540</a> <a class="code" href="APFloat_8cpp.html#addf55de6ea6941c9fabcbaa054128767">partAsHex</a> (<span class="keywordtype">char</span> *dst, <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> part, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count,
+<a name="l00541"></a>00541            <span class="keyword">const</span> <span class="keywordtype">char</span> *hexDigitChars)
+<a name="l00542"></a>00542 {
+<a name="l00543"></a>00543   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> result = count;
+<a name="l00544"></a>00544 
+<a name="l00545"></a>00545   assert(count != 0 && count <= <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a> / 4);
+<a name="l00546"></a>00546 
+<a name="l00547"></a>00547   part >>= (<a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a> - 4 * count);
+<a name="l00548"></a>00548   <span class="keywordflow">while</span> (count--) {
+<a name="l00549"></a>00549     dst[count] = hexDigitChars[part & 0xf];
+<a name="l00550"></a>00550     part >>= 4;
+<a name="l00551"></a>00551   }
+<a name="l00552"></a>00552 
+<a name="l00553"></a>00553   <span class="keywordflow">return</span> result;
+<a name="l00554"></a>00554 }
+<a name="l00555"></a>00555 
+<a name="l00556"></a>00556 <span class="comment">/* Write out an unsigned decimal integer.  */</span>
+<a name="l00557"></a>00557 <span class="keyword">static</span> <span class="keywordtype">char</span> *
+<a name="l00558"></a><a class="code" href="APFloat_8cpp.html#aca57d1ea20b3d3179854ecc81aae3314">00558</a> <a class="code" href="APFloat_8cpp.html#aca57d1ea20b3d3179854ecc81aae3314">writeUnsignedDecimal</a> (<span class="keywordtype">char</span> *dst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> n)
+<a name="l00559"></a>00559 {
+<a name="l00560"></a>00560   <span class="keywordtype">char</span> buff[40], *p;
+<a name="l00561"></a>00561 
+<a name="l00562"></a>00562   p = buff;
+<a name="l00563"></a>00563   <span class="keywordflow">do</span>
+<a name="l00564"></a>00564     *p++ = <span class="charliteral">'0'</span> + n % 10;
+<a name="l00565"></a>00565   <span class="keywordflow">while</span> (n /= 10);
+<a name="l00566"></a>00566 
+<a name="l00567"></a>00567   <span class="keywordflow">do</span>
+<a name="l00568"></a>00568     *dst++ = *--p;
+<a name="l00569"></a>00569   <span class="keywordflow">while</span> (p != buff);
+<a name="l00570"></a>00570 
+<a name="l00571"></a>00571   <span class="keywordflow">return</span> dst;
+<a name="l00572"></a>00572 }
+<a name="l00573"></a>00573 
+<a name="l00574"></a>00574 <span class="comment">/* Write out a signed decimal integer.  */</span>
+<a name="l00575"></a>00575 <span class="keyword">static</span> <span class="keywordtype">char</span> *
+<a name="l00576"></a><a class="code" href="APFloat_8cpp.html#a185b730c3849640bd95163f73225b7b6">00576</a> <a class="code" href="APFloat_8cpp.html#a185b730c3849640bd95163f73225b7b6">writeSignedDecimal</a> (<span class="keywordtype">char</span> *dst, <span class="keywordtype">int</span> value)
+<a name="l00577"></a>00577 {
+<a name="l00578"></a>00578   <span class="keywordflow">if</span> (value < 0) {
+<a name="l00579"></a>00579     *dst++ = <span class="charliteral">'-'</span>;
+<a name="l00580"></a>00580     dst = <a class="code" href="APFloat_8cpp.html#aca57d1ea20b3d3179854ecc81aae3314">writeUnsignedDecimal</a>(dst, -(<span class="keywordtype">unsigned</span>) value);
+<a name="l00581"></a>00581   } <span class="keywordflow">else</span>
+<a name="l00582"></a>00582     dst = <a class="code" href="APFloat_8cpp.html#aca57d1ea20b3d3179854ecc81aae3314">writeUnsignedDecimal</a>(dst, value);
+<a name="l00583"></a>00583 
+<a name="l00584"></a>00584   <span class="keywordflow">return</span> dst;
+<a name="l00585"></a>00585 }
+<a name="l00586"></a>00586 
+<a name="l00587"></a>00587 <span class="comment">/* Constructors.  */</span>
+<a name="l00588"></a>00588 <span class="keywordtype">void</span>
+<a name="l00589"></a>00589 APFloat::initialize(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> *ourSemantics)
+<a name="l00590"></a>00590 {
+<a name="l00591"></a>00591   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count;
+<a name="l00592"></a>00592 
+<a name="l00593"></a>00593   semantics = ourSemantics;
+<a name="l00594"></a>00594   count = partCount();
+<a name="l00595"></a>00595   <span class="keywordflow">if</span> (count > 1)
+<a name="l00596"></a>00596     significand.parts = <span class="keyword">new</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>[count];
+<a name="l00597"></a>00597 }
+<a name="l00598"></a>00598 
+<a name="l00599"></a>00599 <span class="keywordtype">void</span>
+<a name="l00600"></a>00600 APFloat::freeSignificand()
+<a name="l00601"></a>00601 {
+<a name="l00602"></a>00602   <span class="keywordflow">if</span> (partCount() > 1)
+<a name="l00603"></a>00603     <span class="keyword">delete</span> [] significand.parts;
+<a name="l00604"></a>00604 }
+<a name="l00605"></a>00605 
+<a name="l00606"></a>00606 <span class="keywordtype">void</span>
+<a name="l00607"></a>00607 APFloat::assign(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l00608"></a>00608 {
+<a name="l00609"></a>00609   assert(semantics == rhs.semantics);
+<a name="l00610"></a>00610 
+<a name="l00611"></a>00611   sign = rhs.sign;
+<a name="l00612"></a>00612   category = rhs.category;
+<a name="l00613"></a>00613   exponent = rhs.exponent;
+<a name="l00614"></a>00614   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> || category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>)
+<a name="l00615"></a>00615     copySignificand(rhs);
+<a name="l00616"></a>00616 }
+<a name="l00617"></a>00617 
+<a name="l00618"></a>00618 <span class="keywordtype">void</span>
+<a name="l00619"></a>00619 APFloat::copySignificand(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l00620"></a>00620 {
+<a name="l00621"></a>00621   assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> || category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>);
+<a name="l00622"></a>00622   assert(rhs.partCount() >= partCount());
+<a name="l00623"></a>00623 
+<a name="l00624"></a>00624   <a class="code" href="classllvm_1_1APInt.html#a0075077383b560290d112b29a155db08" title="Assign one bignum to another.">APInt::tcAssign</a>(significandParts(), rhs.significandParts(),
+<a name="l00625"></a>00625                   partCount());
+<a name="l00626"></a>00626 }
+<a name="l00627"></a>00627 
+<a name="l00628"></a>00628 <span class="comment">/* Make this number a NaN, with an arbitrary but deterministic value</span>
+<a name="l00629"></a>00629 <span class="comment">   for the significand.  If double or longer, this is a signalling NaN,</span>
+<a name="l00630"></a>00630 <span class="comment">   which may not be ideal.  If float, this is QNaN(0).  */</span>
+<a name="l00631"></a>00631 <span class="keywordtype">void</span> APFloat::makeNaN(<span class="keywordtype">bool</span> SNaN, <span class="keywordtype">bool</span> Negative, <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> *fill)
+<a name="l00632"></a>00632 {
+<a name="l00633"></a>00633   category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l00634"></a>00634   sign = Negative;
+<a name="l00635"></a>00635 
+<a name="l00636"></a>00636   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *significand = significandParts();
+<a name="l00637"></a>00637   <span class="keywordtype">unsigned</span> numParts = partCount();
+<a name="l00638"></a>00638 
+<a name="l00639"></a>00639   <span class="comment">// Set the significand bits to the fill.</span>
+<a name="l00640"></a>00640   <span class="keywordflow">if</span> (!fill || fill-><a class="code" href="classllvm_1_1APInt.html#a2c9ce2ec88f5ffa60ab1b16527caa1f4" title="Get the number of words.">getNumWords</a>() < numParts)
+<a name="l00641"></a>00641     <a class="code" href="classllvm_1_1APInt.html#a8efff7af35067c51a3d9313e360701cf">APInt::tcSet</a>(significand, 0, numParts);
+<a name="l00642"></a>00642   <span class="keywordflow">if</span> (fill) {
+<a name="l00643"></a>00643     <a class="code" href="classllvm_1_1APInt.html#a0075077383b560290d112b29a155db08" title="Assign one bignum to another.">APInt::tcAssign</a>(significand, fill-><a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>(),
+<a name="l00644"></a>00644                     std::min(fill-><a class="code" href="classllvm_1_1APInt.html#a2c9ce2ec88f5ffa60ab1b16527caa1f4" title="Get the number of words.">getNumWords</a>(), numParts));
+<a name="l00645"></a>00645 
+<a name="l00646"></a>00646     <span class="comment">// Zero out the excess bits of the significand.</span>
+<a name="l00647"></a>00647     <span class="keywordtype">unsigned</span> bitsToPreserve = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - 1;
+<a name="l00648"></a>00648     <span class="keywordtype">unsigned</span> part = bitsToPreserve / 64;
+<a name="l00649"></a>00649     bitsToPreserve %= 64;
+<a name="l00650"></a>00650     significand[part] &= ((1ULL << bitsToPreserve) - 1);
+<a name="l00651"></a>00651     <span class="keywordflow">for</span> (part++; part != numParts; ++part)
+<a name="l00652"></a>00652       significand[part] = 0;
+<a name="l00653"></a>00653   }
+<a name="l00654"></a>00654 
+<a name="l00655"></a>00655   <span class="keywordtype">unsigned</span> QNaNBit = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - 2;
+<a name="l00656"></a>00656 
+<a name="l00657"></a>00657   <span class="keywordflow">if</span> (SNaN) {
+<a name="l00658"></a>00658     <span class="comment">// We always have to clear the QNaN bit to make it an SNaN.</span>
+<a name="l00659"></a>00659     <a class="code" href="classllvm_1_1APInt.html#a251c87c3f5fe9e6b7c5e666c4c92acc9" title="Clear the given bit of a bignum. Zero-based.">APInt::tcClearBit</a>(significand, QNaNBit);
+<a name="l00660"></a>00660 
+<a name="l00661"></a>00661     <span class="comment">// If there are no bits set in the payload, we have to set</span>
+<a name="l00662"></a>00662     <span class="comment">// *something* to make it a NaN instead of an infinity;</span>
+<a name="l00663"></a>00663     <span class="comment">// conventionally, this is the next bit down from the QNaN bit.</span>
+<a name="l00664"></a>00664     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APInt.html#aeb6c84063610d7556e6a6c83d4b2500d" title="Returns true if a bignum is zero, false otherwise.">APInt::tcIsZero</a>(significand, numParts))
+<a name="l00665"></a>00665       <a class="code" href="classllvm_1_1APInt.html#a427c08cdbdfe087dcf7fed6ee71477f5" title="Set the given bit of a bignum. Zero-based.">APInt::tcSetBit</a>(significand, QNaNBit - 1);
+<a name="l00666"></a>00666   } <span class="keywordflow">else</span> {
+<a name="l00667"></a>00667     <span class="comment">// We always have to set the QNaN bit to make it a QNaN.</span>
+<a name="l00668"></a>00668     <a class="code" href="classllvm_1_1APInt.html#a427c08cdbdfe087dcf7fed6ee71477f5" title="Set the given bit of a bignum. Zero-based.">APInt::tcSetBit</a>(significand, QNaNBit);
+<a name="l00669"></a>00669   }
+<a name="l00670"></a>00670 
+<a name="l00671"></a>00671   <span class="comment">// For x87 extended precision, we want to make a NaN, not a</span>
+<a name="l00672"></a>00672   <span class="comment">// pseudo-NaN.  Maybe we should expose the ability to make</span>
+<a name="l00673"></a>00673   <span class="comment">// pseudo-NaNs?</span>
+<a name="l00674"></a>00674   <span class="keywordflow">if</span> (semantics == &<a class="code" href="classllvm_1_1APFloat.html#a8fb913b1bed6dfe011696fe4e287ca70">APFloat::x87DoubleExtended</a>)
+<a name="l00675"></a>00675     <a class="code" href="classllvm_1_1APInt.html#a427c08cdbdfe087dcf7fed6ee71477f5" title="Set the given bit of a bignum. Zero-based.">APInt::tcSetBit</a>(significand, QNaNBit + 1);
+<a name="l00676"></a>00676 }
+<a name="l00677"></a>00677 
+<a name="l00678"></a>00678 <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> APFloat::makeNaN(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &Sem, <span class="keywordtype">bool</span> SNaN, <span class="keywordtype">bool</span> Negative,
+<a name="l00679"></a>00679                          <span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> *fill) {
+<a name="l00680"></a>00680   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> value(Sem, <a class="code" href="classllvm_1_1APFloat.html#a338b34e3237b8cb43909b3edc73529bfadac67c399ece7a3c78e25f00834b46bd">uninitialized</a>);
+<a name="l00681"></a>00681   value.makeNaN(SNaN, Negative, fill);
+<a name="l00682"></a>00682   <span class="keywordflow">return</span> value;
+<a name="l00683"></a>00683 }
+<a name="l00684"></a>00684 
+<a name="l00685"></a>00685 <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &
+<a name="l00686"></a><a class="code" href="classllvm_1_1APFloat.html#a3a922c89fc319a3673735f3c1d1aece1">00686</a> <a class="code" href="classllvm_1_1APFloat.html#a3a922c89fc319a3673735f3c1d1aece1">APFloat::operator=</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l00687"></a>00687 {
+<a name="l00688"></a>00688   <span class="keywordflow">if</span> (<span class="keyword">this</span> != &rhs) {
+<a name="l00689"></a>00689     <span class="keywordflow">if</span> (semantics != rhs.semantics) {
+<a name="l00690"></a>00690       freeSignificand();
+<a name="l00691"></a>00691       initialize(rhs.semantics);
+<a name="l00692"></a>00692     }
+<a name="l00693"></a>00693     assign(rhs);
+<a name="l00694"></a>00694   }
+<a name="l00695"></a>00695 
+<a name="l00696"></a>00696   <span class="keywordflow">return</span> *<span class="keyword">this</span>;
+<a name="l00697"></a>00697 }
+<a name="l00698"></a>00698 
+<a name="l00699"></a>00699 <span class="keywordtype">bool</span>
+<a name="l00700"></a><a class="code" href="classllvm_1_1APFloat.html#a3cb841598edc02b220abea0820e9510f">00700</a> <a class="code" href="classllvm_1_1APFloat.html#a3cb841598edc02b220abea0820e9510f">APFloat::bitwiseIsEqual</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)<span class="keyword"> const </span>{
+<a name="l00701"></a>00701   <span class="keywordflow">if</span> (<span class="keyword">this</span> == &rhs)
+<a name="l00702"></a>00702     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00703"></a>00703   <span class="keywordflow">if</span> (semantics != rhs.semantics ||
+<a name="l00704"></a>00704       category != rhs.category ||
+<a name="l00705"></a>00705       sign != rhs.sign)
+<a name="l00706"></a>00706     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00707"></a>00707   <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a> || category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>)
+<a name="l00708"></a>00708     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00709"></a>00709   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> && exponent!=rhs.exponent)
+<a name="l00710"></a>00710     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00711"></a>00711   <span class="keywordflow">else</span> {
+<a name="l00712"></a>00712     <span class="keywordtype">int</span> i= partCount();
+<a name="l00713"></a>00713     <span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>* p=significandParts();
+<a name="l00714"></a>00714     <span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>* q=rhs.significandParts();
+<a name="l00715"></a>00715     <span class="keywordflow">for</span> (; i>0; i--, p++, q++) {
+<a name="l00716"></a>00716       <span class="keywordflow">if</span> (*p != *q)
+<a name="l00717"></a>00717         <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00718"></a>00718     }
+<a name="l00719"></a>00719     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00720"></a>00720   }
+<a name="l00721"></a>00721 }
+<a name="l00722"></a>00722 
+<a name="l00723"></a><a class="code" href="classllvm_1_1APFloat.html#a0606a05c8c05af7e339b0f10c692e522">00723</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &ourSemantics, <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> value) {
+<a name="l00724"></a>00724   initialize(&ourSemantics);
+<a name="l00725"></a>00725   sign = 0;
+<a name="l00726"></a>00726   zeroSignificand();
+<a name="l00727"></a>00727   exponent = ourSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - 1;
+<a name="l00728"></a>00728   significandParts()[0] = value;
+<a name="l00729"></a>00729   normalize(<a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>, <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>);
+<a name="l00730"></a>00730 }
+<a name="l00731"></a>00731 
+<a name="l00732"></a><a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">00732</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &ourSemantics) {
+<a name="l00733"></a>00733   initialize(&ourSemantics);
+<a name="l00734"></a>00734   category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l00735"></a>00735   sign = <span class="keyword">false</span>;
+<a name="l00736"></a>00736 }
+<a name="l00737"></a>00737 
+<a name="l00738"></a><a class="code" href="classllvm_1_1APFloat.html#ac6ddcd5bc4546710097422b9730637bd">00738</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &ourSemantics, <a class="code" href="classllvm_1_1APFloat.html#a338b34e3237b8cb43909b3edc73529bf">uninitializedTag</a> tag) {
+<a name="l00739"></a>00739   <span class="comment">// Allocates storage if necessary but does not initialize it.</span>
+<a name="l00740"></a>00740   initialize(&ourSemantics);
+<a name="l00741"></a>00741 }
+<a name="l00742"></a>00742 
+<a name="l00743"></a><a class="code" href="classllvm_1_1APFloat.html#a28dd06f8d2e1d1af12773bc17681b5a2">00743</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &ourSemantics,
+<a name="l00744"></a>00744                  <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508fa">fltCategory</a> ourCategory, <span class="keywordtype">bool</span> negative) {
+<a name="l00745"></a>00745   initialize(&ourSemantics);
+<a name="l00746"></a>00746   category = ourCategory;
+<a name="l00747"></a>00747   sign = negative;
+<a name="l00748"></a>00748   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>)
+<a name="l00749"></a>00749     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l00750"></a>00750   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (ourCategory == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>)
+<a name="l00751"></a>00751     makeNaN();
+<a name="l00752"></a>00752 }
+<a name="l00753"></a>00753 
+<a name="l00754"></a><a class="code" href="classllvm_1_1APFloat.html#a0c1f03c56a8abb3298f6fa502ee3ee74">00754</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &ourSemantics, <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> text) {
+<a name="l00755"></a>00755   initialize(&ourSemantics);
+<a name="l00756"></a>00756   <a class="code" href="classllvm_1_1APFloat.html#ac46f9ecbe00750394fec5b940b56ac0e">convertFromString</a>(text, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l00757"></a>00757 }
+<a name="l00758"></a>00758 
+<a name="l00759"></a><a class="code" href="classllvm_1_1APFloat.html#ab8d0149a28824e43ebe4b9e080033049">00759</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs) {
+<a name="l00760"></a>00760   initialize(rhs.semantics);
+<a name="l00761"></a>00761   assign(rhs);
+<a name="l00762"></a>00762 }
+<a name="l00763"></a>00763 
+<a name="l00764"></a><a class="code" href="classllvm_1_1APFloat.html#a888659de112656d0bd17b116d1095ac8">00764</a> <a class="code" href="classllvm_1_1APFloat.html#a888659de112656d0bd17b116d1095ac8">APFloat::~APFloat</a>()
+<a name="l00765"></a>00765 {
+<a name="l00766"></a>00766   freeSignificand();
+<a name="l00767"></a>00767 }
+<a name="l00768"></a>00768 
+<a name="l00769"></a>00769 <span class="comment">// Profile - This method 'profiles' an APFloat for use with FoldingSet.</span>
+<a name="l00770"></a><a class="code" href="classllvm_1_1APFloat.html#a446e9a6df128d5cd7d00984e94e94d8c">00770</a> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1APFloat.html#a446e9a6df128d5cd7d00984e94e94d8c">APFloat::Profile</a>(<a class="code" href="classllvm_1_1FoldingSetNodeID.html">FoldingSetNodeID</a>& <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974" title="LLVM Calling Convention Representation.">ID</a>)<span class="keyword"> const </span>{
+<a name="l00771"></a>00771   ID.<a class="code" href="classllvm_1_1FoldingSetNodeID.html#ae75832b6dfaefd06c8e1c2e7e4f4a3de">Add</a>(<a class="code" href="classllvm_1_1APFloat.html#ae98bca797c2e2ea2fb639935b01da1ae">bitcastToAPInt</a>());
+<a name="l00772"></a>00772 }
+<a name="l00773"></a>00773 
+<a name="l00774"></a>00774 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00775"></a>00775 APFloat::partCount()<span class="keyword"> const</span>
+<a name="l00776"></a>00776 <span class="keyword"></span>{
+<a name="l00777"></a>00777   <span class="keywordflow">return</span> <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> + 1);
+<a name="l00778"></a>00778 }
+<a name="l00779"></a>00779 
+<a name="l00780"></a>00780 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l00781"></a><a class="code" href="classllvm_1_1APFloat.html#a8ea88db77f6159f4f8215b0867dc3fc3">00781</a> <a class="code" href="classllvm_1_1APFloat.html#a8ea88db77f6159f4f8215b0867dc3fc3">APFloat::semanticsPrecision</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &semantics)
+<a name="l00782"></a>00782 {
+<a name="l00783"></a>00783   <span class="keywordflow">return</span> semantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l00784"></a>00784 }
+<a name="l00785"></a>00785 
+<a name="l00786"></a>00786 <span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *
+<a name="l00787"></a>00787 APFloat::significandParts()<span class="keyword"> const</span>
+<a name="l00788"></a>00788 <span class="keyword"></span>{
+<a name="l00789"></a>00789   <span class="keywordflow">return</span> <span class="keyword">const_cast<</span><a class="code" href="classllvm_1_1APFloat.html">APFloat</a> *<span class="keyword">></span>(<span class="keyword">this</span>)->significandParts();
+<a name="l00790"></a>00790 }
+<a name="l00791"></a>00791 
+<a name="l00792"></a>00792 <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *
+<a name="l00793"></a>00793 APFloat::significandParts()
+<a name="l00794"></a>00794 {
+<a name="l00795"></a>00795   assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> || category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>);
+<a name="l00796"></a>00796 
+<a name="l00797"></a>00797   <span class="keywordflow">if</span> (partCount() > 1)
+<a name="l00798"></a>00798     <span class="keywordflow">return</span> significand.parts;
+<a name="l00799"></a>00799   <span class="keywordflow">else</span>
+<a name="l00800"></a>00800     <span class="keywordflow">return</span> &significand.part;
+<a name="l00801"></a>00801 }
+<a name="l00802"></a>00802 
+<a name="l00803"></a>00803 <span class="keywordtype">void</span>
+<a name="l00804"></a>00804 APFloat::zeroSignificand()
+<a name="l00805"></a>00805 {
+<a name="l00806"></a>00806   category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l00807"></a>00807   <a class="code" href="classllvm_1_1APInt.html#a8efff7af35067c51a3d9313e360701cf">APInt::tcSet</a>(significandParts(), 0, partCount());
+<a name="l00808"></a>00808 }
+<a name="l00809"></a>00809 
+<a name="l00810"></a>00810 <span class="comment">/* Increment an fcNormal floating point number's significand.  */</span>
+<a name="l00811"></a>00811 <span class="keywordtype">void</span>
+<a name="l00812"></a>00812 APFloat::incrementSignificand()
+<a name="l00813"></a>00813 {
+<a name="l00814"></a>00814   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> carry;
+<a name="l00815"></a>00815 
+<a name="l00816"></a>00816   carry = <a class="code" href="classllvm_1_1APInt.html#ac09793e735cac4c8e8136dadd22ee725" title="Increment a bignum in-place. Return the carry flag.">APInt::tcIncrement</a>(significandParts(), partCount());
+<a name="l00817"></a>00817 
+<a name="l00818"></a>00818   <span class="comment">/* Our callers should never cause us to overflow.  */</span>
+<a name="l00819"></a>00819   assert(carry == 0);
+<a name="l00820"></a>00820   (void)carry;
+<a name="l00821"></a>00821 }
+<a name="l00822"></a>00822 
+<a name="l00823"></a>00823 <span class="comment">/* Add the significand of the RHS.  Returns the carry flag.  */</span>
+<a name="l00824"></a>00824 <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>
+<a name="l00825"></a>00825 APFloat::addSignificand(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l00826"></a>00826 {
+<a name="l00827"></a>00827   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *parts;
+<a name="l00828"></a>00828 
+<a name="l00829"></a>00829   parts = significandParts();
+<a name="l00830"></a>00830 
+<a name="l00831"></a>00831   assert(semantics == rhs.semantics);
+<a name="l00832"></a>00832   assert(exponent == rhs.exponent);
+<a name="l00833"></a>00833 
+<a name="l00834"></a>00834   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html#a3fa8f810bfbbfeb2b3892b15814b031a">APInt::tcAdd</a>(parts, rhs.significandParts(), 0, partCount());
+<a name="l00835"></a>00835 }
+<a name="l00836"></a>00836 
+<a name="l00837"></a>00837 <span class="comment">/* Subtract the significand of the RHS with a borrow flag.  Returns</span>
+<a name="l00838"></a>00838 <span class="comment">   the borrow flag.  */</span>
+<a name="l00839"></a>00839 <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>
+<a name="l00840"></a>00840 APFloat::subtractSignificand(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> borrow)
+<a name="l00841"></a>00841 {
+<a name="l00842"></a>00842   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *parts;
+<a name="l00843"></a>00843 
+<a name="l00844"></a>00844   parts = significandParts();
+<a name="l00845"></a>00845 
+<a name="l00846"></a>00846   assert(semantics == rhs.semantics);
+<a name="l00847"></a>00847   assert(exponent == rhs.exponent);
+<a name="l00848"></a>00848 
+<a name="l00849"></a>00849   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html#a77f0f5be0da47f6a6e508ee0ec484f63">APInt::tcSubtract</a>(parts, rhs.significandParts(), borrow,
+<a name="l00850"></a>00850                            partCount());
+<a name="l00851"></a>00851 }
+<a name="l00852"></a>00852 
+<a name="l00853"></a>00853 <span class="comment">/* Multiply the significand of the RHS.  If ADDEND is non-NULL, add it</span>
+<a name="l00854"></a>00854 <span class="comment">   on to the full-precision result of the multiplication.  Returns the</span>
+<a name="l00855"></a>00855 <span class="comment">   lost fraction.  */</span>
+<a name="l00856"></a>00856 <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>
+<a name="l00857"></a>00857 APFloat::multiplySignificand(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> *addend)
+<a name="l00858"></a>00858 {
+<a name="l00859"></a>00859   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> omsb;        <span class="comment">// One, not zero, based MSB.</span>
+<a name="l00860"></a>00860   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partsCount, newPartsCount, precision;
+<a name="l00861"></a>00861   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *lhsSignificand;
+<a name="l00862"></a>00862   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> scratch[4];
+<a name="l00863"></a>00863   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *fullSignificand;
+<a name="l00864"></a>00864   <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction;
+<a name="l00865"></a>00865   <span class="keywordtype">bool</span> ignored;
+<a name="l00866"></a>00866 
+<a name="l00867"></a>00867   assert(semantics == rhs.semantics);
+<a name="l00868"></a>00868 
+<a name="l00869"></a>00869   precision = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l00870"></a>00870   newPartsCount = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(precision * 2);
+<a name="l00871"></a>00871 
+<a name="l00872"></a>00872   <span class="keywordflow">if</span> (newPartsCount > 4)
+<a name="l00873"></a>00873     fullSignificand = <span class="keyword">new</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>[newPartsCount];
+<a name="l00874"></a>00874   <span class="keywordflow">else</span>
+<a name="l00875"></a>00875     fullSignificand = scratch;
+<a name="l00876"></a>00876 
+<a name="l00877"></a>00877   lhsSignificand = significandParts();
+<a name="l00878"></a>00878   partsCount = partCount();
+<a name="l00879"></a>00879 
+<a name="l00880"></a>00880   <a class="code" href="classllvm_1_1APInt.html#a6164c05fd6cfc95aeb6bb8b00a194fa0">APInt::tcFullMultiply</a>(fullSignificand, lhsSignificand,
+<a name="l00881"></a>00881                         rhs.significandParts(), partsCount, partsCount);
+<a name="l00882"></a>00882 
+<a name="l00883"></a>00883   lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>;
+<a name="l00884"></a>00884   omsb = <a class="code" href="classllvm_1_1APInt.html#ada7408f27e25486804e9c4cbca9348e7">APInt::tcMSB</a>(fullSignificand, newPartsCount) + 1;
+<a name="l00885"></a>00885   exponent += rhs.exponent;
+<a name="l00886"></a>00886 
+<a name="l00887"></a>00887   <span class="keywordflow">if</span> (addend) {
+<a name="l00888"></a>00888     Significand savedSignificand = significand;
+<a name="l00889"></a>00889     <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> *savedSemantics = semantics;
+<a name="l00890"></a>00890     <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> extendedSemantics;
+<a name="l00891"></a>00891     <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> <a class="code" href="namespacellvm_1_1sys_1_1fs.html#a65c5fe2953375fe7c8c64bb7481c54a4" title="Get file status as if by POSIX stat().">status</a>;
+<a name="l00892"></a>00892     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> extendedPrecision;
+<a name="l00893"></a>00893 
+<a name="l00894"></a>00894     <span class="comment">/* Normalize our MSB.  */</span>
+<a name="l00895"></a>00895     extendedPrecision = precision + precision - 1;
+<a name="l00896"></a>00896     <span class="keywordflow">if</span> (omsb != extendedPrecision) {
+<a name="l00897"></a>00897       <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(fullSignificand, newPartsCount,
+<a name="l00898"></a>00898                          extendedPrecision - omsb);
+<a name="l00899"></a>00899       exponent -= extendedPrecision - omsb;
+<a name="l00900"></a>00900     }
+<a name="l00901"></a>00901 
+<a name="l00902"></a>00902     <span class="comment">/* Create new semantics.  */</span>
+<a name="l00903"></a>00903     extendedSemantics = *semantics;
+<a name="l00904"></a>00904     extendedSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> = extendedPrecision;
+<a name="l00905"></a>00905 
+<a name="l00906"></a>00906     <span class="keywordflow">if</span> (newPartsCount == 1)
+<a name="l00907"></a>00907       significand.part = fullSignificand[0];
+<a name="l00908"></a>00908     <span class="keywordflow">else</span>
+<a name="l00909"></a>00909       significand.parts = fullSignificand;
+<a name="l00910"></a>00910     semantics = &extendedSemantics;
+<a name="l00911"></a>00911 
+<a name="l00912"></a>00912     <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> extendedAddend(*addend);
+<a name="l00913"></a>00913     status = extendedAddend.convert(extendedSemantics, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea4cc5d58ded2d49317f9cc2315a3a09ec">rmTowardZero</a>, &ignored);
+<a name="l00914"></a>00914     assert(status == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>);
+<a name="l00915"></a>00915     (void)status;
+<a name="l00916"></a>00916     lost_fraction = addOrSubtractSignificand(extendedAddend, <span class="keyword">false</span>);
+<a name="l00917"></a>00917 
+<a name="l00918"></a>00918     <span class="comment">/* Restore our state.  */</span>
+<a name="l00919"></a>00919     <span class="keywordflow">if</span> (newPartsCount == 1)
+<a name="l00920"></a>00920       fullSignificand[0] = significand.part;
+<a name="l00921"></a>00921     significand = savedSignificand;
+<a name="l00922"></a>00922     semantics = savedSemantics;
+<a name="l00923"></a>00923 
+<a name="l00924"></a>00924     omsb = <a class="code" href="classllvm_1_1APInt.html#ada7408f27e25486804e9c4cbca9348e7">APInt::tcMSB</a>(fullSignificand, newPartsCount) + 1;
+<a name="l00925"></a>00925   }
+<a name="l00926"></a>00926 
+<a name="l00927"></a>00927   exponent -= (precision - 1);
+<a name="l00928"></a>00928 
+<a name="l00929"></a>00929   <span class="keywordflow">if</span> (omsb > precision) {
+<a name="l00930"></a>00930     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits, significantParts;
+<a name="l00931"></a>00931     <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lf;
+<a name="l00932"></a>00932 
+<a name="l00933"></a>00933     bits = omsb - precision;
+<a name="l00934"></a>00934     significantParts = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(omsb);
+<a name="l00935"></a>00935     lf = <a class="code" href="APFloat_8cpp.html#aa9b0da389e5fb14fc522819904e4fa24">shiftRight</a>(fullSignificand, significantParts, bits);
+<a name="l00936"></a>00936     lost_fraction = <a class="code" href="APFloat_8cpp.html#a3abab7f1d3f67611acf79520a03f2769">combineLostFractions</a>(lf, lost_fraction);
+<a name="l00937"></a>00937     exponent += bits;
+<a name="l00938"></a>00938   }
+<a name="l00939"></a>00939 
+<a name="l00940"></a>00940   <a class="code" href="classllvm_1_1APInt.html#a0075077383b560290d112b29a155db08" title="Assign one bignum to another.">APInt::tcAssign</a>(lhsSignificand, fullSignificand, partsCount);
+<a name="l00941"></a>00941 
+<a name="l00942"></a>00942   <span class="keywordflow">if</span> (newPartsCount > 4)
+<a name="l00943"></a>00943     <span class="keyword">delete</span> [] fullSignificand;
+<a name="l00944"></a>00944 
+<a name="l00945"></a>00945   <span class="keywordflow">return</span> lost_fraction;
+<a name="l00946"></a>00946 }
+<a name="l00947"></a>00947 
+<a name="l00948"></a>00948 <span class="comment">/* Multiply the significands of LHS and RHS to DST.  */</span>
+<a name="l00949"></a>00949 <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>
+<a name="l00950"></a>00950 APFloat::divideSignificand(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l00951"></a>00951 {
+<a name="l00952"></a>00952   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bit, i, partsCount;
+<a name="l00953"></a>00953   <span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *rhsSignificand;
+<a name="l00954"></a>00954   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *lhsSignificand, *dividend, *divisor;
+<a name="l00955"></a>00955   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> scratch[4];
+<a name="l00956"></a>00956   <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction;
+<a name="l00957"></a>00957 
+<a name="l00958"></a>00958   assert(semantics == rhs.semantics);
+<a name="l00959"></a>00959 
+<a name="l00960"></a>00960   lhsSignificand = significandParts();
+<a name="l00961"></a>00961   rhsSignificand = rhs.significandParts();
+<a name="l00962"></a>00962   partsCount = partCount();
+<a name="l00963"></a>00963 
+<a name="l00964"></a>00964   <span class="keywordflow">if</span> (partsCount > 2)
+<a name="l00965"></a>00965     dividend = <span class="keyword">new</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>[partsCount * 2];
+<a name="l00966"></a>00966   <span class="keywordflow">else</span>
+<a name="l00967"></a>00967     dividend = scratch;
+<a name="l00968"></a>00968 
+<a name="l00969"></a>00969   divisor = dividend + partsCount;
+<a name="l00970"></a>00970 
+<a name="l00971"></a>00971   <span class="comment">/* Copy the dividend and divisor as they will be modified in-place.  */</span>
+<a name="l00972"></a>00972   <span class="keywordflow">for</span> (i = 0; i < partsCount; i++) {
+<a name="l00973"></a>00973     dividend[i] = lhsSignificand[i];
+<a name="l00974"></a>00974     divisor[i] = rhsSignificand[i];
+<a name="l00975"></a>00975     lhsSignificand[i] = 0;
+<a name="l00976"></a>00976   }
+<a name="l00977"></a>00977 
+<a name="l00978"></a>00978   exponent -= rhs.exponent;
+<a name="l00979"></a>00979 
+<a name="l00980"></a>00980   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> precision = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l00981"></a>00981 
+<a name="l00982"></a>00982   <span class="comment">/* Normalize the divisor.  */</span>
+<a name="l00983"></a>00983   bit = precision - <a class="code" href="classllvm_1_1APInt.html#ada7408f27e25486804e9c4cbca9348e7">APInt::tcMSB</a>(divisor, partsCount) - 1;
+<a name="l00984"></a>00984   <span class="keywordflow">if</span> (bit) {
+<a name="l00985"></a>00985     exponent += bit;
+<a name="l00986"></a>00986     <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(divisor, partsCount, bit);
+<a name="l00987"></a>00987   }
+<a name="l00988"></a>00988 
+<a name="l00989"></a>00989   <span class="comment">/* Normalize the dividend.  */</span>
+<a name="l00990"></a>00990   bit = precision - <a class="code" href="classllvm_1_1APInt.html#ada7408f27e25486804e9c4cbca9348e7">APInt::tcMSB</a>(dividend, partsCount) - 1;
+<a name="l00991"></a>00991   <span class="keywordflow">if</span> (bit) {
+<a name="l00992"></a>00992     exponent -= bit;
+<a name="l00993"></a>00993     <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(dividend, partsCount, bit);
+<a name="l00994"></a>00994   }
+<a name="l00995"></a>00995 
+<a name="l00996"></a>00996   <span class="comment">/* Ensure the dividend >= divisor initially for the loop below.</span>
+<a name="l00997"></a>00997 <span class="comment">     Incidentally, this means that the division loop below is</span>
+<a name="l00998"></a>00998 <span class="comment">     guaranteed to set the integer bit to one.  */</span>
+<a name="l00999"></a>00999   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APInt.html#aae15c2f059ac14fc2b3b7ef8fa645889" title="Comparison (unsigned) of two bignums.">APInt::tcCompare</a>(dividend, divisor, partsCount) < 0) {
+<a name="l01000"></a>01000     exponent--;
+<a name="l01001"></a>01001     <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(dividend, partsCount, 1);
+<a name="l01002"></a>01002     assert(<a class="code" href="classllvm_1_1APInt.html#aae15c2f059ac14fc2b3b7ef8fa645889" title="Comparison (unsigned) of two bignums.">APInt::tcCompare</a>(dividend, divisor, partsCount) >= 0);
+<a name="l01003"></a>01003   }
+<a name="l01004"></a>01004 
+<a name="l01005"></a>01005   <span class="comment">/* Long division.  */</span>
+<a name="l01006"></a>01006   <span class="keywordflow">for</span> (bit = precision; bit; bit -= 1) {
+<a name="l01007"></a>01007     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APInt.html#aae15c2f059ac14fc2b3b7ef8fa645889" title="Comparison (unsigned) of two bignums.">APInt::tcCompare</a>(dividend, divisor, partsCount) >= 0) {
+<a name="l01008"></a>01008       <a class="code" href="classllvm_1_1APInt.html#a77f0f5be0da47f6a6e508ee0ec484f63">APInt::tcSubtract</a>(dividend, divisor, 0, partsCount);
+<a name="l01009"></a>01009       <a class="code" href="classllvm_1_1APInt.html#a427c08cdbdfe087dcf7fed6ee71477f5" title="Set the given bit of a bignum. Zero-based.">APInt::tcSetBit</a>(lhsSignificand, bit - 1);
+<a name="l01010"></a>01010     }
+<a name="l01011"></a>01011 
+<a name="l01012"></a>01012     <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(dividend, partsCount, 1);
+<a name="l01013"></a>01013   }
+<a name="l01014"></a>01014 
+<a name="l01015"></a>01015   <span class="comment">/* Figure out the lost fraction.  */</span>
+<a name="l01016"></a>01016   <span class="keywordtype">int</span> cmp = <a class="code" href="classllvm_1_1APInt.html#aae15c2f059ac14fc2b3b7ef8fa645889" title="Comparison (unsigned) of two bignums.">APInt::tcCompare</a>(dividend, divisor, partsCount);
+<a name="l01017"></a>01017 
+<a name="l01018"></a>01018   <span class="keywordflow">if</span> (cmp > 0)
+<a name="l01019"></a>01019     lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>;
+<a name="l01020"></a>01020   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (cmp == 0)
+<a name="l01021"></a>01021     lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286ac0b9d05de9b62ebe41facd1bbb21aca6">lfExactlyHalf</a>;
+<a name="l01022"></a>01022   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APInt.html#aeb6c84063610d7556e6a6c83d4b2500d" title="Returns true if a bignum is zero, false otherwise.">APInt::tcIsZero</a>(dividend, partsCount))
+<a name="l01023"></a>01023     lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>;
+<a name="l01024"></a>01024   <span class="keywordflow">else</span>
+<a name="l01025"></a>01025     lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a92e4eb4d28972e2a645ec9fdb438a938">lfLessThanHalf</a>;
+<a name="l01026"></a>01026 
+<a name="l01027"></a>01027   <span class="keywordflow">if</span> (partsCount > 2)
+<a name="l01028"></a>01028     <span class="keyword">delete</span> [] dividend;
+<a name="l01029"></a>01029 
+<a name="l01030"></a>01030   <span class="keywordflow">return</span> lost_fraction;
+<a name="l01031"></a>01031 }
+<a name="l01032"></a>01032 
+<a name="l01033"></a>01033 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l01034"></a>01034 APFloat::significandMSB()<span class="keyword"> const</span>
+<a name="l01035"></a>01035 <span class="keyword"></span>{
+<a name="l01036"></a>01036   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html#ada7408f27e25486804e9c4cbca9348e7">APInt::tcMSB</a>(significandParts(), partCount());
+<a name="l01037"></a>01037 }
+<a name="l01038"></a>01038 
+<a name="l01039"></a>01039 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l01040"></a>01040 APFloat::significandLSB()<span class="keyword"> const</span>
+<a name="l01041"></a>01041 <span class="keyword"></span>{
+<a name="l01042"></a>01042   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html#a08a1c76eb1face84272c736e6349562d">APInt::tcLSB</a>(significandParts(), partCount());
+<a name="l01043"></a>01043 }
+<a name="l01044"></a>01044 
+<a name="l01045"></a>01045 <span class="comment">/* Note that a zero result is NOT normalized to fcZero.  */</span>
+<a name="l01046"></a>01046 <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>
+<a name="l01047"></a>01047 APFloat::shiftSignificandRight(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits)
+<a name="l01048"></a>01048 {
+<a name="l01049"></a>01049   <span class="comment">/* Our exponent should not overflow.  */</span>
+<a name="l01050"></a>01050   assert((<a class="code" href="namespacellvm.html#afe3253dc54e986c3504af514c451897b">exponent_t</a>) (exponent + bits) >= exponent);
+<a name="l01051"></a>01051 
+<a name="l01052"></a>01052   exponent += bits;
+<a name="l01053"></a>01053 
+<a name="l01054"></a>01054   <span class="keywordflow">return</span> <a class="code" href="APFloat_8cpp.html#aa9b0da389e5fb14fc522819904e4fa24">shiftRight</a>(significandParts(), partCount(), bits);
+<a name="l01055"></a>01055 }
+<a name="l01056"></a>01056 
+<a name="l01057"></a>01057 <span class="comment">/* Shift the significand left BITS bits, subtract BITS from its exponent.  */</span>
+<a name="l01058"></a>01058 <span class="keywordtype">void</span>
+<a name="l01059"></a>01059 APFloat::shiftSignificandLeft(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits)
+<a name="l01060"></a>01060 {
+<a name="l01061"></a>01061   assert(bits < semantics->precision);
+<a name="l01062"></a>01062 
+<a name="l01063"></a>01063   <span class="keywordflow">if</span> (bits) {
+<a name="l01064"></a>01064     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partsCount = partCount();
+<a name="l01065"></a>01065 
+<a name="l01066"></a>01066     <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(significandParts(), partsCount, bits);
+<a name="l01067"></a>01067     exponent -= bits;
+<a name="l01068"></a>01068 
+<a name="l01069"></a>01069     assert(!<a class="code" href="classllvm_1_1APInt.html#aeb6c84063610d7556e6a6c83d4b2500d" title="Returns true if a bignum is zero, false otherwise.">APInt::tcIsZero</a>(significandParts(), partsCount));
+<a name="l01070"></a>01070   }
+<a name="l01071"></a>01071 }
+<a name="l01072"></a>01072 
+<a name="l01073"></a>01073 <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4ba">APFloat::cmpResult</a>
+<a name="l01074"></a>01074 APFloat::compareAbsoluteValue(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)<span class="keyword"> const</span>
+<a name="l01075"></a>01075 <span class="keyword"></span>{
+<a name="l01076"></a>01076   <span class="keywordtype">int</span> <a class="code" href="classllvm_1_1APFloat.html#aaf5c2c00b5485b2f34bf776e73e88394">compare</a>;
+<a name="l01077"></a>01077 
+<a name="l01078"></a>01078   assert(semantics == rhs.semantics);
+<a name="l01079"></a>01079   assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>);
+<a name="l01080"></a>01080   assert(rhs.category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>);
+<a name="l01081"></a>01081 
+<a name="l01082"></a>01082   compare = exponent - rhs.exponent;
+<a name="l01083"></a>01083 
+<a name="l01084"></a>01084   <span class="comment">/* If exponents are equal, do an unsigned bignum comparison of the</span>
+<a name="l01085"></a>01085 <span class="comment">     significands.  */</span>
+<a name="l01086"></a>01086   <span class="keywordflow">if</span> (compare == 0)
+<a name="l01087"></a>01087     compare = <a class="code" href="classllvm_1_1APInt.html#aae15c2f059ac14fc2b3b7ef8fa645889" title="Comparison (unsigned) of two bignums.">APInt::tcCompare</a>(significandParts(), rhs.significandParts(),
+<a name="l01088"></a>01088                                partCount());
+<a name="l01089"></a>01089 
+<a name="l01090"></a>01090   <span class="keywordflow">if</span> (compare > 0)
+<a name="l01091"></a>01091     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baad5181e718678de7d5b9f9ad82b4ecaba">cmpGreaterThan</a>;
+<a name="l01092"></a>01092   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (compare < 0)
+<a name="l01093"></a>01093     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baae8d0bbef93c1e19af24b10315c856b53">cmpLessThan</a>;
+<a name="l01094"></a>01094   <span class="keywordflow">else</span>
+<a name="l01095"></a>01095     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baac163f79a17485fc69a8f0d6f887ec4fa">cmpEqual</a>;
+<a name="l01096"></a>01096 }
+<a name="l01097"></a>01097 
+<a name="l01098"></a>01098 <span class="comment">/* Handle overflow.  Sign is preserved.  We either become infinity or</span>
+<a name="l01099"></a>01099 <span class="comment">   the largest finite number.  */</span>
+<a name="l01100"></a>01100 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01101"></a>01101 APFloat::handleOverflow(roundingMode rounding_mode)
+<a name="l01102"></a>01102 {
+<a name="l01103"></a>01103   <span class="comment">/* Infinity?  */</span>
+<a name="l01104"></a>01104   <span class="keywordflow">if</span> (rounding_mode == <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a> ||
+<a name="l01105"></a>01105       rounding_mode == <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea222d7a5b06bd3e07d97f095ac289d028">rmNearestTiesToAway</a> ||
+<a name="l01106"></a>01106       (rounding_mode == <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea510bd969eb074085833d8a98354a20e6">rmTowardPositive</a> && !sign) ||
+<a name="l01107"></a>01107       (rounding_mode == <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea5912a32e72de457e007529c4ed74221d">rmTowardNegative</a> && sign)) {
+<a name="l01108"></a>01108     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l01109"></a>01109     <span class="keywordflow">return</span> (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a>) (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a2d249086066df703c3a6d74127128271">opOverflow</a> | <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);
+<a name="l01110"></a>01110   }
+<a name="l01111"></a>01111 
+<a name="l01112"></a>01112   <span class="comment">/* Otherwise we become the largest finite number.  */</span>
+<a name="l01113"></a>01113   category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l01114"></a>01114   exponent = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a60ad2894b47852a4b60af1b89a3d38ae">maxExponent</a>;
+<a name="l01115"></a>01115   <a class="code" href="classllvm_1_1APInt.html#a9893ee6e3d9d51101c6854c2548189ba" title="Set the least significant BITS and clear the rest.">APInt::tcSetLeastSignificantBits</a>(significandParts(), partCount(),
+<a name="l01116"></a>01116                                    semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>);
+<a name="l01117"></a>01117 
+<a name="l01118"></a>01118   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>;
+<a name="l01119"></a>01119 }
+<a name="l01120"></a>01120 
+<a name="l01121"></a>01121 <span class="comment">/* Returns TRUE if, when truncating the current number, with BIT the</span>
+<a name="l01122"></a>01122 <span class="comment">   new LSB, with the given lost fraction and rounding mode, the result</span>
+<a name="l01123"></a>01123 <span class="comment">   would need to be rounded away from zero (i.e., by increasing the</span>
+<a name="l01124"></a>01124 <span class="comment">   signficand).  This routine must work for fcZero of both signs, and</span>
+<a name="l01125"></a>01125 <span class="comment">   fcNormal numbers.  */</span>
+<a name="l01126"></a>01126 <span class="keywordtype">bool</span>
+<a name="l01127"></a>01127 APFloat::roundAwayFromZero(roundingMode rounding_mode,
+<a name="l01128"></a>01128                            <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction,
+<a name="l01129"></a>01129                            <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bit)<span class="keyword"> const</span>
+<a name="l01130"></a>01130 <span class="keyword"></span>{
+<a name="l01131"></a>01131   <span class="comment">/* NaNs and infinities should not have lost fractions.  */</span>
+<a name="l01132"></a>01132   assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> || category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>);
+<a name="l01133"></a>01133 
+<a name="l01134"></a>01134   <span class="comment">/* Current callers never pass this so we don't handle it.  */</span>
+<a name="l01135"></a>01135   assert(lost_fraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>);
+<a name="l01136"></a>01136 
+<a name="l01137"></a>01137   <span class="keywordflow">switch</span> (rounding_mode) {
+<a name="l01138"></a>01138   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea222d7a5b06bd3e07d97f095ac289d028">rmNearestTiesToAway</a>:
+<a name="l01139"></a>01139     <span class="keywordflow">return</span> lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286ac0b9d05de9b62ebe41facd1bbb21aca6">lfExactlyHalf</a> || lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>;
+<a name="l01140"></a>01140 
+<a name="l01141"></a>01141   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>:
+<a name="l01142"></a>01142     <span class="keywordflow">if</span> (lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>)
+<a name="l01143"></a>01143       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l01144"></a>01144 
+<a name="l01145"></a>01145     <span class="comment">/* Our zeroes don't have a significand to test.  */</span>
+<a name="l01146"></a>01146     <span class="keywordflow">if</span> (lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286ac0b9d05de9b62ebe41facd1bbb21aca6">lfExactlyHalf</a> && category != <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>)
+<a name="l01147"></a>01147       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html#ad1b485c8171a1de8391ca44e69f0d573" title="Extract the given bit of a bignum; returns 0 or 1. Zero-based.">APInt::tcExtractBit</a>(significandParts(), bit);
+<a name="l01148"></a>01148 
+<a name="l01149"></a>01149     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01150"></a>01150 
+<a name="l01151"></a>01151   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea4cc5d58ded2d49317f9cc2315a3a09ec">rmTowardZero</a>:
+<a name="l01152"></a>01152     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l01153"></a>01153 
+<a name="l01154"></a>01154   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea510bd969eb074085833d8a98354a20e6">rmTowardPositive</a>:
+<a name="l01155"></a>01155     <span class="keywordflow">return</span> sign == <span class="keyword">false</span>;
+<a name="l01156"></a>01156 
+<a name="l01157"></a>01157   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea5912a32e72de457e007529c4ed74221d">rmTowardNegative</a>:
+<a name="l01158"></a>01158     <span class="keywordflow">return</span> sign == <span class="keyword">true</span>;
+<a name="l01159"></a>01159   }
+<a name="l01160"></a>01160   <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Invalid rounding mode found"</span>);
+<a name="l01161"></a>01161 }
+<a name="l01162"></a>01162 
+<a name="l01163"></a>01163 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01164"></a>01164 APFloat::normalize(roundingMode rounding_mode,
+<a name="l01165"></a>01165                    <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction)
+<a name="l01166"></a>01166 {
+<a name="l01167"></a>01167   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> omsb;                <span class="comment">/* One, not zero, based MSB.  */</span>
+<a name="l01168"></a>01168   <span class="keywordtype">int</span> exponentChange;
+<a name="l01169"></a>01169 
+<a name="l01170"></a>01170   <span class="keywordflow">if</span> (category != <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>)
+<a name="l01171"></a>01171     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01172"></a>01172 
+<a name="l01173"></a>01173   <span class="comment">/* Before rounding normalize the exponent of fcNormal numbers.  */</span>
+<a name="l01174"></a>01174   omsb = significandMSB() + 1;
+<a name="l01175"></a>01175 
+<a name="l01176"></a>01176   <span class="keywordflow">if</span> (omsb) {
+<a name="l01177"></a>01177     <span class="comment">/* OMSB is numbered from 1.  We want to place it in the integer</span>
+<a name="l01178"></a>01178 <span class="comment">       bit numbered PRECISION if possible, with a compensating change in</span>
+<a name="l01179"></a>01179 <span class="comment">       the exponent.  */</span>
+<a name="l01180"></a>01180     exponentChange = omsb - semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l01181"></a>01181 
+<a name="l01182"></a>01182     <span class="comment">/* If the resulting exponent is too high, overflow according to</span>
+<a name="l01183"></a>01183 <span class="comment">       the rounding mode.  */</span>
+<a name="l01184"></a>01184     <span class="keywordflow">if</span> (exponent + exponentChange > semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a60ad2894b47852a4b60af1b89a3d38ae">maxExponent</a>)
+<a name="l01185"></a>01185       <span class="keywordflow">return</span> handleOverflow(rounding_mode);
+<a name="l01186"></a>01186 
+<a name="l01187"></a>01187     <span class="comment">/* Subnormal numbers have exponent minExponent, and their MSB</span>
+<a name="l01188"></a>01188 <span class="comment">       is forced based on that.  */</span>
+<a name="l01189"></a>01189     <span class="keywordflow">if</span> (exponent + exponentChange < semantics->minExponent)
+<a name="l01190"></a>01190       exponentChange = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a> - exponent;
+<a name="l01191"></a>01191 
+<a name="l01192"></a>01192     <span class="comment">/* Shifting left is easy as we don't lose precision.  */</span>
+<a name="l01193"></a>01193     <span class="keywordflow">if</span> (exponentChange < 0) {
+<a name="l01194"></a>01194       assert(lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>);
+<a name="l01195"></a>01195 
+<a name="l01196"></a>01196       shiftSignificandLeft(-exponentChange);
+<a name="l01197"></a>01197 
+<a name="l01198"></a>01198       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01199"></a>01199     }
+<a name="l01200"></a>01200 
+<a name="l01201"></a>01201     <span class="keywordflow">if</span> (exponentChange > 0) {
+<a name="l01202"></a>01202       <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lf;
+<a name="l01203"></a>01203 
+<a name="l01204"></a>01204       <span class="comment">/* Shift right and capture any new lost fraction.  */</span>
+<a name="l01205"></a>01205       lf = shiftSignificandRight(exponentChange);
+<a name="l01206"></a>01206 
+<a name="l01207"></a>01207       lost_fraction = <a class="code" href="APFloat_8cpp.html#a3abab7f1d3f67611acf79520a03f2769">combineLostFractions</a>(lf, lost_fraction);
+<a name="l01208"></a>01208 
+<a name="l01209"></a>01209       <span class="comment">/* Keep OMSB up-to-date.  */</span>
+<a name="l01210"></a>01210       <span class="keywordflow">if</span> (omsb > (<span class="keywordtype">unsigned</span>) exponentChange)
+<a name="l01211"></a>01211         omsb -= exponentChange;
+<a name="l01212"></a>01212       <span class="keywordflow">else</span>
+<a name="l01213"></a>01213         omsb = 0;
+<a name="l01214"></a>01214     }
+<a name="l01215"></a>01215   }
+<a name="l01216"></a>01216 
+<a name="l01217"></a>01217   <span class="comment">/* Now round the number according to rounding_mode given the lost</span>
+<a name="l01218"></a>01218 <span class="comment">     fraction.  */</span>
+<a name="l01219"></a>01219 
+<a name="l01220"></a>01220   <span class="comment">/* As specified in IEEE 754, since we do not trap we do not report</span>
+<a name="l01221"></a>01221 <span class="comment">     underflow for exact results.  */</span>
+<a name="l01222"></a>01222   <span class="keywordflow">if</span> (lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>) {
+<a name="l01223"></a>01223     <span class="comment">/* Canonicalize zeroes.  */</span>
+<a name="l01224"></a>01224     <span class="keywordflow">if</span> (omsb == 0)
+<a name="l01225"></a>01225       category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l01226"></a>01226 
+<a name="l01227"></a>01227     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01228"></a>01228   }
+<a name="l01229"></a>01229 
+<a name="l01230"></a>01230   <span class="comment">/* Increment the significand if we're rounding away from zero.  */</span>
+<a name="l01231"></a>01231   <span class="keywordflow">if</span> (roundAwayFromZero(rounding_mode, lost_fraction, 0)) {
+<a name="l01232"></a>01232     <span class="keywordflow">if</span> (omsb == 0)
+<a name="l01233"></a>01233       exponent = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a>;
+<a name="l01234"></a>01234 
+<a name="l01235"></a>01235     incrementSignificand();
+<a name="l01236"></a>01236     omsb = significandMSB() + 1;
+<a name="l01237"></a>01237 
+<a name="l01238"></a>01238     <span class="comment">/* Did the significand increment overflow?  */</span>
+<a name="l01239"></a>01239     <span class="keywordflow">if</span> (omsb == (<span class="keywordtype">unsigned</span>) semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> + 1) {
+<a name="l01240"></a>01240       <span class="comment">/* Renormalize by incrementing the exponent and shifting our</span>
+<a name="l01241"></a>01241 <span class="comment">         significand right one.  However if we already have the</span>
+<a name="l01242"></a>01242 <span class="comment">         maximum exponent we overflow to infinity.  */</span>
+<a name="l01243"></a>01243       <span class="keywordflow">if</span> (exponent == semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a60ad2894b47852a4b60af1b89a3d38ae">maxExponent</a>) {
+<a name="l01244"></a>01244         category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l01245"></a>01245 
+<a name="l01246"></a>01246         <span class="keywordflow">return</span> (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a>) (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a2d249086066df703c3a6d74127128271">opOverflow</a> | <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);
+<a name="l01247"></a>01247       }
+<a name="l01248"></a>01248 
+<a name="l01249"></a>01249       shiftSignificandRight(1);
+<a name="l01250"></a>01250 
+<a name="l01251"></a>01251       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>;
+<a name="l01252"></a>01252     }
+<a name="l01253"></a>01253   }
+<a name="l01254"></a>01254 
+<a name="l01255"></a>01255   <span class="comment">/* The normal case - we were and are not denormal, and any</span>
+<a name="l01256"></a>01256 <span class="comment">     significand increment above didn't overflow.  */</span>
+<a name="l01257"></a>01257   <span class="keywordflow">if</span> (omsb == semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>)
+<a name="l01258"></a>01258     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>;
+<a name="l01259"></a>01259 
+<a name="l01260"></a>01260   <span class="comment">/* We have a non-zero denormal.  */</span>
+<a name="l01261"></a>01261   assert(omsb < semantics->precision);
+<a name="l01262"></a>01262 
+<a name="l01263"></a>01263   <span class="comment">/* Canonicalize zeroes.  */</span>
+<a name="l01264"></a>01264   <span class="keywordflow">if</span> (omsb == 0)
+<a name="l01265"></a>01265     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l01266"></a>01266 
+<a name="l01267"></a>01267   <span class="comment">/* The fcZero case is a denormal that underflowed to zero.  */</span>
+<a name="l01268"></a>01268   <span class="keywordflow">return</span> (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a>) (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a896cde024eec34b1a2d095b9df8ec816">opUnderflow</a> | <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);
+<a name="l01269"></a>01269 }
+<a name="l01270"></a>01270 
+<a name="l01271"></a>01271 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01272"></a>01272 APFloat::addOrSubtractSpecials(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <span class="keywordtype">bool</span> subtract)
+<a name="l01273"></a>01273 {
+<a name="l01274"></a>01274   <span class="keywordflow">switch</span> (<a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(category, rhs.category)) {
+<a name="l01275"></a>01275   <span class="keywordflow">default</span>:
+<a name="l01276"></a>01276     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(0);
+<a name="l01277"></a>01277 
+<a name="l01278"></a>01278   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01279"></a>01279   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01280"></a>01280   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01281"></a>01281   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01282"></a>01282   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01283"></a>01283   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01284"></a>01284   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01285"></a>01285     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01286"></a>01286 
+<a name="l01287"></a>01287   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01288"></a>01288   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01289"></a>01289   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01290"></a>01290     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l01291"></a>01291     copySignificand(rhs);
+<a name="l01292"></a>01292     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01293"></a>01293 
+<a name="l01294"></a>01294   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01295"></a>01295   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01296"></a>01296     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l01297"></a>01297     sign = rhs.sign ^ <a class="code" href="classllvm_1_1APFloat.html#a7578f9a82a4ae3c7f4d2ac7cad91f24f">subtract</a>;
+<a name="l01298"></a>01298     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01299"></a>01299 
+<a name="l01300"></a>01300   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01301"></a>01301     assign(rhs);
+<a name="l01302"></a>01302     sign = rhs.sign ^ <a class="code" href="classllvm_1_1APFloat.html#a7578f9a82a4ae3c7f4d2ac7cad91f24f">subtract</a>;
+<a name="l01303"></a>01303     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01304"></a>01304 
+<a name="l01305"></a>01305   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01306"></a>01306     <span class="comment">/* Sign depends on rounding mode; handled by caller.  */</span>
+<a name="l01307"></a>01307     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01308"></a>01308 
+<a name="l01309"></a>01309   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01310"></a>01310     <span class="comment">/* Differently signed infinities can only be validly</span>
+<a name="l01311"></a>01311 <span class="comment">       subtracted.  */</span>
+<a name="l01312"></a>01312     <a class="code" href="LLParser_8cpp.html#ab86ae2177a3bc7ef5154e74e482cf6bc">if</a> (((sign ^ rhs.sign)!=0) != subtract) {
+<a name="l01313"></a>01313       makeNaN();
+<a name="l01314"></a>01314       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l01315"></a>01315     }
+<a name="l01316"></a>01316 
+<a name="l01317"></a>01317     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01318"></a>01318 
+<a name="l01319"></a>01319   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01320"></a>01320     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a82b7dae15b57d873d3e2ca430de50e2d">opDivByZero</a>;
+<a name="l01321"></a>01321   }
+<a name="l01322"></a>01322 }
+<a name="l01323"></a>01323 
+<a name="l01324"></a>01324 <span class="comment">/* Add or subtract two normal numbers.  */</span>
+<a name="l01325"></a>01325 <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>
+<a name="l01326"></a>01326 APFloat::addOrSubtractSignificand(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <span class="keywordtype">bool</span> subtract)
+<a name="l01327"></a>01327 {
+<a name="l01328"></a>01328   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> carry;
+<a name="l01329"></a>01329   <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction;
+<a name="l01330"></a>01330   <span class="keywordtype">int</span> bits;
+<a name="l01331"></a>01331 
+<a name="l01332"></a>01332   <span class="comment">/* Determine if the operation on the absolute values is effectively</span>
+<a name="l01333"></a>01333 <span class="comment">     an addition or subtraction.  */</span>
+<a name="l01334"></a>01334   subtract ^= (sign ^ rhs.sign) ? <span class="keyword">true</span> : <span class="keyword">false</span>;
+<a name="l01335"></a>01335 
+<a name="l01336"></a>01336   <span class="comment">/* Are we bigger exponent-wise than the RHS?  */</span>
+<a name="l01337"></a>01337   bits = exponent - rhs.exponent;
+<a name="l01338"></a>01338 
+<a name="l01339"></a>01339   <span class="comment">/* Subtraction is more subtle than one might naively expect.  */</span>
+<a name="l01340"></a>01340   <span class="keywordflow">if</span> (subtract) {
+<a name="l01341"></a>01341     <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> temp_rhs(rhs);
+<a name="l01342"></a>01342     <span class="keywordtype">bool</span> reverse;
+<a name="l01343"></a>01343 
+<a name="l01344"></a>01344     <span class="keywordflow">if</span> (bits == 0) {
+<a name="l01345"></a>01345       reverse = compareAbsoluteValue(temp_rhs) == <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baae8d0bbef93c1e19af24b10315c856b53">cmpLessThan</a>;
+<a name="l01346"></a>01346       lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>;
+<a name="l01347"></a>01347     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (bits > 0) {
+<a name="l01348"></a>01348       lost_fraction = temp_rhs.shiftSignificandRight(bits - 1);
+<a name="l01349"></a>01349       shiftSignificandLeft(1);
+<a name="l01350"></a>01350       reverse = <span class="keyword">false</span>;
+<a name="l01351"></a>01351     } <span class="keywordflow">else</span> {
+<a name="l01352"></a>01352       lost_fraction = shiftSignificandRight(-bits - 1);
+<a name="l01353"></a>01353       temp_rhs.shiftSignificandLeft(1);
+<a name="l01354"></a>01354       reverse = <span class="keyword">true</span>;
+<a name="l01355"></a>01355     }
+<a name="l01356"></a>01356 
+<a name="l01357"></a>01357     <span class="keywordflow">if</span> (reverse) {
+<a name="l01358"></a>01358       carry = temp_rhs.subtractSignificand
+<a name="l01359"></a>01359         (*<span class="keyword">this</span>, lost_fraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>);
+<a name="l01360"></a>01360       copySignificand(temp_rhs);
+<a name="l01361"></a>01361       sign = !sign;
+<a name="l01362"></a>01362     } <span class="keywordflow">else</span> {
+<a name="l01363"></a>01363       carry = subtractSignificand
+<a name="l01364"></a>01364         (temp_rhs, lost_fraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>);
+<a name="l01365"></a>01365     }
+<a name="l01366"></a>01366 
+<a name="l01367"></a>01367     <span class="comment">/* Invert the lost fraction - it was on the RHS and</span>
+<a name="l01368"></a>01368 <span class="comment">       subtracted.  */</span>
+<a name="l01369"></a>01369     <span class="keywordflow">if</span> (lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a92e4eb4d28972e2a645ec9fdb438a938">lfLessThanHalf</a>)
+<a name="l01370"></a>01370       lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>;
+<a name="l01371"></a>01371     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a5226bdea6fa7e27519798741fdf3cda7">lfMoreThanHalf</a>)
+<a name="l01372"></a>01372       lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a92e4eb4d28972e2a645ec9fdb438a938">lfLessThanHalf</a>;
+<a name="l01373"></a>01373 
+<a name="l01374"></a>01374     <span class="comment">/* The code above is intended to ensure that no borrow is</span>
+<a name="l01375"></a>01375 <span class="comment">       necessary.  */</span>
+<a name="l01376"></a>01376     assert(!carry);
+<a name="l01377"></a>01377     (void)carry;
+<a name="l01378"></a>01378   } <span class="keywordflow">else</span> {
+<a name="l01379"></a>01379     <span class="keywordflow">if</span> (bits > 0) {
+<a name="l01380"></a>01380       <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> temp_rhs(rhs);
+<a name="l01381"></a>01381 
+<a name="l01382"></a>01382       lost_fraction = temp_rhs.shiftSignificandRight(bits);
+<a name="l01383"></a>01383       carry = addSignificand(temp_rhs);
+<a name="l01384"></a>01384     } <span class="keywordflow">else</span> {
+<a name="l01385"></a>01385       lost_fraction = shiftSignificandRight(-bits);
+<a name="l01386"></a>01386       carry = addSignificand(rhs);
+<a name="l01387"></a>01387     }
+<a name="l01388"></a>01388 
+<a name="l01389"></a>01389     <span class="comment">/* We have a guard bit; generating a carry cannot happen.  */</span>
+<a name="l01390"></a>01390     assert(!carry);
+<a name="l01391"></a>01391     (void)carry;
+<a name="l01392"></a>01392   }
+<a name="l01393"></a>01393 
+<a name="l01394"></a>01394   <span class="keywordflow">return</span> lost_fraction;
+<a name="l01395"></a>01395 }
+<a name="l01396"></a>01396 
+<a name="l01397"></a>01397 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01398"></a>01398 APFloat::multiplySpecials(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l01399"></a>01399 {
+<a name="l01400"></a>01400   <span class="keywordflow">switch</span> (<a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(category, rhs.category)) {
+<a name="l01401"></a>01401   <span class="keywordflow">default</span>:
+<a name="l01402"></a>01402     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(0);
+<a name="l01403"></a>01403 
+<a name="l01404"></a>01404   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01405"></a>01405   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01406"></a>01406   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01407"></a>01407   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01408"></a>01408     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01409"></a>01409 
+<a name="l01410"></a>01410   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01411"></a>01411   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01412"></a>01412   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01413"></a>01413     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l01414"></a>01414     copySignificand(rhs);
+<a name="l01415"></a>01415     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01416"></a>01416 
+<a name="l01417"></a>01417   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01418"></a>01418   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01419"></a>01419   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01420"></a>01420     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l01421"></a>01421     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01422"></a>01422 
+<a name="l01423"></a>01423   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01424"></a>01424   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01425"></a>01425   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01426"></a>01426     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l01427"></a>01427     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01428"></a>01428 
+<a name="l01429"></a>01429   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01430"></a>01430   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01431"></a>01431     makeNaN();
+<a name="l01432"></a>01432     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l01433"></a>01433 
+<a name="l01434"></a>01434   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01435"></a>01435     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01436"></a>01436   }
+<a name="l01437"></a>01437 }
+<a name="l01438"></a>01438 
+<a name="l01439"></a>01439 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01440"></a>01440 APFloat::divideSpecials(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l01441"></a>01441 {
+<a name="l01442"></a>01442   <span class="keywordflow">switch</span> (<a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(category, rhs.category)) {
+<a name="l01443"></a>01443   <span class="keywordflow">default</span>:
+<a name="l01444"></a>01444     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(0);
+<a name="l01445"></a>01445 
+<a name="l01446"></a>01446   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01447"></a>01447   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01448"></a>01448   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01449"></a>01449   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01450"></a>01450   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01451"></a>01451   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01452"></a>01452   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01453"></a>01453   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01454"></a>01454     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01455"></a>01455 
+<a name="l01456"></a>01456   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01457"></a>01457   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01458"></a>01458   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01459"></a>01459     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l01460"></a>01460     copySignificand(rhs);
+<a name="l01461"></a>01461     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01462"></a>01462 
+<a name="l01463"></a>01463   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01464"></a>01464     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l01465"></a>01465     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01466"></a>01466 
+<a name="l01467"></a>01467   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01468"></a>01468     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l01469"></a>01469     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a82b7dae15b57d873d3e2ca430de50e2d">opDivByZero</a>;
+<a name="l01470"></a>01470 
+<a name="l01471"></a>01471   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01472"></a>01472   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01473"></a>01473     makeNaN();
+<a name="l01474"></a>01474     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l01475"></a>01475 
+<a name="l01476"></a>01476   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01477"></a>01477     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01478"></a>01478   }
+<a name="l01479"></a>01479 }
+<a name="l01480"></a>01480 
+<a name="l01481"></a>01481 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01482"></a>01482 APFloat::modSpecials(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l01483"></a>01483 {
+<a name="l01484"></a>01484   <span class="keywordflow">switch</span> (<a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(category, rhs.category)) {
+<a name="l01485"></a>01485   <span class="keywordflow">default</span>:
+<a name="l01486"></a>01486     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(0);
+<a name="l01487"></a>01487 
+<a name="l01488"></a>01488   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01489"></a>01489   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01490"></a>01490   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01491"></a>01491   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01492"></a>01492   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01493"></a>01493   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01494"></a>01494   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01495"></a>01495     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01496"></a>01496 
+<a name="l01497"></a>01497   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01498"></a>01498   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01499"></a>01499   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01500"></a>01500     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l01501"></a>01501     copySignificand(rhs);
+<a name="l01502"></a>01502     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01503"></a>01503 
+<a name="l01504"></a>01504   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01505"></a>01505   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01506"></a>01506   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01507"></a>01507   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01508"></a>01508   case <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01509"></a>01509     makeNaN();
+<a name="l01510"></a>01510     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l01511"></a>01511 
+<a name="l01512"></a>01512   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01513"></a>01513     return <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01514"></a>01514   }
+<a name="l01515"></a>01515 }
+<a name="l01516"></a>01516 
+<a name="l01517"></a>01517 <span class="comment">/* Change sign.  */</span>
+<a name="l01518"></a>01518 <span class="keywordtype">void</span>
+<a name="l01519"></a><a class="code" href="classllvm_1_1APFloat.html#ab5131b6b960e5e4687016d5b6f64069b">01519</a> <a class="code" href="classllvm_1_1APFloat.html#ab5131b6b960e5e4687016d5b6f64069b">APFloat::changeSign</a>()
+<a name="l01520"></a>01520 {
+<a name="l01521"></a>01521   <span class="comment">/* Look mummy, this one's easy.  */</span>
+<a name="l01522"></a>01522   sign = !sign;
+<a name="l01523"></a>01523 }
+<a name="l01524"></a>01524 
+<a name="l01525"></a>01525 <span class="keywordtype">void</span>
+<a name="l01526"></a><a class="code" href="classllvm_1_1APFloat.html#af446a362b3f76186bbad24f269c3352b">01526</a> <a class="code" href="classllvm_1_1APFloat.html#af446a362b3f76186bbad24f269c3352b">APFloat::clearSign</a>()
+<a name="l01527"></a>01527 {
+<a name="l01528"></a>01528   <span class="comment">/* So is this one. */</span>
+<a name="l01529"></a>01529   sign = 0;
+<a name="l01530"></a>01530 }
+<a name="l01531"></a>01531 
+<a name="l01532"></a>01532 <span class="keywordtype">void</span>
+<a name="l01533"></a><a class="code" href="classllvm_1_1APFloat.html#ad2bcfec23bb7a4e8f7d27426728a6cad">01533</a> <a class="code" href="classllvm_1_1APFloat.html#ad2bcfec23bb7a4e8f7d27426728a6cad">APFloat::copySign</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l01534"></a>01534 {
+<a name="l01535"></a>01535   <span class="comment">/* And this one. */</span>
+<a name="l01536"></a>01536   sign = rhs.sign;
+<a name="l01537"></a>01537 }
+<a name="l01538"></a>01538 
+<a name="l01539"></a>01539 <span class="comment">/* Normalized addition or subtraction.  */</span>
+<a name="l01540"></a>01540 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01541"></a>01541 APFloat::addOrSubtract(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, roundingMode rounding_mode,
+<a name="l01542"></a>01542                        <span class="keywordtype">bool</span> subtract)
+<a name="l01543"></a>01543 {
+<a name="l01544"></a>01544   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l01545"></a>01545 
+<a name="l01546"></a>01546   fs = addOrSubtractSpecials(rhs, subtract);
+<a name="l01547"></a>01547 
+<a name="l01548"></a>01548   <span class="comment">/* This return code means it was not a simple case.  */</span>
+<a name="l01549"></a>01549   <span class="keywordflow">if</span> (fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a82b7dae15b57d873d3e2ca430de50e2d">opDivByZero</a>) {
+<a name="l01550"></a>01550     <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction;
+<a name="l01551"></a>01551 
+<a name="l01552"></a>01552     lost_fraction = addOrSubtractSignificand(rhs, subtract);
+<a name="l01553"></a>01553     fs = normalize(rounding_mode, lost_fraction);
+<a name="l01554"></a>01554 
+<a name="l01555"></a>01555     <span class="comment">/* Can only be zero if we lost no fraction.  */</span>
+<a name="l01556"></a>01556     assert(category != <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a> || lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>);
+<a name="l01557"></a>01557   }
+<a name="l01558"></a>01558 
+<a name="l01559"></a>01559   <span class="comment">/* If two numbers add (exactly) to zero, IEEE 754 decrees it is a</span>
+<a name="l01560"></a>01560 <span class="comment">     positive zero unless rounding to minus infinity, except that</span>
+<a name="l01561"></a>01561 <span class="comment">     adding two like-signed zeroes gives that zero.  */</span>
+<a name="l01562"></a>01562   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>) {
+<a name="l01563"></a>01563     <span class="keywordflow">if</span> (rhs.category != <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a> || (sign == rhs.sign) == subtract)
+<a name="l01564"></a>01564       sign = (rounding_mode == <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea5912a32e72de457e007529c4ed74221d">rmTowardNegative</a>);
+<a name="l01565"></a>01565   }
+<a name="l01566"></a>01566 
+<a name="l01567"></a>01567   <span class="keywordflow">return</span> fs;
+<a name="l01568"></a>01568 }
+<a name="l01569"></a>01569 
+<a name="l01570"></a>01570 <span class="comment">/* Normalized addition.  */</span>
+<a name="l01571"></a>01571 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01572"></a><a class="code" href="classllvm_1_1APFloat.html#a8c2e1efe8d928179051cf852405f3fff">01572</a> <a class="code" href="classllvm_1_1APFloat.html#a8c2e1efe8d928179051cf852405f3fff">APFloat::add</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l01573"></a>01573 {
+<a name="l01574"></a>01574   <span class="keywordflow">return</span> addOrSubtract(rhs, rounding_mode, <span class="keyword">false</span>);
+<a name="l01575"></a>01575 }
+<a name="l01576"></a>01576 
+<a name="l01577"></a>01577 <span class="comment">/* Normalized subtraction.  */</span>
+<a name="l01578"></a>01578 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01579"></a><a class="code" href="classllvm_1_1APFloat.html#a7578f9a82a4ae3c7f4d2ac7cad91f24f">01579</a> <a class="code" href="classllvm_1_1APFloat.html#a7578f9a82a4ae3c7f4d2ac7cad91f24f">APFloat::subtract</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l01580"></a>01580 {
+<a name="l01581"></a>01581   <span class="keywordflow">return</span> addOrSubtract(rhs, rounding_mode, <span class="keyword">true</span>);
+<a name="l01582"></a>01582 }
+<a name="l01583"></a>01583 
+<a name="l01584"></a>01584 <span class="comment">/* Normalized multiply.  */</span>
+<a name="l01585"></a>01585 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01586"></a><a class="code" href="classllvm_1_1APFloat.html#abb4696c1a55081dea6ccf5269d51ea7d">01586</a> <a class="code" href="classllvm_1_1APFloat.html#abb4696c1a55081dea6ccf5269d51ea7d">APFloat::multiply</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l01587"></a>01587 {
+<a name="l01588"></a>01588   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l01589"></a>01589 
+<a name="l01590"></a>01590   sign ^= rhs.sign;
+<a name="l01591"></a>01591   fs = multiplySpecials(rhs);
+<a name="l01592"></a>01592 
+<a name="l01593"></a>01593   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l01594"></a>01594     <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction = multiplySignificand(rhs, 0);
+<a name="l01595"></a>01595     fs = normalize(rounding_mode, lost_fraction);
+<a name="l01596"></a>01596     <span class="keywordflow">if</span> (lost_fraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>)
+<a name="l01597"></a>01597       fs = (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a>) (fs | <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);
+<a name="l01598"></a>01598   }
+<a name="l01599"></a>01599 
+<a name="l01600"></a>01600   <span class="keywordflow">return</span> fs;
+<a name="l01601"></a>01601 }
+<a name="l01602"></a>01602 
+<a name="l01603"></a>01603 <span class="comment">/* Normalized divide.  */</span>
+<a name="l01604"></a>01604 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01605"></a><a class="code" href="classllvm_1_1APFloat.html#a7b22f406d0d5381bae105045caca60ea">01605</a> <a class="code" href="classllvm_1_1APFloat.html#a7b22f406d0d5381bae105045caca60ea">APFloat::divide</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l01606"></a>01606 {
+<a name="l01607"></a>01607   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l01608"></a>01608 
+<a name="l01609"></a>01609   sign ^= rhs.sign;
+<a name="l01610"></a>01610   fs = divideSpecials(rhs);
+<a name="l01611"></a>01611 
+<a name="l01612"></a>01612   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l01613"></a>01613     <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction = divideSignificand(rhs);
+<a name="l01614"></a>01614     fs = normalize(rounding_mode, lost_fraction);
+<a name="l01615"></a>01615     <span class="keywordflow">if</span> (lost_fraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>)
+<a name="l01616"></a>01616       fs = (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a>) (fs | <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);
+<a name="l01617"></a>01617   }
+<a name="l01618"></a>01618 
+<a name="l01619"></a>01619   <span class="keywordflow">return</span> fs;
+<a name="l01620"></a>01620 }
+<a name="l01621"></a>01621 
+<a name="l01622"></a>01622 <span class="comment">/* Normalized remainder.  This is not currently correct in all cases.  */</span>
+<a name="l01623"></a>01623 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01624"></a><a class="code" href="classllvm_1_1APFloat.html#af69577ad3abaf55c2cf999763956be03">01624</a> <a class="code" href="classllvm_1_1APFloat.html#af69577ad3abaf55c2cf999763956be03">APFloat::remainder</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)
+<a name="l01625"></a>01625 {
+<a name="l01626"></a>01626   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l01627"></a>01627   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> V = *<span class="keyword">this</span>;
+<a name="l01628"></a>01628   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> origSign = sign;
+<a name="l01629"></a>01629 
+<a name="l01630"></a>01630   fs = V.<a class="code" href="classllvm_1_1APFloat.html#a7b22f406d0d5381bae105045caca60ea">divide</a>(rhs, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l01631"></a>01631   <span class="keywordflow">if</span> (fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a82b7dae15b57d873d3e2ca430de50e2d">opDivByZero</a>)
+<a name="l01632"></a>01632     <span class="keywordflow">return</span> fs;
+<a name="l01633"></a>01633 
+<a name="l01634"></a>01634   <span class="keywordtype">int</span> parts = partCount();
+<a name="l01635"></a>01635   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *x = <span class="keyword">new</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>[parts];
+<a name="l01636"></a>01636   <span class="keywordtype">bool</span> ignored;
+<a name="l01637"></a>01637   fs = V.<a class="code" href="classllvm_1_1APFloat.html#a796301cd33da892bb1971f3d03e36cb6">convertToInteger</a>(x, parts * <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>, <span class="keyword">true</span>,
+<a name="l01638"></a>01638                           <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>, &ignored);
+<a name="l01639"></a>01639   <span class="keywordflow">if</span> (fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>)
+<a name="l01640"></a>01640     <span class="keywordflow">return</span> fs;
+<a name="l01641"></a>01641 
+<a name="l01642"></a>01642   fs = V.<a class="code" href="classllvm_1_1APFloat.html#a5d622e69958a2ec2b141f3fd21f2bc16">convertFromZeroExtendedInteger</a>(x, parts * integerPartWidth, <span class="keyword">true</span>,
+<a name="l01643"></a>01643                                         <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l01644"></a>01644   assert(fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>);   <span class="comment">// should always work</span>
+<a name="l01645"></a>01645 
+<a name="l01646"></a>01646   fs = V.<a class="code" href="classllvm_1_1APFloat.html#abb4696c1a55081dea6ccf5269d51ea7d">multiply</a>(rhs, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l01647"></a>01647   assert(fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> || fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);   <span class="comment">// should not overflow or underflow</span>
+<a name="l01648"></a>01648 
+<a name="l01649"></a>01649   fs = <a class="code" href="classllvm_1_1APFloat.html#a7578f9a82a4ae3c7f4d2ac7cad91f24f">subtract</a>(V, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l01650"></a>01650   assert(fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> || fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);   <span class="comment">// likewise</span>
+<a name="l01651"></a>01651 
+<a name="l01652"></a>01652   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APFloat.html#a30b29f2be19eb73f6225de032a1fafb3">isZero</a>())
+<a name="l01653"></a>01653     sign = origSign;    <span class="comment">// IEEE754 requires this</span>
+<a name="l01654"></a>01654   <span class="keyword">delete</span>[] x;
+<a name="l01655"></a>01655   <span class="keywordflow">return</span> fs;
+<a name="l01656"></a>01656 }
+<a name="l01657"></a>01657 
+<a name="l01658"></a>01658 <span class="comment">/* Normalized llvm frem (C fmod).</span>
+<a name="l01659"></a>01659 <span class="comment">   This is not currently correct in all cases.  */</span>
+<a name="l01660"></a>01660 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01661"></a><a class="code" href="classllvm_1_1APFloat.html#a83b4800438a41f40863a7b3ef9613386">01661</a> <a class="code" href="classllvm_1_1APFloat.html#a83b4800438a41f40863a7b3ef9613386">APFloat::mod</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l01662"></a>01662 {
+<a name="l01663"></a>01663   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l01664"></a>01664   fs = modSpecials(rhs);
+<a name="l01665"></a>01665 
+<a name="l01666"></a>01666   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> && rhs.category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l01667"></a>01667     <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> V = *<span class="keyword">this</span>;
+<a name="l01668"></a>01668     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> origSign = sign;
+<a name="l01669"></a>01669 
+<a name="l01670"></a>01670     fs = V.<a class="code" href="classllvm_1_1APFloat.html#a7b22f406d0d5381bae105045caca60ea">divide</a>(rhs, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l01671"></a>01671     <span class="keywordflow">if</span> (fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a82b7dae15b57d873d3e2ca430de50e2d">opDivByZero</a>)
+<a name="l01672"></a>01672       <span class="keywordflow">return</span> fs;
+<a name="l01673"></a>01673 
+<a name="l01674"></a>01674     <span class="keywordtype">int</span> parts = partCount();
+<a name="l01675"></a>01675     <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *x = <span class="keyword">new</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>[parts];
+<a name="l01676"></a>01676     <span class="keywordtype">bool</span> ignored;
+<a name="l01677"></a>01677     fs = V.<a class="code" href="classllvm_1_1APFloat.html#a796301cd33da892bb1971f3d03e36cb6">convertToInteger</a>(x, parts * <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>, <span class="keyword">true</span>,
+<a name="l01678"></a>01678                             <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea4cc5d58ded2d49317f9cc2315a3a09ec">rmTowardZero</a>, &ignored);
+<a name="l01679"></a>01679     <span class="keywordflow">if</span> (fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>)
+<a name="l01680"></a>01680       <span class="keywordflow">return</span> fs;
+<a name="l01681"></a>01681 
+<a name="l01682"></a>01682     fs = V.<a class="code" href="classllvm_1_1APFloat.html#a5d622e69958a2ec2b141f3fd21f2bc16">convertFromZeroExtendedInteger</a>(x, parts * integerPartWidth, <span class="keyword">true</span>,
+<a name="l01683"></a>01683                                           <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l01684"></a>01684     assert(fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>);   <span class="comment">// should always work</span>
+<a name="l01685"></a>01685 
+<a name="l01686"></a>01686     fs = V.<a class="code" href="classllvm_1_1APFloat.html#abb4696c1a55081dea6ccf5269d51ea7d">multiply</a>(rhs, rounding_mode);
+<a name="l01687"></a>01687     assert(fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> || fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);   <span class="comment">// should not overflow or underflow</span>
+<a name="l01688"></a>01688 
+<a name="l01689"></a>01689     fs = <a class="code" href="classllvm_1_1APFloat.html#a7578f9a82a4ae3c7f4d2ac7cad91f24f">subtract</a>(V, rounding_mode);
+<a name="l01690"></a>01690     assert(fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> || fs==<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);   <span class="comment">// likewise</span>
+<a name="l01691"></a>01691 
+<a name="l01692"></a>01692     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APFloat.html#a30b29f2be19eb73f6225de032a1fafb3">isZero</a>())
+<a name="l01693"></a>01693       sign = origSign;    <span class="comment">// IEEE754 requires this</span>
+<a name="l01694"></a>01694     <span class="keyword">delete</span>[] x;
+<a name="l01695"></a>01695   }
+<a name="l01696"></a>01696   <span class="keywordflow">return</span> fs;
+<a name="l01697"></a>01697 }
+<a name="l01698"></a>01698 
+<a name="l01699"></a>01699 <span class="comment">/* Normalized fused-multiply-add.  */</span>
+<a name="l01700"></a>01700 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01701"></a><a class="code" href="classllvm_1_1APFloat.html#af6c6144719863ca10aa51be09615b22b">01701</a> <a class="code" href="classllvm_1_1APFloat.html#af6c6144719863ca10aa51be09615b22b">APFloat::fusedMultiplyAdd</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &multiplicand,
+<a name="l01702"></a>01702                           <span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &addend,
+<a name="l01703"></a>01703                           <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l01704"></a>01704 {
+<a name="l01705"></a>01705   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l01706"></a>01706 
+<a name="l01707"></a>01707   <span class="comment">/* Post-multiplication sign, before addition.  */</span>
+<a name="l01708"></a>01708   sign ^= multiplicand.sign;
+<a name="l01709"></a>01709 
+<a name="l01710"></a>01710   <span class="comment">/* If and only if all arguments are normal do we need to do an</span>
+<a name="l01711"></a>01711 <span class="comment">     extended-precision calculation.  */</span>
+<a name="l01712"></a>01712   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> &&
+<a name="l01713"></a>01713       multiplicand.category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> &&
+<a name="l01714"></a>01714       addend.category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l01715"></a>01715     <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction;
+<a name="l01716"></a>01716 
+<a name="l01717"></a>01717     lost_fraction = multiplySignificand(multiplicand, &addend);
+<a name="l01718"></a>01718     fs = normalize(rounding_mode, lost_fraction);
+<a name="l01719"></a>01719     <span class="keywordflow">if</span> (lost_fraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>)
+<a name="l01720"></a>01720       fs = (<a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a>) (fs | <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);
+<a name="l01721"></a>01721 
+<a name="l01722"></a>01722     <span class="comment">/* If two numbers add (exactly) to zero, IEEE 754 decrees it is a</span>
+<a name="l01723"></a>01723 <span class="comment">       positive zero unless rounding to minus infinity, except that</span>
+<a name="l01724"></a>01724 <span class="comment">       adding two like-signed zeroes gives that zero.  */</span>
+<a name="l01725"></a>01725     <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a> && sign != addend.sign)
+<a name="l01726"></a>01726       sign = (rounding_mode == <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea5912a32e72de457e007529c4ed74221d">rmTowardNegative</a>);
+<a name="l01727"></a>01727   } <span class="keywordflow">else</span> {
+<a name="l01728"></a>01728     fs = multiplySpecials(multiplicand);
+<a name="l01729"></a>01729 
+<a name="l01730"></a>01730     <span class="comment">/* FS can only be opOK or opInvalidOp.  There is no more work</span>
+<a name="l01731"></a>01731 <span class="comment">       to do in the latter case.  The IEEE-754R standard says it is</span>
+<a name="l01732"></a>01732 <span class="comment">       implementation-defined in this case whether, if ADDEND is a</span>
+<a name="l01733"></a>01733 <span class="comment">       quiet NaN, we raise invalid op; this implementation does so.</span>
+<a name="l01734"></a>01734 <span class="comment"></span>
+<a name="l01735"></a>01735 <span class="comment">       If we need to do the addition we can do so with normal</span>
+<a name="l01736"></a>01736 <span class="comment">       precision.  */</span>
+<a name="l01737"></a>01737     <span class="keywordflow">if</span> (fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>)
+<a name="l01738"></a>01738       fs = addOrSubtract(addend, rounding_mode, <span class="keyword">false</span>);
+<a name="l01739"></a>01739   }
+<a name="l01740"></a>01740 
+<a name="l01741"></a>01741   <span class="keywordflow">return</span> fs;
+<a name="l01742"></a>01742 }
+<a name="l01743"></a>01743 
+<a name="l01744"></a>01744 <span class="comment">/* Rounding-mode corrrect round to integral value.  */</span>
+<a name="l01745"></a><a class="code" href="classllvm_1_1APFloat.html#a6ed423a156aae77bf5c1f560c998d9b4">01745</a> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a> <a class="code" href="classllvm_1_1APFloat.html#a6ed423a156aae77bf5c1f560c998d9b4">APFloat::roundToIntegral</a>(<a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode) {
+<a name="l01746"></a>01746   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l01747"></a>01747 
+<a name="l01748"></a>01748   <span class="comment">// If the exponent is large enough, we know that this value is already</span>
+<a name="l01749"></a>01749   <span class="comment">// integral, and the arithmetic below would potentially cause it to saturate</span>
+<a name="l01750"></a>01750   <span class="comment">// to +/-Inf.  Bail out early instead.</span>
+<a name="l01751"></a>01751   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> && exponent+1 >= (<span class="keywordtype">int</span>)<a class="code" href="classllvm_1_1APFloat.html#a8ea88db77f6159f4f8215b0867dc3fc3">semanticsPrecision</a>(*semantics))
+<a name="l01752"></a>01752     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01753"></a>01753 
+<a name="l01754"></a>01754   <span class="comment">// The algorithm here is quite simple: we add 2^(p-1), where p is the</span>
+<a name="l01755"></a>01755   <span class="comment">// precision of our format, and then subtract it back off again.  The choice</span>
+<a name="l01756"></a>01756   <span class="comment">// of rounding modes for the addition/subtraction determines the rounding mode</span>
+<a name="l01757"></a>01757   <span class="comment">// for our integral rounding as well.</span>
+<a name="l01758"></a>01758   <span class="comment">// NOTE: When the input value is negative, we do subtraction followed by</span>
+<a name="l01759"></a>01759   <span class="comment">// addition instead.</span>
+<a name="l01760"></a>01760   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> IntegerConstant(<a class="code" href="namespacellvm.html#a0490c32aa8dd63ddc56bb046fd0258c7">NextPowerOf2</a>(<a class="code" href="classllvm_1_1APFloat.html#a8ea88db77f6159f4f8215b0867dc3fc3">semanticsPrecision</a>(*semantics)), 1);
+<a name="l01761"></a>01761   IntegerConstant <<= <a class="code" href="classllvm_1_1APFloat.html#a8ea88db77f6159f4f8215b0867dc3fc3">semanticsPrecision</a>(*semantics)-1;
+<a name="l01762"></a>01762   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> MagicConstant(*semantics);
+<a name="l01763"></a>01763   fs = MagicConstant.<a class="code" href="classllvm_1_1APFloat.html#a768aa39cef837274da386788b7294ffe">convertFromAPInt</a>(IntegerConstant, <span class="keyword">false</span>,
+<a name="l01764"></a>01764                                       <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l01765"></a>01765   MagicConstant.<a class="code" href="classllvm_1_1APFloat.html#ad2bcfec23bb7a4e8f7d27426728a6cad">copySign</a>(*<span class="keyword">this</span>);
+<a name="l01766"></a>01766 
+<a name="l01767"></a>01767   <span class="keywordflow">if</span> (fs != <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>)
+<a name="l01768"></a>01768     <span class="keywordflow">return</span> fs;
+<a name="l01769"></a>01769 
+<a name="l01770"></a>01770   <span class="comment">// Preserve the input sign so that we can handle 0.0/-0.0 cases correctly.</span>
+<a name="l01771"></a>01771   <span class="keywordtype">bool</span> inputSign = <a class="code" href="classllvm_1_1APFloat.html#aec02d46854c76f20a6da7002e390f612">isNegative</a>();
+<a name="l01772"></a>01772 
+<a name="l01773"></a>01773   fs = <a class="code" href="classllvm_1_1APFloat.html#a8c2e1efe8d928179051cf852405f3fff">add</a>(MagicConstant, rounding_mode);
+<a name="l01774"></a>01774   <span class="keywordflow">if</span> (fs != <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> && fs != <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>)
+<a name="l01775"></a>01775     <span class="keywordflow">return</span> fs;
+<a name="l01776"></a>01776 
+<a name="l01777"></a>01777   fs = <a class="code" href="classllvm_1_1APFloat.html#a7578f9a82a4ae3c7f4d2ac7cad91f24f">subtract</a>(MagicConstant, rounding_mode);
+<a name="l01778"></a>01778 
+<a name="l01779"></a>01779   <span class="comment">// Restore the input sign.</span>
+<a name="l01780"></a>01780   <span class="keywordflow">if</span> (inputSign != <a class="code" href="classllvm_1_1APFloat.html#aec02d46854c76f20a6da7002e390f612">isNegative</a>())
+<a name="l01781"></a>01781     <a class="code" href="classllvm_1_1APFloat.html#ab5131b6b960e5e4687016d5b6f64069b">changeSign</a>();
+<a name="l01782"></a>01782 
+<a name="l01783"></a>01783   <span class="keywordflow">return</span> fs;
+<a name="l01784"></a>01784 }
+<a name="l01785"></a>01785 
+<a name="l01786"></a>01786 
+<a name="l01787"></a>01787 <span class="comment">/* Comparison requires normalized numbers.  */</span>
+<a name="l01788"></a>01788 <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4ba">APFloat::cmpResult</a>
+<a name="l01789"></a><a class="code" href="classllvm_1_1APFloat.html#aaf5c2c00b5485b2f34bf776e73e88394">01789</a> <a class="code" href="classllvm_1_1APFloat.html#aaf5c2c00b5485b2f34bf776e73e88394">APFloat::compare</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &rhs)<span class="keyword"> const</span>
+<a name="l01790"></a>01790 <span class="keyword"></span>{
+<a name="l01791"></a>01791   <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4ba">cmpResult</a> result;
+<a name="l01792"></a>01792 
+<a name="l01793"></a>01793   assert(semantics == rhs.semantics);
+<a name="l01794"></a>01794 
+<a name="l01795"></a>01795   <span class="keywordflow">switch</span> (<a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(category, rhs.category)) {
+<a name="l01796"></a>01796   <span class="keywordflow">default</span>:
+<a name="l01797"></a>01797     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(0);
+<a name="l01798"></a>01798 
+<a name="l01799"></a>01799   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01800"></a>01800   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01801"></a>01801   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01802"></a>01802   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01803"></a>01803   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01804"></a>01804   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01805"></a>01805   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>):
+<a name="l01806"></a>01806     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baa9bfa0ee561ee1c7bd3e3c0228dcec62e">cmpUnordered</a>;
+<a name="l01807"></a>01807 
+<a name="l01808"></a>01808   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01809"></a>01809   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01810"></a>01810   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01811"></a>01811     <span class="keywordflow">if</span> (sign)
+<a name="l01812"></a>01812       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baae8d0bbef93c1e19af24b10315c856b53">cmpLessThan</a>;
+<a name="l01813"></a>01813     <span class="keywordflow">else</span>
+<a name="l01814"></a>01814       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baad5181e718678de7d5b9f9ad82b4ecaba">cmpGreaterThan</a>;
+<a name="l01815"></a>01815 
+<a name="l01816"></a>01816   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01817"></a>01817   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01818"></a>01818   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01819"></a>01819     <span class="keywordflow">if</span> (rhs.sign)
+<a name="l01820"></a>01820       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baad5181e718678de7d5b9f9ad82b4ecaba">cmpGreaterThan</a>;
+<a name="l01821"></a>01821     <span class="keywordflow">else</span>
+<a name="l01822"></a>01822       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baae8d0bbef93c1e19af24b10315c856b53">cmpLessThan</a>;
+<a name="l01823"></a>01823 
+<a name="l01824"></a>01824   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>):
+<a name="l01825"></a>01825     <span class="keywordflow">if</span> (sign == rhs.sign)
+<a name="l01826"></a>01826       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baac163f79a17485fc69a8f0d6f887ec4fa">cmpEqual</a>;
+<a name="l01827"></a>01827     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sign)
+<a name="l01828"></a>01828       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baae8d0bbef93c1e19af24b10315c856b53">cmpLessThan</a>;
+<a name="l01829"></a>01829     <span class="keywordflow">else</span>
+<a name="l01830"></a>01830       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baad5181e718678de7d5b9f9ad82b4ecaba">cmpGreaterThan</a>;
+<a name="l01831"></a>01831 
+<a name="l01832"></a>01832   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>):
+<a name="l01833"></a>01833     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baac163f79a17485fc69a8f0d6f887ec4fa">cmpEqual</a>;
+<a name="l01834"></a>01834 
+<a name="l01835"></a>01835   <span class="keywordflow">case</span> <a class="code" href="APFloat_8cpp.html#a1f7f8e5499fb648acea53c59135d56df">convolve</a>(<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>):
+<a name="l01836"></a>01836     <span class="keywordflow">break</span>;
+<a name="l01837"></a>01837   }
+<a name="l01838"></a>01838 
+<a name="l01839"></a>01839   <span class="comment">/* Two normal numbers.  Do they have the same sign?  */</span>
+<a name="l01840"></a>01840   <span class="keywordflow">if</span> (sign != rhs.sign) {
+<a name="l01841"></a>01841     <span class="keywordflow">if</span> (sign)
+<a name="l01842"></a>01842       result = <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baae8d0bbef93c1e19af24b10315c856b53">cmpLessThan</a>;
+<a name="l01843"></a>01843     <span class="keywordflow">else</span>
+<a name="l01844"></a>01844       result = <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baad5181e718678de7d5b9f9ad82b4ecaba">cmpGreaterThan</a>;
+<a name="l01845"></a>01845   } <span class="keywordflow">else</span> {
+<a name="l01846"></a>01846     <span class="comment">/* Compare absolute values; invert result if negative.  */</span>
+<a name="l01847"></a>01847     result = compareAbsoluteValue(rhs);
+<a name="l01848"></a>01848 
+<a name="l01849"></a>01849     <span class="keywordflow">if</span> (sign) {
+<a name="l01850"></a>01850       <span class="keywordflow">if</span> (result == <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baae8d0bbef93c1e19af24b10315c856b53">cmpLessThan</a>)
+<a name="l01851"></a>01851         result = <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baad5181e718678de7d5b9f9ad82b4ecaba">cmpGreaterThan</a>;
+<a name="l01852"></a>01852       <span class="keywordflow">else</span> <span class="keywordflow">if</span> (result == <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baad5181e718678de7d5b9f9ad82b4ecaba">cmpGreaterThan</a>)
+<a name="l01853"></a>01853         result = <a class="code" href="classllvm_1_1APFloat.html#a4e23a3f51df9950595056234827ca4baae8d0bbef93c1e19af24b10315c856b53">cmpLessThan</a>;
+<a name="l01854"></a>01854     }
+<a name="l01855"></a>01855   }
+<a name="l01856"></a>01856 
+<a name="l01857"></a>01857   <span class="keywordflow">return</span> result;
+<a name="l01858"></a>01858 }
+<a name="l01859"></a>01859 <span class="comment"></span>
+<a name="l01860"></a>01860 <span class="comment">/// APFloat::convert - convert a value of one floating point type to another.</span>
+<a name="l01861"></a>01861 <span class="comment">/// The return value corresponds to the IEEE754 exceptions.  *losesInfo</span>
+<a name="l01862"></a>01862 <span class="comment">/// records whether the transformation lost information, i.e. whether</span>
+<a name="l01863"></a>01863 <span class="comment">/// converting the result back to the original type will produce the</span>
+<a name="l01864"></a>01864 <span class="comment">/// original value (this is almost the same as return value==fsOK, but there</span>
+<a name="l01865"></a>01865 <span class="comment">/// are edge cases where this is not so).</span>
+<a name="l01866"></a>01866 <span class="comment"></span>
+<a name="l01867"></a>01867 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01868"></a><a class="code" href="classllvm_1_1APFloat.html#a4fa2f1464bb4f645082d8aa0e0a9bc0e">01868</a> <a class="code" href="classllvm_1_1APFloat.html#a4fa2f1464bb4f645082d8aa0e0a9bc0e">APFloat::convert</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &toSemantics,
+<a name="l01869"></a>01869                  <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode, <span class="keywordtype">bool</span> *losesInfo)
+<a name="l01870"></a>01870 {
+<a name="l01871"></a>01871   <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a>;
+<a name="l01872"></a>01872   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> newPartCount, oldPartCount;
+<a name="l01873"></a>01873   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l01874"></a>01874   <span class="keywordtype">int</span> shift;
+<a name="l01875"></a>01875   <span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &fromSemantics = *semantics;
+<a name="l01876"></a>01876 
+<a name="l01877"></a>01877   lostFraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>;
+<a name="l01878"></a>01878   newPartCount = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(toSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> + 1);
+<a name="l01879"></a>01879   oldPartCount = partCount();
+<a name="l01880"></a>01880   shift = toSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - fromSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l01881"></a>01881 
+<a name="l01882"></a>01882   <span class="keywordtype">bool</span> X86SpecialNan = <span class="keyword">false</span>;
+<a name="l01883"></a>01883   <span class="keywordflow">if</span> (&fromSemantics == &<a class="code" href="classllvm_1_1APFloat.html#a8fb913b1bed6dfe011696fe4e287ca70">APFloat::x87DoubleExtended</a> &&
+<a name="l01884"></a>01884       &toSemantics != &<a class="code" href="classllvm_1_1APFloat.html#a8fb913b1bed6dfe011696fe4e287ca70">APFloat::x87DoubleExtended</a> && category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a> &&
+<a name="l01885"></a>01885       (!(*significandParts() & 0x8000000000000000ULL) ||
+<a name="l01886"></a>01886        !(*significandParts() & 0x4000000000000000ULL))) {
+<a name="l01887"></a>01887     <span class="comment">// x86 has some unusual NaNs which cannot be represented in any other</span>
+<a name="l01888"></a>01888     <span class="comment">// format; note them here.</span>
+<a name="l01889"></a>01889     X86SpecialNan = <span class="keyword">true</span>;
+<a name="l01890"></a>01890   }
+<a name="l01891"></a>01891 
+<a name="l01892"></a>01892   <span class="comment">// If this is a truncation, perform the shift before we narrow the storage.</span>
+<a name="l01893"></a>01893   <span class="keywordflow">if</span> (shift < 0 && (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> || category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>))
+<a name="l01894"></a>01894     lostFraction = <a class="code" href="APFloat_8cpp.html#aa9b0da389e5fb14fc522819904e4fa24">shiftRight</a>(significandParts(), oldPartCount, -shift);
+<a name="l01895"></a>01895 
+<a name="l01896"></a>01896   <span class="comment">// Fix the storage so it can hold to new value.</span>
+<a name="l01897"></a>01897   <span class="keywordflow">if</span> (newPartCount > oldPartCount) {
+<a name="l01898"></a>01898     <span class="comment">// The new type requires more storage; make it available.</span>
+<a name="l01899"></a>01899     <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *newParts;
+<a name="l01900"></a>01900     newParts = <span class="keyword">new</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>[newPartCount];
+<a name="l01901"></a>01901     <a class="code" href="classllvm_1_1APInt.html#a8efff7af35067c51a3d9313e360701cf">APInt::tcSet</a>(newParts, 0, newPartCount);
+<a name="l01902"></a>01902     <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> || category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>)
+<a name="l01903"></a>01903       <a class="code" href="classllvm_1_1APInt.html#a0075077383b560290d112b29a155db08" title="Assign one bignum to another.">APInt::tcAssign</a>(newParts, significandParts(), oldPartCount);
+<a name="l01904"></a>01904     freeSignificand();
+<a name="l01905"></a>01905     significand.parts = newParts;
+<a name="l01906"></a>01906   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (newPartCount == 1 && oldPartCount != 1) {
+<a name="l01907"></a>01907     <span class="comment">// Switch to built-in storage for a single part.</span>
+<a name="l01908"></a>01908     <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> newPart = 0;
+<a name="l01909"></a>01909     <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> || category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>)
+<a name="l01910"></a>01910       newPart = significandParts()[0];
+<a name="l01911"></a>01911     freeSignificand();
+<a name="l01912"></a>01912     significand.part = newPart;
+<a name="l01913"></a>01913   }
+<a name="l01914"></a>01914 
+<a name="l01915"></a>01915   <span class="comment">// Now that we have the right storage, switch the semantics.</span>
+<a name="l01916"></a>01916   semantics = &toSemantics;
+<a name="l01917"></a>01917 
+<a name="l01918"></a>01918   <span class="comment">// If this is an extension, perform the shift now that the storage is</span>
+<a name="l01919"></a>01919   <span class="comment">// available.</span>
+<a name="l01920"></a>01920   <span class="keywordflow">if</span> (shift > 0 && (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> || category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>))
+<a name="l01921"></a>01921     <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(significandParts(), newPartCount, shift);
+<a name="l01922"></a>01922 
+<a name="l01923"></a>01923   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l01924"></a>01924     fs = normalize(rounding_mode, lostFraction);
+<a name="l01925"></a>01925     *losesInfo = (fs != <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>);
+<a name="l01926"></a>01926   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>) {
+<a name="l01927"></a>01927     *losesInfo = lostFraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a> || X86SpecialNan;
+<a name="l01928"></a>01928     <span class="comment">// gcc forces the Quiet bit on, which means (float)(double)(float_sNan)</span>
+<a name="l01929"></a>01929     <span class="comment">// does not give you back the same bits.  This is dubious, and we</span>
+<a name="l01930"></a>01930     <span class="comment">// don't currently do it.  You're really supposed to get</span>
+<a name="l01931"></a>01931     <span class="comment">// an invalid operation signal at runtime, but nobody does that.</span>
+<a name="l01932"></a>01932     fs = <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01933"></a>01933   } <span class="keywordflow">else</span> {
+<a name="l01934"></a>01934     *losesInfo = <span class="keyword">false</span>;
+<a name="l01935"></a>01935     fs = <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01936"></a>01936   }
+<a name="l01937"></a>01937 
+<a name="l01938"></a>01938   <span class="keywordflow">return</span> fs;
+<a name="l01939"></a>01939 }
+<a name="l01940"></a>01940 
+<a name="l01941"></a>01941 <span class="comment">/* Convert a floating point number to an integer according to the</span>
+<a name="l01942"></a>01942 <span class="comment">   rounding mode.  If the rounded integer value is out of range this</span>
+<a name="l01943"></a>01943 <span class="comment">   returns an invalid operation exception and the contents of the</span>
+<a name="l01944"></a>01944 <span class="comment">   destination parts are unspecified.  If the rounded value is in</span>
+<a name="l01945"></a>01945 <span class="comment">   range but the floating point number is not the exact integer, the C</span>
+<a name="l01946"></a>01946 <span class="comment">   standard doesn't require an inexact exception to be raised.  IEEE</span>
+<a name="l01947"></a>01947 <span class="comment">   854 does require it so we do that.</span>
+<a name="l01948"></a>01948 <span class="comment"></span>
+<a name="l01949"></a>01949 <span class="comment">   Note that for conversions to integer type the C standard requires</span>
+<a name="l01950"></a>01950 <span class="comment">   round-to-zero to always be used.  */</span>
+<a name="l01951"></a>01951 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l01952"></a>01952 APFloat::convertToSignExtendedInteger(<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *parts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width,
+<a name="l01953"></a>01953                                       <span class="keywordtype">bool</span> isSigned,
+<a name="l01954"></a>01954                                       roundingMode rounding_mode,
+<a name="l01955"></a>01955                                       <span class="keywordtype">bool</span> *isExact)<span class="keyword"> const</span>
+<a name="l01956"></a>01956 <span class="keyword"></span>{
+<a name="l01957"></a>01957   <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction;
+<a name="l01958"></a>01958   <span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *src;
+<a name="l01959"></a>01959   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> dstPartsCount, truncatedBits;
+<a name="l01960"></a>01960 
+<a name="l01961"></a>01961   *isExact = <span class="keyword">false</span>;
+<a name="l01962"></a>01962 
+<a name="l01963"></a>01963   <span class="comment">/* Handle the three special cases first.  */</span>
+<a name="l01964"></a>01964   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a> || category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>)
+<a name="l01965"></a>01965     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l01966"></a>01966 
+<a name="l01967"></a>01967   dstPartsCount = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(width);
+<a name="l01968"></a>01968 
+<a name="l01969"></a>01969   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>) {
+<a name="l01970"></a>01970     <a class="code" href="classllvm_1_1APInt.html#a8efff7af35067c51a3d9313e360701cf">APInt::tcSet</a>(parts, 0, dstPartsCount);
+<a name="l01971"></a>01971     <span class="comment">// Negative zero can't be represented as an int.</span>
+<a name="l01972"></a>01972     *isExact = !sign;
+<a name="l01973"></a>01973     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l01974"></a>01974   }
+<a name="l01975"></a>01975 
+<a name="l01976"></a>01976   src = significandParts();
+<a name="l01977"></a>01977 
+<a name="l01978"></a>01978   <span class="comment">/* Step 1: place our absolute value, with any fraction truncated, in</span>
+<a name="l01979"></a>01979 <span class="comment">     the destination.  */</span>
+<a name="l01980"></a>01980   <span class="keywordflow">if</span> (exponent < 0) {
+<a name="l01981"></a>01981     <span class="comment">/* Our absolute value is less than one; truncate everything.  */</span>
+<a name="l01982"></a>01982     <a class="code" href="classllvm_1_1APInt.html#a8efff7af35067c51a3d9313e360701cf">APInt::tcSet</a>(parts, 0, dstPartsCount);
+<a name="l01983"></a>01983     <span class="comment">/* For exponent -1 the integer bit represents .5, look at that.</span>
+<a name="l01984"></a>01984 <span class="comment">       For smaller exponents leftmost truncated bit is 0. */</span>
+<a name="l01985"></a>01985     truncatedBits = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> -1U - exponent;
+<a name="l01986"></a>01986   } <span class="keywordflow">else</span> {
+<a name="l01987"></a>01987     <span class="comment">/* We want the most significant (exponent + 1) bits; the rest are</span>
+<a name="l01988"></a>01988 <span class="comment">       truncated.  */</span>
+<a name="l01989"></a>01989     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits = exponent + 1U;
+<a name="l01990"></a>01990 
+<a name="l01991"></a>01991     <span class="comment">/* Hopelessly large in magnitude?  */</span>
+<a name="l01992"></a>01992     <span class="keywordflow">if</span> (bits > width)
+<a name="l01993"></a>01993       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l01994"></a>01994 
+<a name="l01995"></a>01995     <span class="keywordflow">if</span> (bits < semantics->precision) {
+<a name="l01996"></a>01996       <span class="comment">/* We truncate (semantics->precision - bits) bits.  */</span>
+<a name="l01997"></a>01997       truncatedBits = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - bits;
+<a name="l01998"></a>01998       <a class="code" href="classllvm_1_1APInt.html#a2ba89ff853f7bb8ea4862d17326426e4">APInt::tcExtract</a>(parts, dstPartsCount, src, bits, truncatedBits);
+<a name="l01999"></a>01999     } <span class="keywordflow">else</span> {
+<a name="l02000"></a>02000       <span class="comment">/* We want at least as many bits as are available.  */</span>
+<a name="l02001"></a>02001       <a class="code" href="classllvm_1_1APInt.html#a2ba89ff853f7bb8ea4862d17326426e4">APInt::tcExtract</a>(parts, dstPartsCount, src, semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>, 0);
+<a name="l02002"></a>02002       <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(parts, dstPartsCount, bits - semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>);
+<a name="l02003"></a>02003       truncatedBits = 0;
+<a name="l02004"></a>02004     }
+<a name="l02005"></a>02005   }
+<a name="l02006"></a>02006 
+<a name="l02007"></a>02007   <span class="comment">/* Step 2: work out any lost fraction, and increment the absolute</span>
+<a name="l02008"></a>02008 <span class="comment">     value if we would round away from zero.  */</span>
+<a name="l02009"></a>02009   <span class="keywordflow">if</span> (truncatedBits) {
+<a name="l02010"></a>02010     lost_fraction = <a class="code" href="APFloat_8cpp.html#abc47f2d3773defbbd5a684a71cbf2200">lostFractionThroughTruncation</a>(src, partCount(),
+<a name="l02011"></a>02011                                                   truncatedBits);
+<a name="l02012"></a>02012     <span class="keywordflow">if</span> (lost_fraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a> &&
+<a name="l02013"></a>02013         roundAwayFromZero(rounding_mode, lost_fraction, truncatedBits)) {
+<a name="l02014"></a>02014       <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APInt.html#ac09793e735cac4c8e8136dadd22ee725" title="Increment a bignum in-place. Return the carry flag.">APInt::tcIncrement</a>(parts, dstPartsCount))
+<a name="l02015"></a>02015         <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;     <span class="comment">/* Overflow.  */</span>
+<a name="l02016"></a>02016     }
+<a name="l02017"></a>02017   } <span class="keywordflow">else</span> {
+<a name="l02018"></a>02018     lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>;
+<a name="l02019"></a>02019   }
+<a name="l02020"></a>02020 
+<a name="l02021"></a>02021   <span class="comment">/* Step 3: check if we fit in the destination.  */</span>
+<a name="l02022"></a>02022   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> omsb = <a class="code" href="classllvm_1_1APInt.html#ada7408f27e25486804e9c4cbca9348e7">APInt::tcMSB</a>(parts, dstPartsCount) + 1;
+<a name="l02023"></a>02023 
+<a name="l02024"></a>02024   <span class="keywordflow">if</span> (sign) {
+<a name="l02025"></a>02025     <span class="keywordflow">if</span> (!isSigned) {
+<a name="l02026"></a>02026       <span class="comment">/* Negative numbers cannot be represented as unsigned.  */</span>
+<a name="l02027"></a>02027       <span class="keywordflow">if</span> (omsb != 0)
+<a name="l02028"></a>02028         <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l02029"></a>02029     } <span class="keywordflow">else</span> {
+<a name="l02030"></a>02030       <span class="comment">/* It takes omsb bits to represent the unsigned integer value.</span>
+<a name="l02031"></a>02031 <span class="comment">         We lose a bit for the sign, but care is needed as the</span>
+<a name="l02032"></a>02032 <span class="comment">         maximally negative integer is a special case.  */</span>
+<a name="l02033"></a>02033       <span class="keywordflow">if</span> (omsb == width && <a class="code" href="classllvm_1_1APInt.html#a08a1c76eb1face84272c736e6349562d">APInt::tcLSB</a>(parts, dstPartsCount) + 1 != omsb)
+<a name="l02034"></a>02034         <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l02035"></a>02035 
+<a name="l02036"></a>02036       <span class="comment">/* This case can happen because of rounding.  */</span>
+<a name="l02037"></a>02037       <span class="keywordflow">if</span> (omsb > width)
+<a name="l02038"></a>02038         <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l02039"></a>02039     }
+<a name="l02040"></a>02040 
+<a name="l02041"></a>02041     <a class="code" href="classllvm_1_1APInt.html#a921850a778a64dd3cd68b3f3b2e2b110" title="Negate a bignum in-place.">APInt::tcNegate</a> (parts, dstPartsCount);
+<a name="l02042"></a>02042   } <span class="keywordflow">else</span> {
+<a name="l02043"></a>02043     <span class="keywordflow">if</span> (omsb >= width + !isSigned)
+<a name="l02044"></a>02044       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>;
+<a name="l02045"></a>02045   }
+<a name="l02046"></a>02046 
+<a name="l02047"></a>02047   <span class="keywordflow">if</span> (lost_fraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>) {
+<a name="l02048"></a>02048     *isExact = <span class="keyword">true</span>;
+<a name="l02049"></a>02049     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l02050"></a>02050   } <span class="keywordflow">else</span>
+<a name="l02051"></a>02051     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>;
+<a name="l02052"></a>02052 }
+<a name="l02053"></a>02053 
+<a name="l02054"></a>02054 <span class="comment">/* Same as convertToSignExtendedInteger, except we provide</span>
+<a name="l02055"></a>02055 <span class="comment">   deterministic values in case of an invalid operation exception,</span>
+<a name="l02056"></a>02056 <span class="comment">   namely zero for NaNs and the minimal or maximal value respectively</span>
+<a name="l02057"></a>02057 <span class="comment">   for underflow or overflow.</span>
+<a name="l02058"></a>02058 <span class="comment">   The *isExact output tells whether the result is exact, in the sense</span>
+<a name="l02059"></a>02059 <span class="comment">   that converting it back to the original floating point type produces</span>
+<a name="l02060"></a>02060 <span class="comment">   the original value.  This is almost equivalent to result==opOK,</span>
+<a name="l02061"></a>02061 <span class="comment">   except for negative zeroes.</span>
+<a name="l02062"></a>02062 <span class="comment">*/</span>
+<a name="l02063"></a>02063 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02064"></a><a class="code" href="classllvm_1_1APFloat.html#a796301cd33da892bb1971f3d03e36cb6">02064</a> <a class="code" href="classllvm_1_1APFloat.html#a796301cd33da892bb1971f3d03e36cb6">APFloat::convertToInteger</a>(<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *parts, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width,
+<a name="l02065"></a>02065                           <span class="keywordtype">bool</span> isSigned,
+<a name="l02066"></a>02066                           <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode, <span class="keywordtype">bool</span> *isExact)<span class="keyword"> const</span>
+<a name="l02067"></a>02067 <span class="keyword"></span>{
+<a name="l02068"></a>02068   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l02069"></a>02069 
+<a name="l02070"></a>02070   fs = convertToSignExtendedInteger(parts, width, isSigned, rounding_mode,
+<a name="l02071"></a>02071                                     isExact);
+<a name="l02072"></a>02072 
+<a name="l02073"></a>02073   <span class="keywordflow">if</span> (fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a383f94ce3f7b7ecadb0af4e1ccbcb666">opInvalidOp</a>) {
+<a name="l02074"></a>02074     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits, dstPartsCount;
+<a name="l02075"></a>02075 
+<a name="l02076"></a>02076     dstPartsCount = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(width);
+<a name="l02077"></a>02077 
+<a name="l02078"></a>02078     <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>)
+<a name="l02079"></a>02079       bits = 0;
+<a name="l02080"></a>02080     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (sign)
+<a name="l02081"></a>02081       bits = isSigned;
+<a name="l02082"></a>02082     <span class="keywordflow">else</span>
+<a name="l02083"></a>02083       bits = width - isSigned;
+<a name="l02084"></a>02084 
+<a name="l02085"></a>02085     <a class="code" href="classllvm_1_1APInt.html#a9893ee6e3d9d51101c6854c2548189ba" title="Set the least significant BITS and clear the rest.">APInt::tcSetLeastSignificantBits</a>(parts, dstPartsCount, bits);
+<a name="l02086"></a>02086     <span class="keywordflow">if</span> (sign && isSigned)
+<a name="l02087"></a>02087       <a class="code" href="classllvm_1_1APInt.html#aee0c0088398d80e5f10491c9332389f4">APInt::tcShiftLeft</a>(parts, dstPartsCount, width - 1);
+<a name="l02088"></a>02088   }
+<a name="l02089"></a>02089 
+<a name="l02090"></a>02090   <span class="keywordflow">return</span> fs;
+<a name="l02091"></a>02091 }
+<a name="l02092"></a>02092 
+<a name="l02093"></a>02093 <span class="comment">/* Same as convertToInteger(integerPart*, ...), except the result is returned in</span>
+<a name="l02094"></a>02094 <span class="comment">   an APSInt, whose initial bit-width and signed-ness are used to determine the</span>
+<a name="l02095"></a>02095 <span class="comment">   precision of the conversion.</span>
+<a name="l02096"></a>02096 <span class="comment"> */</span>
+<a name="l02097"></a>02097 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02098"></a><a class="code" href="classllvm_1_1APFloat.html#aa685c2953655ec0668b116d231e05465">02098</a> <a class="code" href="classllvm_1_1APFloat.html#a796301cd33da892bb1971f3d03e36cb6">APFloat::convertToInteger</a>(<a class="code" href="classllvm_1_1APSInt.html">APSInt</a> &result,
+<a name="l02099"></a>02099                           <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode, <span class="keywordtype">bool</span> *isExact)<span class="keyword"> const</span>
+<a name="l02100"></a>02100 <span class="keyword"></span>{
+<a name="l02101"></a>02101   <span class="keywordtype">unsigned</span> bitWidth = result.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>();
+<a name="l02102"></a>02102   <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<uint64_t, 4></a> parts(result.<a class="code" href="classllvm_1_1APInt.html#a2c9ce2ec88f5ffa60ab1b16527caa1f4" title="Get the number of words.">getNumWords</a>());
+<a name="l02103"></a>02103   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> status = <a class="code" href="classllvm_1_1APFloat.html#a796301cd33da892bb1971f3d03e36cb6">convertToInteger</a>(
+<a name="l02104"></a>02104     parts.data(), bitWidth, result.<a class="code" href="classllvm_1_1APSInt.html#ac9d653a7e9ebf9b69bae3411a723abf4">isSigned</a>(), rounding_mode, isExact);
+<a name="l02105"></a>02105   <span class="comment">// Keeps the original signed-ness.</span>
+<a name="l02106"></a>02106   result = <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(bitWidth, parts);
+<a name="l02107"></a>02107   <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1sys_1_1fs.html#a65c5fe2953375fe7c8c64bb7481c54a4" title="Get file status as if by POSIX stat().">status</a>;
+<a name="l02108"></a>02108 }
+<a name="l02109"></a>02109 
+<a name="l02110"></a>02110 <span class="comment">/* Convert an unsigned integer SRC to a floating point number,</span>
+<a name="l02111"></a>02111 <span class="comment">   rounding according to ROUNDING_MODE.  The sign of the floating</span>
+<a name="l02112"></a>02112 <span class="comment">   point number is not modified.  */</span>
+<a name="l02113"></a>02113 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02114"></a>02114 APFloat::convertFromUnsignedParts(<span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *src,
+<a name="l02115"></a>02115                                   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> srcCount,
+<a name="l02116"></a>02116                                   roundingMode rounding_mode)
+<a name="l02117"></a>02117 {
+<a name="l02118"></a>02118   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> omsb, precision, dstCount;
+<a name="l02119"></a>02119   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *dst;
+<a name="l02120"></a>02120   <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction;
+<a name="l02121"></a>02121 
+<a name="l02122"></a>02122   category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l02123"></a>02123   omsb = <a class="code" href="classllvm_1_1APInt.html#ada7408f27e25486804e9c4cbca9348e7">APInt::tcMSB</a>(src, srcCount) + 1;
+<a name="l02124"></a>02124   dst = significandParts();
+<a name="l02125"></a>02125   dstCount = partCount();
+<a name="l02126"></a>02126   precision = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l02127"></a>02127 
+<a name="l02128"></a>02128   <span class="comment">/* We want the most significant PRECISION bits of SRC.  There may not</span>
+<a name="l02129"></a>02129 <span class="comment">     be that many; extract what we can.  */</span>
+<a name="l02130"></a>02130   <span class="keywordflow">if</span> (precision <= omsb) {
+<a name="l02131"></a>02131     exponent = omsb - 1;
+<a name="l02132"></a>02132     lost_fraction = <a class="code" href="APFloat_8cpp.html#abc47f2d3773defbbd5a684a71cbf2200">lostFractionThroughTruncation</a>(src, srcCount,
+<a name="l02133"></a>02133                                                   omsb - precision);
+<a name="l02134"></a>02134     <a class="code" href="classllvm_1_1APInt.html#a2ba89ff853f7bb8ea4862d17326426e4">APInt::tcExtract</a>(dst, dstCount, src, precision, omsb - precision);
+<a name="l02135"></a>02135   } <span class="keywordflow">else</span> {
+<a name="l02136"></a>02136     exponent = precision - 1;
+<a name="l02137"></a>02137     lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>;
+<a name="l02138"></a>02138     <a class="code" href="classllvm_1_1APInt.html#a2ba89ff853f7bb8ea4862d17326426e4">APInt::tcExtract</a>(dst, dstCount, src, omsb, 0);
+<a name="l02139"></a>02139   }
+<a name="l02140"></a>02140 
+<a name="l02141"></a>02141   <span class="keywordflow">return</span> normalize(rounding_mode, lost_fraction);
+<a name="l02142"></a>02142 }
+<a name="l02143"></a>02143 
+<a name="l02144"></a>02144 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02145"></a><a class="code" href="classllvm_1_1APFloat.html#a768aa39cef837274da386788b7294ffe">02145</a> <a class="code" href="classllvm_1_1APFloat.html#a768aa39cef837274da386788b7294ffe">APFloat::convertFromAPInt</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &Val,
+<a name="l02146"></a>02146                           <span class="keywordtype">bool</span> isSigned,
+<a name="l02147"></a>02147                           <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l02148"></a>02148 {
+<a name="l02149"></a>02149   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partCount = Val.<a class="code" href="classllvm_1_1APInt.html#a2c9ce2ec88f5ffa60ab1b16527caa1f4" title="Get the number of words.">getNumWords</a>();
+<a name="l02150"></a>02150   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> api = Val;
+<a name="l02151"></a>02151 
+<a name="l02152"></a>02152   sign = <span class="keyword">false</span>;
+<a name="l02153"></a>02153   <span class="keywordflow">if</span> (isSigned && api.<a class="code" href="classllvm_1_1APInt.html#a0e9a2d7ec903d191ef029589ec647cb6">isNegative</a>()) {
+<a name="l02154"></a>02154     sign = <span class="keyword">true</span>;
+<a name="l02155"></a>02155     api = -api;
+<a name="l02156"></a>02156   }
+<a name="l02157"></a>02157 
+<a name="l02158"></a>02158   <span class="keywordflow">return</span> convertFromUnsignedParts(api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>(), partCount, rounding_mode);
+<a name="l02159"></a>02159 }
+<a name="l02160"></a>02160 
+<a name="l02161"></a>02161 <span class="comment">/* Convert a two's complement integer SRC to a floating point number,</span>
+<a name="l02162"></a>02162 <span class="comment">   rounding according to ROUNDING_MODE.  ISSIGNED is true if the</span>
+<a name="l02163"></a>02163 <span class="comment">   integer is signed, in which case it must be sign-extended.  */</span>
+<a name="l02164"></a>02164 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02165"></a><a class="code" href="classllvm_1_1APFloat.html#aab86e955f748f3ac392c174f1b6cf947">02165</a> <a class="code" href="classllvm_1_1APFloat.html#aab86e955f748f3ac392c174f1b6cf947">APFloat::convertFromSignExtendedInteger</a>(<span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *src,
+<a name="l02166"></a>02166                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> srcCount,
+<a name="l02167"></a>02167                                         <span class="keywordtype">bool</span> isSigned,
+<a name="l02168"></a>02168                                         <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l02169"></a>02169 {
+<a name="l02170"></a>02170   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> <a class="code" href="namespacellvm_1_1sys_1_1fs.html#a65c5fe2953375fe7c8c64bb7481c54a4" title="Get file status as if by POSIX stat().">status</a>;
+<a name="l02171"></a>02171 
+<a name="l02172"></a>02172   <span class="keywordflow">if</span> (isSigned &&
+<a name="l02173"></a>02173       <a class="code" href="classllvm_1_1APInt.html#ad1b485c8171a1de8391ca44e69f0d573" title="Extract the given bit of a bignum; returns 0 or 1. Zero-based.">APInt::tcExtractBit</a>(src, srcCount * <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a> - 1)) {
+<a name="l02174"></a>02174     <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *copy;
+<a name="l02175"></a>02175 
+<a name="l02176"></a>02176     <span class="comment">/* If we're signed and negative negate a copy.  */</span>
+<a name="l02177"></a>02177     sign = <span class="keyword">true</span>;
+<a name="l02178"></a>02178     copy = <span class="keyword">new</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>[srcCount];
+<a name="l02179"></a>02179     <a class="code" href="classllvm_1_1APInt.html#a0075077383b560290d112b29a155db08" title="Assign one bignum to another.">APInt::tcAssign</a>(copy, src, srcCount);
+<a name="l02180"></a>02180     <a class="code" href="classllvm_1_1APInt.html#a921850a778a64dd3cd68b3f3b2e2b110" title="Negate a bignum in-place.">APInt::tcNegate</a>(copy, srcCount);
+<a name="l02181"></a>02181     status = convertFromUnsignedParts(copy, srcCount, rounding_mode);
+<a name="l02182"></a>02182     <span class="keyword">delete</span> [] copy;
+<a name="l02183"></a>02183   } <span class="keywordflow">else</span> {
+<a name="l02184"></a>02184     sign = <span class="keyword">false</span>;
+<a name="l02185"></a>02185     status = convertFromUnsignedParts(src, srcCount, rounding_mode);
+<a name="l02186"></a>02186   }
+<a name="l02187"></a>02187 
+<a name="l02188"></a>02188   <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1sys_1_1fs.html#a65c5fe2953375fe7c8c64bb7481c54a4" title="Get file status as if by POSIX stat().">status</a>;
+<a name="l02189"></a>02189 }
+<a name="l02190"></a>02190 
+<a name="l02191"></a>02191 <span class="comment">/* FIXME: should this just take a const APInt reference?  */</span>
+<a name="l02192"></a>02192 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02193"></a><a class="code" href="classllvm_1_1APFloat.html#a5d622e69958a2ec2b141f3fd21f2bc16">02193</a> <a class="code" href="classllvm_1_1APFloat.html#a5d622e69958a2ec2b141f3fd21f2bc16">APFloat::convertFromZeroExtendedInteger</a>(<span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *parts,
+<a name="l02194"></a>02194                                         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> width, <span class="keywordtype">bool</span> isSigned,
+<a name="l02195"></a>02195                                         <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l02196"></a>02196 {
+<a name="l02197"></a>02197   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partCount = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(width);
+<a name="l02198"></a>02198   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> api = <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(width, <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(parts, partCount));
+<a name="l02199"></a>02199 
+<a name="l02200"></a>02200   sign = <span class="keyword">false</span>;
+<a name="l02201"></a>02201   <span class="keywordflow">if</span> (isSigned && <a class="code" href="classllvm_1_1APInt.html#ad1b485c8171a1de8391ca44e69f0d573" title="Extract the given bit of a bignum; returns 0 or 1. Zero-based.">APInt::tcExtractBit</a>(parts, width - 1)) {
+<a name="l02202"></a>02202     sign = <span class="keyword">true</span>;
+<a name="l02203"></a>02203     api = -api;
+<a name="l02204"></a>02204   }
+<a name="l02205"></a>02205 
+<a name="l02206"></a>02206   <span class="keywordflow">return</span> convertFromUnsignedParts(api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>(), partCount, rounding_mode);
+<a name="l02207"></a>02207 }
+<a name="l02208"></a>02208 
+<a name="l02209"></a>02209 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02210"></a>02210 APFloat::convertFromHexadecimalString(<a class="code" href="classllvm_1_1StringRef.html">StringRef</a> s, roundingMode rounding_mode)
+<a name="l02211"></a>02211 {
+<a name="l02212"></a>02212   <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> lost_fraction = <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>;
+<a name="l02213"></a>02213   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *significand;
+<a name="l02214"></a>02214   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bitPos, partsCount;
+<a name="l02215"></a>02215   <a class="code" href="classchar.html">StringRef::iterator</a> dot, firstSignificantDigit;
+<a name="l02216"></a>02216 
+<a name="l02217"></a>02217   zeroSignificand();
+<a name="l02218"></a>02218   exponent = 0;
+<a name="l02219"></a>02219   category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l02220"></a>02220 
+<a name="l02221"></a>02221   significand = significandParts();
+<a name="l02222"></a>02222   partsCount = partCount();
+<a name="l02223"></a>02223   bitPos = partsCount * <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>;
+<a name="l02224"></a>02224 
+<a name="l02225"></a>02225   <span class="comment">/* Skip leading zeroes and any (hexa)decimal point.  */</span>
+<a name="l02226"></a>02226   <a class="code" href="classchar.html">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a33706aab89e700b8f79e1fa6f4f0e3ee" title="Get begin iterator over path.">begin</a> = s.<a class="code" href="classllvm_1_1StringRef.html#a4a0abf8eb4fa5989df63172649cba99f">begin</a>();
+<a name="l02227"></a>02227   <a class="code" href="classchar.html">StringRef::iterator</a> <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a> = s.<a class="code" href="classllvm_1_1StringRef.html#a9e277b660236bb0318b61ab9cdf60dc7">end</a>();
+<a name="l02228"></a>02228   <a class="code" href="classchar.html">StringRef::iterator</a> p = <a class="code" href="APFloat_8cpp.html#ab19689a7583f4396682fe3dad076354f">skipLeadingZeroesAndAnyDot</a>(begin, end, &dot);
+<a name="l02229"></a>02229   firstSignificantDigit = p;
+<a name="l02230"></a>02230 
+<a name="l02231"></a>02231   <span class="keywordflow">for</span> (; p != <a class="code" href="namespacellvm_1_1sys_1_1path.html#a214ec2f04ffd92636ed4bd2717607a1d" title="Get end iterator over path.">end</a>;) {
+<a name="l02232"></a>02232     <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> hex_value;
+<a name="l02233"></a>02233 
+<a name="l02234"></a>02234     <span class="keywordflow">if</span> (*p == <span class="charliteral">'.'</span>) {
+<a name="l02235"></a>02235       assert(dot == end && <span class="stringliteral">"String contains multiple dots"</span>);
+<a name="l02236"></a>02236       dot = p++;
+<a name="l02237"></a>02237       <span class="keywordflow">if</span> (p == end) {
+<a name="l02238"></a>02238         <span class="keywordflow">break</span>;
+<a name="l02239"></a>02239       }
+<a name="l02240"></a>02240     }
+<a name="l02241"></a>02241 
+<a name="l02242"></a>02242     hex_value = <a class="code" href="APFloat_8cpp.html#a10de524dcc1e204bf4ff4592d45f2dd5">hexDigitValue</a>(*p);
+<a name="l02243"></a>02243     <span class="keywordflow">if</span> (hex_value == -1U) {
+<a name="l02244"></a>02244       <span class="keywordflow">break</span>;
+<a name="l02245"></a>02245     }
+<a name="l02246"></a>02246 
+<a name="l02247"></a>02247     p++;
+<a name="l02248"></a>02248 
+<a name="l02249"></a>02249     <span class="keywordflow">if</span> (p == end) {
+<a name="l02250"></a>02250       <span class="keywordflow">break</span>;
+<a name="l02251"></a>02251     } <span class="keywordflow">else</span> {
+<a name="l02252"></a>02252       <span class="comment">/* Store the number whilst 4-bit nibbles remain.  */</span>
+<a name="l02253"></a>02253       <span class="keywordflow">if</span> (bitPos) {
+<a name="l02254"></a>02254         bitPos -= 4;
+<a name="l02255"></a>02255         hex_value <<= bitPos % <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>;
+<a name="l02256"></a>02256         significand[bitPos / <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>] |= hex_value;
+<a name="l02257"></a>02257       } <span class="keywordflow">else</span> {
+<a name="l02258"></a>02258         lost_fraction = <a class="code" href="APFloat_8cpp.html#aea19fbfc9a25e79db6edd3bdce73e223">trailingHexadecimalFraction</a>(p, end, hex_value);
+<a name="l02259"></a>02259         <span class="keywordflow">while</span> (p != end && <a class="code" href="APFloat_8cpp.html#a10de524dcc1e204bf4ff4592d45f2dd5">hexDigitValue</a>(*p) != -1U)
+<a name="l02260"></a>02260           p++;
+<a name="l02261"></a>02261         <span class="keywordflow">break</span>;
+<a name="l02262"></a>02262       }
+<a name="l02263"></a>02263     }
+<a name="l02264"></a>02264   }
+<a name="l02265"></a>02265 
+<a name="l02266"></a>02266   <span class="comment">/* Hex floats require an exponent but not a hexadecimal point.  */</span>
+<a name="l02267"></a>02267   assert(p != end && <span class="stringliteral">"Hex strings require an exponent"</span>);
+<a name="l02268"></a>02268   assert((*p == <span class="charliteral">'p'</span> || *p == <span class="charliteral">'P'</span>) && <span class="stringliteral">"Invalid character in significand"</span>);
+<a name="l02269"></a>02269   assert(p != begin && <span class="stringliteral">"Significand has no digits"</span>);
+<a name="l02270"></a>02270   assert((dot == end || p - begin != 1) && <span class="stringliteral">"Significand has no digits"</span>);
+<a name="l02271"></a>02271 
+<a name="l02272"></a>02272   <span class="comment">/* Ignore the exponent if we are zero.  */</span>
+<a name="l02273"></a>02273   <span class="keywordflow">if</span> (p != firstSignificantDigit) {
+<a name="l02274"></a>02274     <span class="keywordtype">int</span> expAdjustment;
+<a name="l02275"></a>02275 
+<a name="l02276"></a>02276     <span class="comment">/* Implicit hexadecimal point?  */</span>
+<a name="l02277"></a>02277     <span class="keywordflow">if</span> (dot == end)
+<a name="l02278"></a>02278       dot = p;
+<a name="l02279"></a>02279 
+<a name="l02280"></a>02280     <span class="comment">/* Calculate the exponent adjustment implicit in the number of</span>
+<a name="l02281"></a>02281 <span class="comment">       significant digits.  */</span>
+<a name="l02282"></a>02282     expAdjustment = <span class="keyword">static_cast<</span><span class="keywordtype">int</span><span class="keyword">></span>(dot - firstSignificantDigit);
+<a name="l02283"></a>02283     <span class="keywordflow">if</span> (expAdjustment < 0)
+<a name="l02284"></a>02284       expAdjustment++;
+<a name="l02285"></a>02285     expAdjustment = expAdjustment * 4 - 1;
+<a name="l02286"></a>02286 
+<a name="l02287"></a>02287     <span class="comment">/* Adjust for writing the significand starting at the most</span>
+<a name="l02288"></a>02288 <span class="comment">       significant nibble.  */</span>
+<a name="l02289"></a>02289     expAdjustment += semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l02290"></a>02290     expAdjustment -= partsCount * <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>;
+<a name="l02291"></a>02291 
+<a name="l02292"></a>02292     <span class="comment">/* Adjust for the given exponent.  */</span>
+<a name="l02293"></a>02293     exponent = <a class="code" href="APFloat_8cpp.html#a3bdf019ebb92670864ec41312e0e8421">totalExponent</a>(p + 1, end, expAdjustment);
+<a name="l02294"></a>02294   }
+<a name="l02295"></a>02295 
+<a name="l02296"></a>02296   <span class="keywordflow">return</span> normalize(rounding_mode, lost_fraction);
+<a name="l02297"></a>02297 }
+<a name="l02298"></a>02298 
+<a name="l02299"></a>02299 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02300"></a>02300 APFloat::roundSignificandWithExponent(<span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *decSigParts,
+<a name="l02301"></a>02301                                       <span class="keywordtype">unsigned</span> sigPartCount, <span class="keywordtype">int</span> <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa29e412513f719e77341b9a59c0ec4efd" title="double exp(double x);">exp</a>,
+<a name="l02302"></a>02302                                       roundingMode rounding_mode)
+<a name="l02303"></a>02303 {
+<a name="l02304"></a>02304   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> parts, pow5PartCount;
+<a name="l02305"></a>02305   <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> calcSemantics = { 32767, -32767, 0 };
+<a name="l02306"></a>02306   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> pow5Parts[<a class="code" href="namespacellvm.html#a769f4d371efd3462f20b02b7cd8fba79">maxPowerOfFiveParts</a>];
+<a name="l02307"></a>02307   <span class="keywordtype">bool</span> isNearest;
+<a name="l02308"></a>02308 
+<a name="l02309"></a>02309   isNearest = (rounding_mode == <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a> ||
+<a name="l02310"></a>02310                rounding_mode == <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea222d7a5b06bd3e07d97f095ac289d028">rmNearestTiesToAway</a>);
+<a name="l02311"></a>02311 
+<a name="l02312"></a>02312   parts = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> + 11);
+<a name="l02313"></a>02313 
+<a name="l02314"></a>02314   <span class="comment">/* Calculate pow(5, abs(exp)).  */</span>
+<a name="l02315"></a>02315   pow5PartCount = <a class="code" href="APFloat_8cpp.html#a96301256190ab1a39c3ff646d467345c">powerOf5</a>(pow5Parts, exp >= 0 ? exp: -exp);
+<a name="l02316"></a>02316 
+<a name="l02317"></a>02317   <span class="keywordflow">for</span> (;; parts *= 2) {
+<a name="l02318"></a>02318     <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> sigStatus, powStatus;
+<a name="l02319"></a>02319     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> excessPrecision, truncatedBits;
+<a name="l02320"></a>02320 
+<a name="l02321"></a>02321     calcSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> = parts * integerPartWidth - 1;
+<a name="l02322"></a>02322     excessPrecision = calcSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l02323"></a>02323     truncatedBits = excessPrecision;
+<a name="l02324"></a>02324 
+<a name="l02325"></a>02325     <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> decSig(calcSemantics, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, sign);
+<a name="l02326"></a>02326     <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> pow5(calcSemantics, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>, <span class="keyword">false</span>);
+<a name="l02327"></a>02327 
+<a name="l02328"></a>02328     sigStatus = decSig.convertFromUnsignedParts(decSigParts, sigPartCount,
+<a name="l02329"></a>02329                                                 <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l02330"></a>02330     powStatus = pow5.convertFromUnsignedParts(pow5Parts, pow5PartCount,
+<a name="l02331"></a>02331                                               <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l02332"></a>02332     <span class="comment">/* Add exp, as 10^n = 5^n * 2^n.  */</span>
+<a name="l02333"></a>02333     decSig.exponent += <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa29e412513f719e77341b9a59c0ec4efd" title="double exp(double x);">exp</a>;
+<a name="l02334"></a>02334 
+<a name="l02335"></a>02335     <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> calcLostFraction;
+<a name="l02336"></a>02336     <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> HUerr, HUdistance;
+<a name="l02337"></a>02337     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> powHUerr;
+<a name="l02338"></a>02338 
+<a name="l02339"></a>02339     <span class="keywordflow">if</span> (exp >= 0) {
+<a name="l02340"></a>02340       <span class="comment">/* multiplySignificand leaves the precision-th bit set to 1.  */</span>
+<a name="l02341"></a>02341       calcLostFraction = decSig.multiplySignificand(pow5, NULL);
+<a name="l02342"></a>02342       powHUerr = powStatus != <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l02343"></a>02343     } <span class="keywordflow">else</span> {
+<a name="l02344"></a>02344       calcLostFraction = decSig.divideSignificand(pow5);
+<a name="l02345"></a>02345       <span class="comment">/* Denormal numbers have less precision.  */</span>
+<a name="l02346"></a>02346       <span class="keywordflow">if</span> (decSig.exponent < semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a>) {
+<a name="l02347"></a>02347         excessPrecision += (semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a> - decSig.exponent);
+<a name="l02348"></a>02348         truncatedBits = excessPrecision;
+<a name="l02349"></a>02349         <span class="keywordflow">if</span> (excessPrecision > calcSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>)
+<a name="l02350"></a>02350           excessPrecision = calcSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>;
+<a name="l02351"></a>02351       }
+<a name="l02352"></a>02352       <span class="comment">/* Extra half-ulp lost in reciprocal of exponent.  */</span>
+<a name="l02353"></a>02353       powHUerr = (powStatus == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> && calcLostFraction == <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>) ? 0:2;
+<a name="l02354"></a>02354     }
+<a name="l02355"></a>02355 
+<a name="l02356"></a>02356     <span class="comment">/* Both multiplySignificand and divideSignificand return the</span>
+<a name="l02357"></a>02357 <span class="comment">       result with the integer bit set.  */</span>
+<a name="l02358"></a>02358     assert(<a class="code" href="classllvm_1_1APInt.html#ad1b485c8171a1de8391ca44e69f0d573" title="Extract the given bit of a bignum; returns 0 or 1. Zero-based.">APInt::tcExtractBit</a>
+<a name="l02359"></a>02359            (decSig.significandParts(), calcSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - 1) == 1);
+<a name="l02360"></a>02360 
+<a name="l02361"></a>02361     HUerr = <a class="code" href="APFloat_8cpp.html#ac0e2174b46ccea3f1de0a0edafcbc4c8">HUerrBound</a>(calcLostFraction != <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286afbe67ef8f3a5fcac94b2f9c074c8ad3d">lfExactlyZero</a>, sigStatus != <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>,
+<a name="l02362"></a>02362                        powHUerr);
+<a name="l02363"></a>02363     HUdistance = 2 * <a class="code" href="APFloat_8cpp.html#a6dcd1d74694d39c377bf23f58d70db37">ulpsFromBoundary</a>(decSig.significandParts(),
+<a name="l02364"></a>02364                                       excessPrecision, isNearest);
+<a name="l02365"></a>02365 
+<a name="l02366"></a>02366     <span class="comment">/* Are we guaranteed to round correctly if we truncate?  */</span>
+<a name="l02367"></a>02367     <span class="keywordflow">if</span> (HUdistance >= HUerr) {
+<a name="l02368"></a>02368       <a class="code" href="classllvm_1_1APInt.html#a2ba89ff853f7bb8ea4862d17326426e4">APInt::tcExtract</a>(significandParts(), partCount(), decSig.significandParts(),
+<a name="l02369"></a>02369                        calcSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - excessPrecision,
+<a name="l02370"></a>02370                        excessPrecision);
+<a name="l02371"></a>02371       <span class="comment">/* Take the exponent of decSig.  If we tcExtract-ed less bits</span>
+<a name="l02372"></a>02372 <span class="comment">         above we must adjust our exponent to compensate for the</span>
+<a name="l02373"></a>02373 <span class="comment">         implicit right shift.  */</span>
+<a name="l02374"></a>02374       exponent = (decSig.exponent + semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>
+<a name="l02375"></a>02375                   - (calcSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - excessPrecision));
+<a name="l02376"></a>02376       calcLostFraction = <a class="code" href="APFloat_8cpp.html#abc47f2d3773defbbd5a684a71cbf2200">lostFractionThroughTruncation</a>(decSig.significandParts(),
+<a name="l02377"></a>02377                                                        decSig.partCount(),
+<a name="l02378"></a>02378                                                        truncatedBits);
+<a name="l02379"></a>02379       <span class="keywordflow">return</span> normalize(rounding_mode, calcLostFraction);
+<a name="l02380"></a>02380     }
+<a name="l02381"></a>02381   }
+<a name="l02382"></a>02382 }
+<a name="l02383"></a>02383 
+<a name="l02384"></a>02384 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02385"></a>02385 APFloat::convertFromDecimalString(<a class="code" href="classllvm_1_1StringRef.html">StringRef</a> str, roundingMode rounding_mode)
+<a name="l02386"></a>02386 {
+<a name="l02387"></a>02387   <a class="code" href="structdecimalInfo.html">decimalInfo</a> D;
+<a name="l02388"></a>02388   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l02389"></a>02389 
+<a name="l02390"></a>02390   <span class="comment">/* Scan the text.  */</span>
+<a name="l02391"></a>02391   <a class="code" href="classllvm_1_1StringRef.html#a7bf566fe5a23be3257375b0cf7f7c101">StringRef::iterator</a> p = str.<a class="code" href="classllvm_1_1StringRef.html#a4a0abf8eb4fa5989df63172649cba99f">begin</a>();
+<a name="l02392"></a>02392   <a class="code" href="APFloat_8cpp.html#a669d56bdff1ba3eb178fe8c9cbaf7f52">interpretDecimal</a>(p, str.<a class="code" href="classllvm_1_1StringRef.html#a9e277b660236bb0318b61ab9cdf60dc7">end</a>(), &D);
+<a name="l02393"></a>02393 
+<a name="l02394"></a>02394   <span class="comment">/* Handle the quick cases.  First the case of no significant digits,</span>
+<a name="l02395"></a>02395 <span class="comment">     i.e. zero, and then exponents that are obviously too large or too</span>
+<a name="l02396"></a>02396 <span class="comment">     small.  Writing L for log 10 / log 2, a number d.ddddd*10^exp</span>
+<a name="l02397"></a>02397 <span class="comment">     definitely overflows if</span>
+<a name="l02398"></a>02398 <span class="comment"></span>
+<a name="l02399"></a>02399 <span class="comment">           (exp - 1) * L >= maxExponent</span>
+<a name="l02400"></a>02400 <span class="comment"></span>
+<a name="l02401"></a>02401 <span class="comment">     and definitely underflows to zero where</span>
+<a name="l02402"></a>02402 <span class="comment"></span>
+<a name="l02403"></a>02403 <span class="comment">           (exp + 1) * L <= minExponent - precision</span>
+<a name="l02404"></a>02404 <span class="comment"></span>
+<a name="l02405"></a>02405 <span class="comment">     With integer arithmetic the tightest bounds for L are</span>
+<a name="l02406"></a>02406 <span class="comment"></span>
+<a name="l02407"></a>02407 <span class="comment">           93/28 < L < 196/59            [ numerator <= 256 ]</span>
+<a name="l02408"></a>02408 <span class="comment">           42039/12655 < L < 28738/8651  [ numerator <= 65536 ]</span>
+<a name="l02409"></a>02409 <span class="comment">  */</span>
+<a name="l02410"></a>02410 
+<a name="l02411"></a>02411   <span class="keywordflow">if</span> (<a class="code" href="APFloat_8cpp.html#aef45d072a8d986f88b8a599f66516ffa">decDigitValue</a>(*D.<a class="code" href="structdecimalInfo.html#ad1b78dfd6678a8588c948dd1abcdd953">firstSigDigit</a>) >= 10U) {
+<a name="l02412"></a>02412     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l02413"></a>02413     fs = <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>;
+<a name="l02414"></a>02414 
+<a name="l02415"></a>02415   <span class="comment">/* Check whether the normalized exponent is high enough to overflow</span>
+<a name="l02416"></a>02416 <span class="comment">     max during the log-rebasing in the max-exponent check below. */</span>
+<a name="l02417"></a>02417   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (D.<a class="code" href="structdecimalInfo.html#a8dbd8aeed256ae53a487a45e408db743">normalizedExponent</a> - 1 > INT_MAX / 42039) {
+<a name="l02418"></a>02418     fs = handleOverflow(rounding_mode);
+<a name="l02419"></a>02419 
+<a name="l02420"></a>02420   <span class="comment">/* If it wasn't, then it also wasn't high enough to overflow max</span>
+<a name="l02421"></a>02421 <span class="comment">     during the log-rebasing in the min-exponent check.  Check that it</span>
+<a name="l02422"></a>02422 <span class="comment">     won't overflow min in either check, then perform the min-exponent</span>
+<a name="l02423"></a>02423 <span class="comment">     check. */</span>
+<a name="l02424"></a>02424   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (D.<a class="code" href="structdecimalInfo.html#a8dbd8aeed256ae53a487a45e408db743">normalizedExponent</a> - 1 < INT_MIN / 42039 ||
+<a name="l02425"></a>02425              (D.<a class="code" href="structdecimalInfo.html#a8dbd8aeed256ae53a487a45e408db743">normalizedExponent</a> + 1) * 28738 <=
+<a name="l02426"></a>02426                8651 * (semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a> - (<span class="keywordtype">int</span>) semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>)) {
+<a name="l02427"></a>02427     <span class="comment">/* Underflow to zero and round.  */</span>
+<a name="l02428"></a>02428     zeroSignificand();
+<a name="l02429"></a>02429     fs = normalize(rounding_mode, <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286a92e4eb4d28972e2a645ec9fdb438a938">lfLessThanHalf</a>);
+<a name="l02430"></a>02430 
+<a name="l02431"></a>02431   <span class="comment">/* We can finally safely perform the max-exponent check. */</span>
+<a name="l02432"></a>02432   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> ((D.<a class="code" href="structdecimalInfo.html#a8dbd8aeed256ae53a487a45e408db743">normalizedExponent</a> - 1) * 42039
+<a name="l02433"></a>02433              >= 12655 * semantics-><a class="code" href="structllvm_1_1fltSemantics.html#a60ad2894b47852a4b60af1b89a3d38ae">maxExponent</a>) {
+<a name="l02434"></a>02434     <span class="comment">/* Overflow and round.  */</span>
+<a name="l02435"></a>02435     fs = handleOverflow(rounding_mode);
+<a name="l02436"></a>02436   } <span class="keywordflow">else</span> {
+<a name="l02437"></a>02437     <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *decSignificand;
+<a name="l02438"></a>02438     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> partCount;
+<a name="l02439"></a>02439 
+<a name="l02440"></a>02440     <span class="comment">/* A tight upper bound on number of bits required to hold an</span>
+<a name="l02441"></a>02441 <span class="comment">       N-digit decimal integer is N * 196 / 59.  Allocate enough space</span>
+<a name="l02442"></a>02442 <span class="comment">       to hold the full significand, and an extra part required by</span>
+<a name="l02443"></a>02443 <span class="comment">       tcMultiplyPart.  */</span>
+<a name="l02444"></a>02444     partCount = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(D.<a class="code" href="structdecimalInfo.html#a494df17d17f18d1dea6340877fc598ea">lastSigDigit</a> - D.<a class="code" href="structdecimalInfo.html#ad1b78dfd6678a8588c948dd1abcdd953">firstSigDigit</a>) + 1;
+<a name="l02445"></a>02445     partCount = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(1 + 196 * partCount / 59);
+<a name="l02446"></a>02446     decSignificand = <span class="keyword">new</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>[partCount + 1];
+<a name="l02447"></a>02447     partCount = 0;
+<a name="l02448"></a>02448 
+<a name="l02449"></a>02449     <span class="comment">/* Convert to binary efficiently - we do almost all multiplication</span>
+<a name="l02450"></a>02450 <span class="comment">       in an integerPart.  When this would overflow do we do a single</span>
+<a name="l02451"></a>02451 <span class="comment">       bignum multiplication, and then revert again to multiplication</span>
+<a name="l02452"></a>02452 <span class="comment">       in an integerPart.  */</span>
+<a name="l02453"></a>02453     <span class="keywordflow">do</span> {
+<a name="l02454"></a>02454       <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> decValue, val, multiplier;
+<a name="l02455"></a>02455 
+<a name="l02456"></a>02456       val = 0;
+<a name="l02457"></a>02457       multiplier = 1;
+<a name="l02458"></a>02458 
+<a name="l02459"></a>02459       <span class="keywordflow">do</span> {
+<a name="l02460"></a>02460         <span class="keywordflow">if</span> (*p == <span class="charliteral">'.'</span>) {
+<a name="l02461"></a>02461           p++;
+<a name="l02462"></a>02462           <span class="keywordflow">if</span> (p == str.<a class="code" href="classllvm_1_1StringRef.html#a9e277b660236bb0318b61ab9cdf60dc7">end</a>()) {
+<a name="l02463"></a>02463             <span class="keywordflow">break</span>;
+<a name="l02464"></a>02464           }
+<a name="l02465"></a>02465         }
+<a name="l02466"></a>02466         decValue = <a class="code" href="APFloat_8cpp.html#aef45d072a8d986f88b8a599f66516ffa">decDigitValue</a>(*p++);
+<a name="l02467"></a>02467         assert(decValue < 10U && <span class="stringliteral">"Invalid character in significand"</span>);
+<a name="l02468"></a>02468         multiplier *= 10;
+<a name="l02469"></a>02469         val = val * 10 + decValue;
+<a name="l02470"></a>02470         <span class="comment">/* The maximum number that can be multiplied by ten with any</span>
+<a name="l02471"></a>02471 <span class="comment">           digit added without overflowing an integerPart.  */</span>
+<a name="l02472"></a>02472       } <span class="keywordflow">while</span> (p <= D.<a class="code" href="structdecimalInfo.html#a494df17d17f18d1dea6340877fc598ea">lastSigDigit</a> && multiplier <= (~ (<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 0 - 9) / 10);
+<a name="l02473"></a>02473 
+<a name="l02474"></a>02474       <span class="comment">/* Multiply out the current part.  */</span>
+<a name="l02475"></a>02475       <a class="code" href="classllvm_1_1APInt.html#a06ba78863e3a3b9971b1022e7d999aab">APInt::tcMultiplyPart</a>(decSignificand, decSignificand, multiplier, val,
+<a name="l02476"></a>02476                             partCount, partCount + 1, <span class="keyword">false</span>);
+<a name="l02477"></a>02477 
+<a name="l02478"></a>02478       <span class="comment">/* If we used another part (likely but not guaranteed), increase</span>
+<a name="l02479"></a>02479 <span class="comment">         the count.  */</span>
+<a name="l02480"></a>02480       <span class="keywordflow">if</span> (decSignificand[partCount])
+<a name="l02481"></a>02481         partCount++;
+<a name="l02482"></a>02482     } <span class="keywordflow">while</span> (p <= D.<a class="code" href="structdecimalInfo.html#a494df17d17f18d1dea6340877fc598ea">lastSigDigit</a>);
+<a name="l02483"></a>02483 
+<a name="l02484"></a>02484     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l02485"></a>02485     fs = roundSignificandWithExponent(decSignificand, partCount,
+<a name="l02486"></a>02486                                       D.<a class="code" href="structdecimalInfo.html#a007a759de40999aa7dab5606693d6bcf">exponent</a>, rounding_mode);
+<a name="l02487"></a>02487 
+<a name="l02488"></a>02488     <span class="keyword">delete</span> [] decSignificand;
+<a name="l02489"></a>02489   }
+<a name="l02490"></a>02490 
+<a name="l02491"></a>02491   <span class="keywordflow">return</span> fs;
+<a name="l02492"></a>02492 }
+<a name="l02493"></a>02493 
+<a name="l02494"></a>02494 <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">APFloat::opStatus</a>
+<a name="l02495"></a><a class="code" href="classllvm_1_1APFloat.html#ac46f9ecbe00750394fec5b940b56ac0e">02495</a> <a class="code" href="classllvm_1_1APFloat.html#ac46f9ecbe00750394fec5b940b56ac0e">APFloat::convertFromString</a>(<a class="code" href="classllvm_1_1StringRef.html">StringRef</a> str, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)
+<a name="l02496"></a>02496 {
+<a name="l02497"></a>02497   assert(!str.<a class="code" href="classllvm_1_1StringRef.html#ad7e292682516000f8b472f4510a2acf7" title="empty - Check if the string is empty.">empty</a>() && <span class="stringliteral">"Invalid string length"</span>);
+<a name="l02498"></a>02498 
+<a name="l02499"></a>02499   <span class="comment">/* Handle a leading minus sign.  */</span>
+<a name="l02500"></a>02500   <a class="code" href="classchar.html">StringRef::iterator</a> p = str.<a class="code" href="classllvm_1_1StringRef.html#a4a0abf8eb4fa5989df63172649cba99f">begin</a>();
+<a name="l02501"></a>02501   <span class="keywordtype">size_t</span> slen = str.<a class="code" href="classllvm_1_1StringRef.html#af68d5ebdb576d7481ea2766151b875d4" title="size - Get the string size.">size</a>();
+<a name="l02502"></a>02502   sign = *p == <span class="charliteral">'-'</span> ? 1 : 0;
+<a name="l02503"></a>02503   <span class="keywordflow">if</span> (*p == <span class="charliteral">'-'</span> || *p == <span class="charliteral">'+'</span>) {
+<a name="l02504"></a>02504     p++;
+<a name="l02505"></a>02505     slen--;
+<a name="l02506"></a>02506     assert(slen && <span class="stringliteral">"String has no digits"</span>);
+<a name="l02507"></a>02507   }
+<a name="l02508"></a>02508 
+<a name="l02509"></a>02509   <span class="keywordflow">if</span> (slen >= 2 && p[0] == <span class="charliteral">'0'</span> && (p[1] == <span class="charliteral">'x'</span> || p[1] == <span class="charliteral">'X'</span>)) {
+<a name="l02510"></a>02510     assert(slen - 2 && <span class="stringliteral">"Invalid string"</span>);
+<a name="l02511"></a>02511     <span class="keywordflow">return</span> convertFromHexadecimalString(<a class="code" href="classllvm_1_1StringRef.html">StringRef</a>(p + 2, slen - 2),
+<a name="l02512"></a>02512                                         rounding_mode);
+<a name="l02513"></a>02513   }
+<a name="l02514"></a>02514 
+<a name="l02515"></a>02515   <span class="keywordflow">return</span> convertFromDecimalString(<a class="code" href="classllvm_1_1StringRef.html">StringRef</a>(p, slen), rounding_mode);
+<a name="l02516"></a>02516 }
+<a name="l02517"></a>02517 
+<a name="l02518"></a>02518 <span class="comment">/* Write out a hexadecimal representation of the floating point value</span>
+<a name="l02519"></a>02519 <span class="comment">   to DST, which must be of sufficient size, in the C99 form</span>
+<a name="l02520"></a>02520 <span class="comment">   [-]0xh.hhhhp[+-]d.  Return the number of characters written,</span>
+<a name="l02521"></a>02521 <span class="comment">   excluding the terminating NUL.</span>
+<a name="l02522"></a>02522 <span class="comment"></span>
+<a name="l02523"></a>02523 <span class="comment">   If UPPERCASE, the output is in upper case, otherwise in lower case.</span>
+<a name="l02524"></a>02524 <span class="comment"></span>
+<a name="l02525"></a>02525 <span class="comment">   HEXDIGITS digits appear altogether, rounding the value if</span>
+<a name="l02526"></a>02526 <span class="comment">   necessary.  If HEXDIGITS is 0, the minimal precision to display the</span>
+<a name="l02527"></a>02527 <span class="comment">   number precisely is used instead.  If nothing would appear after</span>
+<a name="l02528"></a>02528 <span class="comment">   the decimal point it is suppressed.</span>
+<a name="l02529"></a>02529 <span class="comment"></span>
+<a name="l02530"></a>02530 <span class="comment">   The decimal exponent is always printed and has at least one digit.</span>
+<a name="l02531"></a>02531 <span class="comment">   Zero values display an exponent of zero.  Infinities and NaNs</span>
+<a name="l02532"></a>02532 <span class="comment">   appear as "infinity" or "nan" respectively.</span>
+<a name="l02533"></a>02533 <span class="comment"></span>
+<a name="l02534"></a>02534 <span class="comment">   The above rules are as specified by C99.  There is ambiguity about</span>
+<a name="l02535"></a>02535 <span class="comment">   what the leading hexadecimal digit should be.  This implementation</span>
+<a name="l02536"></a>02536 <span class="comment">   uses whatever is necessary so that the exponent is displayed as</span>
+<a name="l02537"></a>02537 <span class="comment">   stored.  This implies the exponent will fall within the IEEE format</span>
+<a name="l02538"></a>02538 <span class="comment">   range, and the leading hexadecimal digit will be 0 (for denormals),</span>
+<a name="l02539"></a>02539 <span class="comment">   1 (normal numbers) or 2 (normal numbers rounded-away-from-zero with</span>
+<a name="l02540"></a>02540 <span class="comment">   any other digits zero).</span>
+<a name="l02541"></a>02541 <span class="comment">*/</span>
+<a name="l02542"></a>02542 <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>
+<a name="l02543"></a><a class="code" href="classllvm_1_1APFloat.html#a75a94f14098db903476027bbacf307d5">02543</a> <a class="code" href="classllvm_1_1APFloat.html#a75a94f14098db903476027bbacf307d5">APFloat::convertToHexString</a>(<span class="keywordtype">char</span> *dst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hexDigits,
+<a name="l02544"></a>02544                             <span class="keywordtype">bool</span> upperCase, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fe">roundingMode</a> rounding_mode)<span class="keyword"> const</span>
+<a name="l02545"></a>02545 <span class="keyword"></span>{
+<a name="l02546"></a>02546   <span class="keywordtype">char</span> *p;
+<a name="l02547"></a>02547 
+<a name="l02548"></a>02548   p = dst;
+<a name="l02549"></a>02549   <span class="keywordflow">if</span> (sign)
+<a name="l02550"></a>02550     *dst++ = <span class="charliteral">'-'</span>;
+<a name="l02551"></a>02551 
+<a name="l02552"></a>02552   <span class="keywordflow">switch</span> (category) {
+<a name="l02553"></a>02553   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>:
+<a name="l02554"></a>02554     <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fad5203242bc89eaa644dc7b7ba2371c1d" title="void *memcpy(void *s1, const void *s2, size_t n);">memcpy</a> (dst, upperCase ? <a class="code" href="APFloat_8cpp.html#a7a9dcda856681ca710637c95323ce9c6">infinityU</a>: <a class="code" href="APFloat_8cpp.html#a0977e6844c4d5463565fdd9bc4b6c44d">infinityL</a>, <span class="keyword">sizeof</span> <a class="code" href="APFloat_8cpp.html#a7a9dcda856681ca710637c95323ce9c6">infinityU</a> - 1);
+<a name="l02555"></a>02555     dst += <span class="keyword">sizeof</span> infinityL - 1;
+<a name="l02556"></a>02556     <span class="keywordflow">break</span>;
+<a name="l02557"></a>02557 
+<a name="l02558"></a>02558   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>:
+<a name="l02559"></a>02559     <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fad5203242bc89eaa644dc7b7ba2371c1d" title="void *memcpy(void *s1, const void *s2, size_t n);">memcpy</a> (dst, upperCase ? <a class="code" href="APFloat_8cpp.html#a7c308edd4d5bd059ee5cbae38f464084">NaNU</a>: <a class="code" href="APFloat_8cpp.html#ad415bb19cda3e6f052af23868a7bd415">NaNL</a>, <span class="keyword">sizeof</span> <a class="code" href="APFloat_8cpp.html#a7c308edd4d5bd059ee5cbae38f464084">NaNU</a> - 1);
+<a name="l02560"></a>02560     dst += <span class="keyword">sizeof</span> <a class="code" href="APFloat_8cpp.html#a7c308edd4d5bd059ee5cbae38f464084">NaNU</a> - 1;
+<a name="l02561"></a>02561     <span class="keywordflow">break</span>;
+<a name="l02562"></a>02562 
+<a name="l02563"></a>02563   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>:
+<a name="l02564"></a>02564     *dst++ = <span class="charliteral">'0'</span>;
+<a name="l02565"></a>02565     *dst++ = upperCase ? <span class="charliteral">'X'</span>: <span class="charliteral">'x'</span>;
+<a name="l02566"></a>02566     *dst++ = <span class="charliteral">'0'</span>;
+<a name="l02567"></a>02567     <span class="keywordflow">if</span> (hexDigits > 1) {
+<a name="l02568"></a>02568       *dst++ = <span class="charliteral">'.'</span>;
+<a name="l02569"></a>02569       <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa9f7f1b6be1144152902121f2463d0368" title="void *memset(void *b, int c, size_t len);">memset</a> (dst, <span class="charliteral">'0'</span>, hexDigits - 1);
+<a name="l02570"></a>02570       dst += hexDigits - 1;
+<a name="l02571"></a>02571     }
+<a name="l02572"></a>02572     *dst++ = upperCase ? <span class="charliteral">'P'</span>: <span class="charliteral">'p'</span>;
+<a name="l02573"></a>02573     *dst++ = <span class="charliteral">'0'</span>;
+<a name="l02574"></a>02574     <span class="keywordflow">break</span>;
+<a name="l02575"></a>02575 
+<a name="l02576"></a>02576   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>:
+<a name="l02577"></a>02577     dst = convertNormalToHexString (dst, hexDigits, upperCase, rounding_mode);
+<a name="l02578"></a>02578     <span class="keywordflow">break</span>;
+<a name="l02579"></a>02579   }
+<a name="l02580"></a>02580 
+<a name="l02581"></a>02581   *dst = 0;
+<a name="l02582"></a>02582 
+<a name="l02583"></a>02583   <span class="keywordflow">return</span> <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(dst - p);
+<a name="l02584"></a>02584 }
+<a name="l02585"></a>02585 
+<a name="l02586"></a>02586 <span class="comment">/* Does the hard work of outputting the correctly rounded hexadecimal</span>
+<a name="l02587"></a>02587 <span class="comment">   form of a normal floating point number with the specified number of</span>
+<a name="l02588"></a>02588 <span class="comment">   hexadecimal digits.  If HEXDIGITS is zero the minimum number of</span>
+<a name="l02589"></a>02589 <span class="comment">   digits necessary to print the value precisely is output.  */</span>
+<a name="l02590"></a>02590 <span class="keywordtype">char</span> *
+<a name="l02591"></a>02591 APFloat::convertNormalToHexString(<span class="keywordtype">char</span> *dst, <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> hexDigits,
+<a name="l02592"></a>02592                                   <span class="keywordtype">bool</span> upperCase,
+<a name="l02593"></a>02593                                   roundingMode rounding_mode)<span class="keyword"> const</span>
+<a name="l02594"></a>02594 <span class="keyword"></span>{
+<a name="l02595"></a>02595   <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> count, valueBits, shift, partsCount, outputDigits;
+<a name="l02596"></a>02596   <span class="keyword">const</span> <span class="keywordtype">char</span> *hexDigitChars;
+<a name="l02597"></a>02597   <span class="keyword">const</span> <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *significand;
+<a name="l02598"></a>02598   <span class="keywordtype">char</span> *p;
+<a name="l02599"></a>02599   <span class="keywordtype">bool</span> roundUp;
+<a name="l02600"></a>02600 
+<a name="l02601"></a>02601   *dst++ = <span class="charliteral">'0'</span>;
+<a name="l02602"></a>02602   *dst++ = upperCase ? <span class="charliteral">'X'</span>: <span class="charliteral">'x'</span>;
+<a name="l02603"></a>02603 
+<a name="l02604"></a>02604   roundUp = <span class="keyword">false</span>;
+<a name="l02605"></a>02605   hexDigitChars = upperCase ? <a class="code" href="APFloat_8cpp.html#a7f2bc01bca929634845a725ed2606ac8">hexDigitsUpper</a>: <a class="code" href="APFloat_8cpp.html#af9abe1eccbdf18c2b773fbbedac485f7">hexDigitsLower</a>;
+<a name="l02606"></a>02606 
+<a name="l02607"></a>02607   significand = significandParts();
+<a name="l02608"></a>02608   partsCount = partCount();
+<a name="l02609"></a>02609 
+<a name="l02610"></a>02610   <span class="comment">/* +3 because the first digit only uses the single integer bit, so</span>
+<a name="l02611"></a>02611 <span class="comment">     we have 3 virtual zero most-significant-bits.  */</span>
+<a name="l02612"></a>02612   valueBits = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> + 3;
+<a name="l02613"></a>02613   shift = integerPartWidth - valueBits % <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>;
+<a name="l02614"></a>02614 
+<a name="l02615"></a>02615   <span class="comment">/* The natural number of digits required ignoring trailing</span>
+<a name="l02616"></a>02616 <span class="comment">     insignificant zeroes.  */</span>
+<a name="l02617"></a>02617   outputDigits = (valueBits - significandLSB () + 3) / 4;
+<a name="l02618"></a>02618 
+<a name="l02619"></a>02619   <span class="comment">/* hexDigits of zero means use the required number for the</span>
+<a name="l02620"></a>02620 <span class="comment">     precision.  Otherwise, see if we are truncating.  If we are,</span>
+<a name="l02621"></a>02621 <span class="comment">     find out if we need to round away from zero.  */</span>
+<a name="l02622"></a>02622   <span class="keywordflow">if</span> (hexDigits) {
+<a name="l02623"></a>02623     <span class="keywordflow">if</span> (hexDigits < outputDigits) {
+<a name="l02624"></a>02624       <span class="comment">/* We are dropping non-zero bits, so need to check how to round.</span>
+<a name="l02625"></a>02625 <span class="comment">         "bits" is the number of dropped bits.  */</span>
+<a name="l02626"></a>02626       <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> bits;
+<a name="l02627"></a>02627       <a class="code" href="namespacellvm.html#a663d7637c110daee5beee1f03a9ac286">lostFraction</a> fraction;
+<a name="l02628"></a>02628 
+<a name="l02629"></a>02629       bits = valueBits - hexDigits * 4;
+<a name="l02630"></a>02630       fraction = <a class="code" href="APFloat_8cpp.html#abc47f2d3773defbbd5a684a71cbf2200">lostFractionThroughTruncation</a> (significand, partsCount, bits);
+<a name="l02631"></a>02631       roundUp = roundAwayFromZero(rounding_mode, fraction, bits);
+<a name="l02632"></a>02632     }
+<a name="l02633"></a>02633     outputDigits = hexDigits;
+<a name="l02634"></a>02634   }
+<a name="l02635"></a>02635 
+<a name="l02636"></a>02636   <span class="comment">/* Write the digits consecutively, and start writing in the location</span>
+<a name="l02637"></a>02637 <span class="comment">     of the hexadecimal point.  We move the most significant digit</span>
+<a name="l02638"></a>02638 <span class="comment">     left and add the hexadecimal point later.  */</span>
+<a name="l02639"></a>02639   p = ++dst;
+<a name="l02640"></a>02640 
+<a name="l02641"></a>02641   count = (valueBits + integerPartWidth - 1) / integerPartWidth;
+<a name="l02642"></a>02642 
+<a name="l02643"></a>02643   <span class="keywordflow">while</span> (outputDigits && count) {
+<a name="l02644"></a>02644     <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> part;
+<a name="l02645"></a>02645 
+<a name="l02646"></a>02646     <span class="comment">/* Put the most significant integerPartWidth bits in "part".  */</span>
+<a name="l02647"></a>02647     <span class="keywordflow">if</span> (--count == partsCount)
+<a name="l02648"></a>02648       part = 0;  <span class="comment">/* An imaginary higher zero part.  */</span>
+<a name="l02649"></a>02649     <span class="keywordflow">else</span>
+<a name="l02650"></a>02650       part = significand[count] << shift;
+<a name="l02651"></a>02651 
+<a name="l02652"></a>02652     <span class="keywordflow">if</span> (count && shift)
+<a name="l02653"></a>02653       part |= significand[count - 1] >> (integerPartWidth - shift);
+<a name="l02654"></a>02654 
+<a name="l02655"></a>02655     <span class="comment">/* Convert as much of "part" to hexdigits as we can.  */</span>
+<a name="l02656"></a>02656     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> curDigits = integerPartWidth / 4;
+<a name="l02657"></a>02657 
+<a name="l02658"></a>02658     <span class="keywordflow">if</span> (curDigits > outputDigits)
+<a name="l02659"></a>02659       curDigits = outputDigits;
+<a name="l02660"></a>02660     dst += <a class="code" href="APFloat_8cpp.html#addf55de6ea6941c9fabcbaa054128767">partAsHex</a> (dst, part, curDigits, hexDigitChars);
+<a name="l02661"></a>02661     outputDigits -= curDigits;
+<a name="l02662"></a>02662   }
+<a name="l02663"></a>02663 
+<a name="l02664"></a>02664   <span class="keywordflow">if</span> (roundUp) {
+<a name="l02665"></a>02665     <span class="keywordtype">char</span> *q = dst;
+<a name="l02666"></a>02666 
+<a name="l02667"></a>02667     <span class="comment">/* Note that hexDigitChars has a trailing '0'.  */</span>
+<a name="l02668"></a>02668     <span class="keywordflow">do</span> {
+<a name="l02669"></a>02669       q--;
+<a name="l02670"></a>02670       *q = hexDigitChars[<a class="code" href="APFloat_8cpp.html#a10de524dcc1e204bf4ff4592d45f2dd5">hexDigitValue</a> (*q) + 1];
+<a name="l02671"></a>02671     } <span class="keywordflow">while</span> (*q == <span class="charliteral">'0'</span>);
+<a name="l02672"></a>02672     assert(q >= p);
+<a name="l02673"></a>02673   } <span class="keywordflow">else</span> {
+<a name="l02674"></a>02674     <span class="comment">/* Add trailing zeroes.  */</span>
+<a name="l02675"></a>02675     <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa9f7f1b6be1144152902121f2463d0368" title="void *memset(void *b, int c, size_t len);">memset</a> (dst, <span class="charliteral">'0'</span>, outputDigits);
+<a name="l02676"></a>02676     dst += outputDigits;
+<a name="l02677"></a>02677   }
+<a name="l02678"></a>02678 
+<a name="l02679"></a>02679   <span class="comment">/* Move the most significant digit to before the point, and if there</span>
+<a name="l02680"></a>02680 <span class="comment">     is something after the decimal point add it.  This must come</span>
+<a name="l02681"></a>02681 <span class="comment">     after rounding above.  */</span>
+<a name="l02682"></a>02682   p[-1] = p[0];
+<a name="l02683"></a>02683   <span class="keywordflow">if</span> (dst -1 == p)
+<a name="l02684"></a>02684     dst--;
+<a name="l02685"></a>02685   <span class="keywordflow">else</span>
+<a name="l02686"></a>02686     p[0] = <span class="charliteral">'.'</span>;
+<a name="l02687"></a>02687 
+<a name="l02688"></a>02688   <span class="comment">/* Finally output the exponent.  */</span>
+<a name="l02689"></a>02689   *dst++ = upperCase ? <span class="charliteral">'P'</span>: <span class="charliteral">'p'</span>;
+<a name="l02690"></a>02690 
+<a name="l02691"></a>02691   <span class="keywordflow">return</span> <a class="code" href="APFloat_8cpp.html#a185b730c3849640bd95163f73225b7b6">writeSignedDecimal</a> (dst, exponent);
+<a name="l02692"></a>02692 }
+<a name="l02693"></a>02693 
+<a name="l02694"></a><a class="code" href="namespacellvm.html#a4dd787942e0bd9f46c0cc2642cce0a4c">02694</a> <a class="code" href="classllvm_1_1hash__code.html" title="An opaque object representing a hash code.">hash_code</a> <a class="code" href="namespacellvm.html#a4dd787942e0bd9f46c0cc2642cce0a4c">llvm::hash_value</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> &Arg) {
+<a name="l02695"></a>02695   <span class="keywordflow">if</span> (Arg.category != <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">APFloat::fcNormal</a>)
+<a name="l02696"></a>02696     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a2b33f2166f38124ec3081c2fd59672f7">hash_combine</a>((uint8_t)Arg.category,
+<a name="l02697"></a>02697                         <span class="comment">// NaN has no sign, fix it at zero.</span>
+<a name="l02698"></a>02698                         Arg.<a class="code" href="classllvm_1_1APFloat.html#a9f3ff4f659fd49bd86d7a35f69142e11">isNaN</a>() ? (uint8_t)0 : (uint8_t)Arg.sign,
+<a name="l02699"></a>02699                         Arg.semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>);
+<a name="l02700"></a>02700 
+<a name="l02701"></a>02701   <span class="comment">// Normal floats need their exponent and significand hashed.</span>
+<a name="l02702"></a>02702   <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a2b33f2166f38124ec3081c2fd59672f7">hash_combine</a>((uint8_t)Arg.category, (uint8_t)Arg.sign,
+<a name="l02703"></a>02703                       Arg.semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>, Arg.exponent,
+<a name="l02704"></a>02704                       <a class="code" href="namespacellvm.html#af80edfc5e42059e045aa7bf7fe42bee3" title="Compute a hash_code for a sequence of values.">hash_combine_range</a>(
+<a name="l02705"></a>02705                         Arg.significandParts(),
+<a name="l02706"></a>02706                         Arg.significandParts() + Arg.partCount()));
+<a name="l02707"></a>02707 }
+<a name="l02708"></a>02708 
+<a name="l02709"></a>02709 <span class="comment">// Conversion from APFloat to/from host float/double.  It may eventually be</span>
+<a name="l02710"></a>02710 <span class="comment">// possible to eliminate these and have everybody deal with APFloats, but that</span>
+<a name="l02711"></a>02711 <span class="comment">// will take a while.  This approach will not easily extend to long double.</span>
+<a name="l02712"></a>02712 <span class="comment">// Current implementation requires integerPartWidth==64, which is correct at</span>
+<a name="l02713"></a>02713 <span class="comment">// the moment but could be made more general.</span>
+<a name="l02714"></a>02714 
+<a name="l02715"></a>02715 <span class="comment">// Denormals have exponent minExponent in APFloat, but minExponent-1 in</span>
+<a name="l02716"></a>02716 <span class="comment">// the actual IEEE respresentations.  We compensate for that here.</span>
+<a name="l02717"></a>02717 
+<a name="l02718"></a>02718 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>
+<a name="l02719"></a>02719 APFloat::convertF80LongDoubleAPFloatToAPInt()<span class="keyword"> const</span>
+<a name="l02720"></a>02720 <span class="keyword"></span>{
+<a name="l02721"></a>02721   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a8fb913b1bed6dfe011696fe4e287ca70">x87DoubleExtended</a>);
+<a name="l02722"></a>02722   assert(partCount()==2);
+<a name="l02723"></a>02723 
+<a name="l02724"></a>02724   uint64_t myexponent, mysignificand;
+<a name="l02725"></a>02725 
+<a name="l02726"></a>02726   <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l02727"></a>02727     myexponent = exponent+16383; <span class="comment">//bias</span>
+<a name="l02728"></a>02728     mysignificand = significandParts()[0];
+<a name="l02729"></a>02729     <span class="keywordflow">if</span> (myexponent==1 && !(mysignificand & 0x8000000000000000ULL))
+<a name="l02730"></a>02730       myexponent = 0;   <span class="comment">// denormal</span>
+<a name="l02731"></a>02731   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>) {
+<a name="l02732"></a>02732     myexponent = 0;
+<a name="l02733"></a>02733     mysignificand = 0;
+<a name="l02734"></a>02734   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>) {
+<a name="l02735"></a>02735     myexponent = 0x7fff;
+<a name="l02736"></a>02736     mysignificand = 0x8000000000000000ULL;
+<a name="l02737"></a>02737   } <span class="keywordflow">else</span> {
+<a name="l02738"></a>02738     assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a> && <span class="stringliteral">"Unknown category"</span>);
+<a name="l02739"></a>02739     myexponent = 0x7fff;
+<a name="l02740"></a>02740     mysignificand = significandParts()[0];
+<a name="l02741"></a>02741   }
+<a name="l02742"></a>02742 
+<a name="l02743"></a>02743   uint64_t words[2];
+<a name="l02744"></a>02744   words[0] = mysignificand;
+<a name="l02745"></a>02745   words[1] =  ((uint64_t)(sign & 1) << 15) |
+<a name="l02746"></a>02746               (myexponent & 0x7fffLL);
+<a name="l02747"></a>02747   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(80, words);
+<a name="l02748"></a>02748 }
+<a name="l02749"></a>02749 
+<a name="l02750"></a>02750 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>
+<a name="l02751"></a>02751 APFloat::convertPPCDoubleDoubleAPFloatToAPInt()<span class="keyword"> const</span>
+<a name="l02752"></a>02752 <span class="keyword"></span>{
+<a name="l02753"></a>02753   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a2065ce1bee75d8e883077a752dc33081">PPCDoubleDouble</a>);
+<a name="l02754"></a>02754   assert(partCount()==2);
+<a name="l02755"></a>02755 
+<a name="l02756"></a>02756   uint64_t words[2];
+<a name="l02757"></a>02757   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l02758"></a>02758   <span class="keywordtype">bool</span> losesInfo;
+<a name="l02759"></a>02759 
+<a name="l02760"></a>02760   <span class="comment">// Convert number to double.  To avoid spurious underflows, we re-</span>
+<a name="l02761"></a>02761   <span class="comment">// normalize against the "double" minExponent first, and only *then*</span>
+<a name="l02762"></a>02762   <span class="comment">// truncate the mantissa.  The result of that second conversion</span>
+<a name="l02763"></a>02763   <span class="comment">// may be inexact, but should never underflow.</span>
+<a name="l02764"></a>02764   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> extended(*<span class="keyword">this</span>);
+<a name="l02765"></a>02765   <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> extendedSemantics = *semantics;
+<a name="l02766"></a>02766   extendedSemantics.<a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a> = <a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">IEEEdouble</a>.<a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a>;
+<a name="l02767"></a>02767   fs = extended.convert(extendedSemantics, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>, &losesInfo);
+<a name="l02768"></a>02768   assert(fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> && !losesInfo);
+<a name="l02769"></a>02769   (void)fs;
+<a name="l02770"></a>02770 
+<a name="l02771"></a>02771   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> u(extended);
+<a name="l02772"></a>02772   fs = u.convert(<a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">IEEEdouble</a>, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>, &losesInfo);
+<a name="l02773"></a>02773   assert(fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> || fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a9b6cce9cb9cdb5ceca4b5cf796eb7cd2">opInexact</a>);
+<a name="l02774"></a>02774   (void)fs;
+<a name="l02775"></a>02775   words[0] = *u.convertDoubleAPFloatToAPInt().getRawData();
+<a name="l02776"></a>02776 
+<a name="l02777"></a>02777   <span class="comment">// If conversion was exact or resulted in a special case, we're done;</span>
+<a name="l02778"></a>02778   <span class="comment">// just set the second double to zero.  Otherwise, re-convert back to</span>
+<a name="l02779"></a>02779   <span class="comment">// the extended format and compute the difference.  This now should</span>
+<a name="l02780"></a>02780   <span class="comment">// convert exactly to double.</span>
+<a name="l02781"></a>02781   <span class="keywordflow">if</span> (u.category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> && losesInfo) {
+<a name="l02782"></a>02782     fs = u.convert(extendedSemantics, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>, &losesInfo);
+<a name="l02783"></a>02783     assert(fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> && !losesInfo);
+<a name="l02784"></a>02784     (void)fs;
+<a name="l02785"></a>02785 
+<a name="l02786"></a>02786     <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> v(extended);
+<a name="l02787"></a>02787     v.subtract(u, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l02788"></a>02788     fs = v.convert(<a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">IEEEdouble</a>, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>, &losesInfo);
+<a name="l02789"></a>02789     assert(fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> && !losesInfo);
+<a name="l02790"></a>02790     (void)fs;
+<a name="l02791"></a>02791     words[1] = *v.convertDoubleAPFloatToAPInt().getRawData();
+<a name="l02792"></a>02792   } <span class="keywordflow">else</span> {
+<a name="l02793"></a>02793     words[1] = 0;
+<a name="l02794"></a>02794   }
+<a name="l02795"></a>02795 
+<a name="l02796"></a>02796   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(128, words);
+<a name="l02797"></a>02797 }
+<a name="l02798"></a>02798 
+<a name="l02799"></a>02799 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>
+<a name="l02800"></a>02800 APFloat::convertQuadrupleAPFloatToAPInt()<span class="keyword"> const</span>
+<a name="l02801"></a>02801 <span class="keyword"></span>{
+<a name="l02802"></a>02802   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a05a01faa391a74f808c372231207cf1a">IEEEquad</a>);
+<a name="l02803"></a>02803   assert(partCount()==2);
+<a name="l02804"></a>02804 
+<a name="l02805"></a>02805   uint64_t myexponent, mysignificand, mysignificand2;
+<a name="l02806"></a>02806 
+<a name="l02807"></a>02807   <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l02808"></a>02808     myexponent = exponent+16383; <span class="comment">//bias</span>
+<a name="l02809"></a>02809     mysignificand = significandParts()[0];
+<a name="l02810"></a>02810     mysignificand2 = significandParts()[1];
+<a name="l02811"></a>02811     <span class="keywordflow">if</span> (myexponent==1 && !(mysignificand2 & 0x1000000000000LL))
+<a name="l02812"></a>02812       myexponent = 0;   <span class="comment">// denormal</span>
+<a name="l02813"></a>02813   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>) {
+<a name="l02814"></a>02814     myexponent = 0;
+<a name="l02815"></a>02815     mysignificand = mysignificand2 = 0;
+<a name="l02816"></a>02816   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>) {
+<a name="l02817"></a>02817     myexponent = 0x7fff;
+<a name="l02818"></a>02818     mysignificand = mysignificand2 = 0;
+<a name="l02819"></a>02819   } <span class="keywordflow">else</span> {
+<a name="l02820"></a>02820     assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a> && <span class="stringliteral">"Unknown category!"</span>);
+<a name="l02821"></a>02821     myexponent = 0x7fff;
+<a name="l02822"></a>02822     mysignificand = significandParts()[0];
+<a name="l02823"></a>02823     mysignificand2 = significandParts()[1];
+<a name="l02824"></a>02824   }
+<a name="l02825"></a>02825 
+<a name="l02826"></a>02826   uint64_t words[2];
+<a name="l02827"></a>02827   words[0] = mysignificand;
+<a name="l02828"></a>02828   words[1] = ((uint64_t)(sign & 1) << 63) |
+<a name="l02829"></a>02829              ((myexponent & 0x7fff) << 48) |
+<a name="l02830"></a>02830              (mysignificand2 & 0xffffffffffffLL);
+<a name="l02831"></a>02831 
+<a name="l02832"></a>02832   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(128, words);
+<a name="l02833"></a>02833 }
+<a name="l02834"></a>02834 
+<a name="l02835"></a>02835 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>
+<a name="l02836"></a>02836 APFloat::convertDoubleAPFloatToAPInt()<span class="keyword"> const</span>
+<a name="l02837"></a>02837 <span class="keyword"></span>{
+<a name="l02838"></a>02838   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">IEEEdouble</a>);
+<a name="l02839"></a>02839   assert(partCount()==1);
+<a name="l02840"></a>02840 
+<a name="l02841"></a>02841   uint64_t myexponent, mysignificand;
+<a name="l02842"></a>02842 
+<a name="l02843"></a>02843   <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l02844"></a>02844     myexponent = exponent+1023; <span class="comment">//bias</span>
+<a name="l02845"></a>02845     mysignificand = *significandParts();
+<a name="l02846"></a>02846     <span class="keywordflow">if</span> (myexponent==1 && !(mysignificand & 0x10000000000000LL))
+<a name="l02847"></a>02847       myexponent = 0;   <span class="comment">// denormal</span>
+<a name="l02848"></a>02848   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>) {
+<a name="l02849"></a>02849     myexponent = 0;
+<a name="l02850"></a>02850     mysignificand = 0;
+<a name="l02851"></a>02851   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>) {
+<a name="l02852"></a>02852     myexponent = 0x7ff;
+<a name="l02853"></a>02853     mysignificand = 0;
+<a name="l02854"></a>02854   } <span class="keywordflow">else</span> {
+<a name="l02855"></a>02855     assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a> && <span class="stringliteral">"Unknown category!"</span>);
+<a name="l02856"></a>02856     myexponent = 0x7ff;
+<a name="l02857"></a>02857     mysignificand = *significandParts();
+<a name="l02858"></a>02858   }
+<a name="l02859"></a>02859 
+<a name="l02860"></a>02860   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(64, ((((uint64_t)(sign & 1) << 63) |
+<a name="l02861"></a>02861                      ((myexponent & 0x7ff) <<  52) |
+<a name="l02862"></a>02862                      (mysignificand & 0xfffffffffffffLL))));
+<a name="l02863"></a>02863 }
+<a name="l02864"></a>02864 
+<a name="l02865"></a>02865 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>
+<a name="l02866"></a>02866 APFloat::convertFloatAPFloatToAPInt()<span class="keyword"> const</span>
+<a name="l02867"></a>02867 <span class="keyword"></span>{
+<a name="l02868"></a>02868   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a43f6e79227388f373628e8ddd27df965">IEEEsingle</a>);
+<a name="l02869"></a>02869   assert(partCount()==1);
+<a name="l02870"></a>02870 
+<a name="l02871"></a>02871   uint32_t myexponent, mysignificand;
+<a name="l02872"></a>02872 
+<a name="l02873"></a>02873   <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l02874"></a>02874     myexponent = exponent+127; <span class="comment">//bias</span>
+<a name="l02875"></a>02875     mysignificand = (uint32_t)*significandParts();
+<a name="l02876"></a>02876     <span class="keywordflow">if</span> (myexponent == 1 && !(mysignificand & 0x800000))
+<a name="l02877"></a>02877       myexponent = 0;   <span class="comment">// denormal</span>
+<a name="l02878"></a>02878   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>) {
+<a name="l02879"></a>02879     myexponent = 0;
+<a name="l02880"></a>02880     mysignificand = 0;
+<a name="l02881"></a>02881   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>) {
+<a name="l02882"></a>02882     myexponent = 0xff;
+<a name="l02883"></a>02883     mysignificand = 0;
+<a name="l02884"></a>02884   } <span class="keywordflow">else</span> {
+<a name="l02885"></a>02885     assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a> && <span class="stringliteral">"Unknown category!"</span>);
+<a name="l02886"></a>02886     myexponent = 0xff;
+<a name="l02887"></a>02887     mysignificand = (uint32_t)*significandParts();
+<a name="l02888"></a>02888   }
+<a name="l02889"></a>02889 
+<a name="l02890"></a>02890   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(32, (((sign&1) << 31) | ((myexponent&0xff) << 23) |
+<a name="l02891"></a>02891                     (mysignificand & 0x7fffff)));
+<a name="l02892"></a>02892 }
+<a name="l02893"></a>02893 
+<a name="l02894"></a>02894 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>
+<a name="l02895"></a>02895 APFloat::convertHalfAPFloatToAPInt()<span class="keyword"> const</span>
+<a name="l02896"></a>02896 <span class="keyword"></span>{
+<a name="l02897"></a>02897   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#acd77961b2028e148c829b18ceaef81c4">IEEEhalf</a>);
+<a name="l02898"></a>02898   assert(partCount()==1);
+<a name="l02899"></a>02899 
+<a name="l02900"></a>02900   uint32_t myexponent, mysignificand;
+<a name="l02901"></a>02901 
+<a name="l02902"></a>02902   <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l02903"></a>02903     myexponent = exponent+15; <span class="comment">//bias</span>
+<a name="l02904"></a>02904     mysignificand = (uint32_t)*significandParts();
+<a name="l02905"></a>02905     <span class="keywordflow">if</span> (myexponent == 1 && !(mysignificand & 0x400))
+<a name="l02906"></a>02906       myexponent = 0;   <span class="comment">// denormal</span>
+<a name="l02907"></a>02907   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>) {
+<a name="l02908"></a>02908     myexponent = 0;
+<a name="l02909"></a>02909     mysignificand = 0;
+<a name="l02910"></a>02910   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (category==<a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>) {
+<a name="l02911"></a>02911     myexponent = 0x1f;
+<a name="l02912"></a>02912     mysignificand = 0;
+<a name="l02913"></a>02913   } <span class="keywordflow">else</span> {
+<a name="l02914"></a>02914     assert(category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a> && <span class="stringliteral">"Unknown category!"</span>);
+<a name="l02915"></a>02915     myexponent = 0x1f;
+<a name="l02916"></a>02916     mysignificand = (uint32_t)*significandParts();
+<a name="l02917"></a>02917   }
+<a name="l02918"></a>02918 
+<a name="l02919"></a>02919   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(16, (((sign&1) << 15) | ((myexponent&0x1f) << 10) |
+<a name="l02920"></a>02920                     (mysignificand & 0x3ff)));
+<a name="l02921"></a>02921 }
+<a name="l02922"></a>02922 
+<a name="l02923"></a>02923 <span class="comment">// This function creates an APInt that is just a bit map of the floating</span>
+<a name="l02924"></a>02924 <span class="comment">// point constant as it would appear in memory.  It is not a conversion,</span>
+<a name="l02925"></a>02925 <span class="comment">// and treating the result as a normal integer is unlikely to be useful.</span>
+<a name="l02926"></a>02926 
+<a name="l02927"></a>02927 <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>
+<a name="l02928"></a><a class="code" href="classllvm_1_1APFloat.html#ae98bca797c2e2ea2fb639935b01da1ae">02928</a> <a class="code" href="classllvm_1_1APFloat.html#ae98bca797c2e2ea2fb639935b01da1ae">APFloat::bitcastToAPInt</a>()<span class="keyword"> const</span>
+<a name="l02929"></a>02929 <span class="keyword"></span>{
+<a name="l02930"></a>02930   <span class="keywordflow">if</span> (semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#acd77961b2028e148c829b18ceaef81c4">IEEEhalf</a>)
+<a name="l02931"></a>02931     <span class="keywordflow">return</span> convertHalfAPFloatToAPInt();
+<a name="l02932"></a>02932 
+<a name="l02933"></a>02933   <span class="keywordflow">if</span> (semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a43f6e79227388f373628e8ddd27df965">IEEEsingle</a>)
+<a name="l02934"></a>02934     <span class="keywordflow">return</span> convertFloatAPFloatToAPInt();
+<a name="l02935"></a>02935 
+<a name="l02936"></a>02936   <span class="keywordflow">if</span> (semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">IEEEdouble</a>)
+<a name="l02937"></a>02937     <span class="keywordflow">return</span> convertDoubleAPFloatToAPInt();
+<a name="l02938"></a>02938 
+<a name="l02939"></a>02939   <span class="keywordflow">if</span> (semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a05a01faa391a74f808c372231207cf1a">IEEEquad</a>)
+<a name="l02940"></a>02940     <span class="keywordflow">return</span> convertQuadrupleAPFloatToAPInt();
+<a name="l02941"></a>02941 
+<a name="l02942"></a>02942   <span class="keywordflow">if</span> (semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a2065ce1bee75d8e883077a752dc33081">PPCDoubleDouble</a>)
+<a name="l02943"></a>02943     <span class="keywordflow">return</span> convertPPCDoubleDoubleAPFloatToAPInt();
+<a name="l02944"></a>02944 
+<a name="l02945"></a>02945   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a8fb913b1bed6dfe011696fe4e287ca70">x87DoubleExtended</a> &&
+<a name="l02946"></a>02946          <span class="stringliteral">"unknown format!"</span>);
+<a name="l02947"></a>02947   <span class="keywordflow">return</span> convertF80LongDoubleAPFloatToAPInt();
+<a name="l02948"></a>02948 }
+<a name="l02949"></a>02949 
+<a name="l02950"></a>02950 <span class="keywordtype">float</span>
+<a name="l02951"></a><a class="code" href="classllvm_1_1APFloat.html#a6ff0b1a4e71ed8e1612ef4dc158a31bd">02951</a> <a class="code" href="classllvm_1_1APFloat.html#a6ff0b1a4e71ed8e1612ef4dc158a31bd">APFloat::convertToFloat</a>()<span class="keyword"> const</span>
+<a name="l02952"></a>02952 <span class="keyword"></span>{
+<a name="l02953"></a>02953   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#a43f6e79227388f373628e8ddd27df965">IEEEsingle</a> &&
+<a name="l02954"></a>02954          <span class="stringliteral">"Float semantics are not IEEEsingle"</span>);
+<a name="l02955"></a>02955   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> api = <a class="code" href="classllvm_1_1APFloat.html#ae98bca797c2e2ea2fb639935b01da1ae">bitcastToAPInt</a>();
+<a name="l02956"></a>02956   <span class="keywordflow">return</span> api.<a class="code" href="classllvm_1_1APInt.html#a26647e6f12a673e00ae384054897ca85" title="Converts APInt bits to a double.">bitsToFloat</a>();
+<a name="l02957"></a>02957 }
+<a name="l02958"></a>02958 
+<a name="l02959"></a>02959 <span class="keywordtype">double</span>
+<a name="l02960"></a><a class="code" href="classllvm_1_1APFloat.html#ac1d22ff29d33e8d6d7dc8103adf696bf">02960</a> <a class="code" href="classllvm_1_1APFloat.html#ac1d22ff29d33e8d6d7dc8103adf696bf">APFloat::convertToDouble</a>()<span class="keyword"> const</span>
+<a name="l02961"></a>02961 <span class="keyword"></span>{
+<a name="l02962"></a>02962   assert(semantics == (<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">llvm::fltSemantics</a>*)&<a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">IEEEdouble</a> &&
+<a name="l02963"></a>02963          <span class="stringliteral">"Float semantics are not IEEEdouble"</span>);
+<a name="l02964"></a>02964   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> api = <a class="code" href="classllvm_1_1APFloat.html#ae98bca797c2e2ea2fb639935b01da1ae">bitcastToAPInt</a>();
+<a name="l02965"></a>02965   <span class="keywordflow">return</span> api.<a class="code" href="classllvm_1_1APInt.html#a95a104def8fd1339c19655ac95f4811e" title="Converts APInt bits to a double.">bitsToDouble</a>();
+<a name="l02966"></a>02966 }
+<a name="l02967"></a>02967 <span class="comment"></span>
+<a name="l02968"></a>02968 <span class="comment">/// Integer bit is explicit in this format.  Intel hardware (387 and later)</span>
+<a name="l02969"></a>02969 <span class="comment">/// does not support these bit patterns:</span>
+<a name="l02970"></a>02970 <span class="comment">///  exponent = all 1's, integer bit 0, significand 0 ("pseudoinfinity")</span>
+<a name="l02971"></a>02971 <span class="comment">///  exponent = all 1's, integer bit 0, significand nonzero ("pseudoNaN")</span>
+<a name="l02972"></a>02972 <span class="comment">///  exponent = 0, integer bit 1 ("pseudodenormal")</span>
+<a name="l02973"></a>02973 <span class="comment">///  exponent!=0 nor all 1's, integer bit 0 ("unnormal")</span>
+<a name="l02974"></a>02974 <span class="comment">/// At the moment, the first two are treated as NaNs, the second two as Normal.</span>
+<a name="l02975"></a>02975 <span class="comment"></span><span class="keywordtype">void</span>
+<a name="l02976"></a>02976 APFloat::initFromF80LongDoubleAPInt(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &api)
+<a name="l02977"></a>02977 {
+<a name="l02978"></a>02978   assert(api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==80);
+<a name="l02979"></a>02979   uint64_t i1 = api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>()[0];
+<a name="l02980"></a>02980   uint64_t i2 = api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>()[1];
+<a name="l02981"></a>02981   uint64_t myexponent = (i2 & 0x7fff);
+<a name="l02982"></a>02982   uint64_t mysignificand = i1;
+<a name="l02983"></a>02983 
+<a name="l02984"></a>02984   initialize(&<a class="code" href="classllvm_1_1APFloat.html#a8fb913b1bed6dfe011696fe4e287ca70">APFloat::x87DoubleExtended</a>);
+<a name="l02985"></a>02985   assert(partCount()==2);
+<a name="l02986"></a>02986 
+<a name="l02987"></a>02987   sign = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(i2>>15);
+<a name="l02988"></a>02988   <span class="keywordflow">if</span> (myexponent==0 && mysignificand==0) {
+<a name="l02989"></a>02989     <span class="comment">// exponent, significand meaningless</span>
+<a name="l02990"></a>02990     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l02991"></a>02991   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0x7fff && mysignificand==0x8000000000000000ULL) {
+<a name="l02992"></a>02992     <span class="comment">// exponent, significand meaningless</span>
+<a name="l02993"></a>02993     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l02994"></a>02994   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0x7fff && mysignificand!=0x8000000000000000ULL) {
+<a name="l02995"></a>02995     <span class="comment">// exponent meaningless</span>
+<a name="l02996"></a>02996     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l02997"></a>02997     significandParts()[0] = mysignificand;
+<a name="l02998"></a>02998     significandParts()[1] = 0;
+<a name="l02999"></a>02999   } <span class="keywordflow">else</span> {
+<a name="l03000"></a>03000     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l03001"></a>03001     exponent = myexponent - 16383;
+<a name="l03002"></a>03002     significandParts()[0] = mysignificand;
+<a name="l03003"></a>03003     significandParts()[1] = 0;
+<a name="l03004"></a>03004     <span class="keywordflow">if</span> (myexponent==0)          <span class="comment">// denormal</span>
+<a name="l03005"></a>03005       exponent = -16382;
+<a name="l03006"></a>03006   }
+<a name="l03007"></a>03007 }
+<a name="l03008"></a>03008 
+<a name="l03009"></a>03009 <span class="keywordtype">void</span>
+<a name="l03010"></a>03010 APFloat::initFromPPCDoubleDoubleAPInt(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &api)
+<a name="l03011"></a>03011 {
+<a name="l03012"></a>03012   assert(api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==128);
+<a name="l03013"></a>03013   uint64_t i1 = api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>()[0];
+<a name="l03014"></a>03014   uint64_t i2 = api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>()[1];
+<a name="l03015"></a>03015   <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8">opStatus</a> fs;
+<a name="l03016"></a>03016   <span class="keywordtype">bool</span> losesInfo;
+<a name="l03017"></a>03017 
+<a name="l03018"></a>03018   <span class="comment">// Get the first double and convert to our format.</span>
+<a name="l03019"></a>03019   initFromDoubleAPInt(<a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(64, i1));
+<a name="l03020"></a>03020   fs = <a class="code" href="classllvm_1_1APFloat.html#a4fa2f1464bb4f645082d8aa0e0a9bc0e">convert</a>(<a class="code" href="classllvm_1_1APFloat.html#a2065ce1bee75d8e883077a752dc33081">PPCDoubleDouble</a>, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>, &losesInfo);
+<a name="l03021"></a>03021   assert(fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> && !losesInfo);
+<a name="l03022"></a>03022   (void)fs;
+<a name="l03023"></a>03023 
+<a name="l03024"></a>03024   <span class="comment">// Unless we have a special case, add in second double.</span>
+<a name="l03025"></a>03025   <span class="keywordflow">if</span> (category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>) {
+<a name="l03026"></a>03026     <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> v(<a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>(64, i2));
+<a name="l03027"></a>03027     fs = v.convert(<a class="code" href="classllvm_1_1APFloat.html#a2065ce1bee75d8e883077a752dc33081">PPCDoubleDouble</a>, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>, &losesInfo);
+<a name="l03028"></a>03028     assert(fs == <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a> && !losesInfo);
+<a name="l03029"></a>03029     (void)fs;
+<a name="l03030"></a>03030 
+<a name="l03031"></a>03031     <a class="code" href="classllvm_1_1APFloat.html#a8c2e1efe8d928179051cf852405f3fff">add</a>(v, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>);
+<a name="l03032"></a>03032   }
+<a name="l03033"></a>03033 }
+<a name="l03034"></a>03034 
+<a name="l03035"></a>03035 <span class="keywordtype">void</span>
+<a name="l03036"></a>03036 APFloat::initFromQuadrupleAPInt(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &api)
+<a name="l03037"></a>03037 {
+<a name="l03038"></a>03038   assert(api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==128);
+<a name="l03039"></a>03039   uint64_t i1 = api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>()[0];
+<a name="l03040"></a>03040   uint64_t i2 = api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>()[1];
+<a name="l03041"></a>03041   uint64_t myexponent = (i2 >> 48) & 0x7fff;
+<a name="l03042"></a>03042   uint64_t mysignificand  = i1;
+<a name="l03043"></a>03043   uint64_t mysignificand2 = i2 & 0xffffffffffffLL;
+<a name="l03044"></a>03044 
+<a name="l03045"></a>03045   initialize(&<a class="code" href="classllvm_1_1APFloat.html#a05a01faa391a74f808c372231207cf1a">APFloat::IEEEquad</a>);
+<a name="l03046"></a>03046   assert(partCount()==2);
+<a name="l03047"></a>03047 
+<a name="l03048"></a>03048   sign = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(i2>>63);
+<a name="l03049"></a>03049   <span class="keywordflow">if</span> (myexponent==0 &&
+<a name="l03050"></a>03050       (mysignificand==0 && mysignificand2==0)) {
+<a name="l03051"></a>03051     <span class="comment">// exponent, significand meaningless</span>
+<a name="l03052"></a>03052     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l03053"></a>03053   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0x7fff &&
+<a name="l03054"></a>03054              (mysignificand==0 && mysignificand2==0)) {
+<a name="l03055"></a>03055     <span class="comment">// exponent, significand meaningless</span>
+<a name="l03056"></a>03056     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l03057"></a>03057   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0x7fff &&
+<a name="l03058"></a>03058              (mysignificand!=0 || mysignificand2 !=0)) {
+<a name="l03059"></a>03059     <span class="comment">// exponent meaningless</span>
+<a name="l03060"></a>03060     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l03061"></a>03061     significandParts()[0] = mysignificand;
+<a name="l03062"></a>03062     significandParts()[1] = mysignificand2;
+<a name="l03063"></a>03063   } <span class="keywordflow">else</span> {
+<a name="l03064"></a>03064     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l03065"></a>03065     exponent = myexponent - 16383;
+<a name="l03066"></a>03066     significandParts()[0] = mysignificand;
+<a name="l03067"></a>03067     significandParts()[1] = mysignificand2;
+<a name="l03068"></a>03068     <span class="keywordflow">if</span> (myexponent==0)          <span class="comment">// denormal</span>
+<a name="l03069"></a>03069       exponent = -16382;
+<a name="l03070"></a>03070     <span class="keywordflow">else</span>
+<a name="l03071"></a>03071       significandParts()[1] |= 0x1000000000000LL;  <span class="comment">// integer bit</span>
+<a name="l03072"></a>03072   }
+<a name="l03073"></a>03073 }
+<a name="l03074"></a>03074 
+<a name="l03075"></a>03075 <span class="keywordtype">void</span>
+<a name="l03076"></a>03076 APFloat::initFromDoubleAPInt(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &api)
+<a name="l03077"></a>03077 {
+<a name="l03078"></a>03078   assert(api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==64);
+<a name="l03079"></a>03079   uint64_t i = *api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>();
+<a name="l03080"></a>03080   uint64_t myexponent = (i >> 52) & 0x7ff;
+<a name="l03081"></a>03081   uint64_t mysignificand = i & 0xfffffffffffffLL;
+<a name="l03082"></a>03082 
+<a name="l03083"></a>03083   initialize(&<a class="code" href="classllvm_1_1APFloat.html#aac03c2635e359347d396ddf4d7963b89">APFloat::IEEEdouble</a>);
+<a name="l03084"></a>03084   assert(partCount()==1);
+<a name="l03085"></a>03085 
+<a name="l03086"></a>03086   sign = <span class="keyword">static_cast<</span><span class="keywordtype">unsigned</span> <span class="keywordtype">int</span><span class="keyword">></span>(i>>63);
+<a name="l03087"></a>03087   <span class="keywordflow">if</span> (myexponent==0 && mysignificand==0) {
+<a name="l03088"></a>03088     <span class="comment">// exponent, significand meaningless</span>
+<a name="l03089"></a>03089     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l03090"></a>03090   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0x7ff && mysignificand==0) {
+<a name="l03091"></a>03091     <span class="comment">// exponent, significand meaningless</span>
+<a name="l03092"></a>03092     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l03093"></a>03093   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0x7ff && mysignificand!=0) {
+<a name="l03094"></a>03094     <span class="comment">// exponent meaningless</span>
+<a name="l03095"></a>03095     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l03096"></a>03096     *significandParts() = mysignificand;
+<a name="l03097"></a>03097   } <span class="keywordflow">else</span> {
+<a name="l03098"></a>03098     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l03099"></a>03099     exponent = myexponent - 1023;
+<a name="l03100"></a>03100     *significandParts() = mysignificand;
+<a name="l03101"></a>03101     <span class="keywordflow">if</span> (myexponent==0)          <span class="comment">// denormal</span>
+<a name="l03102"></a>03102       exponent = -1022;
+<a name="l03103"></a>03103     <span class="keywordflow">else</span>
+<a name="l03104"></a>03104       *significandParts() |= 0x10000000000000LL;  <span class="comment">// integer bit</span>
+<a name="l03105"></a>03105   }
+<a name="l03106"></a>03106 }
+<a name="l03107"></a>03107 
+<a name="l03108"></a>03108 <span class="keywordtype">void</span>
+<a name="l03109"></a>03109 APFloat::initFromFloatAPInt(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> & api)
+<a name="l03110"></a>03110 {
+<a name="l03111"></a>03111   assert(api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==32);
+<a name="l03112"></a>03112   uint32_t i = (uint32_t)*api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>();
+<a name="l03113"></a>03113   uint32_t myexponent = (i >> 23) & 0xff;
+<a name="l03114"></a>03114   uint32_t mysignificand = i & 0x7fffff;
+<a name="l03115"></a>03115 
+<a name="l03116"></a>03116   initialize(&<a class="code" href="classllvm_1_1APFloat.html#a43f6e79227388f373628e8ddd27df965">APFloat::IEEEsingle</a>);
+<a name="l03117"></a>03117   assert(partCount()==1);
+<a name="l03118"></a>03118 
+<a name="l03119"></a>03119   sign = i >> 31;
+<a name="l03120"></a>03120   <span class="keywordflow">if</span> (myexponent==0 && mysignificand==0) {
+<a name="l03121"></a>03121     <span class="comment">// exponent, significand meaningless</span>
+<a name="l03122"></a>03122     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l03123"></a>03123   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0xff && mysignificand==0) {
+<a name="l03124"></a>03124     <span class="comment">// exponent, significand meaningless</span>
+<a name="l03125"></a>03125     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l03126"></a>03126   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0xff && mysignificand!=0) {
+<a name="l03127"></a>03127     <span class="comment">// sign, exponent, significand meaningless</span>
+<a name="l03128"></a>03128     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l03129"></a>03129     *significandParts() = mysignificand;
+<a name="l03130"></a>03130   } <span class="keywordflow">else</span> {
+<a name="l03131"></a>03131     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l03132"></a>03132     exponent = myexponent - 127;  <span class="comment">//bias</span>
+<a name="l03133"></a>03133     *significandParts() = mysignificand;
+<a name="l03134"></a>03134     <span class="keywordflow">if</span> (myexponent==0)    <span class="comment">// denormal</span>
+<a name="l03135"></a>03135       exponent = -126;
+<a name="l03136"></a>03136     <span class="keywordflow">else</span>
+<a name="l03137"></a>03137       *significandParts() |= 0x800000; <span class="comment">// integer bit</span>
+<a name="l03138"></a>03138   }
+<a name="l03139"></a>03139 }
+<a name="l03140"></a>03140 
+<a name="l03141"></a>03141 <span class="keywordtype">void</span>
+<a name="l03142"></a>03142 APFloat::initFromHalfAPInt(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> & api)
+<a name="l03143"></a>03143 {
+<a name="l03144"></a>03144   assert(api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==16);
+<a name="l03145"></a>03145   uint32_t i = (uint32_t)*api.<a class="code" href="classllvm_1_1APInt.html#a1eea006ec71558190c492389e125e927">getRawData</a>();
+<a name="l03146"></a>03146   uint32_t myexponent = (i >> 10) & 0x1f;
+<a name="l03147"></a>03147   uint32_t mysignificand = i & 0x3ff;
+<a name="l03148"></a>03148 
+<a name="l03149"></a>03149   initialize(&<a class="code" href="classllvm_1_1APFloat.html#acd77961b2028e148c829b18ceaef81c4">APFloat::IEEEhalf</a>);
+<a name="l03150"></a>03150   assert(partCount()==1);
+<a name="l03151"></a>03151 
+<a name="l03152"></a>03152   sign = i >> 15;
+<a name="l03153"></a>03153   <span class="keywordflow">if</span> (myexponent==0 && mysignificand==0) {
+<a name="l03154"></a>03154     <span class="comment">// exponent, significand meaningless</span>
+<a name="l03155"></a>03155     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>;
+<a name="l03156"></a>03156   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0x1f && mysignificand==0) {
+<a name="l03157"></a>03157     <span class="comment">// exponent, significand meaningless</span>
+<a name="l03158"></a>03158     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>;
+<a name="l03159"></a>03159   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (myexponent==0x1f && mysignificand!=0) {
+<a name="l03160"></a>03160     <span class="comment">// sign, exponent, significand meaningless</span>
+<a name="l03161"></a>03161     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>;
+<a name="l03162"></a>03162     *significandParts() = mysignificand;
+<a name="l03163"></a>03163   } <span class="keywordflow">else</span> {
+<a name="l03164"></a>03164     category = <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>;
+<a name="l03165"></a>03165     exponent = myexponent - 15;  <span class="comment">//bias</span>
+<a name="l03166"></a>03166     *significandParts() = mysignificand;
+<a name="l03167"></a>03167     <span class="keywordflow">if</span> (myexponent==0)    <span class="comment">// denormal</span>
+<a name="l03168"></a>03168       exponent = -14;
+<a name="l03169"></a>03169     <span class="keywordflow">else</span>
+<a name="l03170"></a>03170       *significandParts() |= 0x400; <span class="comment">// integer bit</span>
+<a name="l03171"></a>03171   }
+<a name="l03172"></a>03172 }
+<a name="l03173"></a>03173 <span class="comment"></span>
+<a name="l03174"></a>03174 <span class="comment">/// Treat api as containing the bits of a floating point number.  Currently</span>
+<a name="l03175"></a>03175 <span class="comment">/// we infer the floating point type from the size of the APInt.  The</span>
+<a name="l03176"></a>03176 <span class="comment">/// isIEEE argument distinguishes between PPC128 and IEEE128 (not meaningful</span>
+<a name="l03177"></a>03177 <span class="comment">/// when the size is anything else).</span>
+<a name="l03178"></a>03178 <span class="comment"></span><span class="keywordtype">void</span>
+<a name="l03179"></a>03179 APFloat::initFromAPInt(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>& api, <span class="keywordtype">bool</span> isIEEE)
+<a name="l03180"></a>03180 {
+<a name="l03181"></a>03181   <span class="keywordflow">if</span> (api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>() == 16)
+<a name="l03182"></a>03182     <span class="keywordflow">return</span> initFromHalfAPInt(api);
+<a name="l03183"></a>03183   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>() == 32)
+<a name="l03184"></a>03184     <span class="keywordflow">return</span> initFromFloatAPInt(api);
+<a name="l03185"></a>03185   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==64)
+<a name="l03186"></a>03186     <span class="keywordflow">return</span> initFromDoubleAPInt(api);
+<a name="l03187"></a>03187   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==80)
+<a name="l03188"></a>03188     <span class="keywordflow">return</span> initFromF80LongDoubleAPInt(api);
+<a name="l03189"></a>03189   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (api.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>()==128)
+<a name="l03190"></a>03190     <span class="keywordflow">return</span> (isIEEE ?
+<a name="l03191"></a>03191             initFromQuadrupleAPInt(api) : initFromPPCDoubleDoubleAPInt(api));
+<a name="l03192"></a>03192   <span class="keywordflow">else</span>
+<a name="l03193"></a>03193     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(0);
+<a name="l03194"></a>03194 }
+<a name="l03195"></a>03195 
+<a name="l03196"></a>03196 <a class="code" href="classllvm_1_1APFloat.html">APFloat</a>
+<a name="l03197"></a><a class="code" href="classllvm_1_1APFloat.html#a41aedbd16f8e4389c1bcf0ce4331ff2c">03197</a> <a class="code" href="classllvm_1_1APFloat.html#a41aedbd16f8e4389c1bcf0ce4331ff2c">APFloat::getAllOnesValue</a>(<span class="keywordtype">unsigned</span> BitWidth, <span class="keywordtype">bool</span> isIEEE)
+<a name="l03198"></a>03198 {
+<a name="l03199"></a>03199   <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat</a>(<a class="code" href="classllvm_1_1APInt.html#a539bdb4fdbf46e0bfcefebf5ac6d21dd" title="Get the all-ones value.">APInt::getAllOnesValue</a>(BitWidth), isIEEE);
+<a name="l03200"></a>03200 }
+<a name="l03201"></a>03201 
+<a name="l03202"></a><a class="code" href="classllvm_1_1APFloat.html#a47879d3bac8e6a9275edc165c65b433d">03202</a> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> <a class="code" href="classllvm_1_1APFloat.html#a47879d3bac8e6a9275edc165c65b433d">APFloat::getLargest</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &Sem, <span class="keywordtype">bool</span> Negative) {
+<a name="l03203"></a>03203   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> Val(Sem, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, Negative);
+<a name="l03204"></a>03204 
+<a name="l03205"></a>03205   <span class="comment">// We want (in interchange format):</span>
+<a name="l03206"></a>03206   <span class="comment">//   sign = {Negative}</span>
+<a name="l03207"></a>03207   <span class="comment">//   exponent = 1..10</span>
+<a name="l03208"></a>03208   <span class="comment">//   significand = 1..1</span>
+<a name="l03209"></a>03209 
+<a name="l03210"></a>03210   Val.exponent = Sem.<a class="code" href="structllvm_1_1fltSemantics.html#a60ad2894b47852a4b60af1b89a3d38ae">maxExponent</a>; <span class="comment">// unbiased</span>
+<a name="l03211"></a>03211 
+<a name="l03212"></a>03212   <span class="comment">// 1-initialize all bits....</span>
+<a name="l03213"></a>03213   Val.zeroSignificand();
+<a name="l03214"></a>03214   <a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a> *significand = Val.significandParts();
+<a name="l03215"></a>03215   <span class="keywordtype">unsigned</span> <a class="code" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a> = <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(Sem.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>);
+<a name="l03216"></a>03216   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != N; ++i)
+<a name="l03217"></a>03217     significand[i] = ~((<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 0);
+<a name="l03218"></a>03218 
+<a name="l03219"></a>03219   <span class="comment">// ...and then clear the top bits for internal consistency.</span>
+<a name="l03220"></a>03220   <span class="keywordflow">if</span> (Sem.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> % integerPartWidth != 0)
+<a name="l03221"></a>03221     significand[N-1] &=
+<a name="l03222"></a>03222       (((<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 1) << (Sem.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> % <a class="code" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">integerPartWidth</a>)) - 1;
+<a name="l03223"></a>03223 
+<a name="l03224"></a>03224   <span class="keywordflow">return</span> Val;
+<a name="l03225"></a>03225 }
+<a name="l03226"></a>03226 
+<a name="l03227"></a><a class="code" href="classllvm_1_1APFloat.html#ac24627a51fbb0552438075ccf42dc433">03227</a> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> <a class="code" href="classllvm_1_1APFloat.html#ac24627a51fbb0552438075ccf42dc433">APFloat::getSmallest</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &Sem, <span class="keywordtype">bool</span> Negative) {
+<a name="l03228"></a>03228   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> Val(Sem, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, Negative);
+<a name="l03229"></a>03229 
+<a name="l03230"></a>03230   <span class="comment">// We want (in interchange format):</span>
+<a name="l03231"></a>03231   <span class="comment">//   sign = {Negative}</span>
+<a name="l03232"></a>03232   <span class="comment">//   exponent = 0..0</span>
+<a name="l03233"></a>03233   <span class="comment">//   significand = 0..01</span>
+<a name="l03234"></a>03234 
+<a name="l03235"></a>03235   Val.exponent = Sem.<a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a>; <span class="comment">// unbiased</span>
+<a name="l03236"></a>03236   Val.zeroSignificand();
+<a name="l03237"></a>03237   Val.significandParts()[0] = 1;
+<a name="l03238"></a>03238   <span class="keywordflow">return</span> Val;
+<a name="l03239"></a>03239 }
+<a name="l03240"></a>03240 
+<a name="l03241"></a><a class="code" href="classllvm_1_1APFloat.html#adfee76ed5e20f77cbcfe297df31b9cda">03241</a> <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> <a class="code" href="classllvm_1_1APFloat.html#adfee76ed5e20f77cbcfe297df31b9cda">APFloat::getSmallestNormalized</a>(<span class="keyword">const</span> <a class="code" href="structllvm_1_1fltSemantics.html">fltSemantics</a> &Sem, <span class="keywordtype">bool</span> Negative) {
+<a name="l03242"></a>03242   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> Val(Sem, <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>, Negative);
+<a name="l03243"></a>03243 
+<a name="l03244"></a>03244   <span class="comment">// We want (in interchange format):</span>
+<a name="l03245"></a>03245   <span class="comment">//   sign = {Negative}</span>
+<a name="l03246"></a>03246   <span class="comment">//   exponent = 0..0</span>
+<a name="l03247"></a>03247   <span class="comment">//   significand = 10..0</span>
+<a name="l03248"></a>03248 
+<a name="l03249"></a>03249   Val.exponent = Sem.<a class="code" href="structllvm_1_1fltSemantics.html#a8cff71d4f19cee962b094635d285b8de">minExponent</a>;
+<a name="l03250"></a>03250   Val.zeroSignificand();
+<a name="l03251"></a>03251   Val.significandParts()[<a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(Sem.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>)-1] |=
+<a name="l03252"></a>03252     (((<a class="code" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">integerPart</a>) 1) << ((Sem.<a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - 1) % integerPartWidth));
+<a name="l03253"></a>03253 
+<a name="l03254"></a>03254   <span class="keywordflow">return</span> Val;
+<a name="l03255"></a>03255 }
+<a name="l03256"></a>03256 
+<a name="l03257"></a><a class="code" href="classllvm_1_1APFloat.html#aceeeb7d37b8407c0a0a9f081c3553b4f">03257</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>& api, <span class="keywordtype">bool</span> isIEEE) {
+<a name="l03258"></a>03258   initFromAPInt(api, isIEEE);
+<a name="l03259"></a>03259 }
+<a name="l03260"></a>03260 
+<a name="l03261"></a><a class="code" href="classllvm_1_1APFloat.html#a8eb8b7d4e5c002956e110ddb7499a557">03261</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keywordtype">float</span> f) {
+<a name="l03262"></a>03262   initFromAPInt(<a class="code" href="classllvm_1_1APInt.html#a4b160c2704ee3819d8fda70345b4d19f" title="Converts a float to APInt bits.">APInt::floatToBits</a>(f));
+<a name="l03263"></a>03263 }
+<a name="l03264"></a>03264 
+<a name="l03265"></a><a class="code" href="classllvm_1_1APFloat.html#a43130e11bf73da2790526bb78a5f1307">03265</a> <a class="code" href="classllvm_1_1APFloat.html#a7edf71005b95f61067a9b8d400c37c45">APFloat::APFloat</a>(<span class="keywordtype">double</span> d) {
+<a name="l03266"></a>03266   initFromAPInt(<a class="code" href="classllvm_1_1APInt.html#ac174a45e376a00ec9b2e9e8730f982c0" title="Converts a double to APInt bits.">APInt::doubleToBits</a>(d));
+<a name="l03267"></a>03267 }
+<a name="l03268"></a>03268 
+<a name="l03269"></a>03269 <span class="keyword">namespace </span>{
+<a name="l03270"></a>03270   <span class="keywordtype">void</span> <a class="code" href="namespacellvm_1_1sys_1_1path.html#acb80894344c78dacf8d5ff8c23be697d" title="Append to path.">append</a>(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> &Buffer, <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> Str) {
+<a name="l03271"></a>03271     Buffer.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a669d55980a7d4b6307b94596deeb0b1f">append</a>(Str.<a class="code" href="classllvm_1_1StringRef.html#a4a0abf8eb4fa5989df63172649cba99f">begin</a>(), Str.<a class="code" href="classllvm_1_1StringRef.html#a9e277b660236bb0318b61ab9cdf60dc7">end</a>());
+<a name="l03272"></a>03272   }
+<a name="l03273"></a>03273 <span class="comment"></span>
+<a name="l03274"></a>03274 <span class="comment">  /// Removes data from the given significand until it is no more</span>
+<a name="l03275"></a>03275 <span class="comment">  /// precise than is required for the desired precision.</span>
+<a name="l03276"></a>03276 <span class="comment"></span>  <span class="keywordtype">void</span> AdjustToPrecision(<a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> &significand,
+<a name="l03277"></a>03277                          <span class="keywordtype">int</span> &exp, <span class="keywordtype">unsigned</span> FormatPrecision) {
+<a name="l03278"></a>03278     <span class="keywordtype">unsigned</span> bits = significand.<a class="code" href="classllvm_1_1APInt.html#a65eb40bd8c732c997e156e14f6b461f4" title="Compute the number of active bits in the value.">getActiveBits</a>();
+<a name="l03279"></a>03279 
+<a name="l03280"></a>03280     <span class="comment">// 196/59 is a very slight overestimate of lg_2(10).</span>
+<a name="l03281"></a>03281     <span class="keywordtype">unsigned</span> bitsRequired = (FormatPrecision * 196 + 58) / 59;
+<a name="l03282"></a>03282 
+<a name="l03283"></a>03283     <span class="keywordflow">if</span> (bits <= bitsRequired) <span class="keywordflow">return</span>;
+<a name="l03284"></a>03284 
+<a name="l03285"></a>03285     <span class="keywordtype">unsigned</span> tensRemovable = (bits - bitsRequired) * 59 / 196;
+<a name="l03286"></a>03286     <span class="keywordflow">if</span> (!tensRemovable) <span class="keywordflow">return</span>;
+<a name="l03287"></a>03287 
+<a name="l03288"></a>03288     exp += tensRemovable;
+<a name="l03289"></a>03289 
+<a name="l03290"></a>03290     <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> divisor(significand.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>(), 1);
+<a name="l03291"></a>03291     <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> powten(significand.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>(), 10);
+<a name="l03292"></a>03292     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
+<a name="l03293"></a>03293       <span class="keywordflow">if</span> (tensRemovable & 1)
+<a name="l03294"></a>03294         divisor *= powten;
+<a name="l03295"></a>03295       tensRemovable >>= 1;
+<a name="l03296"></a>03296       <span class="keywordflow">if</span> (!tensRemovable) <span class="keywordflow">break</span>;
+<a name="l03297"></a>03297       powten *= powten;
+<a name="l03298"></a>03298     }
+<a name="l03299"></a>03299 
+<a name="l03300"></a>03300     significand = significand.<a class="code" href="classllvm_1_1APInt.html#a793f3a97421b79af6bab764524a9b532" title="Unsigned division operation.">udiv</a>(divisor);
+<a name="l03301"></a>03301 
+<a name="l03302"></a>03302     <span class="comment">// Truncate the significand down to its active bit count, but</span>
+<a name="l03303"></a>03303     <span class="comment">// don't try to drop below 32.</span>
+<a name="l03304"></a>03304     <span class="keywordtype">unsigned</span> newPrecision = std::max(32U, significand.<a class="code" href="classllvm_1_1APInt.html#a65eb40bd8c732c997e156e14f6b461f4" title="Compute the number of active bits in the value.">getActiveBits</a>());
+<a name="l03305"></a>03305     significand = significand.<a class="code" href="classllvm_1_1APInt.html#a8cf5475fb3e9c737112cc248194c1040">trunc</a>(newPrecision);
+<a name="l03306"></a>03306   }
+<a name="l03307"></a>03307 
+<a name="l03308"></a>03308 
+<a name="l03309"></a>03309   <span class="keywordtype">void</span> AdjustToPrecision(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> &buffer,
+<a name="l03310"></a>03310                          <span class="keywordtype">int</span> &exp, <span class="keywordtype">unsigned</span> FormatPrecision) {
+<a name="l03311"></a>03311     <span class="keywordtype">unsigned</span> <a class="code" href="regcomp_8c.html#a0240ac851181b84ac374872dc5434ee4">N</a> = buffer.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>();
+<a name="l03312"></a>03312     <span class="keywordflow">if</span> (N <= FormatPrecision) <span class="keywordflow">return</span>;
+<a name="l03313"></a>03313 
+<a name="l03314"></a>03314     <span class="comment">// The most significant figures are the last ones in the buffer.</span>
+<a name="l03315"></a>03315     <span class="keywordtype">unsigned</span> FirstSignificant = N - FormatPrecision;
+<a name="l03316"></a>03316 
+<a name="l03317"></a>03317     <span class="comment">// Round.</span>
+<a name="l03318"></a>03318     <span class="comment">// FIXME: this probably shouldn't use 'round half up'.</span>
+<a name="l03319"></a>03319 
+<a name="l03320"></a>03320     <span class="comment">// Rounding down is just a truncation, except we also want to drop</span>
+<a name="l03321"></a>03321     <span class="comment">// trailing zeros from the new result.</span>
+<a name="l03322"></a>03322     <span class="keywordflow">if</span> (buffer[FirstSignificant - 1] < <span class="charliteral">'5'</span>) {
+<a name="l03323"></a>03323       <span class="keywordflow">while</span> (FirstSignificant < N && buffer[FirstSignificant] == <span class="charliteral">'0'</span>)
+<a name="l03324"></a>03324         FirstSignificant++;
+<a name="l03325"></a>03325 
+<a name="l03326"></a>03326       exp += FirstSignificant;
+<a name="l03327"></a>03327       buffer.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a18c110c35e9133222a37b28d30f8a90f">erase</a>(&buffer[0], &buffer[FirstSignificant]);
+<a name="l03328"></a>03328       <span class="keywordflow">return</span>;
+<a name="l03329"></a>03329     }
+<a name="l03330"></a>03330 
+<a name="l03331"></a>03331     <span class="comment">// Rounding up requires a decimal add-with-carry.  If we continue</span>
+<a name="l03332"></a>03332     <span class="comment">// the carry, the newly-introduced zeros will just be truncated.</span>
+<a name="l03333"></a>03333     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = FirstSignificant; <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != N; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>) {
+<a name="l03334"></a>03334       <span class="keywordflow">if</span> (buffer[<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>] == <span class="charliteral">'9'</span>) {
+<a name="l03335"></a>03335         FirstSignificant++;
+<a name="l03336"></a>03336       } <span class="keywordflow">else</span> {
+<a name="l03337"></a>03337         buffer[<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>]++;
+<a name="l03338"></a>03338         <span class="keywordflow">break</span>;
+<a name="l03339"></a>03339       }
+<a name="l03340"></a>03340     }
+<a name="l03341"></a>03341 
+<a name="l03342"></a>03342     <span class="comment">// If we carried through, we have exactly one digit of precision.</span>
+<a name="l03343"></a>03343     <span class="keywordflow">if</span> (FirstSignificant == N) {
+<a name="l03344"></a>03344       exp += FirstSignificant;
+<a name="l03345"></a>03345       buffer.<a class="code" href="classllvm_1_1SmallVectorImpl.html#aac0ea55010b7b1a301e65a0baea057aa">clear</a>();
+<a name="l03346"></a>03346       buffer.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'1'</span>);
+<a name="l03347"></a>03347       <span class="keywordflow">return</span>;
+<a name="l03348"></a>03348     }
+<a name="l03349"></a>03349 
+<a name="l03350"></a>03350     exp += FirstSignificant;
+<a name="l03351"></a>03351     buffer.<a class="code" href="classllvm_1_1SmallVectorImpl.html#a18c110c35e9133222a37b28d30f8a90f">erase</a>(&buffer[0], &buffer[FirstSignificant]);
+<a name="l03352"></a>03352   }
+<a name="l03353"></a>03353 }
+<a name="l03354"></a>03354 
+<a name="l03355"></a><a class="code" href="classllvm_1_1APFloat.html#aeefbcd393327313a3362c68baa91f536">03355</a> <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1APFloat.html#aeefbcd393327313a3362c68baa91f536">APFloat::toString</a>(<a class="code" href="classllvm_1_1SmallVectorImpl.html">SmallVectorImpl<char></a> &Str,
+<a name="l03356"></a>03356                        <span class="keywordtype">unsigned</span> FormatPrecision,
+<a name="l03357"></a>03357                        <span class="keywordtype">unsigned</span> FormatMaxPadding)<span class="keyword"> const </span>{
+<a name="l03358"></a>03358   <span class="keywordflow">switch</span> (category) {
+<a name="l03359"></a>03359   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faad551206e2e7477defb1d76bbed382210">fcInfinity</a>:
+<a name="l03360"></a>03360     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APFloat.html#aec02d46854c76f20a6da7002e390f612">isNegative</a>())
+<a name="l03361"></a>03361       <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1sys_1_1path.html#acb80894344c78dacf8d5ff8c23be697d" title="Append to path.">append</a>(Str, <span class="stringliteral">"-Inf"</span>);
+<a name="l03362"></a>03362     <span class="keywordflow">else</span>
+<a name="l03363"></a>03363       <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1sys_1_1path.html#acb80894344c78dacf8d5ff8c23be697d" title="Append to path.">append</a>(Str, <span class="stringliteral">"+Inf"</span>);
+<a name="l03364"></a>03364 
+<a name="l03365"></a>03365   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa6a291ee386cfbfd59d954a4331b16887">fcNaN</a>: <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1sys_1_1path.html#acb80894344c78dacf8d5ff8c23be697d" title="Append to path.">append</a>(Str, <span class="stringliteral">"NaN"</span>);
+<a name="l03366"></a>03366 
+<a name="l03367"></a>03367   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa8cebd842b89add293680f385f9109b24">fcZero</a>:
+<a name="l03368"></a>03368     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APFloat.html#aec02d46854c76f20a6da7002e390f612">isNegative</a>())
+<a name="l03369"></a>03369       Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'-'</span>);
+<a name="l03370"></a>03370 
+<a name="l03371"></a>03371     <span class="keywordflow">if</span> (!FormatMaxPadding)
+<a name="l03372"></a>03372       <a class="code" href="namespacellvm_1_1sys_1_1path.html#acb80894344c78dacf8d5ff8c23be697d" title="Append to path.">append</a>(Str, <span class="stringliteral">"0.0E+0"</span>);
+<a name="l03373"></a>03373     <span class="keywordflow">else</span>
+<a name="l03374"></a>03374       Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'0'</span>);
+<a name="l03375"></a>03375     <span class="keywordflow">return</span>;
+<a name="l03376"></a>03376 
+<a name="l03377"></a>03377   <span class="keywordflow">case</span> <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>:
+<a name="l03378"></a>03378     <span class="keywordflow">break</span>;
+<a name="l03379"></a>03379   }
+<a name="l03380"></a>03380 
+<a name="l03381"></a>03381   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1APFloat.html#aec02d46854c76f20a6da7002e390f612">isNegative</a>())
+<a name="l03382"></a>03382     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'-'</span>);
+<a name="l03383"></a>03383 
+<a name="l03384"></a>03384   <span class="comment">// Decompose the number into an APInt and an exponent.</span>
+<a name="l03385"></a>03385   <span class="keywordtype">int</span> exp = exponent - ((int) semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - 1);
+<a name="l03386"></a>03386   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> significand(semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>,
+<a name="l03387"></a>03387                     <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(significandParts(),
+<a name="l03388"></a>03388                                  <a class="code" href="APFloat_8cpp.html#a075daaf0c69129474e8885bb7e7e8b13">partCountForBits</a>(semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>)));
+<a name="l03389"></a>03389 
+<a name="l03390"></a>03390   <span class="comment">// Set FormatPrecision if zero.  We want to do this before we</span>
+<a name="l03391"></a>03391   <span class="comment">// truncate trailing zeros, as those are part of the precision.</span>
+<a name="l03392"></a>03392   <span class="keywordflow">if</span> (!FormatPrecision) {
+<a name="l03393"></a>03393     <span class="comment">// It's an interesting question whether to use the nominal</span>
+<a name="l03394"></a>03394     <span class="comment">// precision or the active precision here for denormals.</span>
+<a name="l03395"></a>03395 
+<a name="l03396"></a>03396     <span class="comment">// FormatPrecision = ceil(significandBits / lg_2(10))</span>
+<a name="l03397"></a>03397     FormatPrecision = (semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> * 59 + 195) / 196;
+<a name="l03398"></a>03398   }
+<a name="l03399"></a>03399 
+<a name="l03400"></a>03400   <span class="comment">// Ignore trailing binary zeros.</span>
+<a name="l03401"></a>03401   <span class="keywordtype">int</span> trailingZeros = significand.<a class="code" href="classllvm_1_1APInt.html#aac277496191547e487eea07f09dffd4b" title="Count the number of trailing zero bits.">countTrailingZeros</a>();
+<a name="l03402"></a>03402   exp += trailingZeros;
+<a name="l03403"></a>03403   significand = significand.<a class="code" href="classllvm_1_1APInt.html#aa1953b3ad7ef6aa87dc0205db0c2ea45" title="Logical right-shift function.">lshr</a>(trailingZeros);
+<a name="l03404"></a>03404 
+<a name="l03405"></a>03405   <span class="comment">// Change the exponent from 2^e to 10^e.</span>
+<a name="l03406"></a>03406   <span class="keywordflow">if</span> (exp == 0) {
+<a name="l03407"></a>03407     <span class="comment">// Nothing to do.</span>
+<a name="l03408"></a>03408   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (exp > 0) {
+<a name="l03409"></a>03409     <span class="comment">// Just shift left.</span>
+<a name="l03410"></a>03410     significand = significand.<a class="code" href="classllvm_1_1APInt.html#a6142fc5662411269a7ca0217f49f338c" title="Zero extend to a new width.">zext</a>(semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> + exp);
+<a name="l03411"></a>03411     significand <<= <a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa29e412513f719e77341b9a59c0ec4efd" title="double exp(double x);">exp</a>;
+<a name="l03412"></a>03412     exp = 0;
+<a name="l03413"></a>03413   } <span class="keywordflow">else</span> { <span class="comment">/* exp < 0 */</span>
+<a name="l03414"></a>03414     <span class="keywordtype">int</span> texp = -<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa29e412513f719e77341b9a59c0ec4efd" title="double exp(double x);">exp</a>;
+<a name="l03415"></a>03415 
+<a name="l03416"></a>03416     <span class="comment">// We transform this using the identity:</span>
+<a name="l03417"></a>03417     <span class="comment">//   (N)(2^-e) == (N)(5^e)(10^-e)</span>
+<a name="l03418"></a>03418     <span class="comment">// This means we have to multiply N (the significand) by 5^e.</span>
+<a name="l03419"></a>03419     <span class="comment">// To avoid overflow, we have to operate on numbers large</span>
+<a name="l03420"></a>03420     <span class="comment">// enough to store N * 5^e:</span>
+<a name="l03421"></a>03421     <span class="comment">//   log2(N * 5^e) == log2(N) + e * log2(5)</span>
+<a name="l03422"></a>03422     <span class="comment">//                 <= semantics->precision + e * 137 / 59</span>
+<a name="l03423"></a>03423     <span class="comment">//   (log_2(5) ~ 2.321928 < 2.322034 ~ 137/59)</span>
+<a name="l03424"></a>03424 
+<a name="l03425"></a>03425     <span class="keywordtype">unsigned</span> precision = semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> + (137 * texp + 136) / 59;
+<a name="l03426"></a>03426 
+<a name="l03427"></a>03427     <span class="comment">// Multiply significand by 5^e.</span>
+<a name="l03428"></a>03428     <span class="comment">//   N * 5^0101 == N * 5^(1*1) * 5^(0*2) * 5^(1*4) * 5^(0*8)</span>
+<a name="l03429"></a>03429     significand = significand.<a class="code" href="classllvm_1_1APInt.html#a6142fc5662411269a7ca0217f49f338c" title="Zero extend to a new width.">zext</a>(precision);
+<a name="l03430"></a>03430     <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> five_to_the_i(precision, 5);
+<a name="l03431"></a>03431     <span class="keywordflow">while</span> (<span class="keyword">true</span>) {
+<a name="l03432"></a>03432       <span class="keywordflow">if</span> (texp & 1) significand *= five_to_the_i;
+<a name="l03433"></a>03433 
+<a name="l03434"></a>03434       texp >>= 1;
+<a name="l03435"></a>03435       <span class="keywordflow">if</span> (!texp) <span class="keywordflow">break</span>;
+<a name="l03436"></a>03436       five_to_the_i *= five_to_the_i;
+<a name="l03437"></a>03437     }
+<a name="l03438"></a>03438   }
+<a name="l03439"></a>03439 
+<a name="l03440"></a>03440   AdjustToPrecision(significand, exp, FormatPrecision);
+<a name="l03441"></a>03441 
+<a name="l03442"></a>03442   <a class="code" href="classllvm_1_1SmallVector.html">llvm::SmallVector<char, 256></a> buffer;
+<a name="l03443"></a>03443 
+<a name="l03444"></a>03444   <span class="comment">// Fill the buffer.</span>
+<a name="l03445"></a>03445   <span class="keywordtype">unsigned</span> precision = significand.<a class="code" href="classllvm_1_1APInt.html#ad081689e23a8f5dea78dedd623d6a8f8">getBitWidth</a>();
+<a name="l03446"></a>03446   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> ten(precision, 10);
+<a name="l03447"></a>03447   <a class="code" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> digit(precision, 0);
+<a name="l03448"></a>03448 
+<a name="l03449"></a>03449   <span class="keywordtype">bool</span> inTrail = <span class="keyword">true</span>;
+<a name="l03450"></a>03450   <span class="keywordflow">while</span> (significand != 0) {
+<a name="l03451"></a>03451     <span class="comment">// digit <- significand % 10</span>
+<a name="l03452"></a>03452     <span class="comment">// significand <- significand / 10</span>
+<a name="l03453"></a>03453     <a class="code" href="classllvm_1_1APInt.html#a0f0a665210e453bb16b4bf1861dbdd58" title="Dual division/remainder interface.">APInt::udivrem</a>(significand, ten, significand, digit);
+<a name="l03454"></a>03454 
+<a name="l03455"></a>03455     <span class="keywordtype">unsigned</span> d = digit.<a class="code" href="classllvm_1_1APInt.html#a7dc983ebf0eb2d255fa90a67063c72e2" title="Get zero extended value.">getZExtValue</a>();
+<a name="l03456"></a>03456 
+<a name="l03457"></a>03457     <span class="comment">// Drop trailing zeros.</span>
+<a name="l03458"></a>03458     <span class="keywordflow">if</span> (inTrail && !d) exp++;
+<a name="l03459"></a>03459     <span class="keywordflow">else</span> {
+<a name="l03460"></a>03460       buffer.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>((<span class="keywordtype">char</span>) (<span class="charliteral">'0'</span> + d));
+<a name="l03461"></a>03461       inTrail = <span class="keyword">false</span>;
+<a name="l03462"></a>03462     }
+<a name="l03463"></a>03463   }
+<a name="l03464"></a>03464 
+<a name="l03465"></a>03465   assert(!buffer.<a class="code" href="classllvm_1_1SmallVectorBase.html#afdecfccba9b1fd8c9fd8eb27ae69e9a0">empty</a>() && <span class="stringliteral">"no characters in buffer!"</span>);
+<a name="l03466"></a>03466 
+<a name="l03467"></a>03467   <span class="comment">// Drop down to FormatPrecision.</span>
+<a name="l03468"></a>03468   <span class="comment">// TODO: don't do more precise calculations above than are required.</span>
+<a name="l03469"></a>03469   AdjustToPrecision(buffer, exp, FormatPrecision);
+<a name="l03470"></a>03470 
+<a name="l03471"></a>03471   <span class="keywordtype">unsigned</span> NDigits = buffer.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>();
+<a name="l03472"></a>03472 
+<a name="l03473"></a>03473   <span class="comment">// Check whether we should use scientific notation.</span>
+<a name="l03474"></a>03474   <span class="keywordtype">bool</span> FormatScientific;
+<a name="l03475"></a>03475   <span class="keywordflow">if</span> (!FormatMaxPadding)
+<a name="l03476"></a>03476     FormatScientific = <span class="keyword">true</span>;
+<a name="l03477"></a>03477   <span class="keywordflow">else</span> {
+<a name="l03478"></a>03478     <span class="keywordflow">if</span> (exp >= 0) {
+<a name="l03479"></a>03479       <span class="comment">// 765e3 --> 765000</span>
+<a name="l03480"></a>03480       <span class="comment">//              ^^^</span>
+<a name="l03481"></a>03481       <span class="comment">// But we shouldn't make the number look more precise than it is.</span>
+<a name="l03482"></a>03482       FormatScientific = ((<a class="code" href="classunsigned.html">unsigned</a>) exp > FormatMaxPadding ||
+<a name="l03483"></a>03483                           NDigits + (<span class="keywordtype">unsigned</span>) exp > FormatPrecision);
+<a name="l03484"></a>03484     } <span class="keywordflow">else</span> {
+<a name="l03485"></a>03485       <span class="comment">// Power of the most significant digit.</span>
+<a name="l03486"></a>03486       <span class="keywordtype">int</span> MSD = exp + (int) (NDigits - 1);
+<a name="l03487"></a>03487       <span class="keywordflow">if</span> (MSD >= 0) {
+<a name="l03488"></a>03488         <span class="comment">// 765e-2 == 7.65</span>
+<a name="l03489"></a>03489         FormatScientific = <span class="keyword">false</span>;
+<a name="l03490"></a>03490       } <span class="keywordflow">else</span> {
+<a name="l03491"></a>03491         <span class="comment">// 765e-5 == 0.00765</span>
+<a name="l03492"></a>03492         <span class="comment">//           ^ ^^</span>
+<a name="l03493"></a>03493         FormatScientific = ((<a class="code" href="classunsigned.html">unsigned</a>) -MSD) > FormatMaxPadding;
+<a name="l03494"></a>03494       }
+<a name="l03495"></a>03495     }
+<a name="l03496"></a>03496   }
+<a name="l03497"></a>03497 
+<a name="l03498"></a>03498   <span class="comment">// Scientific formatting is pretty straightforward.</span>
+<a name="l03499"></a>03499   <span class="keywordflow">if</span> (FormatScientific) {
+<a name="l03500"></a>03500     exp += (NDigits - 1);
+<a name="l03501"></a>03501 
+<a name="l03502"></a>03502     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(buffer[NDigits-1]);
+<a name="l03503"></a>03503     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'.'</span>);
+<a name="l03504"></a>03504     <span class="keywordflow">if</span> (NDigits == 1)
+<a name="l03505"></a>03505       Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'0'</span>);
+<a name="l03506"></a>03506     <span class="keywordflow">else</span>
+<a name="l03507"></a>03507       <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = 1; <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != NDigits; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l03508"></a>03508         Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(buffer[NDigits-1-<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>]);
+<a name="l03509"></a>03509     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'E'</span>);
+<a name="l03510"></a>03510 
+<a name="l03511"></a>03511     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(exp >= 0 ? <span class="charliteral">'+'</span> : <span class="charliteral">'-'</span>);
+<a name="l03512"></a>03512     <span class="keywordflow">if</span> (exp < 0) exp = -<a class="code" href="namespacellvm_1_1LibFunc.html#abf8f6830387f338fed0bce2e65108c6fa29e412513f719e77341b9a59c0ec4efd" title="double exp(double x);">exp</a>;
+<a name="l03513"></a>03513     <a class="code" href="classllvm_1_1SmallVector.html">SmallVector<char, 6></a> expbuf;
+<a name="l03514"></a>03514     <span class="keywordflow">do</span> {
+<a name="l03515"></a>03515       expbuf.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>((<span class="keywordtype">char</span>) (<span class="charliteral">'0'</span> + (exp % 10)));
+<a name="l03516"></a>03516       exp /= 10;
+<a name="l03517"></a>03517     } <span class="keywordflow">while</span> (exp);
+<a name="l03518"></a>03518     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = 0, E = expbuf.<a class="code" href="classllvm_1_1SmallVectorTemplateCommon.html#a22a311dfe4c28a897de8a9365a4f0a84">size</a>(); <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l03519"></a>03519       Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(expbuf[E-1-<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>]);
+<a name="l03520"></a>03520     <span class="keywordflow">return</span>;
+<a name="l03521"></a>03521   }
+<a name="l03522"></a>03522 
+<a name="l03523"></a>03523   <span class="comment">// Non-scientific, positive exponents.</span>
+<a name="l03524"></a>03524   <span class="keywordflow">if</span> (exp >= 0) {
+<a name="l03525"></a>03525     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = 0; <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != NDigits; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l03526"></a>03526       Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(buffer[NDigits-1-<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>]);
+<a name="l03527"></a>03527     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = 0; <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> != (<a class="code" href="classunsigned.html">unsigned</a>) exp; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l03528"></a>03528       Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'0'</span>);
+<a name="l03529"></a>03529     <span class="keywordflow">return</span>;
+<a name="l03530"></a>03530   }
+<a name="l03531"></a>03531 
+<a name="l03532"></a>03532   <span class="comment">// Non-scientific, negative exponents.</span>
+<a name="l03533"></a>03533 
+<a name="l03534"></a>03534   <span class="comment">// The number of digits to the left of the decimal point.</span>
+<a name="l03535"></a>03535   <span class="keywordtype">int</span> NWholeDigits = exp + (int) NDigits;
+<a name="l03536"></a>03536 
+<a name="l03537"></a>03537   <span class="keywordtype">unsigned</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = 0;
+<a name="l03538"></a>03538   <span class="keywordflow">if</span> (NWholeDigits > 0) {
+<a name="l03539"></a>03539     <span class="keywordflow">for</span> (; I != (<a class="code" href="classunsigned.html">unsigned</a>) NWholeDigits; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l03540"></a>03540       Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(buffer[NDigits-I-1]);
+<a name="l03541"></a>03541     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'.'</span>);
+<a name="l03542"></a>03542   } <span class="keywordflow">else</span> {
+<a name="l03543"></a>03543     <span class="keywordtype">unsigned</span> NZeros = 1 + (<a class="code" href="classunsigned.html">unsigned</a>) -NWholeDigits;
+<a name="l03544"></a>03544 
+<a name="l03545"></a>03545     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'0'</span>);
+<a name="l03546"></a>03546     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'.'</span>);
+<a name="l03547"></a>03547     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> Z = 1; Z != NZeros; ++Z)
+<a name="l03548"></a>03548       Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(<span class="charliteral">'0'</span>);
+<a name="l03549"></a>03549   }
+<a name="l03550"></a>03550 
+<a name="l03551"></a>03551   <span class="keywordflow">for</span> (; I != NDigits; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l03552"></a>03552     Str.<a class="code" href="classllvm_1_1SmallVectorTemplateBase.html#ae1a10b90f22c0478960fb5798ff73916">push_back</a>(buffer[NDigits-I-1]);
+<a name="l03553"></a>03553 }
+<a name="l03554"></a>03554 
+<a name="l03555"></a><a class="code" href="classllvm_1_1APFloat.html#ae05012c5159493832065a06aecc4f954">03555</a> <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1APFloat.html#ae05012c5159493832065a06aecc4f954">APFloat::getExactInverse</a>(<a class="code" href="classllvm_1_1APFloat.html">APFloat</a> *inv)<span class="keyword"> const </span>{
+<a name="l03556"></a>03556   <span class="comment">// Special floats and denormals have no exact inverse.</span>
+<a name="l03557"></a>03557   <span class="keywordflow">if</span> (category != <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a>)
+<a name="l03558"></a>03558     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l03559"></a>03559 
+<a name="l03560"></a>03560   <span class="comment">// Check that the number is a power of two by making sure that only the</span>
+<a name="l03561"></a>03561   <span class="comment">// integer bit is set in the significand.</span>
+<a name="l03562"></a>03562   <span class="keywordflow">if</span> (significandLSB() != semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - 1)
+<a name="l03563"></a>03563     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l03564"></a>03564 
+<a name="l03565"></a>03565   <span class="comment">// Get the inverse.</span>
+<a name="l03566"></a>03566   <a class="code" href="classllvm_1_1APFloat.html">APFloat</a> reciprocal(*semantics, 1ULL);
+<a name="l03567"></a>03567   <span class="keywordflow">if</span> (reciprocal.<a class="code" href="classllvm_1_1APFloat.html#a7b22f406d0d5381bae105045caca60ea">divide</a>(*<span class="keyword">this</span>, <a class="code" href="classllvm_1_1APFloat.html#a26f3c979ec46a5d2d9bccd300eb606fea3a561d1750cb3c30d5deb1193c8e1ec5">rmNearestTiesToEven</a>) != <a class="code" href="classllvm_1_1APFloat.html#a42fe920c8131569bb30114d7f294c8f8a527f71be1f3fdab1f3354020d5bec081">opOK</a>)
+<a name="l03568"></a>03568     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l03569"></a>03569 
+<a name="l03570"></a>03570   <span class="comment">// Avoid multiplication with a denormal, it is not safe on all platforms and</span>
+<a name="l03571"></a>03571   <span class="comment">// may be slower than a normal division.</span>
+<a name="l03572"></a>03572   <span class="keywordflow">if</span> (reciprocal.significandMSB() + 1 < reciprocal.semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a>)
+<a name="l03573"></a>03573     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l03574"></a>03574 
+<a name="l03575"></a>03575   assert(reciprocal.category == <a class="code" href="classllvm_1_1APFloat.html#a83a807d8fb9a05f48902899d921508faa65e08fd511c9fd74f04d1dcd13bff36a">fcNormal</a> &&
+<a name="l03576"></a>03576          reciprocal.significandLSB() == reciprocal.semantics-><a class="code" href="structllvm_1_1fltSemantics.html#aaec0dd351f93ebc840a6551422c2ad97">precision</a> - 1);
+<a name="l03577"></a>03577 
+<a name="l03578"></a>03578   <span class="keywordflow">if</span> (inv)
+<a name="l03579"></a>03579     *inv = reciprocal;
+<a name="l03580"></a>03580 
+<a name="l03581"></a>03581   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l03582"></a>03582 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:32:37 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/APFloat_8d_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/APFloat_8d_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/APFloat_8d_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/APFloat_8d_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,117 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: APFloat.d Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3927ff15cdce1d22d8dcb33a29894069.html">Support</a>      </li>
+      <li class="navelem"><a class="el" href="dir_4c6350ab3f31523f66058454f248b31d.html">Release+Asserts</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">APFloat.d</div>  </div>
+</div>
+<div class="contents">
+<a href="APFloat_8d.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001  \
+<a name="l00002"></a>00002  /home/tonic/www-releases/3.2/llvm-3.2.src/lib/Support/<a class="code" href="namespacellvm.html#abf74b2f0dbae96f4708d3e407b36df02a489aa5052a55520044e1e82b2da7a336">Release</a>+Asserts/<a class="code" href="namespacellvm_1_1lltok.html#af353621f14cb4b4b3af5ffaff84076b1a56697632782c9ab774d6c132a955674a">APFloat</a>.o \
+<a name="l00003"></a>00003   /home/tonic/www-releases/3.2/llvm-3.2.src/lib/Support/<a class="code" href="namespacellvm.html#abf74b2f0dbae96f4708d3e407b36df02a489aa5052a55520044e1e82b2da7a336">Release</a>+Asserts/<a class="code" href="namespacellvm_1_1lltok.html#af353621f14cb4b4b3af5ffaff84076b1a56697632782c9ab774d6c132a955674a">APFloat</a>.d:  \
+<a name="l00004"></a>00004  APFloat.cpp \
+<a name="l00005"></a>00005   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/<a class="code" href="namespacellvm_1_1lltok.html#af353621f14cb4b4b3af5ffaff84076b1a56697632782c9ab774d6c132a955674a">APFloat</a>.h \
+<a name="l00006"></a>00006   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/APInt.h \
+<a name="l00007"></a>00007   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/ArrayRef.h \
+<a name="l00008"></a>00008   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/SmallVector.h \
+<a name="l00009"></a>00009   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/AlignOf.h \
+<a name="l00010"></a>00010   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/Compiler.h \
+<a name="l00011"></a>00011   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/type_traits.h \
+<a name="l00012"></a>00012   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/DataTypes.h \
+<a name="l00013"></a>00013   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/MathExtras.h \
+<a name="l00014"></a>00014   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/<a class="code" href="namespacellvm_1_1sys.html#a504113f412be5632c0645d810d89ede7">SwapByteOrder</a>.h \
+<a name="l00015"></a>00015   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/<a class="code" href="namespacellvm_1_1lltok.html#af353621f14cb4b4b3af5ffaff84076b1a2a534f35c27ab3eb596772936555af70">APSInt</a>.h \
+<a name="l00016"></a>00016   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/FoldingSet.h \
+<a name="l00017"></a>00017   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/StringRef.h \
+<a name="l00018"></a>00018   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/Hashing.h \
+<a name="l00019"></a>00019   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/STLExtras.h \
+<a name="l00020"></a>00020   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/Host.h \
+<a name="l00021"></a>00021   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/StringMap.h \
+<a name="l00022"></a>00022   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/Allocator.h \
+<a name="l00023"></a>00023   /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/ErrorHandling.h
+<a name="l00024"></a>00024 
+<a name="l00025"></a>00025 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/<a class="code" href="namespacellvm_1_1lltok.html#af353621f14cb4b4b3af5ffaff84076b1a56697632782c9ab774d6c132a955674a">APFloat</a>.h:
+<a name="l00026"></a>00026 
+<a name="l00027"></a>00027 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/APInt.h:
+<a name="l00028"></a>00028 
+<a name="l00029"></a>00029 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/ArrayRef.h:
+<a name="l00030"></a>00030 
+<a name="l00031"></a>00031 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/SmallVector.h:
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/AlignOf.h:
+<a name="l00034"></a>00034 
+<a name="l00035"></a>00035 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/Compiler.h:
+<a name="l00036"></a>00036 
+<a name="l00037"></a>00037 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/type_traits.h:
+<a name="l00038"></a>00038 
+<a name="l00039"></a>00039 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/DataTypes.h:
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/MathExtras.h:
+<a name="l00042"></a>00042 
+<a name="l00043"></a>00043 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/<a class="code" href="namespacellvm_1_1sys.html#a504113f412be5632c0645d810d89ede7">SwapByteOrder</a>.h:
+<a name="l00044"></a>00044 
+<a name="l00045"></a>00045 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/<a class="code" href="namespacellvm_1_1lltok.html#af353621f14cb4b4b3af5ffaff84076b1a2a534f35c27ab3eb596772936555af70">APSInt</a>.h:
+<a name="l00046"></a>00046 
+<a name="l00047"></a>00047 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/FoldingSet.h:
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/StringRef.h:
+<a name="l00050"></a>00050 
+<a name="l00051"></a>00051 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/Hashing.h:
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/STLExtras.h:
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/Host.h:
+<a name="l00056"></a>00056 
+<a name="l00057"></a>00057 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/ADT/StringMap.h:
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/Allocator.h:
+<a name="l00060"></a>00060 
+<a name="l00061"></a>00061 /home/tonic/www-releases/3.2/llvm-3.2.src/include/llvm/Support/ErrorHandling.h:
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:32:37 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/APFloat_8h__dep__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/APFloat_8h__dep__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/APFloat_8h__dep__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/APFloat_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/APFloat_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/APFloat_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/APInt_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/APInt_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/APInt_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/APInt_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,614 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: APInt.cpp File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_3927ff15cdce1d22d8dcb33a29894069.html">Support</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#define-members">Defines</a> |
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">APInt.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="APInt_8h_source.html">llvm/ADT/APInt.h</a>"</code><br/>
+<code>#include "<a class="el" href="FoldingSet_8h_source.html">llvm/ADT/FoldingSet.h</a>"</code><br/>
+<code>#include "<a class="el" href="Hashing_8h_source.html">llvm/ADT/Hashing.h</a>"</code><br/>
+<code>#include "<a class="el" href="SmallString_8h_source.html">llvm/ADT/SmallString.h</a>"</code><br/>
+<code>#include "<a class="el" href="StringRef_8h_source.html">llvm/ADT/StringRef.h</a>"</code><br/>
+<code>#include "<a class="el" href="Debug_8h_source.html">llvm/Support/Debug.h</a>"</code><br/>
+<code>#include "<a class="el" href="ErrorHandling_8h_source.html">llvm/Support/ErrorHandling.h</a>"</code><br/>
+<code>#include "<a class="el" href="MathExtras_8h_source.html">llvm/Support/MathExtras.h</a>"</code><br/>
+<code>#include "<a class="el" href="raw__ostream_8h_source.html">llvm/Support/raw_ostream.h</a>"</code><br/>
+<code>#include <cmath></code><br/>
+<code>#include <limits></code><br/>
+<code>#include <cstring></code><br/>
+<code>#include <cstdlib></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for APInt.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="APInt_8cpp__incl.png" border="0" usemap="#APInt_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="APInt_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="define-members"></a>
+Defines</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#ad78e062f62e0d6e453941fb4ca843e4d">DEBUG_TYPE</a>   "apint"</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">#define </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#a7a14f772ba33630fcb09163ed22e4f2e">COMPILE_TIME_ASSERT</a>(cond)   extern int CTAssert[(cond) ? 1 : -1]</td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static uint64_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#a8713f0a0451f250c8758df35f856faa1">getClearedMemory</a> (<a class="el" href="classunsigned.html">unsigned</a> numWords)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static uint64_t * </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#ae1231a0ba09e3575004f28f4c8751c1b">getMemory</a> (<a class="el" href="classunsigned.html">unsigned</a> numWords)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="classunsigned.html">unsigned</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#aced746e8db93cd749b6226df5350cc1d">getDigit</a> (<a class="el" href="classchar.html">char</a> cdigit, uint8_t radix)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">A utility function that converts a character to a digit.  <a href="#aced746e8db93cd749b6226df5350cc1d"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#aad409837c6a6b615d816509f357afb35">add_1</a> (uint64_t dest[], uint64_t x[], <a class="el" href="classunsigned.html">unsigned</a> len, uint64_t y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#aa6fd1429352ceab0a87cb024e163bd8f">sub_1</a> (uint64_t x[], <a class="el" href="classunsigned.html">unsigned</a> len, uint64_t y)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#a1dcb210aee6db4fbd6c608c9195a48d8">add</a> (uint64_t *dest, const uint64_t *x, const uint64_t *y, <a class="el" href="classunsigned.html">unsigned</a> len)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">General addition of 64-bit integer arrays.  <a href="#a1dcb210aee6db4fbd6c608c9195a48d8"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#ab05972b4953d3d2c9332002f96c0f9f2">sub</a> (uint64_t *dest, const uint64_t *x, const uint64_t *y, <a class="el" href="classunsigned.html">unsigned</a> len)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Generalized subtraction of 64-bit integer arrays.  <a href="#ab05972b4953d3d2c9332002f96c0f9f2"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static uint64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#a4d4d4a8f7668dd517881defd4b04e1d3">mul_1</a> (uint64_t dest[], uint64_t x[], <a class="el" href="classunsigned.html">unsigned</a> len, uint64_t y)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Multiply a multi-digit APInt by a single digit (64-bit) integer.  <a href="#a4d4d4a8f7668dd517881defd4b04e1d3"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#a6e710871d1f1c7be38b5c5f22cff93c8">mul</a> (uint64_t dest[], uint64_t x[], <a class="el" href="classunsigned.html">unsigned</a> xlen, uint64_t y[], <a class="el" href="classunsigned.html">unsigned</a> ylen)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Generalized multiplicate of integer arrays.  <a href="#a6e710871d1f1c7be38b5c5f22cff93c8"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#a97ab4012ddf1b44addec910bc0a342aa">lshrNear</a> (uint64_t *Dst, uint64_t *Src, <a class="el" href="classunsigned.html">unsigned</a> Words, <a class="el" href="classunsigned.html">unsigned</a> Shift)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#a877c15efe55a9b5fd6b3124d18f4c0c5">KnuthDiv</a> (<a class="el" href="classunsigned.html">unsigned</a> *u, <a class="el" href="classunsigned.html">unsigned</a> *v, <a class="el" href="classunsigned.html">unsigned</a> *q, <a class="el" href="classunsigned.html">unsigned</a> *r, <a class="el" href="classunsigned.html">unsigned</a> m, <a class="el" href="classunsigned.html">unsigned</a> n)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"> </td><td class="memItemRight" valign="bottom"><a class="el" href="APInt_8cpp.html#a70e1b17e80337e92ee7355683c3f6ed3">COMPILE_TIME_ASSERT</a> (integerPartWidth%2==0)</td></tr>
+</table>
+<hr/><h2>Define Documentation</h2>
+<a class="anchor" id="a7a14f772ba33630fcb09163ed22e4f2e"></a><!-- doxytag: member="APInt.cpp::COMPILE_TIME_ASSERT" ref="a7a14f772ba33630fcb09163ed22e4f2e" args="(cond)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define COMPILE_TIME_ASSERT</td>
+          <td>(</td>
+          <td class="paramtype"> </td>
+          <td class="paramname">cond</td><td>)</td>
+          <td>   extern int CTAssert[(cond) ? 1 : -1]</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l02232">2232</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ad78e062f62e0d6e453941fb4ca843e4d"></a><!-- doxytag: member="APInt.cpp::DEBUG_TYPE" ref="ad78e062f62e0d6e453941fb4ca843e4d" args="" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">#define DEBUG_TYPE   "apint"</td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00015">15</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+</div>
+</div>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a1dcb210aee6db4fbd6c608c9195a48d8"></a><!-- doxytag: member="APInt.cpp::add" ref="a1dcb210aee6db4fbd6c608c9195a48d8" args="(uint64_t *dest, const uint64_t *x, const uint64_t *y, unsigned len)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> add </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t * </td>
+          <td class="paramname"><em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint64_t * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint64_t * </td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>len</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>General addition of 64-bit integer arrays. </p>
+<p>add - This function adds the integer array x to the integer array Y and places the result in dest. </p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>the carry out from the addition </dd></dl>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00237">237</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>Referenced by <a class="el" href="ARMDisassembler_8cpp_source.html#l02051">DecodeAddrModeImm12Operand()</a>, <a class="el" href="ARMDisassembler_8cpp_source.html#l03367">DecodePostIdxReg()</a>, <a class="el" href="APInt_8cpp_source.html#l00469">llvm::APInt::operator+()</a>, and <a class="el" href="APInt_8cpp_source.html#l00251">llvm::APInt::operator+=()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aad409837c6a6b615d816509f357afb35"></a><!-- doxytag: member="APInt.cpp::add_1" ref="aad409837c6a6b615d816509f357afb35" args="(uint64_t dest[], uint64_t x[], unsigned len, uint64_t y)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> add_1 </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>dest</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>y</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>add_1 - This function adds a single "digit" integer, y, to the multiple "digit" integer array, x[]. x[] is modified to reflect the addition and 1 is returned if there is a carry out, otherwise 0 is returned. </p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>the carry of the addition. </dd></dl>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00182">182</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>Referenced by <a class="el" href="APInt_8cpp_source.html#l00196">llvm::APInt::operator++()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a70e1b17e80337e92ee7355683c3f6ed3"></a><!-- doxytag: member="APInt.cpp::COMPILE_TIME_ASSERT" ref="a70e1b17e80337e92ee7355683c3f6ed3" args="(integerPartWidth%2==0)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">COMPILE_TIME_ASSERT </td>
+          <td>(</td>
+          <td class="paramtype">integerPartWidth% </td>
+          <td class="paramname"><em>2</em> = <code>=0</code></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+</div>
+</div>
+<a class="anchor" id="a8713f0a0451f250c8758df35f856faa1"></a><!-- doxytag: member="APInt.cpp::getClearedMemory" ref="a8713f0a0451f250c8758df35f856faa1" args="(unsigned numWords)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static uint64_t* getClearedMemory </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>numWords</em></td><td>)</td>
+          <td><code> [inline, static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>A utility function for allocating memory, checking for allocation failures, and ensuring the contents are zeroed. </p>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00033">33</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>References <a class="el" href="TargetLibraryInfo_8h_source.html#l00222">llvm::LibFunc::memset</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aced746e8db93cd749b6226df5350cc1d"></a><!-- doxytag: member="APInt.cpp::getDigit" ref="aced746e8db93cd749b6226df5350cc1d" args="(char cdigit, uint8_t radix)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="classunsigned.html">unsigned</a> getDigit </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classchar.html">char</a> </td>
+          <td class="paramname"><em>cdigit</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint8_t </td>
+          <td class="paramname"><em>radix</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [inline, static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>A utility function that converts a character to a digit. </p>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00049">49</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ae1231a0ba09e3575004f28f4c8751c1b"></a><!-- doxytag: member="APInt.cpp::getMemory" ref="ae1231a0ba09e3575004f28f4c8751c1b" args="(unsigned numWords)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static uint64_t* getMemory </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>numWords</em></td><td>)</td>
+          <td><code> [inline, static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>A utility function for allocating memory and checking for allocation failure. The content is not zeroed. </p>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00042">42</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>Referenced by <a class="el" href="APInt_8cpp_source.html#l00355">llvm::APInt::operator*=()</a>, <a class="el" href="APInt_8cpp_source.html#l00942">llvm::APInt::sext()</a>, <a class="el" href="APInt_8cpp_source.html#l00919">llvm::APInt::trunc()</a>, and <a class="el" href="APInt_8cpp_source.html#l00983">llvm::APInt::zext()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a877c15efe55a9b5fd6b3124d18f4c0c5"></a><!-- doxytag: member="APInt.cpp::KnuthDiv" ref="a877c15efe55a9b5fd6b3124d18f4c0c5" args="(unsigned *u, unsigned *v, unsigned *q, unsigned *r, unsigned m, unsigned n)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void KnuthDiv </td>
+          <td>(</td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> * </td>
+          <td class="paramname"><em>u</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> * </td>
+          <td class="paramname"><em>v</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> * </td>
+          <td class="paramname"><em>q</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> * </td>
+          <td class="paramname"><em>r</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>m</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>n</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Implementation of Knuth's Algorithm D (Division of nonnegative integers) from "Art of Computer Programming, Volume 2", section 4.3.1, p. 272. The variables here have the same names as in the algorithm. Comments explain the algorithm and any deviation from it. </p>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l01487">1487</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>References <a class="el" href="MathExtras_8h_source.html#l00160">llvm::CountLeadingZeros_32()</a>, <a class="el" href="Debug_8cpp_source.html#l00101">llvm::dbgs()</a>, and <a class="el" href="Debug_8h_source.html#l00097">DEBUG</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a97ab4012ddf1b44addec910bc0a342aa"></a><!-- doxytag: member="APInt.cpp::lshrNear" ref="a97ab4012ddf1b44addec910bc0a342aa" args="(uint64_t *Dst, uint64_t *Src, unsigned Words, unsigned Shift)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void lshrNear </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t * </td>
+          <td class="paramname"><em>Dst</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t * </td>
+          <td class="paramname"><em>Src</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>Words</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>Shift</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>Perform a logical right-shift from Src to Dst, which must be equal or non-overlapping, of Words words, by Shift, which must be less than 64. </p>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00767">767</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>References <a class="el" href="ARMBaseInfo_8h_source.html#l00097">llvm::ARM_PROC::I</a>.</p>
+
+<p>Referenced by <a class="el" href="APInt_8cpp_source.html#l00777">llvm::APInt::byteSwap()</a>, and <a class="el" href="APInt_8cpp_source.html#l01127">llvm::APInt::lshr()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a6e710871d1f1c7be38b5c5f22cff93c8"></a><!-- doxytag: member="APInt.cpp::mul" ref="a6e710871d1f1c7be38b5c5f22cff93c8" args="(uint64_t dest[], uint64_t x[], unsigned xlen, uint64_t y[], unsigned ylen)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static void mul </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>dest</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>xlen</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>y</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>ylen</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Generalized multiplicate of integer arrays. </p>
+<p>Multiplies integer array x by integer array y and stores the result into the integer array dest. Note that dest's size must be >= xlen + ylen. </p>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00325">325</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>References <a class="el" href="APInt_8cpp_source.html#l00291">mul_1()</a>.</p>
+
+<p>Referenced by <a class="el" href="APInt_8cpp_source.html#l00355">llvm::APInt::operator*=()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="a4d4d4a8f7668dd517881defd4b04e1d3"></a><!-- doxytag: member="APInt.cpp::mul_1" ref="a4d4d4a8f7668dd517881defd4b04e1d3" args="(uint64_t dest[], uint64_t x[], unsigned len, uint64_t y)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static uint64_t mul_1 </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>dest</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>y</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Multiply a multi-digit APInt by a single digit (64-bit) integer. </p>
+<p>Multiplies an integer array, x, by a uint64_t integer and places the result into dest. </p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>the carry out of the multiplication. </dd></dl>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00291">291</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>Referenced by <a class="el" href="APInt_8cpp_source.html#l00325">mul()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="ab05972b4953d3d2c9332002f96c0f9f2"></a><!-- doxytag: member="APInt.cpp::sub" ref="ab05972b4953d3d2c9332002f96c0f9f2" args="(uint64_t *dest, const uint64_t *x, const uint64_t *y, unsigned len)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> sub </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t * </td>
+          <td class="paramname"><em>dest</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint64_t * </td>
+          <td class="paramname"><em>x</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const uint64_t * </td>
+          <td class="paramname"><em>y</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>len</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Generalized subtraction of 64-bit integer arrays. </p>
+<p>Subtracts the integer array y from the integer array x </p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>returns the borrow out. </dd></dl>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00264">264</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>Referenced by <a class="el" href="ARMBaseInstrInfo_8cpp_source.html#l00122">llvm::ARMBaseInstrInfo::convertToThreeAddress()</a>, <a class="el" href="CalcSpillWeights_8cpp_source.html#l00059">copyHint()</a>, <a class="el" href="ARMISelLowering_8cpp_source.html#l06679">llvm::ARMTargetLowering::EmitInstrWithCustomInserter()</a>, <a class="el" href="APInt_8cpp_source.html#l00478">llvm::APInt::operator-()</a>, and <a class="el" href="APInt_8cpp_source.html#l00278">llvm::APInt::operator-=()</a>.</p>
+
+</div>
+</div>
+<a class="anchor" id="aa6fd1429352ceab0a87cb024e163bd8f"></a><!-- doxytag: member="APInt.cpp::sub_1" ref="aa6fd1429352ceab0a87cb024e163bd8f" args="(uint64_t x[], unsigned len, uint64_t y)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> sub_1 </td>
+          <td>(</td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>x</em>[], </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype"><a class="el" href="classunsigned.html">unsigned</a> </td>
+          <td class="paramname"><em>len</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">uint64_t </td>
+          <td class="paramname"><em>y</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+<p>sub_1 - This function subtracts a single "digit" (64-bit word), y, from the multi-digit integer array, x[], propagating the borrowed 1 value until no further borrowing is neeeded or it runs out of "digits" in x. The result is 1 if "borrowing" exhausted the digits in x, or 0 if x was not exhausted. In other words, if y > x then this function returns 1, otherwise 0. </p>
+<dl class="return"><dt><b>Returns:</b></dt><dd>the borrow out of the subtraction </dd></dl>
+
+<p>Definition at line <a class="el" href="APInt_8cpp_source.html#l00210">210</a> of file <a class="el" href="APInt_8cpp_source.html">APInt.cpp</a>.</p>
+
+<p>References <a class="el" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">llvm::X</a>.</p>
+
+<p>Referenced by <a class="el" href="APInt_8cpp_source.html#l00225">llvm::APInt::operator--()</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:26 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/APInt_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/APInt_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/APInt_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/APInt_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,169 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: APInt.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_25acc6571c4e3a053ee4203146b47a61.html">include</a>      </li>
+      <li class="navelem"><a class="el" href="dir_fd2d7b5ce83b1c1657cd6600d8cb39fa.html">llvm</a>      </li>
+      <li class="navelem"><a class="el" href="dir_5760af5717174facf3d4fa63878994a9.html">ADT</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#nested-classes">Classes</a> |
+<a href="#namespaces">Namespaces</a> |
+<a href="#typedef-members">Typedefs</a> |
+<a href="#func-members">Functions</a> |
+<a href="#var-members">Variables</a>  </div>
+  <div class="headertitle">
+<div class="title">APInt.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="ArrayRef_8h_source.html">llvm/ADT/ArrayRef.h</a>"</code><br/>
+<code>#include "<a class="el" href="Compiler_8h_source.html">llvm/Support/Compiler.h</a>"</code><br/>
+<code>#include "<a class="el" href="MathExtras_8h_source.html">llvm/Support/MathExtras.h</a>"</code><br/>
+<code>#include <cassert></code><br/>
+<code>#include <climits></code><br/>
+<code>#include <cstring></code><br/>
+<code>#include <string></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for APInt.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="APInt_8h__incl.png" border="0" usemap="#APInt_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="APInt_8h__dep__incl.png" border="0" usemap="#APInt_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="APInt_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="nested-classes"></a>
+Classes</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">class  </td><td class="memItemRight" valign="bottom"><a class="el" href="classllvm_1_1APInt.html">llvm::APInt</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Class for arbitrary precision integers.  <a href="classllvm_1_1APInt.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1APInt_1_1ms.html">llvm::APInt::ms</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Magic data for optimising signed division by a constant.  <a href="structllvm_1_1APInt_1_1ms.html#details">More...</a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structllvm_1_1APInt_1_1mu.html">llvm::APInt::mu</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Magic data for optimising unsigned division by a constant.  <a href="structllvm_1_1APInt_1_1mu.html#details">More...</a><br/></td></tr>
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html">llvm::APIntOps</a></td></tr>
+<tr><td colspan="2"><h2><a name="typedef-members"></a>
+Typedefs</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">typedef uint64_t </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a2ea690e7d3e00f549f15c403bf2522a5">llvm::integerPart</a></td></tr>
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a162c90bc179a6359438d060722bee35f">llvm::operator==</a> (uint64_t V1, const APInt &V2)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a2f883c895f4d244f4ed56ed8a8c160c1">llvm::operator!=</a> (uint64_t V1, const APInt &V2)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">raw_ostream & </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a6a02d446812b76c3b271d9e3e3c77b49">llvm::operator<<</a> (raw_ostream &OS, const APInt &I)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a36119f1b51169ab67a14a52e23d1e511">llvm::APIntOps::smin</a> (const APInt &A, const APInt &B)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determine the smaller of two APInts considered to be signed.  <a href="#a36119f1b51169ab67a14a52e23d1e511"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a032d677bf90ffeb8afcb93e40dbcf6a7">llvm::APIntOps::smax</a> (const APInt &A, const APInt &B)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determine the larger of two APInts considered to be signed.  <a href="#a032d677bf90ffeb8afcb93e40dbcf6a7"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a50d881392940ab60561065fd1f74af01">llvm::APIntOps::umin</a> (const APInt &A, const APInt &B)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determine the smaller of two APInts considered to be signed.  <a href="#a50d881392940ab60561065fd1f74af01"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#af1049fb1fd8d46e317bc27285e036493">llvm::APIntOps::umax</a> (const APInt &A, const APInt &B)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Determine the larger of two APInts considered to be unsigned.  <a href="#af1049fb1fd8d46e317bc27285e036493"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a01bd8f75e31e440075bf2f943b3714ff">llvm::APIntOps::isIntN</a> (<a class="el" href="classunsigned.html">unsigned</a> N, const APInt &APIVal)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check if the specified <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> has a N-bits unsigned integer value.  <a href="#a01bd8f75e31e440075bf2f943b3714ff"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a30d4699091d2988481cd9be751f77356">llvm::APIntOps::isSignedIntN</a> (<a class="el" href="classunsigned.html">unsigned</a> N, const APInt &APIVal)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Check if the specified <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> has a N-bits signed integer value.  <a href="#a30d4699091d2988481cd9be751f77356"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a3deb6e6ca37ab496c0ee8996cb06825c">llvm::APIntOps::isMask</a> (<a class="el" href="classunsigned.html">unsigned</a> numBits, const APInt &APIVal)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a7f6d289fb01d21926d74f34b4c4f14dd">llvm::APIntOps::isShiftedMask</a> (<a class="el" href="classunsigned.html">unsigned</a> numBits, const APInt &APIVal)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a76b3a397c545acc7e4294df5d2ff24e9">llvm::APIntOps::byteSwap</a> (const APInt &APIVal)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classunsigned.html">unsigned</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a4a8fe7a278424a14cecbea8b3cbaef5d">llvm::APIntOps::logBase2</a> (const APInt &APIVal)</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classllvm_1_1APInt.html">APInt</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a14d2cc686664df0fc01feee1d690e299">llvm::APIntOps::GreatestCommonDivisor</a> (const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &Val1, const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &Val2)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Compute GCD of two <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> values.  <a href="#a14d2cc686664df0fc01feee1d690e299"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a54dfe8ba0babf979f348de572e312836">llvm::APIntOps::RoundAPIntToDouble</a> (const APInt &APIVal)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Converts the given <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> to a double value.  <a href="#a54dfe8ba0babf979f348de572e312836"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">double </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#aaa82772aeb64a449b2fd9fc56b6b2f4b">llvm::APIntOps::RoundSignedAPIntToDouble</a> (const APInt &APIVal)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Converts the given <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> to a double value.  <a href="#aaa82772aeb64a449b2fd9fc56b6b2f4b"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a092c0a4728a5545a5b4330c63130db1b">llvm::APIntOps::RoundAPIntToFloat</a> (const APInt &APIVal)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Converts the given <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> to a float vlalue.  <a href="#a092c0a4728a5545a5b4330c63130db1b"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">float </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#ad2de5c5de0ed0d2032d6990969cb97b8">llvm::APIntOps::RoundSignedAPIntToFloat</a> (const APInt &APIVal)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Converts the given <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a> to a float value.  <a href="#ad2de5c5de0ed0d2032d6990969cb97b8"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classllvm_1_1APInt.html">APInt</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a9f1937c6b659f3758dae8adca513fcd2">llvm::APIntOps::RoundDoubleToAPInt</a> (double Double, <a class="el" href="classunsigned.html">unsigned</a> width)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Converts the given double value into a <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>.  <a href="#a9f1937c6b659f3758dae8adca513fcd2"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a96a156e9aa11bdecdea9f8c0d6e5c5d2">llvm::APIntOps::RoundFloatToAPInt</a> (float Float, <a class="el" href="classunsigned.html">unsigned</a> width)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Converts a float value into a <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>.  <a href="#a96a156e9aa11bdecdea9f8c0d6e5c5d2"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a53678e1ba939cbda45347935d6324563">llvm::APIntOps::ashr</a> (const APInt &LHS, <a class="el" href="classunsigned.html">unsigned</a> shiftAmt)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Arithmetic right-shift function.  <a href="#a53678e1ba939cbda45347935d6324563"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a75a71c5acb58449ea8a731e9caebf1fe">llvm::APIntOps::lshr</a> (const APInt &LHS, <a class="el" href="classunsigned.html">unsigned</a> shiftAmt)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Logical right-shift function.  <a href="#a75a71c5acb58449ea8a731e9caebf1fe"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a57f47540fddb72feab9e8afd08f21611">llvm::APIntOps::shl</a> (const APInt &LHS, <a class="el" href="classunsigned.html">unsigned</a> shiftAmt)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Left-shift function.  <a href="#a57f47540fddb72feab9e8afd08f21611"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#ac433e8ef803206432c51ea05e17441a5">llvm::APIntOps::sdiv</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Signed division function for <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>.  <a href="#ac433e8ef803206432c51ea05e17441a5"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#ac4b92ba5838960bd0f6eef1408b7362b">llvm::APIntOps::udiv</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Unsigned division function for <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>.  <a href="#ac4b92ba5838960bd0f6eef1408b7362b"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a7d4913ef0e5120d562ea4164507a790c">llvm::APIntOps::srem</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1Function.html">Function</a> for signed remainder operation.  <a href="#a7d4913ef0e5120d562ea4164507a790c"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#acea7802c3430fe4fdf99fb8ec98c04d8">llvm::APIntOps::urem</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1Function.html">Function</a> for unsigned remainder operation.  <a href="#acea7802c3430fe4fdf99fb8ec98c04d8"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#ae1450c33ceb9a005d6b4f72a6dcf9db7">llvm::APIntOps::mul</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1Function.html">Function</a> for multiplication operation.  <a href="#ae1450c33ceb9a005d6b4f72a6dcf9db7"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#aac1b5ecbbed1a1f61ba276cd132d0130">llvm::APIntOps::add</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1Function.html">Function</a> for addition operation.  <a href="#aac1b5ecbbed1a1f61ba276cd132d0130"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a060c7b43dcc947d25d2c402b1d718f41">llvm::APIntOps::sub</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><a class="el" href="classllvm_1_1Function.html">Function</a> for subtraction operation.  <a href="#a060c7b43dcc947d25d2c402b1d718f41"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a684cfe02c582e8d75cd6d457e63e6c25">llvm::APIntOps::And</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Bitwise AND function for <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>.  <a href="#a684cfe02c582e8d75cd6d457e63e6c25"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a22f056804d2b9882f74adc905872bc39">llvm::APIntOps::Or</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Bitwise OR function for <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>.  <a href="#a22f056804d2b9882f74adc905872bc39"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#afc7c4d88d09cba0c5e920f8a3a3ace55">llvm::APIntOps::Xor</a> (const APInt &LHS, const APInt &RHS)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Bitwise XOR function for <a class="el" href="classllvm_1_1APInt.html" title="Class for arbitrary precision integers.">APInt</a>.  <a href="#afc7c4d88d09cba0c5e920f8a3a3ace55"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">APInt </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1APIntOps.html#a05e6b3a73a1d4fa4979f13a69d6f931a">llvm::APIntOps::Not</a> (const APInt &APIVal)</td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight">Bitwise complement function.  <a href="#a05e6b3a73a1d4fa4979f13a69d6f931a"></a><br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top"><a class="el" href="classllvm_1_1hash__code.html">hash_code</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a0e3c089e61a9927131ee18b4eb7c7c5c">llvm::hash_value</a> (const <a class="el" href="classllvm_1_1APInt.html">APInt</a> &Arg)</td></tr>
+<tr><td colspan="2"><h2><a name="var-members"></a>
+Variables</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classunsigned.html">unsigned</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a129030c26ec963d095d19957ba9664a3">llvm::host_char_bit</a> = 8</td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">const <a class="el" href="classunsigned.html">unsigned</a> int </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html#a32f06e60e816ea2d64f9367b426c452a">llvm::integerPartWidth</a></td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:26 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/APSInt_8h__dep__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/APSInt_8h__dep__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/APSInt_8h__dep__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,14 @@
+<map id="G" name="G">
+<area shape="rect" href="$APFloat_8h.html" title="llvm/ADT/APFloat.h" alt="" coords="495,84,636,111"/>
+<area shape="rect" href="$APInt_8h.html" title="llvm/ADT/APInt.h" alt="" coords="503,161,628,188"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="1127,239,1316,265"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="744,239,949,265"/>
+<area shape="rect" href="$ArrayRef_8h.html" title="llvm/ADT/ArrayRef.h" alt="" coords="453,239,597,265"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="91,471,264,497"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="441,316,609,343"/>
+<area shape="rect" href="$AlignOf_8h.html" title="llvm/Support/AlignOf.h" alt="" coords="560,393,723,420"/>
+<area shape="rect" href="$type__traits_8h.html" title="llvm/Support/type_traits.h" alt="" coords="992,393,1179,420"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="1323,471,1507,497"/>
+<area shape="rect" href="$SwapByteOrder_8h.html" title="llvm/Support/SwapByteOrder.h" alt="" coords="1285,316,1501,343"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="852,316,1001,343"/>
+</map>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+c5a06e387f05e5b0df89ea42e14f0970
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/ARMAddressingModes_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmBackend_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmBackend_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmBackend_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmBackend_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmBackend_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAsmBackend_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAsmBackend_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,766 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ARMAsmBackend.cpp Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_579de1806e7c3f5ec4b2837753e33796.html">ARM</a>      </li>
+      <li class="navelem"><a class="el" href="dir_2b83bbec4106b4abd04d1d4005e6c646.html">MCTargetDesc</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">ARMAsmBackend.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="ARMAsmBackend_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- ARMAsmBackend.cpp - ARM Assembler Backend -------------------------===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 
+<a name="l00010"></a>00010 <span class="preprocessor">#include "<a class="code" href="ARMMCTargetDesc_8h.html">MCTargetDesc/ARMMCTargetDesc.h</a>"</span>
+<a name="l00011"></a>00011 <span class="preprocessor">#include "<a class="code" href="ARMBaseInfo_8h.html">MCTargetDesc/ARMBaseInfo.h</a>"</span>
+<a name="l00012"></a>00012 <span class="preprocessor">#include "<a class="code" href="ARMFixupKinds_8h.html">MCTargetDesc/ARMFixupKinds.h</a>"</span>
+<a name="l00013"></a>00013 <span class="preprocessor">#include "<a class="code" href="ARMAddressingModes_8h.html">MCTargetDesc/ARMAddressingModes.h</a>"</span>
+<a name="l00014"></a>00014 <span class="preprocessor">#include "<a class="code" href="MCAssembler_8h.html">llvm/MC/MCAssembler.h</a>"</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="MCContext_8h.html">llvm/MC/MCContext.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="MCDirectives_8h.html">llvm/MC/MCDirectives.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="MCELFObjectWriter_8h.html">llvm/MC/MCELFObjectWriter.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="MCExpr_8h.html">llvm/MC/MCExpr.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="MCFixupKindInfo_8h.html">llvm/MC/MCFixupKindInfo.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="MCMachObjectWriter_8h.html">llvm/MC/MCMachObjectWriter.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="MCObjectWriter_8h.html">llvm/MC/MCObjectWriter.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="MCSectionELF_8h.html">llvm/MC/MCSectionELF.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="MCSectionMachO_8h.html">llvm/MC/MCSectionMachO.h</a>"</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "<a class="code" href="MCAsmBackend_8h.html">llvm/MC/MCAsmBackend.h</a>"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="MCSubtargetInfo_8h.html">llvm/MC/MCSubtargetInfo.h</a>"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="MCValue_8h.html">llvm/MC/MCValue.h</a>"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="MachOFormat_8h.html">llvm/Object/MachOFormat.h</a>"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="Support_2ELF_8h.html">llvm/Support/ELF.h</a>"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="ErrorHandling_8h.html">llvm/Support/ErrorHandling.h</a>"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="raw__ostream_8h.html">llvm/Support/raw_ostream.h</a>"</span>
+<a name="l00031"></a>00031 <span class="keyword">using namespace </span>llvm;
+<a name="l00032"></a>00032 
+<a name="l00033"></a>00033 <span class="keyword">namespace </span>{
+<a name="l00034"></a>00034 <span class="keyword">class </span>ARMELFObjectWriter : <span class="keyword">public</span> <a class="code" href="classllvm_1_1MCELFObjectTargetWriter.html">MCELFObjectTargetWriter</a> {
+<a name="l00035"></a>00035 <span class="keyword">public</span>:
+<a name="l00036"></a>00036   ARMELFObjectWriter(uint8_t OSABI)
+<a name="l00037"></a>00037     : <a class="code" href="classllvm_1_1MCELFObjectTargetWriter.html">MCELFObjectTargetWriter</a>(<span class="comment">/*Is64Bit*/</span> <a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>, OSABI, ELF::<a class="code" href="namespacellvm_1_1ELF.html#abff356643cef35bfac83430fc93e8910ae70d9dc0883af67df7d3a1b521031c21">EM_ARM</a>,
+<a name="l00038"></a>00038                               <span class="comment">/*HasRelocationAddend*/</span> <a class="code" href="AliasAnalysisEvaluator_8cpp.html#a3898a228575af19a9b2052f2b3677dce">false</a>) {}
+<a name="l00039"></a>00039 };
+<a name="l00040"></a>00040 
+<a name="l00041"></a>00041 <span class="keyword">class </span>ARMAsmBackend : <span class="keyword">public</span> <a class="code" href="classllvm_1_1MCAsmBackend.html" title="MCAsmBackend - Generic interface to target specific assembler backends.">MCAsmBackend</a> {
+<a name="l00042"></a>00042   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCSubtargetInfo.html">MCSubtargetInfo</a>* STI;
+<a name="l00043"></a>00043   <span class="keywordtype">bool</span> isThumbMode;  <span class="comment">// Currently emitting Thumb code.</span>
+<a name="l00044"></a>00044 <span class="keyword">public</span>:
+<a name="l00045"></a>00045   ARMAsmBackend(<span class="keyword">const</span> <a class="code" href="classllvm_1_1Target.html">Target</a> &T, <span class="keyword">const</span> <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> TT)
+<a name="l00046"></a>00046     : <a class="code" href="classllvm_1_1MCAsmBackend.html" title="MCAsmBackend - Generic interface to target specific assembler backends.">MCAsmBackend</a>(), STI(ARM_MC::<a class="code" href="namespacellvm_1_1ARM__MC.html#a04ffc4aa4a8b6b3d7b87ea9bb5b84ead">createARMMCSubtargetInfo</a>(TT, <span class="stringliteral">""</span>, <span class="stringliteral">""</span>)),
+<a name="l00047"></a>00047       isThumbMode(TT.startswith(<span class="stringliteral">"thumb"</span>)) {}
+<a name="l00048"></a>00048 
+<a name="l00049"></a>00049   ~ARMAsmBackend() {
+<a name="l00050"></a>00050     <span class="keyword">delete</span> STI;
+<a name="l00051"></a>00051   }
+<a name="l00052"></a>00052 
+<a name="l00053"></a>00053   <span class="keywordtype">unsigned</span> getNumFixupKinds()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a83aa9d86657b1bae143f5512d9a1b131">ARM::NumTargetFixupKinds</a>; }
+<a name="l00054"></a>00054 
+<a name="l00055"></a>00055   <span class="keywordtype">bool</span> hasNOP()<span class="keyword"> const </span>{
+<a name="l00056"></a>00056     <span class="keywordflow">return</span> (STI->getFeatureBits() & ARM::HasV6T2Ops) != 0;
+<a name="l00057"></a>00057   }
+<a name="l00058"></a>00058 
+<a name="l00059"></a>00059   <span class="keyword">const</span> <a class="code" href="structllvm_1_1MCFixupKindInfo.html" title="MCFixupKindInfo - Target independent information on a fixup kind.">MCFixupKindInfo</a> &getFixupKindInfo(<a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58" title="MCFixupKind - Extensible enumeration to represent the type of a fixup.">MCFixupKind</a> <a class="code" href="namespacellvm_1_1EngineKind.html#a9df47239a42cd9621ac26d9ecbd57441">Kind</a>)<span class="keyword"> const </span>{
+<a name="l00060"></a>00060     <span class="keyword">const</span> <span class="keyword">static</span> <a class="code" href="structllvm_1_1MCFixupKindInfo.html" title="MCFixupKindInfo - Target independent information on a fixup kind.">MCFixupKindInfo</a> Infos[<a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a83aa9d86657b1bae143f5512d9a1b131">ARM::NumTargetFixupKinds</a>] = {
+<a name="l00061"></a>00061 <span class="comment">// This table *must* be in the order that the fixup_* kinds are defined in</span>
+<a name="l00062"></a>00062 <span class="comment">// ARMFixupKinds.h.</span>
+<a name="l00063"></a>00063 <span class="comment">//</span>
+<a name="l00064"></a>00064 <span class="comment">// Name                      Offset (bits) Size (bits)     Flags</span>
+<a name="l00065"></a>00065 { <span class="stringliteral">"fixup_arm_ldst_pcrel_12"</span>, 0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00066"></a>00066 { <span class="stringliteral">"fixup_t2_ldst_pcrel_12"</span>,  0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> |
+<a name="l00067"></a>00067                                    <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da4736f387c937299570b8ac87f9d9dd08" title="Should this fixup kind force a 4-byte aligned effective PC value?">MCFixupKindInfo::FKF_IsAlignedDownTo32Bits</a>},
+<a name="l00068"></a>00068 { <span class="stringliteral">"fixup_arm_pcrel_10_unscaled"</span>, 0,        32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00069"></a>00069 { <span class="stringliteral">"fixup_arm_pcrel_10"</span>,      0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00070"></a>00070 { <span class="stringliteral">"fixup_t2_pcrel_10"</span>,       0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> |
+<a name="l00071"></a>00071                                    <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da4736f387c937299570b8ac87f9d9dd08" title="Should this fixup kind force a 4-byte aligned effective PC value?">MCFixupKindInfo::FKF_IsAlignedDownTo32Bits</a>},
+<a name="l00072"></a>00072 { <span class="stringliteral">"fixup_thumb_adr_pcrel_10"</span>,0,            8,   <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> |
+<a name="l00073"></a>00073                                    <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da4736f387c937299570b8ac87f9d9dd08" title="Should this fixup kind force a 4-byte aligned effective PC value?">MCFixupKindInfo::FKF_IsAlignedDownTo32Bits</a>},
+<a name="l00074"></a>00074 { <span class="stringliteral">"fixup_arm_adr_pcrel_12"</span>,  0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00075"></a>00075 { <span class="stringliteral">"fixup_t2_adr_pcrel_12"</span>,   0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> |
+<a name="l00076"></a>00076                                    <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da4736f387c937299570b8ac87f9d9dd08" title="Should this fixup kind force a 4-byte aligned effective PC value?">MCFixupKindInfo::FKF_IsAlignedDownTo32Bits</a>},
+<a name="l00077"></a>00077 { <span class="stringliteral">"fixup_arm_condbranch"</span>,    0,            24,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00078"></a>00078 { <span class="stringliteral">"fixup_arm_uncondbranch"</span>,  0,            24,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00079"></a>00079 { <span class="stringliteral">"fixup_t2_condbranch"</span>,     0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00080"></a>00080 { <span class="stringliteral">"fixup_t2_uncondbranch"</span>,   0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00081"></a>00081 { <span class="stringliteral">"fixup_arm_thumb_br"</span>,      0,            16,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00082"></a>00082 { <span class="stringliteral">"fixup_arm_uncondbl"</span>,      0,            24,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00083"></a>00083 { <span class="stringliteral">"fixup_arm_condbl"</span>,        0,            24,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00084"></a>00084 { <span class="stringliteral">"fixup_arm_blx"</span>,           0,            24,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00085"></a>00085 { <span class="stringliteral">"fixup_arm_thumb_bl"</span>,      0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00086"></a>00086 { <span class="stringliteral">"fixup_arm_thumb_blx"</span>,     0,            32,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00087"></a>00087 { <span class="stringliteral">"fixup_arm_thumb_cb"</span>,      0,            16,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00088"></a>00088 { <span class="stringliteral">"fixup_arm_thumb_cp"</span>,      0,             8,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> |
+<a name="l00089"></a>00089                                    <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da4736f387c937299570b8ac87f9d9dd08" title="Should this fixup kind force a 4-byte aligned effective PC value?">MCFixupKindInfo::FKF_IsAlignedDownTo32Bits</a>},
+<a name="l00090"></a>00090 { <span class="stringliteral">"fixup_arm_thumb_bcc"</span>,     0,             8,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00091"></a>00091 <span class="comment">// movw / movt: 16-bits immediate but scattered into two chunks 0 - 12, 16 - 19.</span>
+<a name="l00092"></a>00092 { <span class="stringliteral">"fixup_arm_movt_hi16"</span>,     0,            20,  0 },
+<a name="l00093"></a>00093 { <span class="stringliteral">"fixup_arm_movw_lo16"</span>,     0,            20,  0 },
+<a name="l00094"></a>00094 { <span class="stringliteral">"fixup_t2_movt_hi16"</span>,      0,            20,  0 },
+<a name="l00095"></a>00095 { <span class="stringliteral">"fixup_t2_movw_lo16"</span>,      0,            20,  0 },
+<a name="l00096"></a>00096 { <span class="stringliteral">"fixup_arm_movt_hi16_pcrel"</span>, 0,          20,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00097"></a>00097 { <span class="stringliteral">"fixup_arm_movw_lo16_pcrel"</span>, 0,          20,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00098"></a>00098 { <span class="stringliteral">"fixup_t2_movt_hi16_pcrel"</span>, 0,           20,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00099"></a>00099 { <span class="stringliteral">"fixup_t2_movw_lo16_pcrel"</span>, 0,           20,  <a class="code" href="structllvm_1_1MCFixupKindInfo.html#a8f6613f5c0a6dc7dfebce3761963659da9bd8af688090f2f81c405bd995079007">MCFixupKindInfo::FKF_IsPCRel</a> },
+<a name="l00100"></a>00100     };
+<a name="l00101"></a>00101 
+<a name="l00102"></a>00102     <span class="keywordflow">if</span> (Kind < <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58a02772a67f2052ae04bb9ef1ff9dc3cf8">FirstTargetFixupKind</a>)
+<a name="l00103"></a>00103       <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1MCAsmBackend.html#af13493941b3bbec74f72e7816534bd97" title="getFixupKindInfo - Get information on a fixup kind.">MCAsmBackend::getFixupKindInfo</a>(Kind);
+<a name="l00104"></a>00104 
+<a name="l00105"></a>00105     assert(<span class="keywordtype">unsigned</span>(Kind - <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58a02772a67f2052ae04bb9ef1ff9dc3cf8">FirstTargetFixupKind</a>) < getNumFixupKinds() &&
+<a name="l00106"></a>00106            <span class="stringliteral">"Invalid kind!"</span>);
+<a name="l00107"></a>00107     <span class="keywordflow">return</span> Infos[Kind - <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58a02772a67f2052ae04bb9ef1ff9dc3cf8">FirstTargetFixupKind</a>];
+<a name="l00108"></a>00108   }
+<a name="l00109"></a>00109 <span class="comment"></span>
+<a name="l00110"></a>00110 <span class="comment">  /// processFixupValue - Target hook to process the literal value of a fixup</span>
+<a name="l00111"></a>00111 <span class="comment">  /// if necessary.</span>
+<a name="l00112"></a>00112 <span class="comment"></span>  <span class="keywordtype">void</span> processFixupValue(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCAssembler.html">MCAssembler</a> &Asm, <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCAsmLayout.html">MCAsmLayout</a> &Layout,
+<a name="l00113"></a>00113                          <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup, <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFragment.html">MCFragment</a> *<a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933a5a78bc4e042ab2fbe041f0c29c1de4c0">DF</a>,
+<a name="l00114"></a>00114                          <a class="code" href="classllvm_1_1MCValue.html">MCValue</a> &<a class="code" href="classllvm_1_1Target.html">Target</a>, uint64_t &<a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a>,
+<a name="l00115"></a>00115                          <span class="keywordtype">bool</span> &IsResolved);
+<a name="l00116"></a>00116 
+<a name="l00117"></a>00117   <span class="keywordtype">bool</span> mayNeedRelaxation(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInst.html">MCInst</a> &Inst) <span class="keyword">const</span>;
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119   <span class="keywordtype">bool</span> fixupNeedsRelaxation(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup,
+<a name="l00120"></a>00120                             uint64_t <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a>,
+<a name="l00121"></a>00121                             <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInstFragment.html">MCInstFragment</a> *<a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933a5a78bc4e042ab2fbe041f0c29c1de4c0">DF</a>,
+<a name="l00122"></a>00122                             <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCAsmLayout.html">MCAsmLayout</a> &Layout) <span class="keyword">const</span>;
+<a name="l00123"></a>00123 
+<a name="l00124"></a>00124   <span class="keywordtype">void</span> relaxInstruction(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInst.html">MCInst</a> &Inst, <a class="code" href="classllvm_1_1MCInst.html">MCInst</a> &Res) <span class="keyword">const</span>;
+<a name="l00125"></a>00125 
+<a name="l00126"></a>00126   <span class="keywordtype">bool</span> writeNopData(uint64_t Count, <a class="code" href="classllvm_1_1MCObjectWriter.html">MCObjectWriter</a> *OW) <span class="keyword">const</span>;
+<a name="l00127"></a>00127 
+<a name="l00128"></a>00128   <span class="keywordtype">void</span> handleAssemblerFlag(<a class="code" href="namespacellvm.html#aa09571f0b44fd6bd8fae33d6ead290c1">MCAssemblerFlag</a> Flag) {
+<a name="l00129"></a>00129     <span class="keywordflow">switch</span> (Flag) {
+<a name="l00130"></a>00130     <span class="keywordflow">default</span>: <span class="keywordflow">break</span>;
+<a name="l00131"></a>00131     <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#aa09571f0b44fd6bd8fae33d6ead290c1a97f114ed47db100e48185ee6d6ad531b" title=".code16 (X86) / .code 16 (ARM)">MCAF_Code16</a>:
+<a name="l00132"></a>00132       setIsThumb(<span class="keyword">true</span>);
+<a name="l00133"></a>00133       <span class="keywordflow">break</span>;
+<a name="l00134"></a>00134     <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#aa09571f0b44fd6bd8fae33d6ead290c1ad77d445deab9f2715c6d2b48aee116ea" title=".code32 (X86) / .code 32 (ARM)">MCAF_Code32</a>:
+<a name="l00135"></a>00135       setIsThumb(<span class="keyword">false</span>);
+<a name="l00136"></a>00136       <span class="keywordflow">break</span>;
+<a name="l00137"></a>00137     }
+<a name="l00138"></a>00138   }
+<a name="l00139"></a>00139 
+<a name="l00140"></a>00140   <span class="keywordtype">unsigned</span> <a class="code" href="DeadStoreElimination_8cpp.html#abd4594e793d14c9f01a1f92d0afb0851">getPointerSize</a>()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> 4; }
+<a name="l00141"></a>00141   <span class="keywordtype">bool</span> isThumb()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> isThumbMode; }
+<a name="l00142"></a>00142   <span class="keywordtype">void</span> setIsThumb(<span class="keywordtype">bool</span> it) { isThumbMode = it; }
+<a name="l00143"></a>00143 };
+<a name="l00144"></a>00144 } <span class="comment">// end anonymous namespace</span>
+<a name="l00145"></a>00145 
+<a name="l00146"></a><a class="code" href="ARMAsmBackend_8cpp.html#a44c3ebfb87e5e1f66f0cb9d0610388c8">00146</a> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="ARMAsmBackend_8cpp.html#a44c3ebfb87e5e1f66f0cb9d0610388c8">getRelaxedOpcode</a>(<span class="keywordtype">unsigned</span> Op) {
+<a name="l00147"></a>00147   <span class="keywordflow">switch</span> (Op) {
+<a name="l00148"></a>00148   <span class="keywordflow">default</span>: <span class="keywordflow">return</span> Op;
+<a name="l00149"></a>00149   <span class="keywordflow">case</span> ARM::tBcc:       <span class="keywordflow">return</span> ARM::t2Bcc;
+<a name="l00150"></a>00150   <span class="keywordflow">case</span> ARM::tLDRpciASM: <span class="keywordflow">return</span> ARM::t2LDRpci;
+<a name="l00151"></a>00151   <span class="keywordflow">case</span> ARM::tADR:       <span class="keywordflow">return</span> ARM::t2ADR;
+<a name="l00152"></a>00152   <span class="keywordflow">case</span> ARM::tB:         <span class="keywordflow">return</span> ARM::t2B;
+<a name="l00153"></a>00153   }
+<a name="l00154"></a>00154 }
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156 <span class="keywordtype">bool</span> ARMAsmBackend::mayNeedRelaxation(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInst.html">MCInst</a> &Inst)<span class="keyword"> const </span>{
+<a name="l00157"></a>00157   <span class="keywordflow">if</span> (<a class="code" href="ARMAsmBackend_8cpp.html#a44c3ebfb87e5e1f66f0cb9d0610388c8">getRelaxedOpcode</a>(Inst.<a class="code" href="classllvm_1_1MCInst.html#a22542ca9978e4b90401edee109c4f263">getOpcode</a>()) != Inst.<a class="code" href="classllvm_1_1MCInst.html#a22542ca9978e4b90401edee109c4f263">getOpcode</a>())
+<a name="l00158"></a>00158     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00159"></a>00159   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00160"></a>00160 }
+<a name="l00161"></a>00161 
+<a name="l00162"></a>00162 <span class="keywordtype">bool</span> ARMAsmBackend::fixupNeedsRelaxation(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup,
+<a name="l00163"></a>00163                                          uint64_t <a class="code" href="classllvm_1_1Value.html" title="LLVM Value Representation.">Value</a>,
+<a name="l00164"></a>00164                                          <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInstFragment.html">MCInstFragment</a> *<a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933a5a78bc4e042ab2fbe041f0c29c1de4c0">DF</a>,
+<a name="l00165"></a>00165                                          <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCAsmLayout.html">MCAsmLayout</a> &Layout)<span class="keyword"> const </span>{
+<a name="l00166"></a>00166   <span class="keywordflow">switch</span> ((<span class="keywordtype">unsigned</span>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>()) {
+<a name="l00167"></a>00167   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a02e738702c5e86913f9f7df2f83480b3">ARM::fixup_arm_thumb_br</a>: {
+<a name="l00168"></a>00168     <span class="comment">// Relaxing tB to t2B. tB has a signed 12-bit displacement with the</span>
+<a name="l00169"></a>00169     <span class="comment">// low bit being an implied zero. There's an implied +4 offset for the</span>
+<a name="l00170"></a>00170     <span class="comment">// branch, so we adjust the other way here to determine what's</span>
+<a name="l00171"></a>00171     <span class="comment">// encodable.</span>
+<a name="l00172"></a>00172     <span class="comment">//</span>
+<a name="l00173"></a>00173     <span class="comment">// Relax if the value is too big for a (signed) i8.</span>
+<a name="l00174"></a>00174     <a class="code" href="classint64__t.html">int64_t</a> Offset = <a class="code" href="classint64__t.html">int64_t</a>(Value) - 4;
+<a name="l00175"></a>00175     <span class="keywordflow">return</span> Offset > 2046 || Offset < -2048;
+<a name="l00176"></a>00176   }
+<a name="l00177"></a>00177   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a9ad27f8b55ac56d16b5e0c378bad0051">ARM::fixup_arm_thumb_bcc</a>: {
+<a name="l00178"></a>00178     <span class="comment">// Relaxing tBcc to t2Bcc. tBcc has a signed 9-bit displacement with the</span>
+<a name="l00179"></a>00179     <span class="comment">// low bit being an implied zero. There's an implied +4 offset for the</span>
+<a name="l00180"></a>00180     <span class="comment">// branch, so we adjust the other way here to determine what's</span>
+<a name="l00181"></a>00181     <span class="comment">// encodable.</span>
+<a name="l00182"></a>00182     <span class="comment">//</span>
+<a name="l00183"></a>00183     <span class="comment">// Relax if the value is too big for a (signed) i8.</span>
+<a name="l00184"></a>00184     <a class="code" href="classint64__t.html">int64_t</a> Offset = <a class="code" href="classint64__t.html">int64_t</a>(Value) - 4;
+<a name="l00185"></a>00185     <span class="keywordflow">return</span> Offset > 254 || Offset < -256;
+<a name="l00186"></a>00186   }
+<a name="l00187"></a>00187   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a09a9168eafc337c15e7de013524a1532">ARM::fixup_thumb_adr_pcrel_10</a>:
+<a name="l00188"></a>00188   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a7b3659cc67fef8cc53f589860b2f1299">ARM::fixup_arm_thumb_cp</a>: {
+<a name="l00189"></a>00189     <span class="comment">// If the immediate is negative, greater than 1020, or not a multiple</span>
+<a name="l00190"></a>00190     <span class="comment">// of four, the wide version of the instruction must be used.</span>
+<a name="l00191"></a>00191     <a class="code" href="classint64__t.html">int64_t</a> Offset = <a class="code" href="classint64__t.html">int64_t</a>(Value) - 4;
+<a name="l00192"></a>00192     <span class="keywordflow">return</span> Offset > 1020 || Offset < 0 || Offset & 3;
+<a name="l00193"></a>00193   }
+<a name="l00194"></a>00194   }
+<a name="l00195"></a>00195   <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Unexpected fixup kind in fixupNeedsRelaxation()!"</span>);
+<a name="l00196"></a>00196 }
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198 <span class="keywordtype">void</span> ARMAsmBackend::relaxInstruction(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInst.html">MCInst</a> &Inst, <a class="code" href="classllvm_1_1MCInst.html">MCInst</a> &Res)<span class="keyword"> const </span>{
+<a name="l00199"></a>00199   <span class="keywordtype">unsigned</span> RelaxedOp = <a class="code" href="ARMAsmBackend_8cpp.html#a44c3ebfb87e5e1f66f0cb9d0610388c8">getRelaxedOpcode</a>(Inst.<a class="code" href="classllvm_1_1MCInst.html#a22542ca9978e4b90401edee109c4f263">getOpcode</a>());
+<a name="l00200"></a>00200 
+<a name="l00201"></a>00201   <span class="comment">// Sanity check w/ diagnostic if we get here w/ a bogus instruction.</span>
+<a name="l00202"></a>00202   <span class="keywordflow">if</span> (RelaxedOp == Inst.<a class="code" href="classllvm_1_1MCInst.html#a22542ca9978e4b90401edee109c4f263">getOpcode</a>()) {
+<a name="l00203"></a>00203     <a class="code" href="classllvm_1_1SmallString.html">SmallString<256></a> Tmp;
+<a name="l00204"></a>00204     <a class="code" href="classllvm_1_1raw__svector__ostream.html">raw_svector_ostream</a> OS(Tmp);
+<a name="l00205"></a>00205     Inst.<a class="code" href="classllvm_1_1MCInst.html#a786c0de4267c822c701718d17fa10e0b" title="Dump the MCInst as prettily as possible using the additional MC structures, if given. Operators are separated by the Separator string.">dump_pretty</a>(OS);
+<a name="l00206"></a>00206     OS << <span class="stringliteral">"\n"</span>;
+<a name="l00207"></a>00207     <a class="code" href="namespacellvm.html#af9521f126aaffcc4bbe06c554b8b4bc1">report_fatal_error</a>(<span class="stringliteral">"unexpected instruction to relax: "</span> + OS.str());
+<a name="l00208"></a>00208   }
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210   <span class="comment">// The instructions we're relaxing have (so far) the same operands.</span>
+<a name="l00211"></a>00211   <span class="comment">// We just need to update to the proper opcode.</span>
+<a name="l00212"></a>00212   Res = Inst;
+<a name="l00213"></a>00213   Res.<a class="code" href="classllvm_1_1MCInst.html#ae844d6ff99f067e6672e004ed7613c24">setOpcode</a>(RelaxedOp);
+<a name="l00214"></a>00214 }
+<a name="l00215"></a>00215 
+<a name="l00216"></a>00216 <span class="keywordtype">bool</span> ARMAsmBackend::writeNopData(uint64_t Count, <a class="code" href="classllvm_1_1MCObjectWriter.html">MCObjectWriter</a> *OW)<span class="keyword"> const </span>{
+<a name="l00217"></a>00217   <span class="keyword">const</span> uint16_t Thumb1_16bitNopEncoding = 0x46c0; <span class="comment">// using MOV r8,r8</span>
+<a name="l00218"></a>00218   <span class="keyword">const</span> uint16_t Thumb2_16bitNopEncoding = 0xbf00; <span class="comment">// NOP</span>
+<a name="l00219"></a>00219   <span class="keyword">const</span> uint32_t ARMv4_NopEncoding = 0xe1a0000; <span class="comment">// using MOV r0,r0</span>
+<a name="l00220"></a>00220   <span class="keyword">const</span> uint32_t ARMv6T2_NopEncoding = 0xe320f000; <span class="comment">// NOP</span>
+<a name="l00221"></a>00221   <span class="keywordflow">if</span> (isThumb()) {
+<a name="l00222"></a>00222     <span class="keyword">const</span> uint16_t nopEncoding = hasNOP() ? Thumb2_16bitNopEncoding
+<a name="l00223"></a>00223                                           : Thumb1_16bitNopEncoding;
+<a name="l00224"></a>00224     uint64_t NumNops = Count / 2;
+<a name="l00225"></a>00225     <span class="keywordflow">for</span> (uint64_t i = 0; i != NumNops; ++i)
+<a name="l00226"></a>00226       OW-><a class="code" href="classllvm_1_1MCObjectWriter.html#a9535980d71582c6b295c58774ce5db93">Write16</a>(nopEncoding);
+<a name="l00227"></a>00227     <span class="keywordflow">if</span> (Count & 1)
+<a name="l00228"></a>00228       OW-><a class="code" href="classllvm_1_1MCObjectWriter.html#a539a1fd092976b865ea0fbefde5e2dbd">Write8</a>(0);
+<a name="l00229"></a>00229     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00230"></a>00230   }
+<a name="l00231"></a>00231   <span class="comment">// ARM mode</span>
+<a name="l00232"></a>00232   <span class="keyword">const</span> uint32_t nopEncoding = hasNOP() ? ARMv6T2_NopEncoding
+<a name="l00233"></a>00233                                         : ARMv4_NopEncoding;
+<a name="l00234"></a>00234   uint64_t NumNops = Count / 4;
+<a name="l00235"></a>00235   <span class="keywordflow">for</span> (uint64_t i = 0; i != NumNops; ++i)
+<a name="l00236"></a>00236     OW-><a class="code" href="classllvm_1_1MCObjectWriter.html#a5b6afec64b3f92fd8ee5b5f37cb8055c">Write32</a>(nopEncoding);
+<a name="l00237"></a>00237   <span class="comment">// FIXME: should this function return false when unable to write exactly</span>
+<a name="l00238"></a>00238   <span class="comment">// 'Count' bytes with NOP encodings?</span>
+<a name="l00239"></a>00239   <span class="keywordflow">switch</span> (Count % 4) {
+<a name="l00240"></a>00240   <span class="keywordflow">default</span>: <span class="keywordflow">break</span>; <span class="comment">// No leftover bytes to write</span>
+<a name="l00241"></a>00241   <span class="keywordflow">case</span> 1: OW-><a class="code" href="classllvm_1_1MCObjectWriter.html#a539a1fd092976b865ea0fbefde5e2dbd">Write8</a>(0); <span class="keywordflow">break</span>;
+<a name="l00242"></a>00242   <span class="keywordflow">case</span> 2: OW-><a class="code" href="classllvm_1_1MCObjectWriter.html#a9535980d71582c6b295c58774ce5db93">Write16</a>(0); <span class="keywordflow">break</span>;
+<a name="l00243"></a>00243   <span class="keywordflow">case</span> 3: OW-><a class="code" href="classllvm_1_1MCObjectWriter.html#a9535980d71582c6b295c58774ce5db93">Write16</a>(0); OW-><a class="code" href="classllvm_1_1MCObjectWriter.html#a539a1fd092976b865ea0fbefde5e2dbd">Write8</a>(0xa0); <span class="keywordflow">break</span>;
+<a name="l00244"></a>00244   }
+<a name="l00245"></a>00245 
+<a name="l00246"></a>00246   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00247"></a>00247 }
+<a name="l00248"></a>00248 
+<a name="l00249"></a><a class="code" href="ARMAsmBackend_8cpp.html#a637efab47b9dfa90b66ef111f7f7cce5">00249</a> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <a class="code" href="ARMAsmBackend_8cpp.html#a637efab47b9dfa90b66ef111f7f7cce5">adjustFixupValue</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup, uint64_t Value,
+<a name="l00250"></a>00250                                  <a class="code" href="classllvm_1_1MCContext.html">MCContext</a> *Ctx = NULL) {
+<a name="l00251"></a>00251   <span class="keywordtype">unsigned</span> Kind = Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>();
+<a name="l00252"></a>00252   <span class="keywordflow">switch</span> (Kind) {
+<a name="l00253"></a>00253   <span class="keywordflow">default</span>:
+<a name="l00254"></a>00254     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Unknown fixup kind!"</span>);
+<a name="l00255"></a>00255   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58a4aee2a3e203379bbb0c9639d4ef31b6e" title="A one-byte fixup.">FK_Data_1</a>:
+<a name="l00256"></a>00256   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58afe607fbae154a24e4b463cf9fd5916f7" title="A two-byte fixup.">FK_Data_2</a>:
+<a name="l00257"></a>00257   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58a5d58ab615cde98af13deb16dbc09f42d" title="A four-byte fixup.">FK_Data_4</a>:
+<a name="l00258"></a>00258     <span class="keywordflow">return</span> Value;
+<a name="l00259"></a>00259   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a551a7051fef9738a64327579574a84f1">ARM::fixup_arm_movt_hi16</a>:
+<a name="l00260"></a>00260     Value >>= 16;
+<a name="l00261"></a>00261     <span class="comment">// Fallthrough</span>
+<a name="l00262"></a>00262   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a2b8a01780fc474ad24becf86799f112b">ARM::fixup_arm_movw_lo16</a>:
+<a name="l00263"></a>00263   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a156116fc4a5cd715d89b9b37a0f00997">ARM::fixup_arm_movt_hi16_pcrel</a>:
+<a name="l00264"></a>00264   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8e1b19d24563bdc51c05367927ec8cde">ARM::fixup_arm_movw_lo16_pcrel</a>: {
+<a name="l00265"></a>00265     <span class="keywordtype">unsigned</span> Hi4 = (Value & 0xF000) >> 12;
+<a name="l00266"></a>00266     <span class="keywordtype">unsigned</span> Lo12 = Value & 0x0FFF;
+<a name="l00267"></a>00267     <span class="comment">// inst{19-16} = Hi4;</span>
+<a name="l00268"></a>00268     <span class="comment">// inst{11-0} = Lo12;</span>
+<a name="l00269"></a>00269     Value = (Hi4 << 16) | (Lo12);
+<a name="l00270"></a>00270     <span class="keywordflow">return</span> Value;
+<a name="l00271"></a>00271   }
+<a name="l00272"></a>00272   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a3175e012a680bfa04176f1073d837f78">ARM::fixup_t2_movt_hi16</a>:
+<a name="l00273"></a>00273     Value >>= 16;
+<a name="l00274"></a>00274     <span class="comment">// Fallthrough</span>
+<a name="l00275"></a>00275   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0af29359bd1f79d7f6aec8e2c9275f44d1">ARM::fixup_t2_movw_lo16</a>:
+<a name="l00276"></a>00276   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a022297f89f22e95d829705a8301d3cb5">ARM::fixup_t2_movt_hi16_pcrel</a>:  <span class="comment">//FIXME: Shouldn't this be shifted like</span>
+<a name="l00277"></a>00277                                        <span class="comment">// the other hi16 fixup?</span>
+<a name="l00278"></a>00278   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0acf41663b9377539c0f95b6fa4019009d">ARM::fixup_t2_movw_lo16_pcrel</a>: {
+<a name="l00279"></a>00279     <span class="keywordtype">unsigned</span> Hi4 = (Value & 0xF000) >> 12;
+<a name="l00280"></a>00280     <span class="keywordtype">unsigned</span> i = (Value & 0x800) >> 11;
+<a name="l00281"></a>00281     <span class="keywordtype">unsigned</span> Mid3 = (Value & 0x700) >> 8;
+<a name="l00282"></a>00282     <span class="keywordtype">unsigned</span> Lo8 = Value & 0x0FF;
+<a name="l00283"></a>00283     <span class="comment">// inst{19-16} = Hi4;</span>
+<a name="l00284"></a>00284     <span class="comment">// inst{26} = i;</span>
+<a name="l00285"></a>00285     <span class="comment">// inst{14-12} = Mid3;</span>
+<a name="l00286"></a>00286     <span class="comment">// inst{7-0} = Lo8;</span>
+<a name="l00287"></a>00287     Value = (Hi4 << 16) | (i << 26) | (Mid3 << 12) | (Lo8);
+<a name="l00288"></a>00288     uint64_t swapped = (Value & 0xFFFF0000) >> 16;
+<a name="l00289"></a>00289     swapped |= (Value & 0x0000FFFF) << 16;
+<a name="l00290"></a>00290     <span class="keywordflow">return</span> swapped;
+<a name="l00291"></a>00291   }
+<a name="l00292"></a>00292   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ac8226e9dee163f040579c8cd8e5eb8c5">ARM::fixup_arm_ldst_pcrel_12</a>:
+<a name="l00293"></a>00293     <span class="comment">// ARM PC-relative values are offset by 8.</span>
+<a name="l00294"></a>00294     Value -= 4;
+<a name="l00295"></a>00295     <span class="comment">// FALLTHROUGH</span>
+<a name="l00296"></a>00296   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a336d5f4419eb0ef8073bbac49a84de19">ARM::fixup_t2_ldst_pcrel_12</a>: {
+<a name="l00297"></a>00297     <span class="comment">// Offset by 4, adjusted by two due to the half-word ordering of thumb.</span>
+<a name="l00298"></a>00298     Value -= 4;
+<a name="l00299"></a>00299     <span class="keywordtype">bool</span> isAdd = <span class="keyword">true</span>;
+<a name="l00300"></a>00300     <span class="keywordflow">if</span> ((<a class="code" href="classint64__t.html">int64_t</a>)Value < 0) {
+<a name="l00301"></a>00301       Value = -Value;
+<a name="l00302"></a>00302       isAdd = <span class="keyword">false</span>;
+<a name="l00303"></a>00303     }
+<a name="l00304"></a>00304     <span class="keywordflow">if</span> (Ctx && Value >= 4096)
+<a name="l00305"></a>00305       Ctx->FatalError(Fixup.<a class="code" href="classllvm_1_1MCFixup.html#a18ca31ed8c975c3d94758aced7694b3e">getLoc</a>(), <span class="stringliteral">"out of range pc-relative fixup value"</span>);
+<a name="l00306"></a>00306     Value |= isAdd << 23;
+<a name="l00307"></a>00307 
+<a name="l00308"></a>00308     <span class="comment">// Same addressing mode as fixup_arm_pcrel_10,</span>
+<a name="l00309"></a>00309     <span class="comment">// but with 16-bit halfwords swapped.</span>
+<a name="l00310"></a>00310     <span class="keywordflow">if</span> (Kind == <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a336d5f4419eb0ef8073bbac49a84de19">ARM::fixup_t2_ldst_pcrel_12</a>) {
+<a name="l00311"></a>00311       uint64_t swapped = (Value & 0xFFFF0000) >> 16;
+<a name="l00312"></a>00312       swapped |= (Value & 0x0000FFFF) << 16;
+<a name="l00313"></a>00313       <span class="keywordflow">return</span> swapped;
+<a name="l00314"></a>00314     }
+<a name="l00315"></a>00315 
+<a name="l00316"></a>00316     <span class="keywordflow">return</span> Value;
+<a name="l00317"></a>00317   }
+<a name="l00318"></a>00318   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a09a9168eafc337c15e7de013524a1532">ARM::fixup_thumb_adr_pcrel_10</a>:
+<a name="l00319"></a>00319     <span class="keywordflow">return</span> ((Value - 4) >> 2) & 0xff;
+<a name="l00320"></a>00320   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a0d7591bd8aae60a8151c5015a61f000b">ARM::fixup_arm_adr_pcrel_12</a>: {
+<a name="l00321"></a>00321     <span class="comment">// ARM PC-relative values are offset by 8.</span>
+<a name="l00322"></a>00322     Value -= 8;
+<a name="l00323"></a>00323     <span class="keywordtype">unsigned</span> opc = 4; <span class="comment">// bits {24-21}. Default to add: 0b0100</span>
+<a name="l00324"></a>00324     <span class="keywordflow">if</span> ((<a class="code" href="classint64__t.html">int64_t</a>)Value < 0) {
+<a name="l00325"></a>00325       Value = -Value;
+<a name="l00326"></a>00326       opc = 2; <span class="comment">// 0b0010</span>
+<a name="l00327"></a>00327     }
+<a name="l00328"></a>00328     <span class="keywordflow">if</span> (Ctx && <a class="code" href="namespacellvm_1_1ARM__AM.html#ab18b193058b463093ad2a5701710bece">ARM_AM::getSOImmVal</a>(Value) == -1)
+<a name="l00329"></a>00329       Ctx->FatalError(Fixup.<a class="code" href="classllvm_1_1MCFixup.html#a18ca31ed8c975c3d94758aced7694b3e">getLoc</a>(), <span class="stringliteral">"out of range pc-relative fixup value"</span>);
+<a name="l00330"></a>00330     <span class="comment">// Encode the immediate and shift the opcode into place.</span>
+<a name="l00331"></a>00331     <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1ARM__AM.html#ab18b193058b463093ad2a5701710bece">ARM_AM::getSOImmVal</a>(Value) | (opc << 21);
+<a name="l00332"></a>00332   }
+<a name="l00333"></a>00333 
+<a name="l00334"></a>00334   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0aac71630154c96f2f6b3e2e324a40037c">ARM::fixup_t2_adr_pcrel_12</a>: {
+<a name="l00335"></a>00335     Value -= 4;
+<a name="l00336"></a>00336     <span class="keywordtype">unsigned</span> opc = 0;
+<a name="l00337"></a>00337     <span class="keywordflow">if</span> ((<a class="code" href="classint64__t.html">int64_t</a>)Value < 0) {
+<a name="l00338"></a>00338       Value = -Value;
+<a name="l00339"></a>00339       opc = 5;
+<a name="l00340"></a>00340     }
+<a name="l00341"></a>00341 
+<a name="l00342"></a>00342     uint32_t <a class="code" href="ProfileDataLoaderPass_8cpp.html#adee94aee897e283127f9fe996a84c6ef">out</a> = (opc << 21);
+<a name="l00343"></a>00343     out |= (Value & 0x800) << 15;
+<a name="l00344"></a>00344     out |= (Value & 0x700) << 4;
+<a name="l00345"></a>00345     out |= (Value & 0x0FF);
+<a name="l00346"></a>00346 
+<a name="l00347"></a>00347     uint64_t swapped = (out & 0xFFFF0000) >> 16;
+<a name="l00348"></a>00348     swapped |= (out & 0x0000FFFF) << 16;
+<a name="l00349"></a>00349     <span class="keywordflow">return</span> swapped;
+<a name="l00350"></a>00350   }
+<a name="l00351"></a>00351 
+<a name="l00352"></a>00352   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0afbaadabc6e1f4ff4ddacc0b8ddf61872">ARM::fixup_arm_condbranch</a>:
+<a name="l00353"></a>00353   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a1f91bda8769d2b0c0a7e9d6e813334b8">ARM::fixup_arm_uncondbranch</a>:
+<a name="l00354"></a>00354   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8b3ea0884f12a07077ecb6fd18395467">ARM::fixup_arm_uncondbl</a>:
+<a name="l00355"></a>00355   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ac101b88c74df376a53087a2a12829576">ARM::fixup_arm_condbl</a>:
+<a name="l00356"></a>00356   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a92999538a175673cea0e806d24285585">ARM::fixup_arm_blx</a>:
+<a name="l00357"></a>00357     <span class="comment">// These values don't encode the low two bits since they're always zero.</span>
+<a name="l00358"></a>00358     <span class="comment">// Offset by 8 just as above.</span>
+<a name="l00359"></a>00359     <span class="keywordflow">return</span> 0xffffff & ((Value - 8) >> 2);
+<a name="l00360"></a>00360   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a81dbbcf6c6a3e2c7c87af5dc5b9301d3">ARM::fixup_t2_uncondbranch</a>: {
+<a name="l00361"></a>00361     Value = Value - 4;
+<a name="l00362"></a>00362     Value >>= 1; <span class="comment">// Low bit is not encoded.</span>
+<a name="l00363"></a>00363 
+<a name="l00364"></a>00364     uint32_t <a class="code" href="ProfileDataLoaderPass_8cpp.html#adee94aee897e283127f9fe996a84c6ef">out</a> = 0;
+<a name="l00365"></a>00365     <span class="keywordtype">bool</span> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> =  Value & 0x800000;
+<a name="l00366"></a>00366     <span class="keywordtype">bool</span> J1 = Value & 0x400000;
+<a name="l00367"></a>00367     <span class="keywordtype">bool</span> J2 = Value & 0x200000;
+<a name="l00368"></a>00368     J1 ^= <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00369"></a>00369     J2 ^= <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00370"></a>00370 
+<a name="l00371"></a>00371     out |= I  << 26; <span class="comment">// S bit</span>
+<a name="l00372"></a>00372     out |= !J1 << 13; <span class="comment">// J1 bit</span>
+<a name="l00373"></a>00373     out |= !J2 << 11; <span class="comment">// J2 bit</span>
+<a name="l00374"></a>00374     out |= (Value & 0x1FF800)  << 5; <span class="comment">// imm6 field</span>
+<a name="l00375"></a>00375     out |= (Value & 0x0007FF);        <span class="comment">// imm11 field</span>
+<a name="l00376"></a>00376 
+<a name="l00377"></a>00377     uint64_t swapped = (out & 0xFFFF0000) >> 16;
+<a name="l00378"></a>00378     swapped |= (out & 0x0000FFFF) << 16;
+<a name="l00379"></a>00379     <span class="keywordflow">return</span> swapped;
+<a name="l00380"></a>00380   }
+<a name="l00381"></a>00381   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0abd8de06471430072373886fe44229083">ARM::fixup_t2_condbranch</a>: {
+<a name="l00382"></a>00382     Value = Value - 4;
+<a name="l00383"></a>00383     Value >>= 1; <span class="comment">// Low bit is not encoded.</span>
+<a name="l00384"></a>00384 
+<a name="l00385"></a>00385     uint64_t <a class="code" href="ProfileDataLoaderPass_8cpp.html#adee94aee897e283127f9fe996a84c6ef">out</a> = 0;
+<a name="l00386"></a>00386     out |= (Value & 0x80000) << 7; <span class="comment">// S bit</span>
+<a name="l00387"></a>00387     out |= (Value & 0x40000) >> 7; <span class="comment">// J2 bit</span>
+<a name="l00388"></a>00388     out |= (Value & 0x20000) >> 4; <span class="comment">// J1 bit</span>
+<a name="l00389"></a>00389     out |= (Value & 0x1F800) << 5; <span class="comment">// imm6 field</span>
+<a name="l00390"></a>00390     out |= (Value & 0x007FF);      <span class="comment">// imm11 field</span>
+<a name="l00391"></a>00391 
+<a name="l00392"></a>00392     uint32_t swapped = (out & 0xFFFF0000) >> 16;
+<a name="l00393"></a>00393     swapped |= (out & 0x0000FFFF) << 16;
+<a name="l00394"></a>00394     <span class="keywordflow">return</span> swapped;
+<a name="l00395"></a>00395   }
+<a name="l00396"></a>00396   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0adb86ef3fcfce8098efef7cb48f3ae98d">ARM::fixup_arm_thumb_bl</a>: {
+<a name="l00397"></a>00397      <span class="comment">// The value doesn't encode the low bit (always zero) and is offset by</span>
+<a name="l00398"></a>00398      <span class="comment">// four. The 32-bit immediate value is encoded as</span>
+<a name="l00399"></a>00399      <span class="comment">//   imm32 = SignExtend(S:I1:I2:imm10:imm11:0)</span>
+<a name="l00400"></a>00400      <span class="comment">// where I1 = NOT(J1 ^ S) and I2 = NOT(J2 ^ S).</span>
+<a name="l00401"></a>00401      <span class="comment">// The value is encoded into disjoint bit positions in the destination</span>
+<a name="l00402"></a>00402      <span class="comment">// opcode. x = unchanged, I = immediate value bit, S = sign extension bit,</span>
+<a name="l00403"></a>00403      <span class="comment">// J = either J1 or J2 bit</span>
+<a name="l00404"></a>00404      <span class="comment">//</span>
+<a name="l00405"></a>00405      <span class="comment">//   BL:  xxxxxSIIIIIIIIII xxJxJIIIIIIIIIII</span>
+<a name="l00406"></a>00406      <span class="comment">//</span>
+<a name="l00407"></a>00407      <span class="comment">// Note that the halfwords are stored high first, low second; so we need</span>
+<a name="l00408"></a>00408      <span class="comment">// to transpose the fixup value here to map properly.</span>
+<a name="l00409"></a>00409      uint32_t offset = (Value - 4) >> 1;
+<a name="l00410"></a>00410      uint32_t signBit = (offset & 0x800000) >> 23;
+<a name="l00411"></a>00411      uint32_t I1Bit = (offset & 0x400000) >> 22;
+<a name="l00412"></a>00412      uint32_t J1Bit = (I1Bit ^ 0x1) ^ signBit;
+<a name="l00413"></a>00413      uint32_t I2Bit = (offset & 0x200000) >> 21;
+<a name="l00414"></a>00414      uint32_t J2Bit = (I2Bit ^ 0x1) ^ signBit;
+<a name="l00415"></a>00415      uint32_t imm10Bits = (offset & 0x1FF800) >> 11;
+<a name="l00416"></a>00416      uint32_t imm11Bits = (offset & 0x000007FF);
+<a name="l00417"></a>00417  
+<a name="l00418"></a>00418      uint32_t <a class="code" href="classllvm_1_1object_1_1Binary.html">Binary</a> = 0;
+<a name="l00419"></a>00419      uint32_t firstHalf = (((uint16_t)signBit << 10) | (uint16_t)imm10Bits);
+<a name="l00420"></a>00420      uint32_t secondHalf = (((uint16_t)J1Bit << 13) | ((uint16_t)J2Bit << 11) |
+<a name="l00421"></a>00421                            (uint16_t)imm11Bits);
+<a name="l00422"></a>00422      Binary |= secondHalf << 16;
+<a name="l00423"></a>00423      Binary |= firstHalf;
+<a name="l00424"></a>00424      <span class="keywordflow">return</span> Binary;
+<a name="l00425"></a>00425 
+<a name="l00426"></a>00426   }
+<a name="l00427"></a>00427   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a78f923cec6a90c05ba09b4cf99112b93">ARM::fixup_arm_thumb_blx</a>: {
+<a name="l00428"></a>00428      <span class="comment">// The value doesn't encode the low two bits (always zero) and is offset by</span>
+<a name="l00429"></a>00429      <span class="comment">// four (see fixup_arm_thumb_cp). The 32-bit immediate value is encoded as</span>
+<a name="l00430"></a>00430      <span class="comment">//   imm32 = SignExtend(S:I1:I2:imm10H:imm10L:00)</span>
+<a name="l00431"></a>00431      <span class="comment">// where I1 = NOT(J1 ^ S) and I2 = NOT(J2 ^ S).</span>
+<a name="l00432"></a>00432      <span class="comment">// The value is encoded into disjoint bit positions in the destination </span>
+<a name="l00433"></a>00433      <span class="comment">// opcode. x = unchanged, I = immediate value bit, S = sign extension bit, </span>
+<a name="l00434"></a>00434      <span class="comment">// J = either J1 or J2 bit, 0 = zero.</span>
+<a name="l00435"></a>00435      <span class="comment">//</span>
+<a name="l00436"></a>00436      <span class="comment">//   BLX: xxxxxSIIIIIIIIII xxJxJIIIIIIIIII0</span>
+<a name="l00437"></a>00437      <span class="comment">//</span>
+<a name="l00438"></a>00438      <span class="comment">// Note that the halfwords are stored high first, low second; so we need</span>
+<a name="l00439"></a>00439      <span class="comment">// to transpose the fixup value here to map properly.</span>
+<a name="l00440"></a>00440      uint32_t offset = (Value - 2) >> 2;
+<a name="l00441"></a>00441      uint32_t signBit = (offset & 0x400000) >> 22;
+<a name="l00442"></a>00442      uint32_t I1Bit = (offset & 0x200000) >> 21;
+<a name="l00443"></a>00443      uint32_t J1Bit = (I1Bit ^ 0x1) ^ signBit;
+<a name="l00444"></a>00444      uint32_t I2Bit = (offset & 0x100000) >> 20;
+<a name="l00445"></a>00445      uint32_t J2Bit = (I2Bit ^ 0x1) ^ signBit;
+<a name="l00446"></a>00446      uint32_t imm10HBits = (offset & 0xFFC00) >> 10;
+<a name="l00447"></a>00447      uint32_t imm10LBits = (offset & 0x3FF);
+<a name="l00448"></a>00448  
+<a name="l00449"></a>00449      uint32_t <a class="code" href="classllvm_1_1object_1_1Binary.html">Binary</a> = 0;
+<a name="l00450"></a>00450      uint32_t firstHalf = (((uint16_t)signBit << 10) | (uint16_t)imm10HBits);
+<a name="l00451"></a>00451      uint32_t secondHalf = (((uint16_t)J1Bit << 13) | ((uint16_t)J2Bit << 11) | 
+<a name="l00452"></a>00452                            ((uint16_t)imm10LBits) << 1);
+<a name="l00453"></a>00453      Binary |= secondHalf << 16;
+<a name="l00454"></a>00454      Binary |= firstHalf;
+<a name="l00455"></a>00455      <span class="keywordflow">return</span> Binary;
+<a name="l00456"></a>00456   }
+<a name="l00457"></a>00457   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a7b3659cc67fef8cc53f589860b2f1299">ARM::fixup_arm_thumb_cp</a>:
+<a name="l00458"></a>00458     <span class="comment">// Offset by 4, and don't encode the low two bits. Two bytes of that</span>
+<a name="l00459"></a>00459     <span class="comment">// 'off by 4' is implicitly handled by the half-word ordering of the</span>
+<a name="l00460"></a>00460     <span class="comment">// Thumb encoding, so we only need to adjust by 2 here.</span>
+<a name="l00461"></a>00461     <span class="keywordflow">return</span> ((Value - 2) >> 2) & 0xff;
+<a name="l00462"></a>00462   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a293bb495311c0764277085879d15c057">ARM::fixup_arm_thumb_cb</a>: {
+<a name="l00463"></a>00463     <span class="comment">// Offset by 4 and don't encode the lower bit, which is always 0.</span>
+<a name="l00464"></a>00464     uint32_t <a class="code" href="classllvm_1_1object_1_1Binary.html">Binary</a> = (Value - 4) >> 1;
+<a name="l00465"></a>00465     <span class="keywordflow">return</span> ((Binary & 0x20) << 4) | ((Binary & 0x1f) << 3);
+<a name="l00466"></a>00466   }
+<a name="l00467"></a>00467   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a02e738702c5e86913f9f7df2f83480b3">ARM::fixup_arm_thumb_br</a>:
+<a name="l00468"></a>00468     <span class="comment">// Offset by 4 and don't encode the lower bit, which is always 0.</span>
+<a name="l00469"></a>00469     <span class="keywordflow">return</span> ((Value - 4) >> 1) & 0x7ff;
+<a name="l00470"></a>00470   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a9ad27f8b55ac56d16b5e0c378bad0051">ARM::fixup_arm_thumb_bcc</a>:
+<a name="l00471"></a>00471     <span class="comment">// Offset by 4 and don't encode the lower bit, which is always 0.</span>
+<a name="l00472"></a>00472     <span class="keywordflow">return</span> ((Value - 4) >> 1) & 0xff;
+<a name="l00473"></a>00473   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8c5b03f8ae59e84ef4b8301c9cf246b3">ARM::fixup_arm_pcrel_10_unscaled</a>: {
+<a name="l00474"></a>00474     Value = Value - 8; <span class="comment">// ARM fixups offset by an additional word and don't</span>
+<a name="l00475"></a>00475                        <span class="comment">// need to adjust for the half-word ordering.</span>
+<a name="l00476"></a>00476     <span class="keywordtype">bool</span> isAdd = <span class="keyword">true</span>;
+<a name="l00477"></a>00477     <span class="keywordflow">if</span> ((<a class="code" href="classint64__t.html">int64_t</a>)Value < 0) {
+<a name="l00478"></a>00478       Value = -Value;
+<a name="l00479"></a>00479       isAdd = <span class="keyword">false</span>;
+<a name="l00480"></a>00480     }
+<a name="l00481"></a>00481     <span class="comment">// The value has the low 4 bits encoded in [3:0] and the high 4 in [11:8].</span>
+<a name="l00482"></a>00482     <span class="keywordflow">if</span> (Ctx && Value >= 256)
+<a name="l00483"></a>00483       Ctx->FatalError(Fixup.<a class="code" href="classllvm_1_1MCFixup.html#a18ca31ed8c975c3d94758aced7694b3e">getLoc</a>(), <span class="stringliteral">"out of range pc-relative fixup value"</span>);
+<a name="l00484"></a>00484     Value = (Value & 0xf) | ((Value & 0xf0) << 4);
+<a name="l00485"></a>00485     <span class="keywordflow">return</span> Value | (isAdd << 23);
+<a name="l00486"></a>00486   }
+<a name="l00487"></a>00487   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a1eea621a676048b22be7958e8be8a714">ARM::fixup_arm_pcrel_10</a>:
+<a name="l00488"></a>00488     Value = Value - 4; <span class="comment">// ARM fixups offset by an additional word and don't</span>
+<a name="l00489"></a>00489                        <span class="comment">// need to adjust for the half-word ordering.</span>
+<a name="l00490"></a>00490     <span class="comment">// Fall through.</span>
+<a name="l00491"></a>00491   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a6d87443e7775d51eaf0708da110f352a">ARM::fixup_t2_pcrel_10</a>: {
+<a name="l00492"></a>00492     <span class="comment">// Offset by 4, adjusted by two due to the half-word ordering of thumb.</span>
+<a name="l00493"></a>00493     Value = Value - 4;
+<a name="l00494"></a>00494     <span class="keywordtype">bool</span> isAdd = <span class="keyword">true</span>;
+<a name="l00495"></a>00495     <span class="keywordflow">if</span> ((<a class="code" href="classint64__t.html">int64_t</a>)Value < 0) {
+<a name="l00496"></a>00496       Value = -Value;
+<a name="l00497"></a>00497       isAdd = <span class="keyword">false</span>;
+<a name="l00498"></a>00498     }
+<a name="l00499"></a>00499     <span class="comment">// These values don't encode the low two bits since they're always zero.</span>
+<a name="l00500"></a>00500     Value >>= 2;
+<a name="l00501"></a>00501     <span class="keywordflow">if</span> (Ctx && Value >= 256)
+<a name="l00502"></a>00502       Ctx->FatalError(Fixup.<a class="code" href="classllvm_1_1MCFixup.html#a18ca31ed8c975c3d94758aced7694b3e">getLoc</a>(), <span class="stringliteral">"out of range pc-relative fixup value"</span>);
+<a name="l00503"></a>00503     Value |= isAdd << 23;
+<a name="l00504"></a>00504 
+<a name="l00505"></a>00505     <span class="comment">// Same addressing mode as fixup_arm_pcrel_10, but with 16-bit halfwords</span>
+<a name="l00506"></a>00506     <span class="comment">// swapped.</span>
+<a name="l00507"></a>00507     <span class="keywordflow">if</span> (Kind == <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a6d87443e7775d51eaf0708da110f352a">ARM::fixup_t2_pcrel_10</a>) {
+<a name="l00508"></a>00508       uint32_t swapped = (Value & 0xFFFF0000) >> 16;
+<a name="l00509"></a>00509       swapped |= (Value & 0x0000FFFF) << 16;
+<a name="l00510"></a>00510       <span class="keywordflow">return</span> swapped;
+<a name="l00511"></a>00511     }
+<a name="l00512"></a>00512 
+<a name="l00513"></a>00513     <span class="keywordflow">return</span> Value;
+<a name="l00514"></a>00514   }
+<a name="l00515"></a>00515   }
+<a name="l00516"></a>00516 }
+<a name="l00517"></a>00517 
+<a name="l00518"></a>00518 <span class="keywordtype">void</span> ARMAsmBackend::processFixupValue(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCAssembler.html">MCAssembler</a> &Asm,
+<a name="l00519"></a>00519                                       <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCAsmLayout.html">MCAsmLayout</a> &Layout,
+<a name="l00520"></a>00520                                       <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup,
+<a name="l00521"></a>00521                                       <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFragment.html">MCFragment</a> *DF,
+<a name="l00522"></a>00522                                       <a class="code" href="classllvm_1_1MCValue.html">MCValue</a> &<a class="code" href="classllvm_1_1Target.html">Target</a>, uint64_t &Value,
+<a name="l00523"></a>00523                                       <span class="keywordtype">bool</span> &IsResolved) {
+<a name="l00524"></a>00524   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCSymbolRefExpr.html">MCSymbolRefExpr</a> *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11bad9577456b5bb7a03b7f42a710e122ab5">A</a> = Target.<a class="code" href="classllvm_1_1MCValue.html#a635fb3df602b4e40097fdb91d78302fc">getSymA</a>();
+<a name="l00525"></a>00525   <span class="comment">// Some fixups to thumb function symbols need the low bit (thumb bit)</span>
+<a name="l00526"></a>00526   <span class="comment">// twiddled.</span>
+<a name="l00527"></a>00527   <span class="keywordflow">if</span> ((<span class="keywordtype">unsigned</span>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() != <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ac8226e9dee163f040579c8cd8e5eb8c5">ARM::fixup_arm_ldst_pcrel_12</a> &&
+<a name="l00528"></a>00528       (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() != <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a336d5f4419eb0ef8073bbac49a84de19">ARM::fixup_t2_ldst_pcrel_12</a> &&
+<a name="l00529"></a>00529       (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() != <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a0d7591bd8aae60a8151c5015a61f000b">ARM::fixup_arm_adr_pcrel_12</a> &&
+<a name="l00530"></a>00530       (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() != <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a09a9168eafc337c15e7de013524a1532">ARM::fixup_thumb_adr_pcrel_10</a> &&
+<a name="l00531"></a>00531       (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() != <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0aac71630154c96f2f6b3e2e324a40037c">ARM::fixup_t2_adr_pcrel_12</a> &&
+<a name="l00532"></a>00532       (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() != <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a7b3659cc67fef8cc53f589860b2f1299">ARM::fixup_arm_thumb_cp</a>) {
+<a name="l00533"></a>00533     <span class="keywordflow">if</span> (A) {
+<a name="l00534"></a>00534       <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCSymbol.html">MCSymbol</a> &Sym = A-><a class="code" href="classllvm_1_1MCSymbolRefExpr.html#afba43ef04f7e89dc23859d7938820bd8">getSymbol</a>().<a class="code" href="classllvm_1_1MCSymbol.html#a8efc430800be9a5ea35d7944903e6954">AliasedSymbol</a>();
+<a name="l00535"></a>00535       <span class="keywordflow">if</span> (Asm.<a class="code" href="classllvm_1_1MCAssembler.html#adc77aa07664faec41cc4270aa376ba29" title="Check whether a given symbol has been flagged with .thumb_func.">isThumbFunc</a>(&Sym))
+<a name="l00536"></a>00536         Value |= 1;
+<a name="l00537"></a>00537     }
+<a name="l00538"></a>00538   }
+<a name="l00539"></a>00539   <span class="comment">// We must always generate a relocation for BL/BLX instructions if we have</span>
+<a name="l00540"></a>00540   <span class="comment">// a symbol to reference, as the linker relies on knowing the destination</span>
+<a name="l00541"></a>00541   <span class="comment">// symbol's thumb-ness to get interworking right.</span>
+<a name="l00542"></a>00542   <span class="keywordflow">if</span> (A && ((<span class="keywordtype">unsigned</span>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() == <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a78f923cec6a90c05ba09b4cf99112b93">ARM::fixup_arm_thumb_blx</a> ||
+<a name="l00543"></a>00543             (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() == <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0adb86ef3fcfce8098efef7cb48f3ae98d">ARM::fixup_arm_thumb_bl</a> ||
+<a name="l00544"></a>00544             (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() == <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a92999538a175673cea0e806d24285585">ARM::fixup_arm_blx</a> ||
+<a name="l00545"></a>00545             (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() == <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8b3ea0884f12a07077ecb6fd18395467">ARM::fixup_arm_uncondbl</a> ||
+<a name="l00546"></a>00546             (<a class="code" href="classunsigned.html">unsigned</a>)Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>() == <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ac101b88c74df376a53087a2a12829576">ARM::fixup_arm_condbl</a>))
+<a name="l00547"></a>00547     IsResolved = <span class="keyword">false</span>;
+<a name="l00548"></a>00548 
+<a name="l00549"></a>00549   <span class="comment">// Try to get the encoded value for the fixup as-if we're mapping it into</span>
+<a name="l00550"></a>00550   <span class="comment">// the instruction. This allows adjustFixupValue() to issue a diagnostic</span>
+<a name="l00551"></a>00551   <span class="comment">// if the value aren't invalid.</span>
+<a name="l00552"></a>00552   (void)<a class="code" href="ARMAsmBackend_8cpp.html#a637efab47b9dfa90b66ef111f7f7cce5">adjustFixupValue</a>(Fixup, Value, &Asm.<a class="code" href="classllvm_1_1MCAssembler.html#a85f602e21fbfcdc94288a8f472ec92d5">getContext</a>());
+<a name="l00553"></a>00553 }
+<a name="l00554"></a>00554 
+<a name="l00555"></a>00555 <span class="keyword">namespace </span>{
+<a name="l00556"></a>00556 
+<a name="l00557"></a>00557 <span class="comment">// FIXME: This should be in a separate file.</span>
+<a name="l00558"></a>00558 <span class="comment">// ELF is an ELF of course...</span>
+<a name="l00559"></a>00559 <span class="keyword">class </span>ELFARMAsmBackend : <span class="keyword">public</span> ARMAsmBackend {
+<a name="l00560"></a>00560 <span class="keyword">public</span>:
+<a name="l00561"></a>00561   uint8_t OSABI;
+<a name="l00562"></a>00562   ELFARMAsmBackend(<span class="keyword">const</span> Target &T, <span class="keyword">const</span> <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> TT,
+<a name="l00563"></a>00563                    uint8_t _OSABI)
+<a name="l00564"></a>00564     : ARMAsmBackend(T, TT), OSABI(_OSABI) { }
+<a name="l00565"></a>00565 
+<a name="l00566"></a>00566   <span class="keywordtype">void</span> applyFixup(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup, <span class="keywordtype">char</span> *<a class="code" href="namespacellvm_1_1object_1_1macho.html#a56678f646a4a478d777eb8821f710db0a557a58f6e018464dcf0635728ef14dd1">Data</a>, <span class="keywordtype">unsigned</span> DataSize,
+<a name="l00567"></a>00567                   uint64_t Value) <span class="keyword">const</span>;
+<a name="l00568"></a>00568 
+<a name="l00569"></a>00569   <a class="code" href="classllvm_1_1MCObjectWriter.html">MCObjectWriter</a> *createObjectWriter(<a class="code" href="classllvm_1_1raw__ostream.html">raw_ostream</a> &OS)<span class="keyword"> const </span>{
+<a name="l00570"></a>00570     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#ab4139b3c06d918d7688513f955df14ff" title="createARMELFObjectWriter - Construct an ELF Mach-O object writer.">createARMELFObjectWriter</a>(OS, OSABI);
+<a name="l00571"></a>00571   }
+<a name="l00572"></a>00572 };
+<a name="l00573"></a>00573 
+<a name="l00574"></a>00574 <span class="comment">// FIXME: Raise this to share code between Darwin and ELF.</span>
+<a name="l00575"></a>00575 <span class="keywordtype">void</span> ELFARMAsmBackend::applyFixup(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup, <span class="keywordtype">char</span> *<a class="code" href="namespacellvm_1_1object_1_1macho.html#a56678f646a4a478d777eb8821f710db0a557a58f6e018464dcf0635728ef14dd1">Data</a>,
+<a name="l00576"></a>00576                                   <span class="keywordtype">unsigned</span> DataSize, uint64_t Value)<span class="keyword"> const </span>{
+<a name="l00577"></a>00577   <span class="keywordtype">unsigned</span> NumBytes = 4;        <span class="comment">// FIXME: 2 for Thumb</span>
+<a name="l00578"></a>00578   Value = <a class="code" href="ARMAsmBackend_8cpp.html#a637efab47b9dfa90b66ef111f7f7cce5">adjustFixupValue</a>(Fixup, Value);
+<a name="l00579"></a>00579   <span class="keywordflow">if</span> (!Value) <span class="keywordflow">return</span>;           <span class="comment">// Doesn't change encoding.</span>
+<a name="l00580"></a>00580 
+<a name="l00581"></a>00581   <span class="keywordtype">unsigned</span> Offset = Fixup.<a class="code" href="classllvm_1_1MCFixup.html#add5cb03f27e1c84630cc1970478fcfe2">getOffset</a>();
+<a name="l00582"></a>00582 
+<a name="l00583"></a>00583   <span class="comment">// For each byte of the fragment that the fixup touches, mask in the bits from</span>
+<a name="l00584"></a>00584   <span class="comment">// the fixup value. The Value has been "split up" into the appropriate</span>
+<a name="l00585"></a>00585   <span class="comment">// bitfields above.</span>
+<a name="l00586"></a>00586   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumBytes; ++i)
+<a name="l00587"></a>00587     Data[Offset + i] |= uint8_t((Value >> (i * 8)) & 0xff);
+<a name="l00588"></a>00588 }
+<a name="l00589"></a>00589 
+<a name="l00590"></a>00590 <span class="comment">// FIXME: This should be in a separate file.</span>
+<a name="l00591"></a>00591 <span class="keyword">class </span>DarwinARMAsmBackend : <span class="keyword">public</span> ARMAsmBackend {
+<a name="l00592"></a>00592 <span class="keyword">public</span>:
+<a name="l00593"></a>00593   <span class="keyword">const</span> <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50c" title="ARM Machine Subtypes.">object::mach::CPUSubtypeARM</a> Subtype;
+<a name="l00594"></a>00594   DarwinARMAsmBackend(<span class="keyword">const</span> Target &T, <span class="keyword">const</span> <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> TT,
+<a name="l00595"></a>00595                       <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50c" title="ARM Machine Subtypes.">object::mach::CPUSubtypeARM</a> st)
+<a name="l00596"></a>00596     : ARMAsmBackend(T, TT), Subtype(st) {
+<a name="l00597"></a>00597       HasDataInCodeSupport = <span class="keyword">true</span>;
+<a name="l00598"></a>00598     }
+<a name="l00599"></a>00599 
+<a name="l00600"></a>00600   <a class="code" href="classllvm_1_1MCObjectWriter.html">MCObjectWriter</a> *createObjectWriter(<a class="code" href="classllvm_1_1raw__ostream.html">raw_ostream</a> &OS)<span class="keyword"> const </span>{
+<a name="l00601"></a>00601     <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#af8e4330d6547a6be82923d4547fde8b5" title="createARMMachObjectWriter - Construct an ARM Mach-O object writer.">createARMMachObjectWriter</a>(OS, <span class="comment">/*Is64Bit=*/</span><span class="keyword">false</span>,
+<a name="l00602"></a>00602                                      <a class="code" href="namespacellvm_1_1object_1_1mach.html#a17c10dac4485598c8fd44d792286dc80a55ebd5a9422f91a7058cb067c4b07327">object::mach::CTM_ARM</a>,
+<a name="l00603"></a>00603                                      Subtype);
+<a name="l00604"></a>00604   }
+<a name="l00605"></a>00605 
+<a name="l00606"></a>00606   <span class="keywordtype">void</span> applyFixup(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup, <span class="keywordtype">char</span> *Data, <span class="keywordtype">unsigned</span> DataSize,
+<a name="l00607"></a>00607                   uint64_t Value) <span class="keyword">const</span>;
+<a name="l00608"></a>00608 
+<a name="l00609"></a>00609   <span class="keyword">virtual</span> <span class="keywordtype">bool</span> doesSectionRequireSymbols(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCSection.html">MCSection</a> &<a class="code" href="namespaceARMBuildAttrs.html#a581f39eb005bdc4d441c23d019618810a21b40b2b4fda35a62949da46ddadd76b">Section</a>)<span class="keyword"> const </span>{
+<a name="l00610"></a>00610     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00611"></a>00611   }
+<a name="l00612"></a>00612 };
+<a name="l00613"></a>00613 <span class="comment"></span>
+<a name="l00614"></a>00614 <span class="comment">/// getFixupKindNumBytes - The number of bytes the fixup may change.</span>
+<a name="l00615"></a>00615 <span class="comment"></span><span class="keyword">static</span> <span class="keywordtype">unsigned</span> getFixupKindNumBytes(<span class="keywordtype">unsigned</span> Kind) {
+<a name="l00616"></a>00616   <span class="keywordflow">switch</span> (Kind) {
+<a name="l00617"></a>00617   <span class="keywordflow">default</span>:
+<a name="l00618"></a>00618     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Unknown fixup kind!"</span>);
+<a name="l00619"></a>00619 
+<a name="l00620"></a>00620   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58a4aee2a3e203379bbb0c9639d4ef31b6e" title="A one-byte fixup.">FK_Data_1</a>:
+<a name="l00621"></a>00621   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a9ad27f8b55ac56d16b5e0c378bad0051">ARM::fixup_arm_thumb_bcc</a>:
+<a name="l00622"></a>00622   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a7b3659cc67fef8cc53f589860b2f1299">ARM::fixup_arm_thumb_cp</a>:
+<a name="l00623"></a>00623   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a09a9168eafc337c15e7de013524a1532">ARM::fixup_thumb_adr_pcrel_10</a>:
+<a name="l00624"></a>00624     <span class="keywordflow">return</span> 1;
+<a name="l00625"></a>00625 
+<a name="l00626"></a>00626   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58afe607fbae154a24e4b463cf9fd5916f7" title="A two-byte fixup.">FK_Data_2</a>:
+<a name="l00627"></a>00627   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a02e738702c5e86913f9f7df2f83480b3">ARM::fixup_arm_thumb_br</a>:
+<a name="l00628"></a>00628   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a293bb495311c0764277085879d15c057">ARM::fixup_arm_thumb_cb</a>:
+<a name="l00629"></a>00629     <span class="keywordflow">return</span> 2;
+<a name="l00630"></a>00630 
+<a name="l00631"></a>00631   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8c5b03f8ae59e84ef4b8301c9cf246b3">ARM::fixup_arm_pcrel_10_unscaled</a>:
+<a name="l00632"></a>00632   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ac8226e9dee163f040579c8cd8e5eb8c5">ARM::fixup_arm_ldst_pcrel_12</a>:
+<a name="l00633"></a>00633   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a1eea621a676048b22be7958e8be8a714">ARM::fixup_arm_pcrel_10</a>:
+<a name="l00634"></a>00634   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a0d7591bd8aae60a8151c5015a61f000b">ARM::fixup_arm_adr_pcrel_12</a>:
+<a name="l00635"></a>00635   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8b3ea0884f12a07077ecb6fd18395467">ARM::fixup_arm_uncondbl</a>:
+<a name="l00636"></a>00636   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ac101b88c74df376a53087a2a12829576">ARM::fixup_arm_condbl</a>:
+<a name="l00637"></a>00637   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a92999538a175673cea0e806d24285585">ARM::fixup_arm_blx</a>:
+<a name="l00638"></a>00638   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0afbaadabc6e1f4ff4ddacc0b8ddf61872">ARM::fixup_arm_condbranch</a>:
+<a name="l00639"></a>00639   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a1f91bda8769d2b0c0a7e9d6e813334b8">ARM::fixup_arm_uncondbranch</a>:
+<a name="l00640"></a>00640     <span class="keywordflow">return</span> 3;
+<a name="l00641"></a>00641 
+<a name="l00642"></a>00642   <span class="keywordflow">case</span> <a class="code" href="namespacellvm.html#a84cef097f15848752272d38769011f58a5d58ab615cde98af13deb16dbc09f42d" title="A four-byte fixup.">FK_Data_4</a>:
+<a name="l00643"></a>00643   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a336d5f4419eb0ef8073bbac49a84de19">ARM::fixup_t2_ldst_pcrel_12</a>:
+<a name="l00644"></a>00644   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0abd8de06471430072373886fe44229083">ARM::fixup_t2_condbranch</a>:
+<a name="l00645"></a>00645   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a81dbbcf6c6a3e2c7c87af5dc5b9301d3">ARM::fixup_t2_uncondbranch</a>:
+<a name="l00646"></a>00646   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a6d87443e7775d51eaf0708da110f352a">ARM::fixup_t2_pcrel_10</a>:
+<a name="l00647"></a>00647   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0aac71630154c96f2f6b3e2e324a40037c">ARM::fixup_t2_adr_pcrel_12</a>:
+<a name="l00648"></a>00648   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0adb86ef3fcfce8098efef7cb48f3ae98d">ARM::fixup_arm_thumb_bl</a>:
+<a name="l00649"></a>00649   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a78f923cec6a90c05ba09b4cf99112b93">ARM::fixup_arm_thumb_blx</a>:
+<a name="l00650"></a>00650   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a551a7051fef9738a64327579574a84f1">ARM::fixup_arm_movt_hi16</a>:
+<a name="l00651"></a>00651   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a2b8a01780fc474ad24becf86799f112b">ARM::fixup_arm_movw_lo16</a>:
+<a name="l00652"></a>00652   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a156116fc4a5cd715d89b9b37a0f00997">ARM::fixup_arm_movt_hi16_pcrel</a>:
+<a name="l00653"></a>00653   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8e1b19d24563bdc51c05367927ec8cde">ARM::fixup_arm_movw_lo16_pcrel</a>:
+<a name="l00654"></a>00654   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a3175e012a680bfa04176f1073d837f78">ARM::fixup_t2_movt_hi16</a>:
+<a name="l00655"></a>00655   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0af29359bd1f79d7f6aec8e2c9275f44d1">ARM::fixup_t2_movw_lo16</a>:
+<a name="l00656"></a>00656   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a022297f89f22e95d829705a8301d3cb5">ARM::fixup_t2_movt_hi16_pcrel</a>:
+<a name="l00657"></a>00657   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0acf41663b9377539c0f95b6fa4019009d">ARM::fixup_t2_movw_lo16_pcrel</a>:
+<a name="l00658"></a>00658     <span class="keywordflow">return</span> 4;
+<a name="l00659"></a>00659   }
+<a name="l00660"></a>00660 }
+<a name="l00661"></a>00661 
+<a name="l00662"></a>00662 <span class="keywordtype">void</span> DarwinARMAsmBackend::applyFixup(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MCFixup.html">MCFixup</a> &Fixup, <span class="keywordtype">char</span> *Data,
+<a name="l00663"></a>00663                                      <span class="keywordtype">unsigned</span> DataSize, uint64_t Value)<span class="keyword"> const </span>{
+<a name="l00664"></a>00664   <span class="keywordtype">unsigned</span> NumBytes = getFixupKindNumBytes(Fixup.<a class="code" href="classllvm_1_1MCFixup.html#ad8f4fe03a52f33f5e40be038fde9e67e">getKind</a>());
+<a name="l00665"></a>00665   Value = <a class="code" href="ARMAsmBackend_8cpp.html#a637efab47b9dfa90b66ef111f7f7cce5">adjustFixupValue</a>(Fixup, Value);
+<a name="l00666"></a>00666   <span class="keywordflow">if</span> (!Value) <span class="keywordflow">return</span>;           <span class="comment">// Doesn't change encoding.</span>
+<a name="l00667"></a>00667 
+<a name="l00668"></a>00668   <span class="keywordtype">unsigned</span> Offset = Fixup.<a class="code" href="classllvm_1_1MCFixup.html#add5cb03f27e1c84630cc1970478fcfe2">getOffset</a>();
+<a name="l00669"></a>00669   assert(Offset + NumBytes <= DataSize && <span class="stringliteral">"Invalid fixup offset!"</span>);
+<a name="l00670"></a>00670 
+<a name="l00671"></a>00671   <span class="comment">// For each byte of the fragment that the fixup touches, mask in the</span>
+<a name="l00672"></a>00672   <span class="comment">// bits from the fixup value.</span>
+<a name="l00673"></a>00673   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != NumBytes; ++i)
+<a name="l00674"></a>00674     Data[Offset + i] |= uint8_t((Value >> (i * 8)) & 0xff);
+<a name="l00675"></a>00675 }
+<a name="l00676"></a>00676 
+<a name="l00677"></a>00677 } <span class="comment">// end anonymous namespace</span>
+<a name="l00678"></a>00678 
+<a name="l00679"></a><a class="code" href="namespacellvm.html#a88bf8215cd0c786eab7884b423b7b1ca">00679</a> <a class="code" href="classllvm_1_1MCAsmBackend.html" title="MCAsmBackend - Generic interface to target specific assembler backends.">MCAsmBackend</a> *<a class="code" href="namespacellvm.html#a88bf8215cd0c786eab7884b423b7b1ca">llvm::createARMAsmBackend</a>(<span class="keyword">const</span> Target &T, <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> TT, <a class="code" href="classllvm_1_1StringRef.html">StringRef</a> CPU) {
+<a name="l00680"></a>00680   <a class="code" href="classllvm_1_1Triple.html">Triple</a> TheTriple(TT);
+<a name="l00681"></a>00681 
+<a name="l00682"></a>00682   <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#a6583a9f9c8f9ae23674728077825125d" title="isOSDarwin - Is this a "Darwin" OS (OS X or iOS).">isOSDarwin</a>()) {
+<a name="l00683"></a>00683     <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"armv4t"</span> ||
+<a name="l00684"></a>00684         TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"thumbv4t"</span>)
+<a name="l00685"></a>00685       <span class="keywordflow">return</span> <span class="keyword">new</span> DarwinARMAsmBackend(T, TT, <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50cadbd60e6e11dd7158daf2e70061cde3b5">object::mach::CSARM_V4T</a>);
+<a name="l00686"></a>00686     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"armv5e"</span> ||
+<a name="l00687"></a>00687         TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"thumbv5e"</span>)
+<a name="l00688"></a>00688       <span class="keywordflow">return</span> <span class="keyword">new</span> DarwinARMAsmBackend(T, TT, <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50ca24fea20bd9dab3699a0a984fa9579dac">object::mach::CSARM_V5TEJ</a>);
+<a name="l00689"></a>00689     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"armv6"</span> ||
+<a name="l00690"></a>00690         TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"thumbv6"</span>)
+<a name="l00691"></a>00691       <span class="keywordflow">return</span> <span class="keyword">new</span> DarwinARMAsmBackend(T, TT, <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50ca778e9e5a9ab74ae1d58703193698fb6e">object::mach::CSARM_V6</a>);
+<a name="l00692"></a>00692     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"armv7f"</span> ||
+<a name="l00693"></a>00693         TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"thumbv7f"</span>)
+<a name="l00694"></a>00694       <span class="keywordflow">return</span> <span class="keyword">new</span> DarwinARMAsmBackend(T, TT, <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50ca25dd27098dca29b015e021ec9241d885">object::mach::CSARM_V7F</a>);
+<a name="l00695"></a>00695     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"armv7k"</span> ||
+<a name="l00696"></a>00696         TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"thumbv7k"</span>)
+<a name="l00697"></a>00697       <span class="keywordflow">return</span> <span class="keyword">new</span> DarwinARMAsmBackend(T, TT, <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50ca5e912cba0e56bdeabb05ce7a2514fbb3">object::mach::CSARM_V7K</a>);
+<a name="l00698"></a>00698     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"armv7s"</span> ||
+<a name="l00699"></a>00699         TheTriple.<a class="code" href="classllvm_1_1Triple.html#a8aac769dad0a025f8cc291dbe629e017">getArchName</a>() == <span class="stringliteral">"thumbv7s"</span>)
+<a name="l00700"></a>00700       <span class="keywordflow">return</span> <span class="keyword">new</span> DarwinARMAsmBackend(T, TT, <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50ca46035fea346071b8048e798bc99bb078">object::mach::CSARM_V7S</a>);
+<a name="l00701"></a>00701     <span class="keywordflow">return</span> <span class="keyword">new</span> DarwinARMAsmBackend(T, TT, <a class="code" href="namespacellvm_1_1object_1_1mach.html#ac477c3f178da4361b8d73d654ed8e50cac305143c783dbe66edbcefd1b6d24b51">object::mach::CSARM_V7</a>);
+<a name="l00702"></a>00702   }
+<a name="l00703"></a>00703 
+<a name="l00704"></a>00704   <span class="keywordflow">if</span> (TheTriple.<a class="code" href="classllvm_1_1Triple.html#ac5b41b892f5b29775e1c68fb9e84a596" title="isOSWindows - Is this a "Windows" OS.">isOSWindows</a>())
+<a name="l00705"></a>00705     assert(0 && <span class="stringliteral">"Windows not supported on ARM"</span>);
+<a name="l00706"></a>00706 
+<a name="l00707"></a>00707   uint8_t OSABI = <a class="code" href="classllvm_1_1MCELFObjectTargetWriter.html#aa795d004531788ec8eeaa25888fba2df">MCELFObjectTargetWriter::getOSABI</a>(<a class="code" href="classllvm_1_1Triple.html">Triple</a>(TT).getOS());
+<a name="l00708"></a>00708   <span class="keywordflow">return</span> <span class="keyword">new</span> ELFARMAsmBackend(T, TT, OSABI);
+<a name="l00709"></a>00709 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:32:38 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmLexer_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmLexer_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAsmLexer_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAsmLexer_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,104 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ARMAsmLexer.cpp File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_579de1806e7c3f5ec4b2837753e33796.html">ARM</a>      </li>
+      <li class="navelem"><a class="el" href="dir_72460e05e4fc1131ad4fa4938bbe3b7c.html">AsmParser</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">ARMAsmLexer.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="ARMBaseInfo_8h_source.html">MCTargetDesc/ARMBaseInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCAsmInfo_8h_source.html">llvm/MC/MCAsmInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCAsmLexer_8h_source.html">llvm/MC/MCParser/MCAsmLexer.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCParsedAsmOperand_8h_source.html">llvm/MC/MCParser/MCParsedAsmOperand.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCRegisterInfo_8h_source.html">llvm/MC/MCRegisterInfo.h</a>"</code><br/>
+<code>#include "<a class="el" href="MCTargetAsmLexer_8h_source.html">llvm/MC/MCTargetAsmLexer.h</a>"</code><br/>
+<code>#include "<a class="el" href="TargetRegistry_8h_source.html">llvm/Support/TargetRegistry.h</a>"</code><br/>
+<code>#include "<a class="el" href="StringSwitch_8h_source.html">llvm/ADT/StringSwitch.h</a>"</code><br/>
+<code>#include <string></code><br/>
+<code>#include <map></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ARMAsmLexer.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="ARMAsmLexer_8cpp__incl.png" border="0" usemap="#ARMAsmLexer_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="ARMAsmLexer_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">void </td><td class="memItemRight" valign="bottom"><a class="el" href="ARMAsmLexer_8cpp.html#a62889d4b9026395a15d88b404faeabb9">LLVMInitializeARMAsmLexer</a> ()</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a62889d4b9026395a15d88b404faeabb9"></a><!-- doxytag: member="ARMAsmLexer.cpp::LLVMInitializeARMAsmLexer" ref="a62889d4b9026395a15d88b404faeabb9" args="()" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">void LLVMInitializeARMAsmLexer </td>
+          <td>(</td>
+          <td class="paramname"></td><td>)</td>
+          <td></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ARMAsmLexer_8cpp_source.html#l00135">135</a> of file <a class="el" href="ARMAsmLexer_8cpp_source.html">ARMAsmLexer.cpp</a>.</p>
+
+<p>References <a class="el" href="ARMTargetInfo_8cpp_source.html#l00015">llvm::TheARMTarget</a>, <a class="el" href="ARMTargetInfo_8cpp_source.html#l00015">llvm::TheThumbTarget</a>, <a class="el" href="namespacellvm.html#a6569d00d31a5d74e563e2f39f82271ab">llvm::X</a>, and <a class="el" href="OcamlGCPrinter_8cpp.html#a1bdbcdc4205781eefd549946d40ff378">Y</a>.</p>
+
+<p>Referenced by <a class="el" href="ARMAsmParser_8cpp_source.html#l07792">LLVMInitializeARMAsmParser()</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:26 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmLexer_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmLexer_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmLexer_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,48 @@
+<map id="G" name="G">
+<area shape="rect" href="$ARMAsmPrinter_8h.html" title="ARMAsmPrinter.h" alt="" coords="2039,84,2169,111"/>
+<area shape="rect" href="$ARM_8h.html" title="ARM.h" alt="" coords="1428,161,1489,188"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="2419,316,2624,343"/>
+<area shape="rect" href="$Target_2TargetMachine_8h.html" title="llvm/Target/TargetMachine.h" alt="" coords="757,239,955,265"/>
+<area shape="rect" href="$ARMTargetMachine_8h.html" title="ARMTargetMachine.h" alt="" coords="1089,161,1241,188"/>
+<area shape="rect" href="$DataLayout_8h.html" title="llvm/DataLayout.h" alt="" coords="547,239,683,265"/>
+<area shape="rect" href="$MCStreamer_8h.html" title="llvm/MC/MCStreamer.h" alt="" coords="355,239,523,265"/>
+<area shape="rect" href="$MachineFunctionPass_8h.html" title="llvm/CodeGen/MachineFunctionPass.h" alt="" coords="2469,239,2731,265"/>
+<area shape="rect" href="$ARMBuildAttrs_8h.html" title="ARMBuildAttrs.h" alt="" coords="2819,84,2941,111"/>
+<area shape="rect" href="$ARMConstantPoolValue_8h.html" title="ARMConstantPoolValue.h" alt="" coords="2613,84,2795,111"/>
+<area shape="rect" href="$ARMMachineFunctionInfo_8h.html" title="ARMMachineFunctionInfo.h" alt="" coords="1772,161,1961,188"/>
+<area shape="rect" href="$ARMTargetObjectFile_8h.html" title="ARMTargetObjectFile.h" alt="" coords="2965,84,3125,111"/>
+<area shape="rect" href="$ARMInstPrinter_8h.html" title="InstPrinter/ARMInstPrinter.h" alt="" coords="3149,84,3344,111"/>
+<area shape="rect" href="$ARMAddressingModes_8h.html" title="MCTargetDesc/ARMAddressingModes.h" alt="" coords="2461,161,2731,188"/>
+<area shape="rect" href="$ARMMCExpr_8h.html" title="MCTargetDesc/ARMMCExpr.h" alt="" coords="3368,84,3571,111"/>
+<area shape="rect" href="$SetVector_8h.html" title="llvm/ADT/SetVector.h" alt="" coords="3595,84,3749,111"/>
+<area shape="rect" href="$SmallString_8h.html" title="llvm/ADT/SmallString.h" alt="" coords="355,161,523,188"/>
+<area shape="rect" href="$Constants_8h.html" title="llvm/Constants.h" alt="" coords="3773,84,3901,111"/>
+<area shape="rect" href="$DebugInfo_8h.html" title="llvm/DebugInfo.h" alt="" coords="3925,84,4053,111"/>
+<area shape="rect" href="$Module_8h.html" title="llvm/Module.h" alt="" coords="5,316,115,343"/>
+<area shape="rect" href="$Type_8h.html" title="llvm/Type.h" alt="" coords="139,316,229,343"/>
+<area shape="rect" href="$Writer_8h.html" title="llvm/Assembly/Writer.h" alt="" coords="4077,84,4240,111"/>
+<area shape="rect" href="$MachineModuleInfoImpls_8h.html" title="llvm/CodeGen/MachineModuleInfoImpls.h" alt="" coords="4264,84,4547,111"/>
+<area shape="rect" href="$MachineJumpTableInfo_8h.html" title="llvm/CodeGen/MachineJumpTableInfo.h" alt="" coords="4571,84,4837,111"/>
+<area shape="rect" href="$MCAsmInfo_8h.html" title="llvm/MC/MCAsmInfo.h" alt="" coords="4861,84,5021,111"/>
+<area shape="rect" href="$MCAssembler_8h.html" title="llvm/MC/MCAssembler.h" alt="" coords="327,84,500,111"/>
+<area shape="rect" href="$MCInst_8h.html" title="llvm/MC/MCInst.h" alt="" coords="149,161,280,188"/>
+<area shape="rect" href="$MCContext_8h.html" title="llvm/MC/MCContext.h" alt="" coords="1029,239,1187,265"/>
+<area shape="rect" href="$raw__ostream_8h.html" title="llvm/Support/raw_ostream.h" alt="" coords="1023,316,1223,343"/>
+<area shape="rect" href="$MCSectionMachO_8h.html" title="llvm/MC/MCSectionMachO.h" alt="" coords="5045,84,5243,111"/>
+<area shape="rect" href="$MCObjectStreamer_8h.html" title="llvm/MC/MCObjectStreamer.h" alt="" coords="547,161,755,188"/>
+<area shape="rect" href="$MCSymbol_8h.html" title="llvm/MC/MCSymbol.h" alt="" coords="2891,316,3045,343"/>
+<area shape="rect" href="$Mangler_8h.html" title="llvm/Target/Mangler.h" alt="" coords="5267,84,5421,111"/>
+<area shape="rect" href="$CommandLine_8h.html" title="llvm/Support/CommandLine.h" alt="" coords="2653,316,2864,343"/>
+<area shape="rect" href="$Debug_8h.html" title="llvm/Support/Debug.h" alt="" coords="5445,84,5605,111"/>
+<area shape="rect" href="$TargetRegistry_8h.html" title="llvm/Support/TargetRegistry.h" alt="" coords="5629,84,5835,111"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="2295,393,2468,420"/>
+<area shape="rect" href="$AsmPrinter_8h.html" title="llvm/CodeGen/AsmPrinter.h" alt="" coords="2141,161,2336,188"/>
+<area shape="rect" href="$ARMBaseInfo_8h.html" title="MCTargetDesc/ARMBaseInfo.h" alt="" coords="1411,239,1621,265"/>
+<area shape="rect" href="$ARMMCTargetDesc_8h.html" title="ARMMCTargetDesc.h" alt="" coords="1297,316,1449,343"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="435,393,619,420"/>
+<area shape="rect" href="$ARMSubtarget_8h.html" title="ARMSubtarget.h" alt="" coords="1211,239,1336,265"/>
+<area shape="rect" href="$MachineConstantPool_8h.html" title="llvm/CodeGen/MachineConstantPool.h" alt="" coords="2907,161,3171,188"/>
+<area shape="rect" href="$MachineFunction_8h.html" title="llvm/CodeGen/MachineFunction.h" alt="" coords="1645,239,1877,265"/>
+<area shape="rect" href="$TargetRegisterInfo_8h.html" title="llvm/Target/TargetRegisterInfo.h" alt="" coords="1901,239,2120,265"/>
+<area shape="rect" href="$BitVector_8h.html" title="llvm/ADT/BitVector.h" alt="" coords="2195,239,2344,265"/>
+</map>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+8940cddea0b58ff0a7e73b55e71d460c
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,11 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ARMAsmPrinter.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="ARMAsmPrinter.cpp",height=0.2,width=0.4,color="black",URL="$ARMAsmPrinter_8cpp.html"];
+  Node1 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="ARMMCInstLower.cpp",height=0.2,width=0.4,color="black",URL="$ARMMCInstLower_8cpp.html"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,42 @@
+<map id="G" name="G">
+<area shape="rect" href="$ARM_8h.html" title="ARM.h" alt="" coords="1152,393,1213,420"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="2463,780,2636,807"/>
+<area shape="rect" href="$ARMTargetMachine_8h.html" title="ARMTargetMachine.h" alt="" coords="1521,84,1673,111"/>
+<area shape="rect" href="$AsmPrinter_8h.html" title="llvm/CodeGen/AsmPrinter.h" alt="" coords="1179,471,1373,497"/>
+<area shape="rect" href="$ARMBaseInfo_8h.html" title="MCTargetDesc/ARMBaseInfo.h" alt="" coords="893,471,1104,497"/>
+<area shape="rect" href="$ARMMCTargetDesc_8h.html" title="ARMMCTargetDesc.h" alt="" coords="148,548,300,575"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="1880,703,2064,729"/>
+<area shape="rect" href="$Target_2TargetMachine_8h.html" title="llvm/Target/TargetMachine.h" alt="" coords="1404,471,1601,497"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="1167,548,1372,575"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="1316,625,1465,652"/>
+<area shape="rect" href="$Pass_8h.html" title="llvm/Pass.h" alt="" coords="1653,703,1744,729"/>
+<area shape="rect" href="$CodeGen_8h.html" title="llvm/Support/CodeGen.h" alt="" coords="743,625,919,652"/>
+<area shape="rect" href="$TargetOptions_8h.html" title="llvm/Target/TargetOptions.h" alt="" coords="1401,703,1596,729"/>
+<area shape="rect" href="$TargetTransformInfo_8h.html" title="llvm/TargetTransformInfo.h" alt="" coords="1661,625,1848,652"/>
+<area shape="rect" href="$TargetTransformImpl_8h.html" title="llvm/Target/TargetTransformImpl.h" alt="" coords="1700,548,1935,575"/>
+<area shape="rect" href="$ARMInstrInfo_8h.html" title="ARMInstrInfo.h" alt="" coords="1233,239,1345,265"/>
+<area shape="rect" href="$ARMSubtarget_8h.html" title="ARMSubtarget.h" alt="" coords="417,471,543,497"/>
+<area shape="rect" href="$ARMFrameLowering_8h.html" title="ARMFrameLowering.h" alt="" coords="835,239,992,265"/>
+<area shape="rect" href="$ARMJITInfo_8h.html" title="ARMJITInfo.h" alt="" coords="2100,316,2196,343"/>
+<area shape="rect" href="$ARMISelLowering_8h.html" title="ARMISelLowering.h" alt="" coords="479,316,617,343"/>
+<area shape="rect" href="$ARMSelectionDAGInfo_8h.html" title="ARMSelectionDAGInfo.h" alt="" coords="785,161,956,188"/>
+<area shape="rect" href="$Thumb1InstrInfo_8h.html" title="Thumb1InstrInfo.h" alt="" coords="1369,239,1505,265"/>
+<area shape="rect" href="$Thumb1FrameLowering_8h.html" title="Thumb1FrameLowering.h" alt="" coords="1031,161,1212,188"/>
+<area shape="rect" href="$Thumb2InstrInfo_8h.html" title="Thumb2InstrInfo.h" alt="" coords="1529,239,1665,265"/>
+<area shape="rect" href="$DataLayout_8h.html" title="llvm/DataLayout.h" alt="" coords="2404,548,2540,575"/>
+<area shape="rect" href="$MCStreamer_8h.html" title="llvm/MC/MCStreamer.h" alt="" coords="2111,548,2279,575"/>
+<area shape="rect" href="$OwningPtr_8h.html" title="llvm/ADT/OwningPtr.h" alt="" coords="2764,625,2919,652"/>
+<area shape="rect" href="$ARMBaseInstrInfo_8h.html" title="ARMBaseInstrInfo.h" alt="" coords="1420,316,1564,343"/>
+<area shape="rect" href="$ARMRegisterInfo_8h.html" title="ARMRegisterInfo.h" alt="" coords="1159,316,1295,343"/>
+<area shape="rect" href="$DenseMap_8h.html" title="llvm/ADT/DenseMap.h" alt="" coords="2580,625,2740,652"/>
+<area shape="rect" href="$TargetSubtargetInfo_8h.html" title="llvm/Target/TargetSubtargetInfo.h" alt="" coords="324,548,556,575"/>
+<area shape="rect" href="$TargetFrameLowering_8h.html" title="llvm/Target/TargetFrameLowering.h" alt="" coords="793,316,1033,343"/>
+<area shape="rect" href="$ARMMachineFunctionInfo_8h.html" title="ARMMachineFunctionInfo.h" alt="" coords="1565,393,1755,420"/>
+<area shape="rect" href="$MachineFunction_8h.html" title="llvm/CodeGen/MachineFunction.h" alt="" coords="1727,471,1959,497"/>
+<area shape="rect" href="$MachineConstantPool_8h.html" title="llvm/CodeGen/MachineConstantPool.h" alt="" coords="2323,393,2587,420"/>
+<area shape="rect" href="$MachineJumpTableInfo_8h.html" title="llvm/CodeGen/MachineJumpTableInfo.h" alt="" coords="2032,393,2299,420"/>
+<area shape="rect" href="$TargetJITInfo_8h.html" title="llvm/Target/TargetJITInfo.h" alt="" coords="1983,471,2164,497"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="2388,625,2556,652"/>
+<area shape="rect" href="$MachineFunctionPass_8h.html" title="llvm/CodeGen/MachineFunctionPass.h" alt="" coords="631,548,892,575"/>
+<area shape="rect" href="$InlineAsm_8h.html" title="llvm/InlineAsm.h" alt="" coords="967,548,1092,575"/>
+</map>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+a3168cabcb34098ab44ca43ea1d6af4e
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/ARMAsmPrinter_8h__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,35 @@
+<map id="G" name="G">
+<area shape="rect" href="$ARMInstrInfo_8h.html" title="ARMInstrInfo.h" alt="" coords="292,161,404,188"/>
+<area shape="rect" href="$ARMCodeEmitter_8cpp.html" title="ARMCodeEmitter.cpp" alt="" coords="5,316,160,343"/>
+<area shape="rect" href="$ARMFastISel_8cpp.html" title="ARMFastISel.cpp" alt="" coords="1559,316,1684,343"/>
+<area shape="rect" href="$ARMISelDAGToDAG_8cpp.html" title="ARMISelDAGToDAG.cpp" alt="" coords="184,316,355,343"/>
+<area shape="rect" href="$Thumb1InstrInfo_8h.html" title="Thumb1InstrInfo.h" alt="" coords="639,84,775,111"/>
+<area shape="rect" href="$Thumb2InstrInfo_8h.html" title="Thumb2InstrInfo.h" alt="" coords="1143,84,1279,111"/>
+<area shape="rect" href="$Thumb2SizeReduction_8cpp.html" title="Thumb2SizeReduction.cpp" alt="" coords="1508,161,1697,188"/>
+<area shape="rect" href="$ARMBaseInstrInfo_8cpp.html" title="ARMBaseInstrInfo.cpp" alt="" coords="1404,84,1564,111"/>
+<area shape="rect" href="$ARMBaseRegisterInfo_8cpp.html" title="ARMBaseRegisterInfo.cpp" alt="" coords="1588,84,1769,111"/>
+<area shape="rect" href="$ARMCallingConv_8h.html" title="ARMCallingConv.h" alt="" coords="1555,239,1688,265"/>
+<area shape="rect" href="$ARMExpandPseudoInsts_8cpp.html" title="ARMExpandPseudoInsts.cpp" alt="" coords="1844,84,2044,111"/>
+<area shape="rect" href="$ARMFrameLowering_8cpp.html" title="ARMFrameLowering.cpp" alt="" coords="2068,84,2239,111"/>
+<area shape="rect" href="$ARMHazardRecognizer_8cpp.html" title="ARMHazardRecognizer.cpp" alt="" coords="2263,84,2452,111"/>
+<area shape="rect" href="$ARMLoadStoreOptimizer_8cpp.html" title="ARMLoadStoreOptimizer.cpp" alt="" coords="2476,84,2679,111"/>
+<area shape="rect" href="$ARMRegisterInfo_8cpp.html" title="ARMRegisterInfo.cpp" alt="" coords="2703,84,2852,111"/>
+<area shape="rect" href="$ARMSubtarget_8cpp.html" title="ARMSubtarget.cpp" alt="" coords="2876,84,3015,111"/>
+<area shape="rect" href="$MLxExpansionPass_8cpp.html" title="MLxExpansionPass.cpp" alt="" coords="3039,84,3207,111"/>
+<area shape="rect" href="$Thumb1RegisterInfo_8cpp.html" title="Thumb1RegisterInfo.cpp" alt="" coords="3231,84,3404,111"/>
+<area shape="rect" href="$Thumb2RegisterInfo_8cpp.html" title="Thumb2RegisterInfo.cpp" alt="" coords="3428,84,3601,111"/>
+<area shape="rect" href="$ARMTargetMachine_8h.html" title="ARMTargetMachine.h" alt="" coords="577,239,729,265"/>
+<area shape="rect" href="$ARMInstrInfo_8cpp.html" title="ARMInstrInfo.cpp" alt="" coords="379,316,507,343"/>
+<area shape="rect" href="$ARMAsmPrinter_8h.html" title="ARMAsmPrinter.h" alt="" coords="984,316,1115,343"/>
+<area shape="rect" href="$ARMAsmPrinter_8cpp.html" title="ARMAsmPrinter.cpp" alt="" coords="873,393,1020,420"/>
+<area shape="rect" href="$ARMISelLowering_8cpp.html" title="ARMISelLowering.cpp" alt="" coords="1300,316,1455,343"/>
+<area shape="rect" href="$ARMSelectionDAGInfo_8cpp.html" title="ARMSelectionDAGInfo.cpp" alt="" coords="531,316,717,343"/>
+<area shape="rect" href="$ARMTargetMachine_8cpp.html" title="ARMTargetMachine.cpp" alt="" coords="741,316,909,343"/>
+<area shape="rect" href="$ARMMCInstLower_8cpp.html" title="ARMMCInstLower.cpp" alt="" coords="1044,393,1199,420"/>
+<area shape="rect" href="$Thumb1FrameLowering_8h.html" title="Thumb1FrameLowering.h" alt="" coords="705,161,887,188"/>
+<area shape="rect" href="$Thumb1InstrInfo_8cpp.html" title="Thumb1InstrInfo.cpp" alt="" coords="428,161,580,188"/>
+<area shape="rect" href="$Thumb1FrameLowering_8cpp.html" title="Thumb1FrameLowering.cpp" alt="" coords="753,239,948,265"/>
+<area shape="rect" href="$ARMConstantIslandPass_8cpp.html" title="ARMConstantIslandPass.cpp" alt="" coords="911,161,1111,188"/>
+<area shape="rect" href="$Thumb2InstrInfo_8cpp.html" title="Thumb2InstrInfo.cpp" alt="" coords="1135,161,1287,188"/>
+<area shape="rect" href="$Thumb2ITBlockPass_8cpp.html" title="Thumb2ITBlockPass.cpp" alt="" coords="1311,161,1484,188"/>
+</map>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+21b3fa182ce41626c4e0fb4dd78a3a76
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/ARMBaseInstrInfo_8h__dep__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMBaseRegisterInfo_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMBaseRegisterInfo_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMBaseRegisterInfo_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMBaseRegisterInfo_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,175 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ARMBaseRegisterInfo.cpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="ARMBaseRegisterInfo.h",height=0.2,width=0.4,color="black",URL="$ARMBaseRegisterInfo_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="ARM.h",height=0.2,width=0.4,color="black",URL="$ARM_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="MCTargetDesc/ARMBaseInfo.h",height=0.2,width=0.4,color="black",URL="$ARMBaseInfo_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="ARMMCTargetDesc.h",height=0.2,width=0.4,color="black",URL="$ARMMCTargetDesc_8h.html"];
+  Node5 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="red",URL="$DataTypes_8h.html"];
+  Node5 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="ARMGenRegisterInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="ARMGenInstrInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node5 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="ARMGenSubtargetInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="red",URL="$ErrorHandling_8h.html"];
+  Node11 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node11 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="llvm/Target/TargetMachine.h",height=0.2,width=0.4,color="red",URL="$Target_2TargetMachine_8h.html"];
+  Node13 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="llvm/Target/TargetOptions.h",height=0.2,width=0.4,color="black",URL="$TargetOptions_8h.html"];
+  Node14 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node13 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="llvm/Target/TargetRegisterInfo.h",height=0.2,width=0.4,color="red",URL="$TargetRegisterInfo_8h.html"];
+  Node16 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/ADT/ArrayRef.h",height=0.2,width=0.4,color="red",URL="$ArrayRef_8h.html"];
+  Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="llvm/ADT/SmallVector.h",height=0.2,width=0.4,color="red",URL="$SmallVector_8h.html"];
+  Node18 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="ARMBaseInstrInfo.h",height=0.2,width=0.4,color="black",URL="$ARMBaseInstrInfo_8h.html"];
+  Node19 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="llvm/CodeGen/MachineInstrBuilder.h",height=0.2,width=0.4,color="black",URL="$MachineInstrBuilder_8h.html"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="llvm/CodeGen/MachineFunction.h",height=0.2,width=0.4,color="red",URL="$MachineFunction_8h.html"];
+  Node20 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="llvm/Target/TargetInstrInfo.h",height=0.2,width=0.4,color="red",URL="$TargetInstrInfo_8h.html"];
+  Node22 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/ADT/SmallSet.h",height=0.2,width=0.4,color="red",URL="$SmallSet_8h.html"];
+  Node23 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/ADT/DenseMap.h",height=0.2,width=0.4,color="red",URL="$DenseMap_8h.html"];
+  Node24 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="red",URL="$MathExtras_8h.html"];
+  Node24 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="ARMFrameLowering.h",height=0.2,width=0.4,color="black",URL="$ARMFrameLowering_8h.html"];
+  Node26 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="ARMSubtarget.h",height=0.2,width=0.4,color="black",URL="$ARMSubtarget_8h.html"];
+  Node27 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/Target/TargetSubtargetInfo.h",height=0.2,width=0.4,color="red",URL="$TargetSubtargetInfo_8h.html"];
+  Node27 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/MC/MCInstrItineraries.h",height=0.2,width=0.4,color="red",URL="$MCInstrItineraries_8h.html"];
+  Node27 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/ADT/Triple.h",height=0.2,width=0.4,color="red",URL="$Triple_8h.html"];
+  Node27 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/Target/TargetFrameLowering.h",height=0.2,width=0.4,color="red",URL="$TargetFrameLowering_8h.html"];
+  Node1 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="ARMMachineFunctionInfo.h",height=0.2,width=0.4,color="black",URL="$ARMMachineFunctionInfo_8h.html"];
+  Node32 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="llvm/ADT/BitVector.h",height=0.2,width=0.4,color="red",URL="$BitVector_8h.html"];
+  Node33 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="MCTargetDesc/ARMAddressingModes.h",height=0.2,width=0.4,color="black",URL="$ARMAddressingModes_8h.html"];
+  Node34 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/ADT/APFloat.h",height=0.2,width=0.4,color="black",URL="$APFloat_8h.html"];
+  Node35 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="llvm/ADT/APInt.h",height=0.2,width=0.4,color="red",URL="$APInt_8h.html"];
+  Node36 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/Constants.h",height=0.2,width=0.4,color="black",URL="$Constants_8h.html"];
+  Node37 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/Constant.h",height=0.2,width=0.4,color="red",URL="$Constant_8h.html"];
+  Node37 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/OperandTraits.h",height=0.2,width=0.4,color="red",URL="$OperandTraits_8h.html"];
+  Node37 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/DerivedTypes.h",height=0.2,width=0.4,color="black",URL="$DerivedTypes_8h.html"];
+  Node40 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/Type.h",height=0.2,width=0.4,color="red",URL="$Type_8h.html"];
+  Node41 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/Function.h",height=0.2,width=0.4,color="red",URL="$Function_8h.html"];
+  Node42 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/LLVMContext.h",height=0.2,width=0.4,color="black",URL="$LLVMContext_8h.html"];
+  Node43 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/CodeGen/MachineConstantPool.h",height=0.2,width=0.4,color="red",URL="$MachineConstantPool_8h.html"];
+  Node44 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/CodeGen/MachineFrameInfo.h",height=0.2,width=0.4,color="red",URL="$MachineFrameInfo_8h.html"];
+  Node45 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/CodeGen/MachineRegisterInfo.h",height=0.2,width=0.4,color="red",URL="$MachineRegisterInfo_8h.html"];
+  Node46 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/CodeGen/RegisterScavenging.h",height=0.2,width=0.4,color="red",URL="$RegisterScavenging_8h.html"];
+  Node47 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/Support/Debug.h",height=0.2,width=0.4,color="black",URL="$Debug_8h.html"];
+  Node1 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="llvm/Support/raw_ostream.h",height=0.2,width=0.4,color="red",URL="$raw__ostream_8h.html"];
+  Node49 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="llvm/Support/CommandLine.h",height=0.2,width=0.4,color="red",URL="$CommandLine_8h.html"];
+  Node50 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMBaseRegisterInfo_8cpp_source.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMBaseRegisterInfo_8cpp_source.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMBaseRegisterInfo_8cpp_source.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMBaseRegisterInfo_8cpp_source.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,1075 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ARMBaseRegisterInfo.cpp Source File</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_579de1806e7c3f5ec4b2837753e33796.html">ARM</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="headertitle">
+<div class="title">ARMBaseRegisterInfo.cpp</div>  </div>
+</div>
+<div class="contents">
+<a href="ARMBaseRegisterInfo_8cpp.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">//===-- ARMBaseRegisterInfo.cpp - ARM Register Information ----------------===//</span>
+<a name="l00002"></a>00002 <span class="comment">//</span>
+<a name="l00003"></a>00003 <span class="comment">//                     The LLVM Compiler Infrastructure</span>
+<a name="l00004"></a>00004 <span class="comment">//</span>
+<a name="l00005"></a>00005 <span class="comment">// This file is distributed under the University of Illinois Open Source</span>
+<a name="l00006"></a>00006 <span class="comment">// License. See LICENSE.TXT for details.</span>
+<a name="l00007"></a>00007 <span class="comment">//</span>
+<a name="l00008"></a>00008 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00009"></a>00009 <span class="comment">//</span>
+<a name="l00010"></a>00010 <span class="comment">// This file contains the base ARM implementation of TargetRegisterInfo class.</span>
+<a name="l00011"></a>00011 <span class="comment">//</span>
+<a name="l00012"></a>00012 <span class="comment">//===----------------------------------------------------------------------===//</span>
+<a name="l00013"></a>00013 
+<a name="l00014"></a>00014 <span class="preprocessor">#include "<a class="code" href="ARMBaseRegisterInfo_8h.html">ARMBaseRegisterInfo.h</a>"</span>
+<a name="l00015"></a>00015 <span class="preprocessor">#include "<a class="code" href="ARM_8h.html">ARM.h</a>"</span>
+<a name="l00016"></a>00016 <span class="preprocessor">#include "<a class="code" href="ARMBaseInstrInfo_8h.html">ARMBaseInstrInfo.h</a>"</span>
+<a name="l00017"></a>00017 <span class="preprocessor">#include "<a class="code" href="ARMFrameLowering_8h.html">ARMFrameLowering.h</a>"</span>
+<a name="l00018"></a>00018 <span class="preprocessor">#include "<a class="code" href="ARMMachineFunctionInfo_8h.html">ARMMachineFunctionInfo.h</a>"</span>
+<a name="l00019"></a>00019 <span class="preprocessor">#include "<a class="code" href="ARMSubtarget_8h.html">ARMSubtarget.h</a>"</span>
+<a name="l00020"></a>00020 <span class="preprocessor">#include "<a class="code" href="ARMAddressingModes_8h.html">MCTargetDesc/ARMAddressingModes.h</a>"</span>
+<a name="l00021"></a>00021 <span class="preprocessor">#include "<a class="code" href="Constants_8h.html">llvm/Constants.h</a>"</span>
+<a name="l00022"></a>00022 <span class="preprocessor">#include "<a class="code" href="DerivedTypes_8h.html">llvm/DerivedTypes.h</a>"</span>
+<a name="l00023"></a>00023 <span class="preprocessor">#include "<a class="code" href="Function_8h.html">llvm/Function.h</a>"</span>
+<a name="l00024"></a>00024 <span class="preprocessor">#include "<a class="code" href="LLVMContext_8h.html">llvm/LLVMContext.h</a>"</span>
+<a name="l00025"></a>00025 <span class="preprocessor">#include "<a class="code" href="MachineConstantPool_8h.html">llvm/CodeGen/MachineConstantPool.h</a>"</span>
+<a name="l00026"></a>00026 <span class="preprocessor">#include "<a class="code" href="MachineFrameInfo_8h.html">llvm/CodeGen/MachineFrameInfo.h</a>"</span>
+<a name="l00027"></a>00027 <span class="preprocessor">#include "<a class="code" href="MachineFunction_8h.html">llvm/CodeGen/MachineFunction.h</a>"</span>
+<a name="l00028"></a>00028 <span class="preprocessor">#include "<a class="code" href="MachineInstrBuilder_8h.html">llvm/CodeGen/MachineInstrBuilder.h</a>"</span>
+<a name="l00029"></a>00029 <span class="preprocessor">#include "<a class="code" href="MachineRegisterInfo_8h.html">llvm/CodeGen/MachineRegisterInfo.h</a>"</span>
+<a name="l00030"></a>00030 <span class="preprocessor">#include "<a class="code" href="RegisterScavenging_8h.html">llvm/CodeGen/RegisterScavenging.h</a>"</span>
+<a name="l00031"></a>00031 <span class="preprocessor">#include "<a class="code" href="Debug_8h.html">llvm/Support/Debug.h</a>"</span>
+<a name="l00032"></a>00032 <span class="preprocessor">#include "<a class="code" href="ErrorHandling_8h.html">llvm/Support/ErrorHandling.h</a>"</span>
+<a name="l00033"></a>00033 <span class="preprocessor">#include "<a class="code" href="raw__ostream_8h.html">llvm/Support/raw_ostream.h</a>"</span>
+<a name="l00034"></a>00034 <span class="preprocessor">#include "<a class="code" href="TargetFrameLowering_8h.html">llvm/Target/TargetFrameLowering.h</a>"</span>
+<a name="l00035"></a>00035 <span class="preprocessor">#include "<a class="code" href="Target_2TargetMachine_8h.html">llvm/Target/TargetMachine.h</a>"</span>
+<a name="l00036"></a>00036 <span class="preprocessor">#include "<a class="code" href="TargetOptions_8h.html">llvm/Target/TargetOptions.h</a>"</span>
+<a name="l00037"></a>00037 <span class="preprocessor">#include "<a class="code" href="BitVector_8h.html">llvm/ADT/BitVector.h</a>"</span>
+<a name="l00038"></a>00038 <span class="preprocessor">#include "<a class="code" href="SmallVector_8h.html">llvm/ADT/SmallVector.h</a>"</span>
+<a name="l00039"></a>00039 <span class="preprocessor">#include "<a class="code" href="CommandLine_8h.html">llvm/Support/CommandLine.h</a>"</span>
+<a name="l00040"></a>00040 
+<a name="l00041"></a><a class="code" href="ARMBaseRegisterInfo_8cpp.html#a13b7359d3501128c4c130fd13756facc">00041</a> <span class="preprocessor">#define GET_REGINFO_TARGET_DESC</span>
+<a name="l00042"></a>00042 <span class="preprocessor"></span><span class="preprocessor">#include "ARMGenRegisterInfo.inc"</span>
+<a name="l00043"></a>00043 
+<a name="l00044"></a>00044 <span class="keyword">using namespace </span>llvm;
+<a name="l00045"></a>00045 
+<a name="l00046"></a>00046 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00047"></a>00047 <a class="code" href="ARMBaseRegisterInfo_8cpp.html#abfa594409b2608ff16cbad0b9f566796">ForceAllBaseRegAlloc</a>(<span class="stringliteral">"arm-force-base-reg-alloc"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>, <a class="code" href="namespacellvm_1_1cl.html#a10a041239ae1870cfcc064bfaa79fb65">cl::init</a>(<span class="keyword">false</span>),
+<a name="l00048"></a>00048           <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Force use of virtual base registers for stack load/store"</span>));
+<a name="l00049"></a>00049 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00050"></a>00050 <a class="code" href="ARMBaseRegisterInfo_8cpp.html#ae68a63b6f3050e346562a7680dbd34fb">EnableLocalStackAlloc</a>(<span class="stringliteral">"enable-local-stack-alloc"</span>, <a class="code" href="namespacellvm_1_1cl.html#a10a041239ae1870cfcc064bfaa79fb65">cl::init</a>(<span class="keyword">true</span>), <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>,
+<a name="l00051"></a>00051           <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Enable pre-regalloc stack frame index allocation"</span>));
+<a name="l00052"></a>00052 <span class="keyword">static</span> <a class="code" href="classllvm_1_1cl_1_1opt.html">cl::opt<bool></a>
+<a name="l00053"></a>00053 <a class="code" href="ARMBaseRegisterInfo_8cpp.html#ad9ce2cf1d25a482b75a8bb6c6bd56d57">EnableBasePointer</a>(<span class="stringliteral">"arm-use-base-pointer"</span>, <a class="code" href="namespacellvm_1_1cl.html#a68075925a54790e71ca790e1d4f21a40a263ac008d8d31f13ce460395fc4cf7e6">cl::Hidden</a>, <a class="code" href="namespacellvm_1_1cl.html#a10a041239ae1870cfcc064bfaa79fb65">cl::init</a>(<span class="keyword">true</span>),
+<a name="l00054"></a>00054           <a class="code" href="structllvm_1_1cl_1_1desc.html">cl::desc</a>(<span class="stringliteral">"Enable use of a base pointer for complex stack frames"</span>));
+<a name="l00055"></a>00055 
+<a name="l00056"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0e1c0e0315968d4e387ba4aef96afe4c">00056</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0e1c0e0315968d4e387ba4aef96afe4c">ARMBaseRegisterInfo::ARMBaseRegisterInfo</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1ARMBaseInstrInfo.html">ARMBaseInstrInfo</a> &tii,
+<a name="l00057"></a>00057                                          <span class="keyword">const</span> <a class="code" href="classllvm_1_1ARMSubtarget.html">ARMSubtarget</a> &sti)
+<a name="l00058"></a>00058   : <a class="code" href="classARMGenRegisterInfo.html">ARMGenRegisterInfo</a>(<a class="code" href="namespacellvm_1_1ExceptionHandling.html#a84c427e973084a9d1c7b7b9dc2bcc95daa8dc35917369fdfde68971225019ec64">ARM</a>::LR), TII(tii), STI(sti),
+<a name="l00059"></a>00059     FramePtr((STI.isTargetDarwin() || STI.isThumb()) ? <a class="code" href="namespacellvm_1_1ExceptionHandling.html#a84c427e973084a9d1c7b7b9dc2bcc95daa8dc35917369fdfde68971225019ec64">ARM</a>::R7 : <a class="code" href="namespacellvm_1_1ExceptionHandling.html#a84c427e973084a9d1c7b7b9dc2bcc95daa8dc35917369fdfde68971225019ec64">ARM</a>::R11),
+<a name="l00060"></a>00060     BasePtr(<a class="code" href="namespacellvm_1_1ExceptionHandling.html#a84c427e973084a9d1c7b7b9dc2bcc95daa8dc35917369fdfde68971225019ec64">ARM</a>::R6) {
+<a name="l00061"></a>00061 }
+<a name="l00062"></a>00062 
+<a name="l00063"></a>00063 <span class="keyword">const</span> uint16_t*
+<a name="l00064"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a141fe016bee792f7ad8aca26c4032815">00064</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a141fe016bee792f7ad8aca26c4032815" title="Code Generation virtual methods...">ARMBaseRegisterInfo::getCalleeSavedRegs</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> *MF)<span class="keyword"> const </span>{
+<a name="l00065"></a>00065   <span class="keywordtype">bool</span> ghcCall = <span class="keyword">false</span>;
+<a name="l00066"></a>00066  
+<a name="l00067"></a>00067   <span class="keywordflow">if</span> (MF) {
+<a name="l00068"></a>00068     <span class="keyword">const</span> <a class="code" href="classllvm_1_1Function.html">Function</a> *<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a> = MF-><a class="code" href="classllvm_1_1MachineFunction.html#ad784a6594990530bffb2018aeeed56f3">getFunction</a>();
+<a name="l00069"></a>00069     ghcCall = (F ? F-><a class="code" href="classllvm_1_1Function.html#af4d5ada526cdf057f5f29047e058187d">getCallingConv</a>() == <a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974a8e8dc64aad833bd23d07d3384522575e">CallingConv::GHC</a> : <span class="keyword">false</span>);
+<a name="l00070"></a>00070   }
+<a name="l00071"></a>00071  
+<a name="l00072"></a>00072   <span class="keywordflow">if</span> (ghcCall) {
+<a name="l00073"></a>00073       <span class="keywordflow">return</span> CSR_GHC_SaveList;
+<a name="l00074"></a>00074   }
+<a name="l00075"></a>00075   <span class="keywordflow">else</span> {
+<a name="l00076"></a>00076   <span class="keywordflow">return</span> (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#a80f7cdbc91b73599f8319c4a88c7ca18">isTargetIOS</a>() && !<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#ae4fab21514f34e5a3b094691d09430e5">isAAPCS_ABI</a>())
+<a name="l00077"></a>00077     ? CSR_iOS_SaveList : CSR_AAPCS_SaveList;
+<a name="l00078"></a>00078   }
+<a name="l00079"></a>00079 }
+<a name="l00080"></a>00080 
+<a name="l00081"></a>00081 <span class="keyword">const</span> uint32_t*
+<a name="l00082"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a1365f1ee2de0871f0976a538ef068c00">00082</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a1365f1ee2de0871f0976a538ef068c00">ARMBaseRegisterInfo::getCallPreservedMask</a>(<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974" title="LLVM Calling Convention Representation.">CallingConv::ID</a>)<span class="keyword"> const </span>{
+<a name="l00083"></a>00083   <span class="keywordflow">return</span> (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#a80f7cdbc91b73599f8319c4a88c7ca18">isTargetIOS</a>() && !<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#ae4fab21514f34e5a3b094691d09430e5">isAAPCS_ABI</a>())
+<a name="l00084"></a>00084     ? CSR_iOS_RegMask : CSR_AAPCS_RegMask;
+<a name="l00085"></a>00085 }
+<a name="l00086"></a>00086 
+<a name="l00087"></a>00087 <span class="keyword">const</span> uint32_t*
+<a name="l00088"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#acc0ef4cd6dc6195c64463fdf946629b6">00088</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#acc0ef4cd6dc6195c64463fdf946629b6">ARMBaseRegisterInfo::getNoPreservedMask</a>()<span class="keyword"> const </span>{
+<a name="l00089"></a>00089   <span class="keywordflow">return</span> CSR_NoRegs_RegMask;
+<a name="l00090"></a>00090 }
+<a name="l00091"></a>00091 
+<a name="l00092"></a>00092 <a class="code" href="classllvm_1_1BitVector.html">BitVector</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#afa9f8ffb1fceb8311747f92ad27af00d">ARMBaseRegisterInfo::</a>
+<a name="l00093"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#afa9f8ffb1fceb8311747f92ad27af00d">00093</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#afa9f8ffb1fceb8311747f92ad27af00d">getReservedRegs</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00094"></a>00094   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a> *TFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>();
+<a name="l00095"></a>00095 
+<a name="l00096"></a>00096   <span class="comment">// FIXME: avoid re-calculating this every time.</span>
+<a name="l00097"></a>00097   <a class="code" href="classllvm_1_1BitVector.html">BitVector</a> Reserved(getNumRegs());
+<a name="l00098"></a>00098   Reserved.<a class="code" href="classllvm_1_1BitVector.html#a1964207fae81f04966b2a9dcfc21cf7b">set</a>(ARM::SP);
+<a name="l00099"></a>00099   Reserved.<a class="code" href="classllvm_1_1BitVector.html#a1964207fae81f04966b2a9dcfc21cf7b">set</a>(ARM::PC);
+<a name="l00100"></a>00100   Reserved.<a class="code" href="classllvm_1_1BitVector.html#a1964207fae81f04966b2a9dcfc21cf7b">set</a>(ARM::FPSCR);
+<a name="l00101"></a>00101   <span class="keywordflow">if</span> (TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a59182730437bdb0a45a274261a7ea84b">hasFP</a>(MF))
+<a name="l00102"></a>00102     Reserved.<a class="code" href="classllvm_1_1BitVector.html#a1964207fae81f04966b2a9dcfc21cf7b">set</a>(<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ab8c4c7fe0d09a9081ea3ac4d7bf002ed" title="FramePtr - ARM physical register used as frame ptr.">FramePtr</a>);
+<a name="l00103"></a>00103   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0e3e26dbde5eb40a63a5ed4220cf6211">hasBasePointer</a>(MF))
+<a name="l00104"></a>00104     Reserved.<a class="code" href="classllvm_1_1BitVector.html#a1964207fae81f04966b2a9dcfc21cf7b">set</a>(<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ad7d3d20d0e64bd376f5dd31b1ffc716f">BasePtr</a>);
+<a name="l00105"></a>00105   <span class="comment">// Some targets reserve R9.</span>
+<a name="l00106"></a>00106   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#aab369e8798809ed1714f2d18d7d9dc07">isR9Reserved</a>())
+<a name="l00107"></a>00107     Reserved.<a class="code" href="classllvm_1_1BitVector.html#a1964207fae81f04966b2a9dcfc21cf7b">set</a>(ARM::R9);
+<a name="l00108"></a>00108   <span class="comment">// Reserve D16-D31 if the subtarget doesn't support them.</span>
+<a name="l00109"></a>00109   <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#ab8bea77b85a8b008476f4e21edc26603">hasVFP3</a>() || <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#a2984fcbda84c569398c54a5c1337d68f">hasD16</a>()) {
+<a name="l00110"></a>00110     assert(ARM::D31 == ARM::D16 + 15);
+<a name="l00111"></a>00111     <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; i != 16; ++i)
+<a name="l00112"></a>00112       Reserved.<a class="code" href="classllvm_1_1BitVector.html#a1964207fae81f04966b2a9dcfc21cf7b">set</a>(ARM::D16 + i);
+<a name="l00113"></a>00113   }
+<a name="l00114"></a>00114   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *RC  = &ARM::GPRPairRegClass;
+<a name="l00115"></a>00115   <span class="keywordflow">for</span>(<a class="code" href="classllvm_1_1TargetRegisterClass.html#a6d9f6ca5d6def92e71acf1ee58f3944d">TargetRegisterClass::iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a51f91c5b6b101d60eee19dc54ce129b0">begin</a>(), E = RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a3f96cd02f2b89996660241331664e553">end</a>(); <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>!=E; ++<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)
+<a name="l00116"></a>00116     <span class="keywordflow">for</span> (<a class="code" href="classllvm_1_1MCSubRegIterator.html" title="MCSubRegIterator enumerates all sub-registers of Reg.">MCSubRegIterator</a> SI(*<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>, <span class="keyword">this</span>); SI.<a class="code" href="classllvm_1_1MCRegisterInfo_1_1DiffListIterator.html#abccd358b92366e5284e7e674e86b241f" title="isValid - returns true if this iterator is not yet at the end.">isValid</a>(); ++SI)
+<a name="l00117"></a>00117       <span class="keywordflow">if</span> (Reserved.<a class="code" href="classllvm_1_1BitVector.html#a20b6ba858cb2bb6d8d7fa553025c1f61">test</a>(*SI)) Reserved.<a class="code" href="classllvm_1_1BitVector.html#a1964207fae81f04966b2a9dcfc21cf7b">set</a>(*<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>);
+<a name="l00118"></a>00118 
+<a name="l00119"></a>00119   <span class="keywordflow">return</span> Reserved;
+<a name="l00120"></a>00120 }
+<a name="l00121"></a>00121 
+<a name="l00122"></a>00122 <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a>*
+<a name="l00123"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a4728f2d7d559f995f8ed7e2a23d4631f">00123</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a4728f2d7d559f995f8ed7e2a23d4631f">ARMBaseRegisterInfo::getLargestLegalSuperClass</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *RC)<span class="keyword"></span>
+<a name="l00124"></a>00124 <span class="keyword">                                                                         const </span>{
+<a name="l00125"></a>00125   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *Super = RC;
+<a name="l00126"></a>00126   <a class="code" href="classllvm_1_1TargetRegisterClass.html#a0d81222b2289de5b9f2944264082dea8">TargetRegisterClass::sc_iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a> = RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a60ffe30d163b69f0c571b907907ab9ad">getSuperClasses</a>();
+<a name="l00127"></a>00127   <span class="keywordflow">do</span> {
+<a name="l00128"></a>00128     <span class="keywordflow">switch</span> (Super-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a25f9ba8e78af92ca34f9c1bba7881601">getID</a>()) {
+<a name="l00129"></a>00129     <span class="keywordflow">case</span> ARM::GPRRegClassID:
+<a name="l00130"></a>00130     <span class="keywordflow">case</span> ARM::SPRRegClassID:
+<a name="l00131"></a>00131     <span class="keywordflow">case</span> ARM::DPRRegClassID:
+<a name="l00132"></a>00132     <span class="keywordflow">case</span> ARM::QPRRegClassID:
+<a name="l00133"></a>00133     <span class="keywordflow">case</span> ARM::QQPRRegClassID:
+<a name="l00134"></a>00134     <span class="keywordflow">case</span> ARM::QQQQPRRegClassID:
+<a name="l00135"></a>00135     <span class="keywordflow">case</span> ARM::GPRPairRegClassID:
+<a name="l00136"></a>00136       <span class="keywordflow">return</span> Super;
+<a name="l00137"></a>00137     }
+<a name="l00138"></a>00138     Super = *I++;
+<a name="l00139"></a>00139   } <span class="keywordflow">while</span> (Super);
+<a name="l00140"></a>00140   <span class="keywordflow">return</span> RC;
+<a name="l00141"></a>00141 }
+<a name="l00142"></a>00142 
+<a name="l00143"></a>00143 <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *
+<a name="l00144"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a8c611fbe440676b9d569e16e44097cbe">00144</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a8c611fbe440676b9d569e16e44097cbe">ARMBaseRegisterInfo::getPointerRegClass</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF, <span class="keywordtype">unsigned</span> <a class="code" href="namespacellvm_1_1EngineKind.html#a9df47239a42cd9621ac26d9ecbd57441">Kind</a>)<span class="keyword"></span>
+<a name="l00145"></a>00145 <span class="keyword">                                                                         const </span>{
+<a name="l00146"></a>00146   <span class="keywordflow">return</span> &ARM::GPRRegClass;
+<a name="l00147"></a>00147 }
+<a name="l00148"></a>00148 
+<a name="l00149"></a>00149 <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *
+<a name="l00150"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#acdd6a0dff748e7563fb3857a88f3af05">00150</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#acdd6a0dff748e7563fb3857a88f3af05">ARMBaseRegisterInfo::getCrossCopyRegClass</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *RC)<span class="keyword"> const </span>{
+<a name="l00151"></a>00151   <span class="keywordflow">if</span> (RC == &ARM::CCRRegClass)
+<a name="l00152"></a>00152     <span class="keywordflow">return</span> 0;  <span class="comment">// Can't copy CCR registers.</span>
+<a name="l00153"></a>00153   <span class="keywordflow">return</span> RC;
+<a name="l00154"></a>00154 }
+<a name="l00155"></a>00155 
+<a name="l00156"></a>00156 <span class="keywordtype">unsigned</span>
+<a name="l00157"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0cfdd707eb69bb9c851cda0f830f17a6">00157</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0cfdd707eb69bb9c851cda0f830f17a6">ARMBaseRegisterInfo::getRegPressureLimit</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *RC,
+<a name="l00158"></a>00158                                          <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00159"></a>00159   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a> *TFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>();
+<a name="l00160"></a>00160 
+<a name="l00161"></a>00161   <span class="keywordflow">switch</span> (RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a25f9ba8e78af92ca34f9c1bba7881601">getID</a>()) {
+<a name="l00162"></a>00162   <span class="keywordflow">default</span>:
+<a name="l00163"></a>00163     <span class="keywordflow">return</span> 0;
+<a name="l00164"></a>00164   <span class="keywordflow">case</span> ARM::tGPRRegClassID:
+<a name="l00165"></a>00165     <span class="keywordflow">return</span> TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a59182730437bdb0a45a274261a7ea84b">hasFP</a>(MF) ? 4 : 5;
+<a name="l00166"></a>00166   <span class="keywordflow">case</span> ARM::GPRRegClassID: {
+<a name="l00167"></a>00167     <span class="keywordtype">unsigned</span> FP = TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a59182730437bdb0a45a274261a7ea84b">hasFP</a>(MF) ? 1 : 0;
+<a name="l00168"></a>00168     <span class="keywordflow">return</span> 10 - FP - (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#aab369e8798809ed1714f2d18d7d9dc07">isR9Reserved</a>() ? 1 : 0);
+<a name="l00169"></a>00169   }
+<a name="l00170"></a>00170   <span class="keywordflow">case</span> ARM::SPRRegClassID:  <span class="comment">// Currently not used as 'rep' register class.</span>
+<a name="l00171"></a>00171   <span class="keywordflow">case</span> ARM::DPRRegClassID:
+<a name="l00172"></a>00172     <span class="keywordflow">return</span> 32 - 10;
+<a name="l00173"></a>00173   }
+<a name="l00174"></a>00174 }
+<a name="l00175"></a>00175 <span class="comment"></span>
+<a name="l00176"></a>00176 <span class="comment">/// getRawAllocationOrder - Returns the register allocation order for a</span>
+<a name="l00177"></a>00177 <span class="comment">/// specified register class with a target-dependent hint.</span>
+<a name="l00178"></a>00178 <span class="comment"></span><a class="code" href="classllvm_1_1ArrayRef.html">ArrayRef<uint16_t></a>
+<a name="l00179"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#afe15c4a4029f5ed0b1dd2addac304285">00179</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#afe15c4a4029f5ed0b1dd2addac304285">ARMBaseRegisterInfo::getRawAllocationOrder</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *RC,
+<a name="l00180"></a>00180                                            <span class="keywordtype">unsigned</span> HintType, <span class="keywordtype">unsigned</span> HintReg,
+<a name="l00181"></a>00181                                            <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00182"></a>00182   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a> *TFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>();
+<a name="l00183"></a>00183   <span class="comment">// Alternative register allocation orders when favoring even / odd registers</span>
+<a name="l00184"></a>00184   <span class="comment">// of register pairs.</span>
+<a name="l00185"></a>00185 
+<a name="l00186"></a>00186   <span class="comment">// No FP, R9 is available.</span>
+<a name="l00187"></a>00187   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPREven1[] = {
+<a name="l00188"></a>00188     ARM::R0, ARM::R2, ARM::R4, ARM::R6, ARM::R8, ARM::R10,
+<a name="l00189"></a>00189     ARM::R1, ARM::R3, ARM::R12,ARM::LR, ARM::R5, ARM::R7,
+<a name="l00190"></a>00190     ARM::R9, ARM::R11
+<a name="l00191"></a>00191   };
+<a name="l00192"></a>00192   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPROdd1[] = {
+<a name="l00193"></a>00193     ARM::R1, ARM::R3, ARM::R5, ARM::R7, ARM::R9, ARM::R11,
+<a name="l00194"></a>00194     ARM::R0, ARM::R2, ARM::R12,ARM::LR, ARM::R4, ARM::R6,
+<a name="l00195"></a>00195     ARM::R8, ARM::R10
+<a name="l00196"></a>00196   };
+<a name="l00197"></a>00197 
+<a name="l00198"></a>00198   <span class="comment">// FP is R7, R9 is available.</span>
+<a name="l00199"></a>00199   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPREven2[] = {
+<a name="l00200"></a>00200     ARM::R0, ARM::R2, ARM::R4,          ARM::R8, ARM::R10,
+<a name="l00201"></a>00201     ARM::R1, ARM::R3, ARM::R12,ARM::LR, ARM::R5, ARM::R6,
+<a name="l00202"></a>00202     ARM::R9, ARM::R11
+<a name="l00203"></a>00203   };
+<a name="l00204"></a>00204   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPROdd2[] = {
+<a name="l00205"></a>00205     ARM::R1, ARM::R3, ARM::R5,          ARM::R9, ARM::R11,
+<a name="l00206"></a>00206     ARM::R0, ARM::R2, ARM::R12,ARM::LR, ARM::R4, ARM::R6,
+<a name="l00207"></a>00207     ARM::R8, ARM::R10
+<a name="l00208"></a>00208   };
+<a name="l00209"></a>00209 
+<a name="l00210"></a>00210   <span class="comment">// FP is R11, R9 is available.</span>
+<a name="l00211"></a>00211   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPREven3[] = {
+<a name="l00212"></a>00212     ARM::R0, ARM::R2, ARM::R4, ARM::R6, ARM::R8,
+<a name="l00213"></a>00213     ARM::R1, ARM::R3, ARM::R10,ARM::R12,ARM::LR, ARM::R5, ARM::R7,
+<a name="l00214"></a>00214     ARM::R9
+<a name="l00215"></a>00215   };
+<a name="l00216"></a>00216   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPROdd3[] = {
+<a name="l00217"></a>00217     ARM::R1, ARM::R3, ARM::R5, ARM::R6, ARM::R9,
+<a name="l00218"></a>00218     ARM::R0, ARM::R2, ARM::R10,ARM::R12,ARM::LR, ARM::R4, ARM::R7,
+<a name="l00219"></a>00219     ARM::R8
+<a name="l00220"></a>00220   };
+<a name="l00221"></a>00221 
+<a name="l00222"></a>00222   <span class="comment">// No FP, R9 is not available.</span>
+<a name="l00223"></a>00223   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPREven4[] = {
+<a name="l00224"></a>00224     ARM::R0, ARM::R2, ARM::R4, ARM::R6,          ARM::R10,
+<a name="l00225"></a>00225     ARM::R1, ARM::R3, ARM::R12,ARM::LR, ARM::R5, ARM::R7, ARM::R8,
+<a name="l00226"></a>00226     ARM::R11
+<a name="l00227"></a>00227   };
+<a name="l00228"></a>00228   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPROdd4[] = {
+<a name="l00229"></a>00229     ARM::R1, ARM::R3, ARM::R5, ARM::R7,          ARM::R11,
+<a name="l00230"></a>00230     ARM::R0, ARM::R2, ARM::R12,ARM::LR, ARM::R4, ARM::R6, ARM::R8,
+<a name="l00231"></a>00231     ARM::R10
+<a name="l00232"></a>00232   };
+<a name="l00233"></a>00233 
+<a name="l00234"></a>00234   <span class="comment">// FP is R7, R9 is not available.</span>
+<a name="l00235"></a>00235   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPREven5[] = {
+<a name="l00236"></a>00236     ARM::R0, ARM::R2, ARM::R4,                   ARM::R10,
+<a name="l00237"></a>00237     ARM::R1, ARM::R3, ARM::R12,ARM::LR, ARM::R5, ARM::R6, ARM::R8,
+<a name="l00238"></a>00238     ARM::R11
+<a name="l00239"></a>00239   };
+<a name="l00240"></a>00240   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPROdd5[] = {
+<a name="l00241"></a>00241     ARM::R1, ARM::R3, ARM::R5,                   ARM::R11,
+<a name="l00242"></a>00242     ARM::R0, ARM::R2, ARM::R12,ARM::LR, ARM::R4, ARM::R6, ARM::R8,
+<a name="l00243"></a>00243     ARM::R10
+<a name="l00244"></a>00244   };
+<a name="l00245"></a>00245 
+<a name="l00246"></a>00246   <span class="comment">// FP is R11, R9 is not available.</span>
+<a name="l00247"></a>00247   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPREven6[] = {
+<a name="l00248"></a>00248     ARM::R0, ARM::R2, ARM::R4, ARM::R6,
+<a name="l00249"></a>00249     ARM::R1, ARM::R3, ARM::R10,ARM::R12,ARM::LR, ARM::R5, ARM::R7, ARM::R8
+<a name="l00250"></a>00250   };
+<a name="l00251"></a>00251   <span class="keyword">static</span> <span class="keyword">const</span> uint16_t GPROdd6[] = {
+<a name="l00252"></a>00252     ARM::R1, ARM::R3, ARM::R5, ARM::R7,
+<a name="l00253"></a>00253     ARM::R0, ARM::R2, ARM::R10,ARM::R12,ARM::LR, ARM::R4, ARM::R6, ARM::R8
+<a name="l00254"></a>00254   };
+<a name="l00255"></a>00255 
+<a name="l00256"></a>00256   <span class="comment">// We only support even/odd hints for GPR and rGPR.</span>
+<a name="l00257"></a>00257   <span class="keywordflow">if</span> (RC != &ARM::GPRRegClass && RC != &ARM::rGPRRegClass)
+<a name="l00258"></a>00258     <span class="keywordflow">return</span> RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a07f8d61b3e1ada33cf4857c5dc3baa31">getRawAllocationOrder</a>(MF);
+<a name="l00259"></a>00259 
+<a name="l00260"></a>00260   <span class="keywordflow">if</span> (HintType == <a class="code" href="namespacellvm_1_1ARMRI.html#ae53e898c48172c2b8b9db453409c0fd9a2ae32bcb4cedddc631c44e40903546ec">ARMRI::RegPairEven</a>) {
+<a name="l00261"></a>00261     <span class="keywordflow">if</span> (isPhysicalRegister(HintReg) && getRegisterPairEven(HintReg, MF) == 0)
+<a name="l00262"></a>00262       <span class="comment">// It's no longer possible to fulfill this hint. Return the default</span>
+<a name="l00263"></a>00263       <span class="comment">// allocation order.</span>
+<a name="l00264"></a>00264       <span class="keywordflow">return</span> RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a07f8d61b3e1ada33cf4857c5dc3baa31">getRawAllocationOrder</a>(MF);
+<a name="l00265"></a>00265 
+<a name="l00266"></a>00266     <span class="keywordflow">if</span> (!TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a59182730437bdb0a45a274261a7ea84b">hasFP</a>(MF)) {
+<a name="l00267"></a>00267       <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#aab369e8798809ed1714f2d18d7d9dc07">isR9Reserved</a>())
+<a name="l00268"></a>00268         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPREven1);
+<a name="l00269"></a>00269       <span class="keywordflow">else</span>
+<a name="l00270"></a>00270         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPREven4);
+<a name="l00271"></a>00271     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ab8c4c7fe0d09a9081ea3ac4d7bf002ed" title="FramePtr - ARM physical register used as frame ptr.">FramePtr</a> == ARM::R7) {
+<a name="l00272"></a>00272       <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#aab369e8798809ed1714f2d18d7d9dc07">isR9Reserved</a>())
+<a name="l00273"></a>00273         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPREven2);
+<a name="l00274"></a>00274       <span class="keywordflow">else</span>
+<a name="l00275"></a>00275         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPREven5);
+<a name="l00276"></a>00276     } <span class="keywordflow">else</span> { <span class="comment">// FramePtr == ARM::R11</span>
+<a name="l00277"></a>00277       <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#aab369e8798809ed1714f2d18d7d9dc07">isR9Reserved</a>())
+<a name="l00278"></a>00278         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPREven3);
+<a name="l00279"></a>00279       <span class="keywordflow">else</span>
+<a name="l00280"></a>00280         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPREven6);
+<a name="l00281"></a>00281     }
+<a name="l00282"></a>00282   } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (HintType == <a class="code" href="namespacellvm_1_1ARMRI.html#ae53e898c48172c2b8b9db453409c0fd9af83bd18d3419478667dd162f113dabb5">ARMRI::RegPairOdd</a>) {
+<a name="l00283"></a>00283     <span class="keywordflow">if</span> (isPhysicalRegister(HintReg) && getRegisterPairOdd(HintReg, MF) == 0)
+<a name="l00284"></a>00284       <span class="comment">// It's no longer possible to fulfill this hint. Return the default</span>
+<a name="l00285"></a>00285       <span class="comment">// allocation order.</span>
+<a name="l00286"></a>00286       <span class="keywordflow">return</span> RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a07f8d61b3e1ada33cf4857c5dc3baa31">getRawAllocationOrder</a>(MF);
+<a name="l00287"></a>00287 
+<a name="l00288"></a>00288     <span class="keywordflow">if</span> (!TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a59182730437bdb0a45a274261a7ea84b">hasFP</a>(MF)) {
+<a name="l00289"></a>00289       <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#aab369e8798809ed1714f2d18d7d9dc07">isR9Reserved</a>())
+<a name="l00290"></a>00290         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPROdd1);
+<a name="l00291"></a>00291       <span class="keywordflow">else</span>
+<a name="l00292"></a>00292         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPROdd4);
+<a name="l00293"></a>00293     } <span class="keywordflow">else</span> <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ab8c4c7fe0d09a9081ea3ac4d7bf002ed" title="FramePtr - ARM physical register used as frame ptr.">FramePtr</a> == ARM::R7) {
+<a name="l00294"></a>00294       <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#aab369e8798809ed1714f2d18d7d9dc07">isR9Reserved</a>())
+<a name="l00295"></a>00295         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPROdd2);
+<a name="l00296"></a>00296       <span class="keywordflow">else</span>
+<a name="l00297"></a>00297         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPROdd5);
+<a name="l00298"></a>00298     } <span class="keywordflow">else</span> { <span class="comment">// FramePtr == ARM::R11</span>
+<a name="l00299"></a>00299       <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#aab369e8798809ed1714f2d18d7d9dc07">isR9Reserved</a>())
+<a name="l00300"></a>00300         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPROdd3);
+<a name="l00301"></a>00301       <span class="keywordflow">else</span>
+<a name="l00302"></a>00302         <span class="keywordflow">return</span> <a class="code" href="namespacellvm.html#a0448108c43f3a226744d0a4c28c989f7" title="Construct an ArrayRef from a single element.">makeArrayRef</a>(GPROdd6);
+<a name="l00303"></a>00303     }
+<a name="l00304"></a>00304   }
+<a name="l00305"></a>00305   <span class="keywordflow">return</span> RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a07f8d61b3e1ada33cf4857c5dc3baa31">getRawAllocationOrder</a>(MF);
+<a name="l00306"></a>00306 }
+<a name="l00307"></a>00307 <span class="comment"></span>
+<a name="l00308"></a>00308 <span class="comment">/// ResolveRegAllocHint - Resolves the specified register allocation hint</span>
+<a name="l00309"></a>00309 <span class="comment">/// to a physical register. Returns the physical register if it is successful.</span>
+<a name="l00310"></a>00310 <span class="comment"></span><span class="keywordtype">unsigned</span>
+<a name="l00311"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0768d18f76e3407db5a433afe40de128">00311</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0768d18f76e3407db5a433afe40de128">ARMBaseRegisterInfo::ResolveRegAllocHint</a>(<span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1Type.html">Type</a>, <span class="keywordtype">unsigned</span> <a class="code" href="X86DisassemblerDecoder_8h.html#a546839a5c4bcf9f9450967155f48de41">Reg</a>,
+<a name="l00312"></a>00312                                          <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00313"></a>00313   <span class="keywordflow">if</span> (Reg == 0 || !isPhysicalRegister(Reg))
+<a name="l00314"></a>00314     <span class="keywordflow">return</span> 0;
+<a name="l00315"></a>00315   <span class="keywordflow">if</span> (Type == 0)
+<a name="l00316"></a>00316     <span class="keywordflow">return</span> <a class="code" href="X86DisassemblerDecoder_8h.html#a546839a5c4bcf9f9450967155f48de41">Reg</a>;
+<a name="l00317"></a>00317   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Type == (<span class="keywordtype">unsigned</span>)<a class="code" href="namespacellvm_1_1ARMRI.html#ae53e898c48172c2b8b9db453409c0fd9af83bd18d3419478667dd162f113dabb5">ARMRI::RegPairOdd</a>)
+<a name="l00318"></a>00318     <span class="comment">// Odd register.</span>
+<a name="l00319"></a>00319     <span class="keywordflow">return</span> getRegisterPairOdd(Reg, MF);
+<a name="l00320"></a>00320   <span class="keywordflow">else</span> <span class="keywordflow">if</span> (Type == (<span class="keywordtype">unsigned</span>)<a class="code" href="namespacellvm_1_1ARMRI.html#ae53e898c48172c2b8b9db453409c0fd9a2ae32bcb4cedddc631c44e40903546ec">ARMRI::RegPairEven</a>)
+<a name="l00321"></a>00321     <span class="comment">// Even register.</span>
+<a name="l00322"></a>00322     <span class="keywordflow">return</span> getRegisterPairEven(Reg, MF);
+<a name="l00323"></a>00323   <span class="keywordflow">return</span> 0;
+<a name="l00324"></a>00324 }
+<a name="l00325"></a>00325 
+<a name="l00326"></a>00326 <span class="keywordtype">void</span>
+<a name="l00327"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a686f51601728b515077fe01bf6368648">00327</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a686f51601728b515077fe01bf6368648">ARMBaseRegisterInfo::UpdateRegAllocHint</a>(<span class="keywordtype">unsigned</span> <a class="code" href="X86DisassemblerDecoder_8h.html#a546839a5c4bcf9f9450967155f48de41">Reg</a>, <span class="keywordtype">unsigned</span> NewReg,
+<a name="l00328"></a>00328                                         <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00329"></a>00329   <a class="code" href="classllvm_1_1MachineRegisterInfo.html">MachineRegisterInfo</a> *MRI = &MF.<a class="code" href="classllvm_1_1MachineFunction.html#ab4a6ca428289b667dd691a00e9f7e334">getRegInfo</a>();
+<a name="l00330"></a>00330   std::pair<unsigned, unsigned> Hint = MRI-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#aacf576836c018b7d4a484110a1920815">getRegAllocationHint</a>(Reg);
+<a name="l00331"></a>00331   <span class="keywordflow">if</span> ((Hint.first == (<span class="keywordtype">unsigned</span>)<a class="code" href="namespacellvm_1_1ARMRI.html#ae53e898c48172c2b8b9db453409c0fd9af83bd18d3419478667dd162f113dabb5">ARMRI::RegPairOdd</a> ||
+<a name="l00332"></a>00332        Hint.first == (<span class="keywordtype">unsigned</span>)<a class="code" href="namespacellvm_1_1ARMRI.html#ae53e898c48172c2b8b9db453409c0fd9a2ae32bcb4cedddc631c44e40903546ec">ARMRI::RegPairEven</a>) &&
+<a name="l00333"></a>00333       <a class="code" href="classllvm_1_1TargetRegisterInfo.html#ae62c5ea35b71f9020caa94340bc78f37">TargetRegisterInfo::isVirtualRegister</a>(Hint.second)) {
+<a name="l00334"></a>00334     <span class="comment">// If 'Reg' is one of the even / odd register pair and it's now changed</span>
+<a name="l00335"></a>00335     <span class="comment">// (e.g. coalesced) into a different register. The other register of the</span>
+<a name="l00336"></a>00336     <span class="comment">// pair allocation hint must be updated to reflect the relationship</span>
+<a name="l00337"></a>00337     <span class="comment">// change.</span>
+<a name="l00338"></a>00338     <span class="keywordtype">unsigned</span> OtherReg = Hint.second;
+<a name="l00339"></a>00339     Hint = MRI-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#aacf576836c018b7d4a484110a1920815">getRegAllocationHint</a>(OtherReg);
+<a name="l00340"></a>00340     <span class="keywordflow">if</span> (Hint.second == Reg)
+<a name="l00341"></a>00341       <span class="comment">// Make sure the pair has not already divorced.</span>
+<a name="l00342"></a>00342       MRI-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#a84e2447414c8ad02b53135e85b26ebac">setRegAllocationHint</a>(OtherReg, Hint.first, NewReg);
+<a name="l00343"></a>00343   }
+<a name="l00344"></a>00344 }
+<a name="l00345"></a>00345 
+<a name="l00346"></a>00346 <span class="keywordtype">bool</span>
+<a name="l00347"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ae3b5198c1e7b704aadba3bd47500cd6e">00347</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ae3b5198c1e7b704aadba3bd47500cd6e">ARMBaseRegisterInfo::avoidWriteAfterWrite</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetRegisterClass.html">TargetRegisterClass</a> *RC)<span class="keyword"> const </span>{
+<a name="l00348"></a>00348   <span class="comment">// CortexA9 has a Write-after-write hazard for NEON registers.</span>
+<a name="l00349"></a>00349   <span class="keywordflow">if</span> (!<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa13253eb88eabd00a29cf28b7d19cb62">STI</a>.<a class="code" href="classllvm_1_1ARMSubtarget.html#ab2510f9dc252cd95daa6ca819e23167e">isLikeA9</a>())
+<a name="l00350"></a>00350     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00351"></a>00351 
+<a name="l00352"></a>00352   <span class="keywordflow">switch</span> (RC-><a class="code" href="classllvm_1_1TargetRegisterClass.html#a25f9ba8e78af92ca34f9c1bba7881601">getID</a>()) {
+<a name="l00353"></a>00353   <span class="keywordflow">case</span> ARM::DPRRegClassID:
+<a name="l00354"></a>00354   <span class="keywordflow">case</span> ARM::DPR_8RegClassID:
+<a name="l00355"></a>00355   <span class="keywordflow">case</span> ARM::DPR_VFP2RegClassID:
+<a name="l00356"></a>00356   <span class="keywordflow">case</span> ARM::QPRRegClassID:
+<a name="l00357"></a>00357   <span class="keywordflow">case</span> ARM::QPR_8RegClassID:
+<a name="l00358"></a>00358   <span class="keywordflow">case</span> ARM::QPR_VFP2RegClassID:
+<a name="l00359"></a>00359   <span class="keywordflow">case</span> ARM::SPRRegClassID:
+<a name="l00360"></a>00360   <span class="keywordflow">case</span> ARM::SPR_8RegClassID:
+<a name="l00361"></a>00361     <span class="comment">// Avoid reusing S, D, and Q registers.</span>
+<a name="l00362"></a>00362     <span class="comment">// Don't increase register pressure for QQ and QQQQ.</span>
+<a name="l00363"></a>00363     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00364"></a>00364   <span class="keywordflow">default</span>:
+<a name="l00365"></a>00365     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00366"></a>00366   }
+<a name="l00367"></a>00367 }
+<a name="l00368"></a>00368 
+<a name="l00369"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0e3e26dbde5eb40a63a5ed4220cf6211">00369</a> <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0e3e26dbde5eb40a63a5ed4220cf6211">ARMBaseRegisterInfo::hasBasePointer</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00370"></a>00370   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFrameInfo.html" title="Abstract Stack Frame Information.">MachineFrameInfo</a> *MFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a4ad4295a88187ea1ae12ecfcfa18a70f">getFrameInfo</a>();
+<a name="l00371"></a>00371   <span class="keyword">const</span> <a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a> *AFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ac2dc0fa143c9f2127f0501734577a0a0">getInfo</a><<a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a>>();
+<a name="l00372"></a>00372   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a> *TFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>();
+<a name="l00373"></a>00373 
+<a name="l00374"></a>00374   <span class="keywordflow">if</span> (!<a class="code" href="ARMBaseRegisterInfo_8cpp.html#ad9ce2cf1d25a482b75a8bb6c6bd56d57">EnableBasePointer</a>)
+<a name="l00375"></a>00375     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00376"></a>00376 
+<a name="l00377"></a>00377   <span class="comment">// When outgoing call frames are so large that we adjust the stack pointer</span>
+<a name="l00378"></a>00378   <span class="comment">// around the call, we can no longer use the stack pointer to reach the</span>
+<a name="l00379"></a>00379   <span class="comment">// emergency spill slot.</span>
+<a name="l00380"></a>00380   <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a01ecb9dfd78defd2dee58c89c443463a">needsStackRealignment</a>(MF) && !TFI->hasReservedCallFrame(MF))
+<a name="l00381"></a>00381     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00382"></a>00382 
+<a name="l00383"></a>00383   <span class="comment">// Thumb has trouble with negative offsets from the FP. Thumb2 has a limited</span>
+<a name="l00384"></a>00384   <span class="comment">// negative range for ldr/str (255), and thumb1 is positive offsets only.</span>
+<a name="l00385"></a>00385   <span class="comment">// It's going to be better to use the SP or Base Pointer instead. When there</span>
+<a name="l00386"></a>00386   <span class="comment">// are variable sized objects, we can't reference off of the SP, so we</span>
+<a name="l00387"></a>00387   <span class="comment">// reserve a Base Pointer.</span>
+<a name="l00388"></a>00388   <span class="keywordflow">if</span> (AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#ae898a405bf69c3021cd998257390494e">isThumbFunction</a>() && MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a5cd76eb2aeed3ae46da1bb1b132f1831">hasVarSizedObjects</a>()) {
+<a name="l00389"></a>00389     <span class="comment">// Conservatively estimate whether the negative offset from the frame</span>
+<a name="l00390"></a>00390     <span class="comment">// pointer will be sufficient to reach. If a function has a smallish</span>
+<a name="l00391"></a>00391     <span class="comment">// frame, it's less likely to have lots of spills and callee saved</span>
+<a name="l00392"></a>00392     <span class="comment">// space, so it's all more likely to be within range of the frame pointer.</span>
+<a name="l00393"></a>00393     <span class="comment">// If it's wrong, the scavenger will still enable access to work, it just</span>
+<a name="l00394"></a>00394     <span class="comment">// won't be optimal.</span>
+<a name="l00395"></a>00395     <span class="keywordflow">if</span> (AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a07c23410c7430f86085eadea31db3ee2">isThumb2Function</a>() && MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a10e9ecc89983e197d0a06a473fd8831c" title="getLocalFrameSize - Get the size of the local object blob.">getLocalFrameSize</a>() < 128)
+<a name="l00396"></a>00396       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00397"></a>00397     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00398"></a>00398   }
+<a name="l00399"></a>00399 
+<a name="l00400"></a>00400   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00401"></a>00401 }
+<a name="l00402"></a>00402 
+<a name="l00403"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#acb882a567e74f592cbac2ca930b7bf73">00403</a> <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#acb882a567e74f592cbac2ca930b7bf73">ARMBaseRegisterInfo::canRealignStack</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00404"></a>00404   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineRegisterInfo.html">MachineRegisterInfo</a> *MRI = &MF.<a class="code" href="classllvm_1_1MachineFunction.html#ab4a6ca428289b667dd691a00e9f7e334">getRegInfo</a>();
+<a name="l00405"></a>00405   <span class="keyword">const</span> <a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a> *AFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ac2dc0fa143c9f2127f0501734577a0a0">getInfo</a><<a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a>>();
+<a name="l00406"></a>00406   <span class="comment">// We can't realign the stack if:</span>
+<a name="l00407"></a>00407   <span class="comment">// 1. Dynamic stack realignment is explicitly disabled,</span>
+<a name="l00408"></a>00408   <span class="comment">// 2. This is a Thumb1 function (it's not useful, so we don't bother), or</span>
+<a name="l00409"></a>00409   <span class="comment">// 3. There are VLAs in the function and the base pointer is disabled.</span>
+<a name="l00410"></a>00410   <span class="keywordflow">if</span> (!MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#ab1fb67187fc37e569cc5171cbebba873">Options</a>.<a class="code" href="classllvm_1_1TargetOptions.html#ab9186e536951153960c0693518e5023c">RealignStack</a>)
+<a name="l00411"></a>00411     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00412"></a>00412   <span class="keywordflow">if</span> (AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a9fc3ff683e379f509b4d04ae1d5ace8a">isThumb1OnlyFunction</a>())
+<a name="l00413"></a>00413     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00414"></a>00414   <span class="comment">// Stack realignment requires a frame pointer.  If we already started</span>
+<a name="l00415"></a>00415   <span class="comment">// register allocation with frame pointer elimination, it is too late now.</span>
+<a name="l00416"></a>00416   <span class="keywordflow">if</span> (!MRI-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#a83ac2b4f9a72254806bbb4b9958ddb43">canReserveReg</a>(<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ab8c4c7fe0d09a9081ea3ac4d7bf002ed" title="FramePtr - ARM physical register used as frame ptr.">FramePtr</a>))
+<a name="l00417"></a>00417     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00418"></a>00418   <span class="comment">// We may also need a base pointer if there are dynamic allocas or stack</span>
+<a name="l00419"></a>00419   <span class="comment">// pointer adjustments around calls.</span>
+<a name="l00420"></a>00420   <span class="keywordflow">if</span> (MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>()-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a8404705eb7a27e437ac51ca3730bfd7c">hasReservedCallFrame</a>(MF))
+<a name="l00421"></a>00421     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00422"></a>00422   <span class="keywordflow">if</span> (!<a class="code" href="ARMBaseRegisterInfo_8cpp.html#ad9ce2cf1d25a482b75a8bb6c6bd56d57">EnableBasePointer</a>)
+<a name="l00423"></a>00423     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00424"></a>00424   <span class="comment">// A base pointer is required and allowed.  Check that it isn't too late to</span>
+<a name="l00425"></a>00425   <span class="comment">// reserve it.</span>
+<a name="l00426"></a>00426   <span class="keywordflow">return</span> MRI-><a class="code" href="classllvm_1_1MachineRegisterInfo.html#a83ac2b4f9a72254806bbb4b9958ddb43">canReserveReg</a>(<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ad7d3d20d0e64bd376f5dd31b1ffc716f">BasePtr</a>);
+<a name="l00427"></a>00427 }
+<a name="l00428"></a>00428 
+<a name="l00429"></a>00429 <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a01ecb9dfd78defd2dee58c89c443463a">ARMBaseRegisterInfo::</a>
+<a name="l00430"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a01ecb9dfd78defd2dee58c89c443463a">00430</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a01ecb9dfd78defd2dee58c89c443463a">needsStackRealignment</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00431"></a>00431   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFrameInfo.html" title="Abstract Stack Frame Information.">MachineFrameInfo</a> *MFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a4ad4295a88187ea1ae12ecfcfa18a70f">getFrameInfo</a>();
+<a name="l00432"></a>00432   <span class="keyword">const</span> <a class="code" href="classllvm_1_1Function.html">Function</a> *<a class="code" href="LLParser_8cpp.html#a33ece1ef8074506a15d7f86eb76dbae6">F</a> = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ad784a6594990530bffb2018aeeed56f3">getFunction</a>();
+<a name="l00433"></a>00433   <span class="keywordtype">unsigned</span> StackAlign = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>()-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a360555ed6db3b28a33fa5449a0335f19">getStackAlignment</a>();
+<a name="l00434"></a>00434   <span class="keywordtype">bool</span> requiresRealignment =
+<a name="l00435"></a>00435     ((MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a0af0a11b8eda54e79422c199cb687f5c">getMaxAlignment</a>() > StackAlign) ||
+<a name="l00436"></a>00436      F-><a class="code" href="classllvm_1_1Function.html#aceca681da32da537bfd9f00dcf371278">getFnAttributes</a>().<a class="code" href="classllvm_1_1Attributes.html#ad68a7be4af7d92f3df681e13acbacc13" title="Return true if the attribute is present.">hasAttribute</a>(<a class="code" href="classllvm_1_1Attributes.html#a92f64dbb86772103c557c491dc1ebbe9acbd4d05922fa75902fc40d2ede5553c0">Attributes::StackAlignment</a>));
+<a name="l00437"></a>00437 
+<a name="l00438"></a>00438   <span class="keywordflow">return</span> requiresRealignment && <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#acb882a567e74f592cbac2ca930b7bf73">canRealignStack</a>(MF);
+<a name="l00439"></a>00439 }
+<a name="l00440"></a>00440 
+<a name="l00441"></a>00441 <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a77cbba4423b35e9f705d45d70085cec2">ARMBaseRegisterInfo::</a>
+<a name="l00442"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a77cbba4423b35e9f705d45d70085cec2">00442</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a77cbba4423b35e9f705d45d70085cec2">cannotEliminateFrame</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00443"></a>00443   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFrameInfo.html" title="Abstract Stack Frame Information.">MachineFrameInfo</a> *MFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a4ad4295a88187ea1ae12ecfcfa18a70f">getFrameInfo</a>();
+<a name="l00444"></a>00444   <span class="keywordflow">if</span> (MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#ab1fb67187fc37e569cc5171cbebba873">Options</a>.<a class="code" href="classllvm_1_1TargetOptions.html#a55b913089f1134db4cc1ea6e677c62bd">DisableFramePointerElim</a>(MF) && MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a54aab1c41d2657472b4ea7c9935570c7">adjustsStack</a>())
+<a name="l00445"></a>00445     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00446"></a>00446   <span class="keywordflow">return</span> MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a5cd76eb2aeed3ae46da1bb1b132f1831">hasVarSizedObjects</a>() || MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a48b4b361d757d1ab48f783b8875712c1">isFrameAddressTaken</a>()
+<a name="l00447"></a>00447     || <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a01ecb9dfd78defd2dee58c89c443463a">needsStackRealignment</a>(MF);
+<a name="l00448"></a>00448 }
+<a name="l00449"></a>00449 
+<a name="l00450"></a>00450 <span class="keywordtype">unsigned</span>
+<a name="l00451"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a47e108ecd9a21cb626ea629490f45e25">00451</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a47e108ecd9a21cb626ea629490f45e25">ARMBaseRegisterInfo::getFrameRegister</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00452"></a>00452   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a> *TFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>();
+<a name="l00453"></a>00453 
+<a name="l00454"></a>00454   <span class="keywordflow">if</span> (TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a59182730437bdb0a45a274261a7ea84b">hasFP</a>(MF))
+<a name="l00455"></a>00455     <span class="keywordflow">return</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ab8c4c7fe0d09a9081ea3ac4d7bf002ed" title="FramePtr - ARM physical register used as frame ptr.">FramePtr</a>;
+<a name="l00456"></a>00456   <span class="keywordflow">return</span> ARM::SP;
+<a name="l00457"></a>00457 }
+<a name="l00458"></a>00458 
+<a name="l00459"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ac0c9523609810774523f15fc449be16a">00459</a> <span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ac0c9523609810774523f15fc449be16a">ARMBaseRegisterInfo::getEHExceptionRegister</a>()<span class="keyword"> const </span>{
+<a name="l00460"></a>00460   <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"What is the exception register"</span>);
+<a name="l00461"></a>00461 }
+<a name="l00462"></a>00462 
+<a name="l00463"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a6d2e3a3fb320fe1bc2a80761960ba0bf">00463</a> <span class="keywordtype">unsigned</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a6d2e3a3fb320fe1bc2a80761960ba0bf">ARMBaseRegisterInfo::getEHHandlerRegister</a>()<span class="keyword"> const </span>{
+<a name="l00464"></a>00464   <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"What is the exception handler register"</span>);
+<a name="l00465"></a>00465 }
+<a name="l00466"></a>00466 
+<a name="l00467"></a>00467 <span class="keywordtype">unsigned</span> ARMBaseRegisterInfo::getRegisterPairEven(<span class="keywordtype">unsigned</span> <a class="code" href="X86DisassemblerDecoder_8h.html#a546839a5c4bcf9f9450967155f48de41">Reg</a>,
+<a name="l00468"></a>00468                                               <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00469"></a>00469   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineRegisterInfo.html">MachineRegisterInfo</a> &MRI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ab4a6ca428289b667dd691a00e9f7e334">getRegInfo</a>();
+<a name="l00470"></a>00470   <span class="keywordflow">switch</span> (Reg) {
+<a name="l00471"></a>00471   <span class="keywordflow">default</span>: <span class="keywordflow">break</span>;
+<a name="l00472"></a>00472   <span class="comment">// Return 0 if either register of the pair is a special register.</span>
+<a name="l00473"></a>00473   <span class="comment">// So no R12, etc.</span>
+<a name="l00474"></a>00474   <span class="keywordflow">case</span> ARM::R1: <span class="keywordflow">return</span> ARM::R0;
+<a name="l00475"></a>00475   <span class="keywordflow">case</span> ARM::R3: <span class="keywordflow">return</span> ARM::R2;
+<a name="l00476"></a>00476   <span class="keywordflow">case</span> ARM::R5: <span class="keywordflow">return</span> ARM::R4;
+<a name="l00477"></a>00477   <span class="keywordflow">case</span> ARM::R7:
+<a name="l00478"></a>00478     <span class="keywordflow">return</span> (MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a008f499ae277e4936b5b897ddb4bcb7e">isReserved</a>(ARM::R7) || MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a008f499ae277e4936b5b897ddb4bcb7e">isReserved</a>(ARM::R6))
+<a name="l00479"></a>00479       ? 0 : ARM::R6;
+<a name="l00480"></a>00480   <span class="keywordflow">case</span> ARM::R9: <span class="keywordflow">return</span> MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a008f499ae277e4936b5b897ddb4bcb7e">isReserved</a>(ARM::R9)  ? 0 :ARM::R8;
+<a name="l00481"></a>00481   <span class="keywordflow">case</span> ARM::R11: <span class="keywordflow">return</span> MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a008f499ae277e4936b5b897ddb4bcb7e">isReserved</a>(ARM::R11) ? 0 : ARM::R10;
+<a name="l00482"></a>00482 
+<a name="l00483"></a>00483   <span class="keywordflow">case</span> ARM::S1: <span class="keywordflow">return</span> ARM::S0;
+<a name="l00484"></a>00484   <span class="keywordflow">case</span> ARM::S3: <span class="keywordflow">return</span> ARM::S2;
+<a name="l00485"></a>00485   <span class="keywordflow">case</span> ARM::S5: <span class="keywordflow">return</span> ARM::S4;
+<a name="l00486"></a>00486   <span class="keywordflow">case</span> ARM::S7: <span class="keywordflow">return</span> ARM::S6;
+<a name="l00487"></a>00487   <span class="keywordflow">case</span> ARM::S9: <span class="keywordflow">return</span> ARM::S8;
+<a name="l00488"></a>00488   <span class="keywordflow">case</span> ARM::S11: <span class="keywordflow">return</span> ARM::S10;
+<a name="l00489"></a>00489   <span class="keywordflow">case</span> ARM::S13: <span class="keywordflow">return</span> ARM::S12;
+<a name="l00490"></a>00490   <span class="keywordflow">case</span> ARM::S15: <span class="keywordflow">return</span> ARM::S14;
+<a name="l00491"></a>00491   <span class="keywordflow">case</span> ARM::S17: <span class="keywordflow">return</span> ARM::S16;
+<a name="l00492"></a>00492   <span class="keywordflow">case</span> ARM::S19: <span class="keywordflow">return</span> ARM::S18;
+<a name="l00493"></a>00493   <span class="keywordflow">case</span> ARM::S21: <span class="keywordflow">return</span> ARM::S20;
+<a name="l00494"></a>00494   <span class="keywordflow">case</span> ARM::S23: <span class="keywordflow">return</span> ARM::S22;
+<a name="l00495"></a>00495   <span class="keywordflow">case</span> ARM::S25: <span class="keywordflow">return</span> ARM::S24;
+<a name="l00496"></a>00496   <span class="keywordflow">case</span> ARM::S27: <span class="keywordflow">return</span> ARM::S26;
+<a name="l00497"></a>00497   <span class="keywordflow">case</span> ARM::S29: <span class="keywordflow">return</span> ARM::S28;
+<a name="l00498"></a>00498   <span class="keywordflow">case</span> ARM::S31: <span class="keywordflow">return</span> ARM::S30;
+<a name="l00499"></a>00499 
+<a name="l00500"></a>00500   <span class="keywordflow">case</span> ARM::D1: <span class="keywordflow">return</span> ARM::D0;
+<a name="l00501"></a>00501   <span class="keywordflow">case</span> ARM::D3: <span class="keywordflow">return</span> ARM::D2;
+<a name="l00502"></a>00502   <span class="keywordflow">case</span> ARM::D5: <span class="keywordflow">return</span> ARM::D4;
+<a name="l00503"></a>00503   <span class="keywordflow">case</span> ARM::D7: <span class="keywordflow">return</span> ARM::D6;
+<a name="l00504"></a>00504   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933afbf60a40601aeb457d0483d330ac35ec">ARM::D9</a>: <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933a07946dc85f27c45b26fd857ce791f74a">ARM::D8</a>;
+<a name="l00505"></a>00505   <span class="keywordflow">case</span> ARM::D11: <span class="keywordflow">return</span> ARM::D10;
+<a name="l00506"></a>00506   <span class="keywordflow">case</span> ARM::D13: <span class="keywordflow">return</span> ARM::D12;
+<a name="l00507"></a>00507   <span class="keywordflow">case</span> ARM::D15: <span class="keywordflow">return</span> ARM::D14;
+<a name="l00508"></a>00508   <span class="keywordflow">case</span> ARM::D17: <span class="keywordflow">return</span> ARM::D16;
+<a name="l00509"></a>00509   <span class="keywordflow">case</span> ARM::D19: <span class="keywordflow">return</span> ARM::D18;
+<a name="l00510"></a>00510   <span class="keywordflow">case</span> ARM::D21: <span class="keywordflow">return</span> ARM::D20;
+<a name="l00511"></a>00511   <span class="keywordflow">case</span> ARM::D23: <span class="keywordflow">return</span> ARM::D22;
+<a name="l00512"></a>00512   <span class="keywordflow">case</span> ARM::D25: <span class="keywordflow">return</span> ARM::D24;
+<a name="l00513"></a>00513   <span class="keywordflow">case</span> ARM::D27: <span class="keywordflow">return</span> ARM::D26;
+<a name="l00514"></a>00514   <span class="keywordflow">case</span> ARM::D29: <span class="keywordflow">return</span> ARM::D28;
+<a name="l00515"></a>00515   <span class="keywordflow">case</span> ARM::D31: <span class="keywordflow">return</span> ARM::D30;
+<a name="l00516"></a>00516   }
+<a name="l00517"></a>00517 
+<a name="l00518"></a>00518   <span class="keywordflow">return</span> 0;
+<a name="l00519"></a>00519 }
+<a name="l00520"></a>00520 
+<a name="l00521"></a>00521 <span class="keywordtype">unsigned</span> ARMBaseRegisterInfo::getRegisterPairOdd(<span class="keywordtype">unsigned</span> Reg,
+<a name="l00522"></a>00522                                              <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00523"></a>00523   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineRegisterInfo.html">MachineRegisterInfo</a> &MRI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ab4a6ca428289b667dd691a00e9f7e334">getRegInfo</a>();
+<a name="l00524"></a>00524   <span class="keywordflow">switch</span> (Reg) {
+<a name="l00525"></a>00525   <span class="keywordflow">default</span>: <span class="keywordflow">break</span>;
+<a name="l00526"></a>00526   <span class="comment">// Return 0 if either register of the pair is a special register.</span>
+<a name="l00527"></a>00527   <span class="comment">// So no R12, etc.</span>
+<a name="l00528"></a>00528   <span class="keywordflow">case</span> ARM::R0: <span class="keywordflow">return</span> ARM::R1;
+<a name="l00529"></a>00529   <span class="keywordflow">case</span> ARM::R2: <span class="keywordflow">return</span> ARM::R3;
+<a name="l00530"></a>00530   <span class="keywordflow">case</span> ARM::R4: <span class="keywordflow">return</span> ARM::R5;
+<a name="l00531"></a>00531   <span class="keywordflow">case</span> ARM::R6:
+<a name="l00532"></a>00532     <span class="keywordflow">return</span> (MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a008f499ae277e4936b5b897ddb4bcb7e">isReserved</a>(ARM::R7) || MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a008f499ae277e4936b5b897ddb4bcb7e">isReserved</a>(ARM::R6))
+<a name="l00533"></a>00533       ? 0 : ARM::R7;
+<a name="l00534"></a>00534   <span class="keywordflow">case</span> ARM::R8: <span class="keywordflow">return</span> MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a008f499ae277e4936b5b897ddb4bcb7e">isReserved</a>(ARM::R9)  ? 0 :ARM::R9;
+<a name="l00535"></a>00535   <span class="keywordflow">case</span> ARM::R10: <span class="keywordflow">return</span> MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a008f499ae277e4936b5b897ddb4bcb7e">isReserved</a>(ARM::R11) ? 0 : ARM::R11;
+<a name="l00536"></a>00536 
+<a name="l00537"></a>00537   <span class="keywordflow">case</span> ARM::S0: <span class="keywordflow">return</span> ARM::S1;
+<a name="l00538"></a>00538   <span class="keywordflow">case</span> ARM::S2: <span class="keywordflow">return</span> ARM::S3;
+<a name="l00539"></a>00539   <span class="keywordflow">case</span> ARM::S4: <span class="keywordflow">return</span> ARM::S5;
+<a name="l00540"></a>00540   <span class="keywordflow">case</span> ARM::S6: <span class="keywordflow">return</span> ARM::S7;
+<a name="l00541"></a>00541   <span class="keywordflow">case</span> ARM::S8: <span class="keywordflow">return</span> ARM::S9;
+<a name="l00542"></a>00542   <span class="keywordflow">case</span> ARM::S10: <span class="keywordflow">return</span> ARM::S11;
+<a name="l00543"></a>00543   <span class="keywordflow">case</span> ARM::S12: <span class="keywordflow">return</span> ARM::S13;
+<a name="l00544"></a>00544   <span class="keywordflow">case</span> ARM::S14: <span class="keywordflow">return</span> ARM::S15;
+<a name="l00545"></a>00545   <span class="keywordflow">case</span> ARM::S16: <span class="keywordflow">return</span> ARM::S17;
+<a name="l00546"></a>00546   <span class="keywordflow">case</span> ARM::S18: <span class="keywordflow">return</span> ARM::S19;
+<a name="l00547"></a>00547   <span class="keywordflow">case</span> ARM::S20: <span class="keywordflow">return</span> ARM::S21;
+<a name="l00548"></a>00548   <span class="keywordflow">case</span> ARM::S22: <span class="keywordflow">return</span> ARM::S23;
+<a name="l00549"></a>00549   <span class="keywordflow">case</span> ARM::S24: <span class="keywordflow">return</span> ARM::S25;
+<a name="l00550"></a>00550   <span class="keywordflow">case</span> ARM::S26: <span class="keywordflow">return</span> ARM::S27;
+<a name="l00551"></a>00551   <span class="keywordflow">case</span> ARM::S28: <span class="keywordflow">return</span> ARM::S29;
+<a name="l00552"></a>00552   <span class="keywordflow">case</span> ARM::S30: <span class="keywordflow">return</span> ARM::S31;
+<a name="l00553"></a>00553 
+<a name="l00554"></a>00554   <span class="keywordflow">case</span> ARM::D0: <span class="keywordflow">return</span> ARM::D1;
+<a name="l00555"></a>00555   <span class="keywordflow">case</span> ARM::D2: <span class="keywordflow">return</span> ARM::D3;
+<a name="l00556"></a>00556   <span class="keywordflow">case</span> ARM::D4: <span class="keywordflow">return</span> ARM::D5;
+<a name="l00557"></a>00557   <span class="keywordflow">case</span> ARM::D6: <span class="keywordflow">return</span> ARM::D7;
+<a name="l00558"></a>00558   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933a07946dc85f27c45b26fd857ce791f74a">ARM::D8</a>: <span class="keywordflow">return</span> <a class="code" href="namespacellvm_1_1X86II.html#acd283bc8136a594505ec483f4a1cc933afbf60a40601aeb457d0483d330ac35ec">ARM::D9</a>;
+<a name="l00559"></a>00559   <span class="keywordflow">case</span> ARM::D10: <span class="keywordflow">return</span> ARM::D11;
+<a name="l00560"></a>00560   <span class="keywordflow">case</span> ARM::D12: <span class="keywordflow">return</span> ARM::D13;
+<a name="l00561"></a>00561   <span class="keywordflow">case</span> ARM::D14: <span class="keywordflow">return</span> ARM::D15;
+<a name="l00562"></a>00562   <span class="keywordflow">case</span> ARM::D16: <span class="keywordflow">return</span> ARM::D17;
+<a name="l00563"></a>00563   <span class="keywordflow">case</span> ARM::D18: <span class="keywordflow">return</span> ARM::D19;
+<a name="l00564"></a>00564   <span class="keywordflow">case</span> ARM::D20: <span class="keywordflow">return</span> ARM::D21;
+<a name="l00565"></a>00565   <span class="keywordflow">case</span> ARM::D22: <span class="keywordflow">return</span> ARM::D23;
+<a name="l00566"></a>00566   <span class="keywordflow">case</span> ARM::D24: <span class="keywordflow">return</span> ARM::D25;
+<a name="l00567"></a>00567   <span class="keywordflow">case</span> ARM::D26: <span class="keywordflow">return</span> ARM::D27;
+<a name="l00568"></a>00568   <span class="keywordflow">case</span> ARM::D28: <span class="keywordflow">return</span> ARM::D29;
+<a name="l00569"></a>00569   <span class="keywordflow">case</span> ARM::D30: <span class="keywordflow">return</span> ARM::D31;
+<a name="l00570"></a>00570   }
+<a name="l00571"></a>00571 
+<a name="l00572"></a>00572   <span class="keywordflow">return</span> 0;
+<a name="l00573"></a>00573 }
+<a name="l00574"></a>00574 <span class="comment"></span>
+<a name="l00575"></a>00575 <span class="comment">/// emitLoadConstPool - Emits a load from constpool to materialize the</span>
+<a name="l00576"></a>00576 <span class="comment">/// specified immediate.</span>
+<a name="l00577"></a>00577 <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a96ba52e8248f7605731d5cc348e05070">ARMBaseRegisterInfo::</a>
+<a name="l00578"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a96ba52e8248f7605731d5cc348e05070">00578</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a96ba52e8248f7605731d5cc348e05070">emitLoadConstPool</a>(<a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> &MBB,
+<a name="l00579"></a>00579                   <a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> &MBBI,
+<a name="l00580"></a>00580                   <a class="code" href="classllvm_1_1DebugLoc.html">DebugLoc</a> dl,
+<a name="l00581"></a>00581                   <span class="keywordtype">unsigned</span> DestReg, <span class="keywordtype">unsigned</span> SubIdx, <span class="keywordtype">int</span> Val,
+<a name="l00582"></a>00582                   <a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6">ARMCC::CondCodes</a> Pred,
+<a name="l00583"></a>00583                   <span class="keywordtype">unsigned</span> PredReg, <span class="keywordtype">unsigned</span> MIFlags)<span class="keyword"> const </span>{
+<a name="l00584"></a>00584   <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF = *MBB.<a class="code" href="classllvm_1_1MachineBasicBlock.html#af2e482ff2a9253ec6bc2285491496bd6">getParent</a>();
+<a name="l00585"></a>00585   <a class="code" href="classllvm_1_1MachineConstantPool.html" title="The machine constant pool.">MachineConstantPool</a> *<a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110aa8cad208c3cb96b33b5d8544590325b1">ConstantPool</a> = MF.<a class="code" href="classllvm_1_1MachineFunction.html#aa460158a4019a4043faf6ea76344cbd5">getConstantPool</a>();
+<a name="l00586"></a>00586   <span class="keyword">const</span> <a class="code" href="classllvm_1_1Constant.html" title="LLVM Constant Representation.">Constant</a> *<a class="code" href="namespacellvm_1_1CallingConv.html#a4f861731fc6dbfdccc05af5968d98974afd841a49aec1539bc88abc8ff9e170fb">C</a> =
+<a name="l00587"></a>00587         <a class="code" href="classllvm_1_1ConstantInt.html#a9105541412dab869e18b3cceebfff07d">ConstantInt::get</a>(<a class="code" href="classllvm_1_1Type.html#a30dd396c5b40cd86c1591872e574ccdf">Type::getInt32Ty</a>(MF.<a class="code" href="classllvm_1_1MachineFunction.html#ad784a6594990530bffb2018aeeed56f3">getFunction</a>()-><a class="code" href="classllvm_1_1Function.html#a2da53ac53516a3f16191f4c8a8eaa3e5">getContext</a>()), Val);
+<a name="l00588"></a>00588   <span class="keywordtype">unsigned</span> Idx = ConstantPool-><a class="code" href="classllvm_1_1MachineConstantPool.html#ad9e4b5817af07b8be3f3ccf9d08df771">getConstantPoolIndex</a>(C, 4);
+<a name="l00589"></a>00589 
+<a name="l00590"></a>00590   <a class="code" href="namespacellvm.html#a980570dc1410d4ef53806f82028ca381">BuildMI</a>(MBB, MBBI, dl, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>.get(ARM::LDRcp))
+<a name="l00591"></a>00591     .addReg(DestReg, <a class="code" href="namespacellvm.html#aa5e4d7acf58e87826a15b94d37144f2b">getDefRegState</a>(<span class="keyword">true</span>), SubIdx)
+<a name="l00592"></a>00592     .addConstantPoolIndex(Idx)
+<a name="l00593"></a>00593     .<a class="code" href="classllvm_1_1MachineInstrBuilder.html#a9f1fae6a5dbb6e378ca85df1fded8515">addImm</a>(0).<a class="code" href="classllvm_1_1MachineInstrBuilder.html#a9f1fae6a5dbb6e378ca85df1fded8515">addImm</a>(Pred).<a class="code" href="classllvm_1_1MachineInstrBuilder.html#a5125cce72b214df09ca8f93dcbbf4c3a">addReg</a>(PredReg)
+<a name="l00594"></a>00594     .<a class="code" href="classllvm_1_1MachineInstrBuilder.html#aabc17a35420fd0015b8cc5e6e51112fc">setMIFlags</a>(MIFlags);
+<a name="l00595"></a>00595 }
+<a name="l00596"></a>00596 
+<a name="l00597"></a>00597 <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa6d8f91c37b6c544185c62b10d817967" title="Code Generation virtual methods...">ARMBaseRegisterInfo::</a>
+<a name="l00598"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa6d8f91c37b6c544185c62b10d817967">00598</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aa6d8f91c37b6c544185c62b10d817967" title="Code Generation virtual methods...">requiresRegisterScavenging</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00599"></a>00599   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00600"></a>00600 }
+<a name="l00601"></a>00601 
+<a name="l00602"></a>00602 <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a41a3bd1b4a3bd3860407413aa97186a1">ARMBaseRegisterInfo::</a>
+<a name="l00603"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a41a3bd1b4a3bd3860407413aa97186a1">00603</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a41a3bd1b4a3bd3860407413aa97186a1">trackLivenessAfterRegAlloc</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00604"></a>00604   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00605"></a>00605 }
+<a name="l00606"></a>00606 
+<a name="l00607"></a>00607 <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ad185fc4fba4dad6eb268b1f27f3e1456">ARMBaseRegisterInfo::</a>
+<a name="l00608"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ad185fc4fba4dad6eb268b1f27f3e1456">00608</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ad185fc4fba4dad6eb268b1f27f3e1456">requiresFrameIndexScavenging</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00609"></a>00609   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00610"></a>00610 }
+<a name="l00611"></a>00611 
+<a name="l00612"></a>00612 <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ad5f6031fdad38105b6bcee83ba2b8b2f">ARMBaseRegisterInfo::</a>
+<a name="l00613"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ad5f6031fdad38105b6bcee83ba2b8b2f">00613</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#ad5f6031fdad38105b6bcee83ba2b8b2f">requiresVirtualBaseRegisters</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF)<span class="keyword"> const </span>{
+<a name="l00614"></a>00614   <span class="keywordflow">return</span> <a class="code" href="ARMBaseRegisterInfo_8cpp.html#ae68a63b6f3050e346562a7680dbd34fb">EnableLocalStackAlloc</a>;
+<a name="l00615"></a>00615 }
+<a name="l00616"></a>00616 
+<a name="l00617"></a>00617 <span class="keyword">static</span> <span class="keywordtype">void</span>
+<a name="l00618"></a><a class="code" href="ARMBaseRegisterInfo_8cpp.html#a7563119f0cddbc60e3bfcd1f014d6f5e">00618</a> <a class="code" href="ARMBaseRegisterInfo_8cpp.html#a7563119f0cddbc60e3bfcd1f014d6f5e">emitSPUpdate</a>(<span class="keywordtype">bool</span> isARM,
+<a name="l00619"></a>00619              <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> &MBB, <a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> &MBBI,
+<a name="l00620"></a>00620              <a class="code" href="classllvm_1_1DebugLoc.html">DebugLoc</a> dl, <span class="keyword">const</span> <a class="code" href="classllvm_1_1ARMBaseInstrInfo.html">ARMBaseInstrInfo</a> &TII,
+<a name="l00621"></a>00621              <span class="keywordtype">int</span> NumBytes,
+<a name="l00622"></a>00622              <a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6">ARMCC::CondCodes</a> Pred = <a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6a8b2ef77967dee1220cc6ee5aee595e11">ARMCC::AL</a>, <span class="keywordtype">unsigned</span> PredReg = 0) {
+<a name="l00623"></a>00623   <span class="keywordflow">if</span> (isARM)
+<a name="l00624"></a>00624     <a class="code" href="namespacellvm.html#a402aa8ec2571af98e3b5871721c6f642">emitARMRegPlusImmediate</a>(MBB, MBBI, dl, ARM::SP, ARM::SP, NumBytes,
+<a name="l00625"></a>00625                             Pred, PredReg, TII);
+<a name="l00626"></a>00626   <span class="keywordflow">else</span>
+<a name="l00627"></a>00627     <a class="code" href="namespacellvm.html#ae59f84da43ddc1b247716625b3b31dfb">emitT2RegPlusImmediate</a>(MBB, MBBI, dl, ARM::SP, ARM::SP, NumBytes,
+<a name="l00628"></a>00628                            Pred, PredReg, TII);
+<a name="l00629"></a>00629 }
+<a name="l00630"></a>00630 
+<a name="l00631"></a>00631 
+<a name="l00632"></a>00632 <span class="keywordtype">void</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#af2e45b4ba1fe935572dbea4e7a09c493">ARMBaseRegisterInfo::</a>
+<a name="l00633"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#af2e45b4ba1fe935572dbea4e7a09c493">00633</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#af2e45b4ba1fe935572dbea4e7a09c493">eliminateCallFramePseudoInstr</a>(<a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF, <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> &MBB,
+<a name="l00634"></a>00634                               <a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>)<span class="keyword"> const </span>{
+<a name="l00635"></a>00635   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a> *TFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>();
+<a name="l00636"></a>00636   <span class="keywordflow">if</span> (!TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a8404705eb7a27e437ac51ca3730bfd7c">hasReservedCallFrame</a>(MF)) {
+<a name="l00637"></a>00637     <span class="comment">// If we have alloca, convert as follows:</span>
+<a name="l00638"></a>00638     <span class="comment">// ADJCALLSTACKDOWN -> sub, sp, sp, amount</span>
+<a name="l00639"></a>00639     <span class="comment">// ADJCALLSTACKUP   -> add, sp, sp, amount</span>
+<a name="l00640"></a>00640     <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *Old = <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00641"></a>00641     <a class="code" href="classllvm_1_1DebugLoc.html">DebugLoc</a> dl = Old-><a class="code" href="classllvm_1_1MachineInstr.html#a5ca4af2a257043145ad650eafb4402f9">getDebugLoc</a>();
+<a name="l00642"></a>00642     <span class="keywordtype">unsigned</span> Amount = Old-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(0).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>();
+<a name="l00643"></a>00643     <span class="keywordflow">if</span> (Amount != 0) {
+<a name="l00644"></a>00644       <span class="comment">// We need to keep the stack aligned properly.  To do this, we round the</span>
+<a name="l00645"></a>00645       <span class="comment">// amount of space needed for the outgoing arguments up to the next</span>
+<a name="l00646"></a>00646       <span class="comment">// alignment boundary.</span>
+<a name="l00647"></a>00647       <span class="keywordtype">unsigned</span> Align = TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a360555ed6db3b28a33fa5449a0335f19">getStackAlignment</a>();
+<a name="l00648"></a>00648       Amount = (Amount+Align-1)/Align*Align;
+<a name="l00649"></a>00649 
+<a name="l00650"></a>00650       <a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a> *AFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ac2dc0fa143c9f2127f0501734577a0a0">getInfo</a><<a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a>>();
+<a name="l00651"></a>00651       assert(!AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a9fc3ff683e379f509b4d04ae1d5ace8a">isThumb1OnlyFunction</a>() &&
+<a name="l00652"></a>00652              <span class="stringliteral">"This eliminateCallFramePseudoInstr does not support Thumb1!"</span>);
+<a name="l00653"></a>00653       <span class="keywordtype">bool</span> isARM = !AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#ae898a405bf69c3021cd998257390494e">isThumbFunction</a>();
+<a name="l00654"></a>00654 
+<a name="l00655"></a>00655       <span class="comment">// Replace the pseudo instruction with a new instruction...</span>
+<a name="l00656"></a>00656       <span class="keywordtype">unsigned</span> Opc = Old-><a class="code" href="classllvm_1_1MachineInstr.html#a242314c0ae0147d1a7ef54c9bc312616">getOpcode</a>();
+<a name="l00657"></a>00657       <span class="keywordtype">int</span> PIdx = Old-><a class="code" href="classllvm_1_1MachineInstr.html#ae016d4c093fae29a0299228102e55cf4">findFirstPredOperandIdx</a>();
+<a name="l00658"></a>00658       <a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6">ARMCC::CondCodes</a> Pred = (PIdx == -1)
+<a name="l00659"></a>00659         ? <a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6a8b2ef77967dee1220cc6ee5aee595e11">ARMCC::AL</a> : (<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6">ARMCC::CondCodes</a>)Old-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(PIdx).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>();
+<a name="l00660"></a>00660       <span class="keywordflow">if</span> (Opc == ARM::ADJCALLSTACKDOWN || Opc == ARM::tADJCALLSTACKDOWN) {
+<a name="l00661"></a>00661         <span class="comment">// Note: PredReg is operand 2 for ADJCALLSTACKDOWN.</span>
+<a name="l00662"></a>00662         <span class="keywordtype">unsigned</span> PredReg = Old-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(2).<a class="code" href="classllvm_1_1MachineOperand.html#ab75f703d251cc0ce0206fe00a999db86" title="getReg - Returns the register number.">getReg</a>();
+<a name="l00663"></a>00663         <a class="code" href="ARMBaseRegisterInfo_8cpp.html#a7563119f0cddbc60e3bfcd1f014d6f5e">emitSPUpdate</a>(isARM, MBB, I, dl, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>, -Amount, Pred, PredReg);
+<a name="l00664"></a>00664       } <span class="keywordflow">else</span> {
+<a name="l00665"></a>00665         <span class="comment">// Note: PredReg is operand 3 for ADJCALLSTACKUP.</span>
+<a name="l00666"></a>00666         <span class="keywordtype">unsigned</span> PredReg = Old-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(3).<a class="code" href="classllvm_1_1MachineOperand.html#ab75f703d251cc0ce0206fe00a999db86" title="getReg - Returns the register number.">getReg</a>();
+<a name="l00667"></a>00667         assert(Opc == ARM::ADJCALLSTACKUP || Opc == ARM::tADJCALLSTACKUP);
+<a name="l00668"></a>00668         <a class="code" href="ARMBaseRegisterInfo_8cpp.html#a7563119f0cddbc60e3bfcd1f014d6f5e">emitSPUpdate</a>(isARM, MBB, I, dl, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>, Amount, Pred, PredReg);
+<a name="l00669"></a>00669       }
+<a name="l00670"></a>00670     }
+<a name="l00671"></a>00671   }
+<a name="l00672"></a>00672   MBB.<a class="code" href="classllvm_1_1MachineBasicBlock.html#a537a9265c55392ab47d44954f27db538">erase</a>(I);
+<a name="l00673"></a>00673 }
+<a name="l00674"></a>00674 
+<a name="l00675"></a>00675 <a class="code" href="classint64__t.html">int64_t</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a6898d3ca7f1188c73c657b51258427e9">ARMBaseRegisterInfo::</a>
+<a name="l00676"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a6898d3ca7f1188c73c657b51258427e9">00676</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a6898d3ca7f1188c73c657b51258427e9">getFrameIndexInstrOffset</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a>, <span class="keywordtype">int</span> Idx)<span class="keyword"> const </span>{
+<a name="l00677"></a>00677   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInstrDesc.html">MCInstrDesc</a> &Desc = MI-><a class="code" href="classllvm_1_1MachineInstr.html#a803a7424877fd049679b9aa2f07597b5">getDesc</a>();
+<a name="l00678"></a>00678   <span class="keywordtype">unsigned</span> <a class="code" href="structllvm_1_1AddrMode.html">AddrMode</a> = (Desc.<a class="code" href="classllvm_1_1MCInstrDesc.html#a46e0fcca2366f30d5e35b3d7dcb9c65f">TSFlags</a> & <a class="code" href="namespacellvm_1_1ARMII.html#af4453bdd6e0c946535fe8e8dcc28e784aeda154c828d692cd52ca6cce8765f9ae">ARMII::AddrModeMask</a>);
+<a name="l00679"></a>00679   <a class="code" href="classint64__t.html">int64_t</a> InstrOffs = 0;
+<a name="l00680"></a>00680   <span class="keywordtype">int</span> Scale = 1;
+<a name="l00681"></a>00681   <span class="keywordtype">unsigned</span> ImmIdx = 0;
+<a name="l00682"></a>00682   <span class="keywordflow">switch</span> (AddrMode) {
+<a name="l00683"></a>00683   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a976ddbecac99af6819d058790e33e137">ARMII::AddrModeT2_i8</a>:
+<a name="l00684"></a>00684   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a4f27c00983ba7efdb7177e52c27584b9">ARMII::AddrModeT2_i12</a>:
+<a name="l00685"></a>00685   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a44874e651b75b372574cc861fee08896">ARMII::AddrMode_i12</a>:
+<a name="l00686"></a>00686     InstrOffs = MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(Idx+1).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>();
+<a name="l00687"></a>00687     Scale = 1;
+<a name="l00688"></a>00688     <span class="keywordflow">break</span>;
+<a name="l00689"></a>00689   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a0209ae669364c237e24dbc0c4df6036e">ARMII::AddrMode5</a>: {
+<a name="l00690"></a>00690     <span class="comment">// VFP address mode.</span>
+<a name="l00691"></a>00691     <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineOperand.html">MachineOperand</a> &OffOp = MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(Idx+1);
+<a name="l00692"></a>00692     InstrOffs = <a class="code" href="namespacellvm_1_1ARM__AM.html#a4a7164e76d0d8d5ec38ed60bddd77589">ARM_AM::getAM5Offset</a>(OffOp.<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>());
+<a name="l00693"></a>00693     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__AM.html#afdacdb74974f380adc2ba5381cce6026">ARM_AM::getAM5Op</a>(OffOp.<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>()) == <a class="code" href="namespacellvm_1_1ARM__AM.html#a5d0557608eaebed12bc00812724ba2cda41a13f3ce88ed84e63003e32b18c1235">ARM_AM::sub</a>)
+<a name="l00694"></a>00694       InstrOffs = -InstrOffs;
+<a name="l00695"></a>00695     Scale = 4;
+<a name="l00696"></a>00696     <span class="keywordflow">break</span>;
+<a name="l00697"></a>00697   }
+<a name="l00698"></a>00698   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a7d9742a01ea175053d76a714474d88a6">ARMII::AddrMode2</a>: {
+<a name="l00699"></a>00699     ImmIdx = Idx+2;
+<a name="l00700"></a>00700     InstrOffs = <a class="code" href="namespacellvm_1_1ARM__AM.html#a7502a7e824795b89d0e7f1dcaaf5f65a">ARM_AM::getAM2Offset</a>(MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(ImmIdx).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>());
+<a name="l00701"></a>00701     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__AM.html#a7edbe05a2e247803ae6b4675def6a640">ARM_AM::getAM2Op</a>(MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(ImmIdx).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>()) == <a class="code" href="namespacellvm_1_1ARM__AM.html#a5d0557608eaebed12bc00812724ba2cda41a13f3ce88ed84e63003e32b18c1235">ARM_AM::sub</a>)
+<a name="l00702"></a>00702       InstrOffs = -InstrOffs;
+<a name="l00703"></a>00703     <span class="keywordflow">break</span>;
+<a name="l00704"></a>00704   }
+<a name="l00705"></a>00705   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a3e943d975799a4c55333c54eac1a7991">ARMII::AddrMode3</a>: {
+<a name="l00706"></a>00706     ImmIdx = Idx+2;
+<a name="l00707"></a>00707     InstrOffs = <a class="code" href="namespacellvm_1_1ARM__AM.html#ae82f861eface5f0da4e6a418b09e03bd">ARM_AM::getAM3Offset</a>(MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(ImmIdx).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>());
+<a name="l00708"></a>00708     <span class="keywordflow">if</span> (<a class="code" href="namespacellvm_1_1ARM__AM.html#a83e19c6a7832194e6bd7b8603a74ee7e">ARM_AM::getAM3Op</a>(MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(ImmIdx).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>()) == <a class="code" href="namespacellvm_1_1ARM__AM.html#a5d0557608eaebed12bc00812724ba2cda41a13f3ce88ed84e63003e32b18c1235">ARM_AM::sub</a>)
+<a name="l00709"></a>00709       InstrOffs = -InstrOffs;
+<a name="l00710"></a>00710     <span class="keywordflow">break</span>;
+<a name="l00711"></a>00711   }
+<a name="l00712"></a>00712   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a147ee44cd2b5425325839f5f0fa897ad">ARMII::AddrModeT1_s</a>: {
+<a name="l00713"></a>00713     ImmIdx = Idx+1;
+<a name="l00714"></a>00714     InstrOffs = MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(ImmIdx).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>();
+<a name="l00715"></a>00715     Scale = 4;
+<a name="l00716"></a>00716     <span class="keywordflow">break</span>;
+<a name="l00717"></a>00717   }
+<a name="l00718"></a>00718   <span class="keywordflow">default</span>:
+<a name="l00719"></a>00719     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Unsupported addressing mode!"</span>);
+<a name="l00720"></a>00720   }
+<a name="l00721"></a>00721 
+<a name="l00722"></a>00722   <span class="keywordflow">return</span> InstrOffs * Scale;
+<a name="l00723"></a>00723 }
+<a name="l00724"></a>00724 <span class="comment"></span>
+<a name="l00725"></a>00725 <span class="comment">/// needsFrameBaseReg - Returns true if the instruction's frame index</span>
+<a name="l00726"></a>00726 <span class="comment">/// reference would be better served by a base register other than FP</span>
+<a name="l00727"></a>00727 <span class="comment">/// or SP. Used by LocalStackFrameAllocation to determine which frame index</span>
+<a name="l00728"></a>00728 <span class="comment">/// references it should create new base registers for.</span>
+<a name="l00729"></a>00729 <span class="comment"></span><span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0999c0ebd5b29c7627a54a10d63fe3d0">ARMBaseRegisterInfo::</a>
+<a name="l00730"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0999c0ebd5b29c7627a54a10d63fe3d0">00730</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a0999c0ebd5b29c7627a54a10d63fe3d0">needsFrameBaseReg</a>(<a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a>, <a class="code" href="classint64__t.html">int64_t</a> Offset)<span class="keyword"> const </span>{
+<a name="l00731"></a>00731   <span class="keywordflow">for</span> (<span class="keywordtype">unsigned</span> i = 0; !MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i).<a class="code" href="classllvm_1_1MachineOperand.html#ab0d5ec413fa43a1e470dafb6cafda9b5" title="isFI - Tests if this is a MO_FrameIndex operand.">isFI</a>(); ++i) {
+<a name="l00732"></a>00732     assert(i < MI->getNumOperands() &&<span class="stringliteral">"Instr doesn't have FrameIndex operand!"</span>);
+<a name="l00733"></a>00733   }
+<a name="l00734"></a>00734 
+<a name="l00735"></a>00735   <span class="comment">// It's the load/store FI references that cause issues, as it can be difficult</span>
+<a name="l00736"></a>00736   <span class="comment">// to materialize the offset if it won't fit in the literal field. Estimate</span>
+<a name="l00737"></a>00737   <span class="comment">// based on the size of the local frame and some conservative assumptions</span>
+<a name="l00738"></a>00738   <span class="comment">// about the rest of the stack frame (note, this is pre-regalloc, so</span>
+<a name="l00739"></a>00739   <span class="comment">// we don't know everything for certain yet) whether this offset is likely</span>
+<a name="l00740"></a>00740   <span class="comment">// to be out of range of the immediate. Return true if so.</span>
+<a name="l00741"></a>00741 
+<a name="l00742"></a>00742   <span class="comment">// We only generate virtual base registers for loads and stores, so</span>
+<a name="l00743"></a>00743   <span class="comment">// return false for everything else.</span>
+<a name="l00744"></a>00744   <span class="keywordtype">unsigned</span> Opc = MI-><a class="code" href="classllvm_1_1MachineInstr.html#a242314c0ae0147d1a7ef54c9bc312616">getOpcode</a>();
+<a name="l00745"></a>00745   <span class="keywordflow">switch</span> (Opc) {
+<a name="l00746"></a>00746   <span class="keywordflow">case</span> ARM::LDRi12: <span class="keywordflow">case</span> ARM::LDRH: <span class="keywordflow">case</span> ARM::LDRBi12:
+<a name="l00747"></a>00747   <span class="keywordflow">case</span> ARM::STRi12: <span class="keywordflow">case</span> ARM::STRH: <span class="keywordflow">case</span> ARM::STRBi12:
+<a name="l00748"></a>00748   <span class="keywordflow">case</span> ARM::t2LDRi12: <span class="keywordflow">case</span> ARM::t2LDRi8:
+<a name="l00749"></a>00749   <span class="keywordflow">case</span> ARM::t2STRi12: <span class="keywordflow">case</span> ARM::t2STRi8:
+<a name="l00750"></a>00750   <span class="keywordflow">case</span> ARM::VLDRS: <span class="keywordflow">case</span> ARM::VLDRD:
+<a name="l00751"></a>00751   <span class="keywordflow">case</span> ARM::VSTRS: <span class="keywordflow">case</span> ARM::VSTRD:
+<a name="l00752"></a>00752   <span class="keywordflow">case</span> ARM::tSTRspi: <span class="keywordflow">case</span> ARM::tLDRspi:
+<a name="l00753"></a>00753     <span class="keywordflow">if</span> (<a class="code" href="ARMBaseRegisterInfo_8cpp.html#abfa594409b2608ff16cbad0b9f566796">ForceAllBaseRegAlloc</a>)
+<a name="l00754"></a>00754       <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00755"></a>00755     <span class="keywordflow">break</span>;
+<a name="l00756"></a>00756   <span class="keywordflow">default</span>:
+<a name="l00757"></a>00757     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00758"></a>00758   }
+<a name="l00759"></a>00759 
+<a name="l00760"></a>00760   <span class="comment">// Without a virtual base register, if the function has variable sized</span>
+<a name="l00761"></a>00761   <span class="comment">// objects, all fixed-size local references will be via the frame pointer,</span>
+<a name="l00762"></a>00762   <span class="comment">// Approximate the offset and see if it's legal for the instruction.</span>
+<a name="l00763"></a>00763   <span class="comment">// Note that the incoming offset is based on the SP value at function entry,</span>
+<a name="l00764"></a>00764   <span class="comment">// so it'll be negative.</span>
+<a name="l00765"></a>00765   <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF = *MI-><a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>()-><a class="code" href="classllvm_1_1MachineBasicBlock.html#af2e482ff2a9253ec6bc2285491496bd6">getParent</a>();
+<a name="l00766"></a>00766   <span class="keyword">const</span> <a class="code" href="classllvm_1_1TargetFrameLowering.html">TargetFrameLowering</a> *TFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>();
+<a name="l00767"></a>00767   <a class="code" href="classllvm_1_1MachineFrameInfo.html" title="Abstract Stack Frame Information.">MachineFrameInfo</a> *MFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#a4ad4295a88187ea1ae12ecfcfa18a70f">getFrameInfo</a>();
+<a name="l00768"></a>00768   <a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a> *AFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ac2dc0fa143c9f2127f0501734577a0a0">getInfo</a><<a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a>>();
+<a name="l00769"></a>00769 
+<a name="l00770"></a>00770   <span class="comment">// Estimate an offset from the frame pointer.</span>
+<a name="l00771"></a>00771   <span class="comment">// Conservatively assume all callee-saved registers get pushed. R4-R6</span>
+<a name="l00772"></a>00772   <span class="comment">// will be earlier than the FP, so we ignore those.</span>
+<a name="l00773"></a>00773   <span class="comment">// R7, LR</span>
+<a name="l00774"></a>00774   <a class="code" href="classint64__t.html">int64_t</a> FPOffset = Offset - 8;
+<a name="l00775"></a>00775   <span class="comment">// ARM and Thumb2 functions also need to consider R8-R11 and D8-D15</span>
+<a name="l00776"></a>00776   <span class="keywordflow">if</span> (!AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#ae898a405bf69c3021cd998257390494e">isThumbFunction</a>() || !AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a9fc3ff683e379f509b4d04ae1d5ace8a">isThumb1OnlyFunction</a>())
+<a name="l00777"></a>00777     FPOffset -= 80;
+<a name="l00778"></a>00778   <span class="comment">// Estimate an offset from the stack pointer.</span>
+<a name="l00779"></a>00779   <span class="comment">// The incoming offset is relating to the SP at the start of the function,</span>
+<a name="l00780"></a>00780   <span class="comment">// but when we access the local it'll be relative to the SP after local</span>
+<a name="l00781"></a>00781   <span class="comment">// allocation, so adjust our SP-relative offset by that allocation size.</span>
+<a name="l00782"></a>00782   Offset = -Offset;
+<a name="l00783"></a>00783   Offset += MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a10e9ecc89983e197d0a06a473fd8831c" title="getLocalFrameSize - Get the size of the local object blob.">getLocalFrameSize</a>();
+<a name="l00784"></a>00784   <span class="comment">// Assume that we'll have at least some spill slots allocated.</span>
+<a name="l00785"></a>00785   <span class="comment">// FIXME: This is a total SWAG number. We should run some statistics</span>
+<a name="l00786"></a>00786   <span class="comment">//        and pick a real one.</span>
+<a name="l00787"></a>00787   Offset += 128; <span class="comment">// 128 bytes of spill slots</span>
+<a name="l00788"></a>00788 
+<a name="l00789"></a>00789   <span class="comment">// If there is a frame pointer, try using it.</span>
+<a name="l00790"></a>00790   <span class="comment">// The FP is only available if there is no dynamic realignment. We</span>
+<a name="l00791"></a>00791   <span class="comment">// don't know for sure yet whether we'll need that, so we guess based</span>
+<a name="l00792"></a>00792   <span class="comment">// on whether there are any local variables that would trigger it.</span>
+<a name="l00793"></a>00793   <span class="keywordtype">unsigned</span> StackAlign = TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a360555ed6db3b28a33fa5449a0335f19">getStackAlignment</a>();
+<a name="l00794"></a>00794   <span class="keywordflow">if</span> (TFI-><a class="code" href="classllvm_1_1TargetFrameLowering.html#a59182730437bdb0a45a274261a7ea84b">hasFP</a>(MF) &&
+<a name="l00795"></a>00795       !((MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a9febcb75531ee4f6704a93ea449f9682">getLocalFrameMaxAlign</a>() > StackAlign) && <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#acb882a567e74f592cbac2ca930b7bf73">canRealignStack</a>(MF))) {
+<a name="l00796"></a>00796     <span class="keywordflow">if</span> (<a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a727236c440b7276bbdb47dca268593c7">isFrameOffsetLegal</a>(MI, FPOffset))
+<a name="l00797"></a>00797       <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00798"></a>00798   }
+<a name="l00799"></a>00799   <span class="comment">// If we can reference via the stack pointer, try that.</span>
+<a name="l00800"></a>00800   <span class="comment">// FIXME: This (and the code that resolves the references) can be improved</span>
+<a name="l00801"></a>00801   <span class="comment">//        to only disallow SP relative references in the live range of</span>
+<a name="l00802"></a>00802   <span class="comment">//        the VLA(s). In practice, it's unclear how much difference that</span>
+<a name="l00803"></a>00803   <span class="comment">//        would make, but it may be worth doing.</span>
+<a name="l00804"></a>00804   <span class="keywordflow">if</span> (!MFI-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a5cd76eb2aeed3ae46da1bb1b132f1831">hasVarSizedObjects</a>() && <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a727236c440b7276bbdb47dca268593c7">isFrameOffsetLegal</a>(MI, Offset))
+<a name="l00805"></a>00805     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00806"></a>00806 
+<a name="l00807"></a>00807   <span class="comment">// The offset likely isn't legal, we want to allocate a virtual base register.</span>
+<a name="l00808"></a>00808   <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00809"></a>00809 }
+<a name="l00810"></a>00810 <span class="comment"></span>
+<a name="l00811"></a>00811 <span class="comment">/// materializeFrameBaseRegister - Insert defining instruction(s) for BaseReg to</span>
+<a name="l00812"></a>00812 <span class="comment">/// be a pointer to FrameIdx at the beginning of the basic block.</span>
+<a name="l00813"></a>00813 <span class="comment"></span><span class="keywordtype">void</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a35db94ca9140de7344e22a40cf3988ae">ARMBaseRegisterInfo::</a>
+<a name="l00814"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a35db94ca9140de7344e22a40cf3988ae">00814</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a35db94ca9140de7344e22a40cf3988ae">materializeFrameBaseRegister</a>(<a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> *MBB,
+<a name="l00815"></a>00815                              <span class="keywordtype">unsigned</span> BaseReg, <span class="keywordtype">int</span> FrameIdx,
+<a name="l00816"></a>00816                              <a class="code" href="classint64__t.html">int64_t</a> Offset)<span class="keyword"> const </span>{
+<a name="l00817"></a>00817   <a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a> *AFI = MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#af2e482ff2a9253ec6bc2285491496bd6">getParent</a>()-><a class="code" href="classllvm_1_1MachineFunction.html#ac2dc0fa143c9f2127f0501734577a0a0">getInfo</a><<a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a>>();
+<a name="l00818"></a>00818   <span class="keywordtype">unsigned</span> ADDriOpc = !AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#ae898a405bf69c3021cd998257390494e">isThumbFunction</a>() ? ARM::ADDri :
+<a name="l00819"></a>00819     (AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a9fc3ff683e379f509b4d04ae1d5ace8a">isThumb1OnlyFunction</a>() ? ARM::tADDrSPi : ARM::t2ADDri);
+<a name="l00820"></a>00820 
+<a name="l00821"></a>00821   <a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> <a class="code" href="namespacellvm_1_1MipsISD.html#a7a7035feda1dc16252a7a15a7e230122ad5006873d15f9569d1cf09deef3c6363">Ins</a> = MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#ab2d91e7bec944efcbc39d8e30644f111">begin</a>();
+<a name="l00822"></a>00822   <a class="code" href="classllvm_1_1DebugLoc.html">DebugLoc</a> DL;                  <span class="comment">// Defaults to "unknown"</span>
+<a name="l00823"></a>00823   <span class="keywordflow">if</span> (Ins != MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#acbc921830578e2741be6549db716c0ce">end</a>())
+<a name="l00824"></a>00824     DL = Ins->getDebugLoc();
+<a name="l00825"></a>00825 
+<a name="l00826"></a>00826   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInstrDesc.html">MCInstrDesc</a> &MCID = <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>.get(ADDriOpc);
+<a name="l00827"></a>00827   <a class="code" href="classllvm_1_1MachineRegisterInfo.html">MachineRegisterInfo</a> &MRI = MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#af2e482ff2a9253ec6bc2285491496bd6">getParent</a>()-><a class="code" href="classllvm_1_1MachineFunction.html#ab4a6ca428289b667dd691a00e9f7e334">getRegInfo</a>();
+<a name="l00828"></a>00828   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF = *MBB-><a class="code" href="classllvm_1_1MachineBasicBlock.html#af2e482ff2a9253ec6bc2285491496bd6">getParent</a>();
+<a name="l00829"></a>00829   MRI.<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a4312b4757ac75bf9be905acfeefd6838">constrainRegClass</a>(BaseReg, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>.getRegClass(MCID, 0, <span class="keyword">this</span>, MF));
+<a name="l00830"></a>00830 
+<a name="l00831"></a>00831   <a class="code" href="classllvm_1_1MachineInstrBuilder.html">MachineInstrBuilder</a> MIB = <a class="code" href="namespacellvm.html#abf7336821a22d9da733af010b2f39089">AddDefaultPred</a>(<a class="code" href="namespacellvm.html#a980570dc1410d4ef53806f82028ca381">BuildMI</a>(*MBB, Ins, DL, MCID, BaseReg)
+<a name="l00832"></a>00832     .addFrameIndex(FrameIdx).addImm(Offset));
+<a name="l00833"></a>00833 
+<a name="l00834"></a>00834   <span class="keywordflow">if</span> (!AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a9fc3ff683e379f509b4d04ae1d5ace8a">isThumb1OnlyFunction</a>())
+<a name="l00835"></a>00835     <a class="code" href="namespacellvm.html#a8b9edb9ece6ca4b10c73ae93a487c600">AddDefaultCC</a>(MIB);
+<a name="l00836"></a>00836 }
+<a name="l00837"></a>00837 
+<a name="l00838"></a>00838 <span class="keywordtype">void</span>
+<a name="l00839"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a34ebf503a92650b1bed07a616ddf083a">00839</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a34ebf503a92650b1bed07a616ddf083a">ARMBaseRegisterInfo::resolveFrameIndex</a>(<a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> <a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>,
+<a name="l00840"></a>00840                                        <span class="keywordtype">unsigned</span> BaseReg, <a class="code" href="classint64__t.html">int64_t</a> Offset)<span class="keyword"> const </span>{
+<a name="l00841"></a>00841   <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> &<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a> = *<a class="code" href="namespacellvm_1_1ARM__PROC.html#aac31dd660a6f18140efdd62b351cb11ba41e4a98ca287d35fab0923aa355d63a5">I</a>;
+<a name="l00842"></a>00842   <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> &MBB = *MI.<a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>();
+<a name="l00843"></a>00843   <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF = *MBB.<a class="code" href="classllvm_1_1MachineBasicBlock.html#af2e482ff2a9253ec6bc2285491496bd6">getParent</a>();
+<a name="l00844"></a>00844   <a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a> *AFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ac2dc0fa143c9f2127f0501734577a0a0">getInfo</a><<a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a>>();
+<a name="l00845"></a>00845   <span class="keywordtype">int</span> Off = Offset; <span class="comment">// ARM doesn't need the general 64-bit offsets</span>
+<a name="l00846"></a>00846   <span class="keywordtype">unsigned</span> i = 0;
+<a name="l00847"></a>00847 
+<a name="l00848"></a>00848   assert(!AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a9fc3ff683e379f509b4d04ae1d5ace8a">isThumb1OnlyFunction</a>() &&
+<a name="l00849"></a>00849          <span class="stringliteral">"This resolveFrameIndex does not support Thumb1!"</span>);
+<a name="l00850"></a>00850 
+<a name="l00851"></a>00851   <span class="keywordflow">while</span> (!MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i).<a class="code" href="classllvm_1_1MachineOperand.html#ab0d5ec413fa43a1e470dafb6cafda9b5" title="isFI - Tests if this is a MO_FrameIndex operand.">isFI</a>()) {
+<a name="l00852"></a>00852     ++i;
+<a name="l00853"></a>00853     assert(i < MI.<a class="code" href="classllvm_1_1MachineInstr.html#a7b5fe96d88954efc855e6c466207e535">getNumOperands</a>() && <span class="stringliteral">"Instr doesn't have FrameIndex operand!"</span>);
+<a name="l00854"></a>00854   }
+<a name="l00855"></a>00855   <span class="keywordtype">bool</span> Done = <span class="keyword">false</span>;
+<a name="l00856"></a>00856   <span class="keywordflow">if</span> (!AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#ae898a405bf69c3021cd998257390494e">isThumbFunction</a>())
+<a name="l00857"></a>00857     Done = <a class="code" href="namespacellvm.html#aa74e4894fee993892fcd8ce9b66cc6bd">rewriteARMFrameIndex</a>(MI, i, BaseReg, Off, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>);
+<a name="l00858"></a>00858   <span class="keywordflow">else</span> {
+<a name="l00859"></a>00859     assert(AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a07c23410c7430f86085eadea31db3ee2">isThumb2Function</a>());
+<a name="l00860"></a>00860     Done = <a class="code" href="namespacellvm.html#aa7e3ca219769642a9d531a7102a5725a">rewriteT2FrameIndex</a>(MI, i, BaseReg, Off, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>);
+<a name="l00861"></a>00861   }
+<a name="l00862"></a>00862   assert (Done && <span class="stringliteral">"Unable to resolve frame index!"</span>);
+<a name="l00863"></a>00863   (void)Done;
+<a name="l00864"></a>00864 }
+<a name="l00865"></a>00865 
+<a name="l00866"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a727236c440b7276bbdb47dca268593c7">00866</a> <span class="keywordtype">bool</span> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a727236c440b7276bbdb47dca268593c7">ARMBaseRegisterInfo::isFrameOffsetLegal</a>(<span class="keyword">const</span> <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> *<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a>,
+<a name="l00867"></a>00867                                              <a class="code" href="classint64__t.html">int64_t</a> Offset)<span class="keyword"> const </span>{
+<a name="l00868"></a>00868   <span class="keyword">const</span> <a class="code" href="classllvm_1_1MCInstrDesc.html">MCInstrDesc</a> &Desc = MI-><a class="code" href="classllvm_1_1MachineInstr.html#a803a7424877fd049679b9aa2f07597b5">getDesc</a>();
+<a name="l00869"></a>00869   <span class="keywordtype">unsigned</span> <a class="code" href="structllvm_1_1AddrMode.html">AddrMode</a> = (Desc.<a class="code" href="classllvm_1_1MCInstrDesc.html#a46e0fcca2366f30d5e35b3d7dcb9c65f">TSFlags</a> & <a class="code" href="namespacellvm_1_1ARMII.html#af4453bdd6e0c946535fe8e8dcc28e784aeda154c828d692cd52ca6cce8765f9ae">ARMII::AddrModeMask</a>);
+<a name="l00870"></a>00870   <span class="keywordtype">unsigned</span> i = 0;
+<a name="l00871"></a>00871 
+<a name="l00872"></a>00872   <span class="keywordflow">while</span> (!MI-><a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i).<a class="code" href="classllvm_1_1MachineOperand.html#ab0d5ec413fa43a1e470dafb6cafda9b5" title="isFI - Tests if this is a MO_FrameIndex operand.">isFI</a>()) {
+<a name="l00873"></a>00873     ++i;
+<a name="l00874"></a>00874     assert(i < MI->getNumOperands() &&<span class="stringliteral">"Instr doesn't have FrameIndex operand!"</span>);
+<a name="l00875"></a>00875   }
+<a name="l00876"></a>00876 
+<a name="l00877"></a>00877   <span class="comment">// AddrMode4 and AddrMode6 cannot handle any offset.</span>
+<a name="l00878"></a>00878   <span class="keywordflow">if</span> (AddrMode == <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a9dbb177d004cae6c3474b6aadc8ae07e">ARMII::AddrMode4</a> || AddrMode == <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a8388bb748b26edbdb8bb5d5ab6f16853">ARMII::AddrMode6</a>)
+<a name="l00879"></a>00879     <span class="keywordflow">return</span> Offset == 0;
+<a name="l00880"></a>00880 
+<a name="l00881"></a>00881   <span class="keywordtype">unsigned</span> NumBits = 0;
+<a name="l00882"></a>00882   <span class="keywordtype">unsigned</span> Scale = 1;
+<a name="l00883"></a>00883   <span class="keywordtype">bool</span> isSigned = <span class="keyword">true</span>;
+<a name="l00884"></a>00884   <span class="keywordflow">switch</span> (AddrMode) {
+<a name="l00885"></a>00885   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a976ddbecac99af6819d058790e33e137">ARMII::AddrModeT2_i8</a>:
+<a name="l00886"></a>00886   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a4f27c00983ba7efdb7177e52c27584b9">ARMII::AddrModeT2_i12</a>:
+<a name="l00887"></a>00887     <span class="comment">// i8 supports only negative, and i12 supports only positive, so</span>
+<a name="l00888"></a>00888     <span class="comment">// based on Offset sign, consider the appropriate instruction</span>
+<a name="l00889"></a>00889     Scale = 1;
+<a name="l00890"></a>00890     <span class="keywordflow">if</span> (Offset < 0) {
+<a name="l00891"></a>00891       NumBits = 8;
+<a name="l00892"></a>00892       Offset = -Offset;
+<a name="l00893"></a>00893     } <span class="keywordflow">else</span> {
+<a name="l00894"></a>00894       NumBits = 12;
+<a name="l00895"></a>00895     }
+<a name="l00896"></a>00896     <span class="keywordflow">break</span>;
+<a name="l00897"></a>00897   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a0209ae669364c237e24dbc0c4df6036e">ARMII::AddrMode5</a>:
+<a name="l00898"></a>00898     <span class="comment">// VFP address mode.</span>
+<a name="l00899"></a>00899     NumBits = 8;
+<a name="l00900"></a>00900     Scale = 4;
+<a name="l00901"></a>00901     <span class="keywordflow">break</span>;
+<a name="l00902"></a>00902   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a44874e651b75b372574cc861fee08896">ARMII::AddrMode_i12</a>:
+<a name="l00903"></a>00903   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a7d9742a01ea175053d76a714474d88a6">ARMII::AddrMode2</a>:
+<a name="l00904"></a>00904     NumBits = 12;
+<a name="l00905"></a>00905     <span class="keywordflow">break</span>;
+<a name="l00906"></a>00906   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a3e943d975799a4c55333c54eac1a7991">ARMII::AddrMode3</a>:
+<a name="l00907"></a>00907     NumBits = 8;
+<a name="l00908"></a>00908     <span class="keywordflow">break</span>;
+<a name="l00909"></a>00909   <span class="keywordflow">case</span> <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a147ee44cd2b5425325839f5f0fa897ad">ARMII::AddrModeT1_s</a>:
+<a name="l00910"></a>00910     NumBits = 5;
+<a name="l00911"></a>00911     Scale = 4;
+<a name="l00912"></a>00912     isSigned = <span class="keyword">false</span>;
+<a name="l00913"></a>00913     <span class="keywordflow">break</span>;
+<a name="l00914"></a>00914   <span class="keywordflow">default</span>:
+<a name="l00915"></a>00915     <a class="code" href="ErrorHandling_8h.html#ace243f5c25697a1107cce46626b3dc94">llvm_unreachable</a>(<span class="stringliteral">"Unsupported addressing mode!"</span>);
+<a name="l00916"></a>00916   }
+<a name="l00917"></a>00917 
+<a name="l00918"></a>00918   Offset += <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a6898d3ca7f1188c73c657b51258427e9">getFrameIndexInstrOffset</a>(MI, i);
+<a name="l00919"></a>00919   <span class="comment">// Make sure the offset is encodable for instructions that scale the</span>
+<a name="l00920"></a>00920   <span class="comment">// immediate.</span>
+<a name="l00921"></a>00921   <span class="keywordflow">if</span> ((Offset & (Scale-1)) != 0)
+<a name="l00922"></a>00922     <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00923"></a>00923 
+<a name="l00924"></a>00924   <span class="keywordflow">if</span> (isSigned && Offset < 0)
+<a name="l00925"></a>00925     Offset = -Offset;
+<a name="l00926"></a>00926 
+<a name="l00927"></a>00927   <span class="keywordtype">unsigned</span> Mask = (1 << NumBits) - 1;
+<a name="l00928"></a>00928   <span class="keywordflow">if</span> ((<span class="keywordtype">unsigned</span>)Offset <= Mask * Scale)
+<a name="l00929"></a>00929     <span class="keywordflow">return</span> <span class="keyword">true</span>;
+<a name="l00930"></a>00930 
+<a name="l00931"></a>00931   <span class="keywordflow">return</span> <span class="keyword">false</span>;
+<a name="l00932"></a>00932 }
+<a name="l00933"></a>00933 
+<a name="l00934"></a>00934 <span class="keywordtype">void</span>
+<a name="l00935"></a><a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aed33fc0ea790fb2f8037b0191ea84581">00935</a> <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#aed33fc0ea790fb2f8037b0191ea84581">ARMBaseRegisterInfo::eliminateFrameIndex</a>(<a class="code" href="classllvm_1_1MachineBasicBlock.html#ac51be7ff80fe8d6ae5e8c0acb194908a">MachineBasicBlock::iterator</a> II,
+<a name="l00936"></a>00936                                          <span class="keywordtype">int</span> SPAdj, <a class="code" href="classllvm_1_1RegScavenger.html">RegScavenger</a> *RS)<span class="keyword"> const </span>{
+<a name="l00937"></a>00937   <span class="keywordtype">unsigned</span> i = 0;
+<a name="l00938"></a>00938   <a class="code" href="classllvm_1_1MachineInstr.html">MachineInstr</a> &<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6af6284b830f5e4fe2a8ddb9ff1a25ee46">MI</a> = *II;
+<a name="l00939"></a>00939   <a class="code" href="classllvm_1_1MachineBasicBlock.html">MachineBasicBlock</a> &MBB = *MI.<a class="code" href="classllvm_1_1MachineInstr.html#aabad9b72f6d20d3462efc34020d39f73">getParent</a>();
+<a name="l00940"></a>00940   <a class="code" href="classllvm_1_1MachineFunction.html">MachineFunction</a> &MF = *MBB.<a class="code" href="classllvm_1_1MachineBasicBlock.html#af2e482ff2a9253ec6bc2285491496bd6">getParent</a>();
+<a name="l00941"></a>00941   <span class="keyword">const</span> <a class="code" href="classllvm_1_1ARMFrameLowering.html">ARMFrameLowering</a> *TFI =
+<a name="l00942"></a>00942     <span class="keyword">static_cast<</span><span class="keyword">const </span><a class="code" href="classllvm_1_1ARMFrameLowering.html">ARMFrameLowering</a>*<span class="keyword">></span>(MF.<a class="code" href="classllvm_1_1MachineFunction.html#a6745c3bfdfc5b0643b078b96df2db252">getTarget</a>().<a class="code" href="classllvm_1_1TargetMachine.html#a02aa9d4cbd6ffcc70dfe1143ec0995ef">getFrameLowering</a>());
+<a name="l00943"></a>00943   <a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a> *AFI = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ac2dc0fa143c9f2127f0501734577a0a0">getInfo</a><<a class="code" href="classllvm_1_1ARMFunctionInfo.html">ARMFunctionInfo</a>>();
+<a name="l00944"></a>00944   assert(!AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a9fc3ff683e379f509b4d04ae1d5ace8a">isThumb1OnlyFunction</a>() &&
+<a name="l00945"></a>00945          <span class="stringliteral">"This eliminateFrameIndex does not support Thumb1!"</span>);
+<a name="l00946"></a>00946 
+<a name="l00947"></a>00947   <span class="keywordflow">while</span> (!MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i).<a class="code" href="classllvm_1_1MachineOperand.html#ab0d5ec413fa43a1e470dafb6cafda9b5" title="isFI - Tests if this is a MO_FrameIndex operand.">isFI</a>()) {
+<a name="l00948"></a>00948     ++i;
+<a name="l00949"></a>00949     assert(i < MI.<a class="code" href="classllvm_1_1MachineInstr.html#a7b5fe96d88954efc855e6c466207e535">getNumOperands</a>() && <span class="stringliteral">"Instr doesn't have FrameIndex operand!"</span>);
+<a name="l00950"></a>00950   }
+<a name="l00951"></a>00951 
+<a name="l00952"></a>00952   <span class="keywordtype">int</span> <a class="code" href="namespacellvm_1_1ISD.html#a22ea9cec080dd5f4f47ba234c2f59110a4b437632fd9b97dd36010d85eb363efe">FrameIndex</a> = MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i).<a class="code" href="classllvm_1_1MachineOperand.html#ac9485ae7d6fedd71ad4460f72c799c98">getIndex</a>();
+<a name="l00953"></a>00953   <span class="keywordtype">unsigned</span> FrameReg;
+<a name="l00954"></a>00954 
+<a name="l00955"></a>00955   <span class="keywordtype">int</span> Offset = TFI-><a class="code" href="classllvm_1_1ARMFrameLowering.html#a9f4bd45d0a817adf290a5055a6e3e956">ResolveFrameIndexReference</a>(MF, FrameIndex, FrameReg, SPAdj);
+<a name="l00956"></a>00956 
+<a name="l00957"></a>00957   <span class="comment">// PEI::scavengeFrameVirtualRegs() cannot accurately track SPAdj because the</span>
+<a name="l00958"></a>00958   <span class="comment">// call frame setup/destroy instructions have already been eliminated.  That</span>
+<a name="l00959"></a>00959   <span class="comment">// means the stack pointer cannot be used to access the emergency spill slot</span>
+<a name="l00960"></a>00960   <span class="comment">// when !hasReservedCallFrame().</span>
+<a name="l00961"></a>00961 <span class="preprocessor">#ifndef NDEBUG</span>
+<a name="l00962"></a>00962 <span class="preprocessor"></span>  <span class="keywordflow">if</span> (RS && FrameReg == ARM::SP && FrameIndex == RS-><a class="code" href="classllvm_1_1RegScavenger.html#a3d73ea5872af8b3961a51497d154f48d">getScavengingFrameIndex</a>()){
+<a name="l00963"></a>00963     assert(TFI-><a class="code" href="classllvm_1_1ARMFrameLowering.html#a8f1ddf69e36ed0354ae69fedd3fed9a5">hasReservedCallFrame</a>(MF) &&
+<a name="l00964"></a>00964            <span class="stringliteral">"Cannot use SP to access the emergency spill slot in "</span>
+<a name="l00965"></a>00965            <span class="stringliteral">"functions without a reserved call frame"</span>);
+<a name="l00966"></a>00966     assert(!MF.<a class="code" href="classllvm_1_1MachineFunction.html#a4ad4295a88187ea1ae12ecfcfa18a70f">getFrameInfo</a>()-><a class="code" href="classllvm_1_1MachineFrameInfo.html#a5cd76eb2aeed3ae46da1bb1b132f1831">hasVarSizedObjects</a>() &&
+<a name="l00967"></a>00967            <span class="stringliteral">"Cannot use SP to access the emergency spill slot in "</span>
+<a name="l00968"></a>00968            <span class="stringliteral">"functions with variable sized frame objects"</span>);
+<a name="l00969"></a>00969   }
+<a name="l00970"></a>00970 <span class="preprocessor">#endif // NDEBUG</span>
+<a name="l00971"></a>00971 <span class="preprocessor"></span>
+<a name="l00972"></a>00972   <span class="comment">// Special handling of dbg_value instructions.</span>
+<a name="l00973"></a>00973   <span class="keywordflow">if</span> (MI.<a class="code" href="classllvm_1_1MachineInstr.html#a1e1d26226c627cf3dcf3c191b85e7d7d">isDebugValue</a>()) {
+<a name="l00974"></a>00974     MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i).  ChangeToRegister(FrameReg, <span class="keyword">false</span> <span class="comment">/*isDef*/</span>);
+<a name="l00975"></a>00975     MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i+1).<a class="code" href="classllvm_1_1MachineOperand.html#aa7e43fc5b201a1cc5b2b0f1f72963dd2">ChangeToImmediate</a>(Offset);
+<a name="l00976"></a>00976     <span class="keywordflow">return</span>;
+<a name="l00977"></a>00977   }
+<a name="l00978"></a>00978 
+<a name="l00979"></a>00979   <span class="comment">// Modify MI as necessary to handle as much of 'Offset' as possible</span>
+<a name="l00980"></a>00980   <span class="keywordtype">bool</span> Done = <span class="keyword">false</span>;
+<a name="l00981"></a>00981   <span class="keywordflow">if</span> (!AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#ae898a405bf69c3021cd998257390494e">isThumbFunction</a>())
+<a name="l00982"></a>00982     Done = <a class="code" href="namespacellvm.html#aa74e4894fee993892fcd8ce9b66cc6bd">rewriteARMFrameIndex</a>(MI, i, FrameReg, Offset, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>);
+<a name="l00983"></a>00983   <span class="keywordflow">else</span> {
+<a name="l00984"></a>00984     assert(AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a07c23410c7430f86085eadea31db3ee2">isThumb2Function</a>());
+<a name="l00985"></a>00985     Done = <a class="code" href="namespacellvm.html#aa7e3ca219769642a9d531a7102a5725a">rewriteT2FrameIndex</a>(MI, i, FrameReg, Offset, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>);
+<a name="l00986"></a>00986   }
+<a name="l00987"></a>00987   <span class="keywordflow">if</span> (Done)
+<a name="l00988"></a>00988     <span class="keywordflow">return</span>;
+<a name="l00989"></a>00989 
+<a name="l00990"></a>00990   <span class="comment">// If we get here, the immediate doesn't fit into the instruction.  We folded</span>
+<a name="l00991"></a>00991   <span class="comment">// as much as possible above, handle the rest, providing a register that is</span>
+<a name="l00992"></a>00992   <span class="comment">// SP+LargeImm.</span>
+<a name="l00993"></a>00993   assert((Offset ||
+<a name="l00994"></a>00994           (MI.<a class="code" href="classllvm_1_1MachineInstr.html#a803a7424877fd049679b9aa2f07597b5">getDesc</a>().<a class="code" href="classllvm_1_1MCInstrDesc.html#a46e0fcca2366f30d5e35b3d7dcb9c65f">TSFlags</a> & <a class="code" href="namespacellvm_1_1ARMII.html#af4453bdd6e0c946535fe8e8dcc28e784aeda154c828d692cd52ca6cce8765f9ae">ARMII::AddrModeMask</a>) == <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a9dbb177d004cae6c3474b6aadc8ae07e">ARMII::AddrMode4</a> ||
+<a name="l00995"></a>00995           (MI.<a class="code" href="classllvm_1_1MachineInstr.html#a803a7424877fd049679b9aa2f07597b5">getDesc</a>().<a class="code" href="classllvm_1_1MCInstrDesc.html#a46e0fcca2366f30d5e35b3d7dcb9c65f">TSFlags</a> & <a class="code" href="namespacellvm_1_1ARMII.html#af4453bdd6e0c946535fe8e8dcc28e784aeda154c828d692cd52ca6cce8765f9ae">ARMII::AddrModeMask</a>) == <a class="code" href="namespacellvm_1_1ARMII.html#ace99f086a3cd38c7477a8f038dae7ff4a8388bb748b26edbdb8bb5d5ab6f16853">ARMII::AddrMode6</a>) &&
+<a name="l00996"></a>00996          <span class="stringliteral">"This code isn't needed if offset already handled!"</span>);
+<a name="l00997"></a>00997 
+<a name="l00998"></a>00998   <span class="keywordtype">unsigned</span> ScratchReg = 0;
+<a name="l00999"></a>00999   <span class="keywordtype">int</span> PIdx = MI.<a class="code" href="classllvm_1_1MachineInstr.html#ae016d4c093fae29a0299228102e55cf4">findFirstPredOperandIdx</a>();
+<a name="l01000"></a>01000   <a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6">ARMCC::CondCodes</a> Pred = (PIdx == -1)
+<a name="l01001"></a>01001     ? <a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6a8b2ef77967dee1220cc6ee5aee595e11">ARMCC::AL</a> : (<a class="code" href="namespacellvm_1_1ARMCC.html#ac8391dd6b8083baa870dee5142ff22b6">ARMCC::CondCodes</a>)MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(PIdx).<a class="code" href="classllvm_1_1MachineOperand.html#a7059d68a29d5ecfb37623ab45cdb4e8d">getImm</a>();
+<a name="l01002"></a>01002   <span class="keywordtype">unsigned</span> PredReg = (PIdx == -1) ? 0 : MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(PIdx+1).<a class="code" href="classllvm_1_1MachineOperand.html#ab75f703d251cc0ce0206fe00a999db86" title="getReg - Returns the register number.">getReg</a>();
+<a name="l01003"></a>01003   <span class="keywordflow">if</span> (Offset == 0)
+<a name="l01004"></a>01004     <span class="comment">// Must be addrmode4/6.</span>
+<a name="l01005"></a>01005     MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i).<a class="code" href="classllvm_1_1MachineOperand.html#a7db02b21d284294b8d9369803fe1c13b">ChangeToRegister</a>(FrameReg, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">false</span>);
+<a name="l01006"></a>01006   <span class="keywordflow">else</span> {
+<a name="l01007"></a>01007     ScratchReg = MF.<a class="code" href="classllvm_1_1MachineFunction.html#ab4a6ca428289b667dd691a00e9f7e334">getRegInfo</a>().<a class="code" href="classllvm_1_1MachineRegisterInfo.html#a76c3c7e3d4f11b4cfad37fc0449c9635">createVirtualRegister</a>(&ARM::GPRRegClass);
+<a name="l01008"></a>01008     <span class="keywordflow">if</span> (!AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#ae898a405bf69c3021cd998257390494e">isThumbFunction</a>())
+<a name="l01009"></a>01009       <a class="code" href="namespacellvm.html#a402aa8ec2571af98e3b5871721c6f642">emitARMRegPlusImmediate</a>(MBB, II, MI.<a class="code" href="classllvm_1_1MachineInstr.html#a5ca4af2a257043145ad650eafb4402f9">getDebugLoc</a>(), ScratchReg, FrameReg,
+<a name="l01010"></a>01010                               Offset, Pred, PredReg, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>);
+<a name="l01011"></a>01011     <span class="keywordflow">else</span> {
+<a name="l01012"></a>01012       assert(AFI-><a class="code" href="classllvm_1_1ARMFunctionInfo.html#a07c23410c7430f86085eadea31db3ee2">isThumb2Function</a>());
+<a name="l01013"></a>01013       <a class="code" href="namespacellvm.html#ae59f84da43ddc1b247716625b3b31dfb">emitT2RegPlusImmediate</a>(MBB, II, MI.<a class="code" href="classllvm_1_1MachineInstr.html#a5ca4af2a257043145ad650eafb4402f9">getDebugLoc</a>(), ScratchReg, FrameReg,
+<a name="l01014"></a>01014                              Offset, Pred, PredReg, <a class="code" href="classllvm_1_1ARMBaseRegisterInfo.html#a664d1a5effff292772f684f9125ed689">TII</a>);
+<a name="l01015"></a>01015     }
+<a name="l01016"></a>01016     <span class="comment">// Update the original instruction to use the scratch register.</span>
+<a name="l01017"></a>01017     MI.<a class="code" href="classllvm_1_1MachineInstr.html#a302e45878c6dc1714334c7ce96d56846">getOperand</a>(i).<a class="code" href="classllvm_1_1MachineOperand.html#a7db02b21d284294b8d9369803fe1c13b">ChangeToRegister</a>(ScratchReg, <span class="keyword">false</span>, <span class="keyword">false</span>, <span class="keyword">true</span>);
+<a name="l01018"></a>01018   }
+<a name="l01019"></a>01019 }
+</pre></div></div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:32:40 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMCallingConv_8h__dep__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMCallingConv_8h__dep__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMCallingConv_8h__dep__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMCallingConv_8h__dep__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,11 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ARMCallingConv.h",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="ARMFastISel.cpp",height=0.2,width=0.4,color="black",URL="$ARMFastISel_8cpp.html"];
+  Node1 -> Node3 [dir="back",color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="ARMISelLowering.cpp",height=0.2,width=0.4,color="black",URL="$ARMISelLowering_8cpp.html"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMCodeEmitter_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMCodeEmitter_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMCodeEmitter_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMCodeEmitter_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,153 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ARMCodeEmitter.cpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="ARM.h",height=0.2,width=0.4,color="black",URL="$ARM_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="MCTargetDesc/ARMBaseInfo.h",height=0.2,width=0.4,color="black",URL="$ARMBaseInfo_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="ARMMCTargetDesc.h",height=0.2,width=0.4,color="red",URL="$ARMMCTargetDesc_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="red",URL="$DataTypes_8h.html"];
+  Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="ARMGenInstrInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="ARMGenSubtargetInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node3 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="red",URL="$ErrorHandling_8h.html"];
+  Node9 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/Target/TargetMachine.h",height=0.2,width=0.4,color="red",URL="$Target_2TargetMachine_8h.html"];
+  Node10 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="llvm/Target/TargetTransformImpl.h",height=0.2,width=0.4,color="red",URL="$TargetTransformImpl_8h.html"];
+  Node10 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="ARMConstantPoolValue.h",height=0.2,width=0.4,color="black",URL="$ARMConstantPoolValue_8h.html"];
+  Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="llvm/CodeGen/MachineConstantPool.h",height=0.2,width=0.4,color="red",URL="$MachineConstantPool_8h.html"];
+  Node12 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="cstddef",height=0.2,width=0.4,color="grey75"];
+  Node1 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="ARMBaseInstrInfo.h",height=0.2,width=0.4,color="black",URL="$ARMBaseInstrInfo_8h.html"];
+  Node15 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="llvm/CodeGen/MachineInstrBuilder.h",height=0.2,width=0.4,color="red",URL="$MachineInstrBuilder_8h.html"];
+  Node16 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="llvm/Target/TargetInstrInfo.h",height=0.2,width=0.4,color="red",URL="$TargetInstrInfo_8h.html"];
+  Node17 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="llvm/ADT/SmallSet.h",height=0.2,width=0.4,color="red",URL="$SmallSet_8h.html"];
+  Node15 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="llvm/ADT/DenseMap.h",height=0.2,width=0.4,color="red",URL="$DenseMap_8h.html"];
+  Node19 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="ARMRelocations.h",height=0.2,width=0.4,color="black",URL="$ARMRelocations_8h.html"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="llvm/CodeGen/MachineRelocation.h",height=0.2,width=0.4,color="red",URL="$MachineRelocation_8h.html"];
+  Node21 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="ARMSubtarget.h",height=0.2,width=0.4,color="black",URL="$ARMSubtarget_8h.html"];
+  Node22 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="llvm/Target/TargetSubtargetInfo.h",height=0.2,width=0.4,color="red",URL="$TargetSubtargetInfo_8h.html"];
+  Node22 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/MC/MCInstrItineraries.h",height=0.2,width=0.4,color="red",URL="$MCInstrItineraries_8h.html"];
+  Node22 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/ADT/Triple.h",height=0.2,width=0.4,color="red",URL="$Triple_8h.html"];
+  Node22 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="ARMTargetMachine.h",height=0.2,width=0.4,color="red",URL="$ARMTargetMachine_8h.html"];
+  Node26 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="ARMInstrInfo.h",height=0.2,width=0.4,color="red",URL="$ARMInstrInfo_8h.html"];
+  Node27 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="ARMFrameLowering.h",height=0.2,width=0.4,color="red",URL="$ARMFrameLowering_8h.html"];
+  Node28 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="ARMJITInfo.h",height=0.2,width=0.4,color="red",URL="$ARMJITInfo_8h.html"];
+  Node29 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="llvm/CodeGen/MachineJumpTableInfo.h",height=0.2,width=0.4,color="red",URL="$MachineJumpTableInfo_8h.html"];
+  Node29 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="ARMISelLowering.h",height=0.2,width=0.4,color="red",URL="$ARMISelLowering_8h.html"];
+  Node31 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="ARMSelectionDAGInfo.h",height=0.2,width=0.4,color="red",URL="$ARMSelectionDAGInfo_8h.html"];
+  Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="MCTargetDesc/ARMAddressingModes.h",height=0.2,width=0.4,color="red",URL="$ARMAddressingModes_8h.html"];
+  Node33 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="Thumb1InstrInfo.h",height=0.2,width=0.4,color="red",URL="$Thumb1InstrInfo_8h.html"];
+  Node34 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="Thumb1FrameLowering.h",height=0.2,width=0.4,color="red",URL="$Thumb1FrameLowering_8h.html"];
+  Node35 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="Thumb2InstrInfo.h",height=0.2,width=0.4,color="red",URL="$Thumb2InstrInfo_8h.html"];
+  Node36 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/Constants.h",height=0.2,width=0.4,color="red",URL="$Constants_8h.html"];
+  Node1 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/DerivedTypes.h",height=0.2,width=0.4,color="red",URL="$DerivedTypes_8h.html"];
+  Node38 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/Function.h",height=0.2,width=0.4,color="red",URL="$Function_8h.html"];
+  Node1 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/PassManager.h",height=0.2,width=0.4,color="red",URL="$PassManager_8h.html"];
+  Node1 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/CodeGen/JITCodeEmitter.h",height=0.2,width=0.4,color="red",URL="$JITCodeEmitter_8h.html"];
+  Node41 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/CodeGen/MachineFunctionPass.h",height=0.2,width=0.4,color="red",URL="$MachineFunctionPass_8h.html"];
+  Node1 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="llvm/CodeGen/MachineInstr.h",height=0.2,width=0.4,color="red",URL="$MachineInstr_8h.html"];
+  Node1 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="llvm/CodeGen/MachineModuleInfo.h",height=0.2,width=0.4,color="red",URL="$MachineModuleInfo_8h.html"];
+  Node44 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="llvm/CodeGen/Passes.h",height=0.2,width=0.4,color="red",URL="$CodeGen_2Passes_8h.html"];
+  Node45 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/ADT/Statistic.h",height=0.2,width=0.4,color="red",URL="$Statistic_8h.html"];
+  Node1 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/Support/Debug.h",height=0.2,width=0.4,color="black",URL="$Debug_8h.html"];
+  Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/Support/raw_ostream.h",height=0.2,width=0.4,color="red",URL="$raw__ostream_8h.html"];
+  Node48 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="iomanip",height=0.2,width=0.4,color="grey75"];
+  Node1 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="ARMGenCodeEmitter.inc",height=0.2,width=0.4,color="grey75"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMConstantIslandPass_8cpp__incl.map
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMConstantIslandPass_8cpp__incl.map?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMConstantIslandPass_8cpp__incl.map (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMConstantIslandPass_8cpp__incl.map Fri Dec 21 00:57:24 2012
@@ -0,0 +1,45 @@
+<map id="G" name="G">
+<area shape="rect" href="$ARM_8h.html" title="ARM.h" alt="" coords="1483,239,1544,265"/>
+<area shape="rect" href="$ErrorHandling_8h.html" title="llvm/Support/ErrorHandling.h" alt="" coords="1496,393,1701,420"/>
+<area shape="rect" href="$Target_2TargetMachine_8h.html" title="llvm/Target/TargetMachine.h" alt="" coords="533,316,731,343"/>
+<area shape="rect" href="$ARMMachineFunctionInfo_8h.html" title="ARMMachineFunctionInfo.h" alt="" coords="944,239,1133,265"/>
+<area shape="rect" href="$Thumb2InstrInfo_8h.html" title="Thumb2InstrInfo.h" alt="" coords="1799,84,1935,111"/>
+<area shape="rect" href="$SmallSet_8h.html" title="llvm/ADT/SmallSet.h" alt="" coords="1928,239,2080,265"/>
+<area shape="rect" href="$SmallVector_8h.html" title="llvm/ADT/SmallVector.h" alt="" coords="1720,471,1888,497"/>
+<area shape="rect" href="$ARMAddressingModes_8h.html" title="MCTargetDesc/ARMAddressingModes.h" alt="" coords="2373,316,2643,343"/>
+<area shape="rect" href="$MachineConstantPool_8h.html" title="llvm/CodeGen/MachineConstantPool.h" alt="" coords="3259,316,3523,343"/>
+<area shape="rect" href="$MachineFunctionPass_8h.html" title="llvm/CodeGen/MachineFunctionPass.h" alt="" coords="76,161,337,188"/>
+<area shape="rect" href="$MachineJumpTableInfo_8h.html" title="llvm/CodeGen/MachineJumpTableInfo.h" alt="" coords="3360,393,3627,420"/>
+<area shape="rect" href="$MachineRegisterInfo_8h.html" title="llvm/CodeGen/MachineRegisterInfo.h" alt="" coords="2717,239,2971,265"/>
+<area shape="rect" href="$STLExtras_8h.html" title="llvm/ADT/STLExtras.h" alt="" coords="3360,471,3515,497"/>
+<area shape="rect" href="$DataLayout_8h.html" title="llvm/DataLayout.h" alt="" coords="1109,393,1245,420"/>
+<area shape="rect" href="$Debug_8h.html" title="llvm/Support/Debug.h" alt="" coords="3701,84,3861,111"/>
+<area shape="rect" href="$Format_8h.html" title="llvm/Support/Format.h" alt="" coords="3140,84,3303,111"/>
+<area shape="rect" href="$raw__ostream_8h.html" title="llvm/Support/raw_ostream.h" alt="" coords="784,393,984,420"/>
+<area shape="rect" href="$Statistic_8h.html" title="llvm/ADT/Statistic.h" alt="" coords="3885,84,4029,111"/>
+<area shape="rect" href="$CommandLine_8h.html" title="llvm/Support/CommandLine.h" alt="" coords="2728,393,2939,420"/>
+<area shape="rect" href="$ARMBaseInfo_8h.html" title="MCTargetDesc/ARMBaseInfo.h" alt="" coords="1371,316,1581,343"/>
+<area shape="rect" href="$ARMMCTargetDesc_8h.html" title="ARMMCTargetDesc.h" alt="" coords="1320,393,1472,420"/>
+<area shape="rect" href="$DataTypes_8h.html" title="llvm/Support/DataTypes.h" alt="" coords="936,548,1120,575"/>
+<area shape="rect" href="$Compiler_8h.html" title="llvm/Support/Compiler.h" alt="" coords="1717,625,1891,652"/>
+<area shape="rect" href="$StringRef_8h.html" title="llvm/ADT/StringRef.h" alt="" coords="1243,471,1392,497"/>
+<area shape="rect" href="$Pass_8h.html" title="llvm/Pass.h" alt="" coords="524,548,615,575"/>
+<area shape="rect" href="$CodeGen_8h.html" title="llvm/Support/CodeGen.h" alt="" coords="533,393,709,420"/>
+<area shape="rect" href="$TargetOptions_8h.html" title="llvm/Target/TargetOptions.h" alt="" coords="116,548,311,575"/>
+<area shape="rect" href="$TargetTransformInfo_8h.html" title="llvm/TargetTransformInfo.h" alt="" coords="221,471,408,497"/>
+<area shape="rect" href="$TargetTransformImpl_8h.html" title="llvm/Target/TargetTransformImpl.h" alt="" coords="123,393,357,420"/>
+<area shape="rect" href="$ARMSubtarget_8h.html" title="ARMSubtarget.h" alt="" coords="763,316,888,343"/>
+<area shape="rect" href="$MachineFunction_8h.html" title="llvm/CodeGen/MachineFunction.h" alt="" coords="912,316,1144,343"/>
+<area shape="rect" href="$TargetRegisterInfo_8h.html" title="llvm/Target/TargetRegisterInfo.h" alt="" coords="2131,316,2349,343"/>
+<area shape="rect" href="$BitVector_8h.html" title="llvm/ADT/BitVector.h" alt="" coords="1704,316,1853,343"/>
+<area shape="rect" href="$MathExtras_8h.html" title="llvm/Support/MathExtras.h" alt="" coords="2109,548,2299,575"/>
+<area shape="rect" href="$ARMBaseInstrInfo_8h.html" title="ARMBaseInstrInfo.h" alt="" coords="1707,161,1851,188"/>
+<area shape="rect" href="$Thumb2RegisterInfo_8h.html" title="Thumb2RegisterInfo.h" alt="" coords="1875,161,2035,188"/>
+<area shape="rect" href="$DenseMap_8h.html" title="llvm/ADT/DenseMap.h" alt="" coords="2104,471,2264,497"/>
+<area shape="rect" href="$SmallPtrSet_8h.html" title="llvm/ADT/SmallPtrSet.h" alt="" coords="1912,471,2080,497"/>
+<area shape="rect" href="$APFloat_8h.html" title="llvm/ADT/APFloat.h" alt="" coords="2512,393,2653,420"/>
+<area shape="rect" href="$APInt_8h.html" title="llvm/ADT/APInt.h" alt="" coords="2491,471,2616,497"/>
+<area shape="rect" href="$DenseSet_8h.html" title="llvm/ADT/DenseSet.h" alt="" coords="2181,393,2336,420"/>
+<area shape="rect" href="$MachineInstrBundle_8h.html" title="llvm/CodeGen/MachineInstrBundle.h" alt="" coords="2719,316,2969,343"/>
+<area shape="rect" href="$IndexedMap_8h.html" title="llvm/ADT/IndexedMap.h" alt="" coords="2963,393,3133,420"/>
+</map>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMConstantIslandPass_8cpp__incl.md5
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMConstantIslandPass_8cpp__incl.md5?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMConstantIslandPass_8cpp__incl.md5 (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMConstantIslandPass_8cpp__incl.md5 Fri Dec 21 00:57:24 2012
@@ -0,0 +1 @@
+2738a40dd90c6483b14e23eaea87b2c4
\ No newline at end of file

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMConstantPoolValue_8cpp.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMConstantPoolValue_8cpp.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMConstantPoolValue_8cpp.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMConstantPoolValue_8cpp.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,113 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ARMConstantPoolValue.cpp File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_579de1806e7c3f5ec4b2837753e33796.html">ARM</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#func-members">Functions</a>  </div>
+  <div class="headertitle">
+<div class="title">ARMConstantPoolValue.cpp File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="ARMConstantPoolValue_8h_source.html">ARMConstantPoolValue.h</a>"</code><br/>
+<code>#include "<a class="el" href="FoldingSet_8h_source.html">llvm/ADT/FoldingSet.h</a>"</code><br/>
+<code>#include "<a class="el" href="Constant_8h_source.html">llvm/Constant.h</a>"</code><br/>
+<code>#include "<a class="el" href="Constants_8h_source.html">llvm/Constants.h</a>"</code><br/>
+<code>#include "<a class="el" href="GlobalValue_8h_source.html">llvm/GlobalValue.h</a>"</code><br/>
+<code>#include "<a class="el" href="Type_8h_source.html">llvm/Type.h</a>"</code><br/>
+<code>#include "<a class="el" href="MachineBasicBlock_8h_source.html">llvm/CodeGen/MachineBasicBlock.h</a>"</code><br/>
+<code>#include "<a class="el" href="raw__ostream_8h_source.html">llvm/Support/raw_ostream.h</a>"</code><br/>
+<code>#include <cstdlib></code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ARMConstantPoolValue.cpp:</div>
+<div class="dyncontent">
+<div class="center"><img src="ARMConstantPoolValue_8cpp__incl.png" border="0" usemap="#ARMConstantPoolValue_8cpp" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div>
+<p><a href="ARMConstantPoolValue_8cpp_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="func-members"></a>
+Functions</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="ARMConstantPoolValue_8cpp.html#a9ade6872f3f054b93b26e375245713d8">CPV_streq</a> (const <a class="el" href="classchar.html">char</a> *S1, const <a class="el" href="classchar.html">char</a> *S2)</td></tr>
+</table>
+<hr/><h2>Function Documentation</h2>
+<a class="anchor" id="a9ade6872f3f054b93b26e375245713d8"></a><!-- doxytag: member="ARMConstantPoolValue.cpp::CPV_streq" ref="a9ade6872f3f054b93b26e375245713d8" args="(const char *S1, const char *S2)" -->
+<div class="memitem">
+<div class="memproto">
+      <table class="memname">
+        <tr>
+          <td class="memname">static <a class="el" href="X86DisassemblerDecoder_8c.html#a6156fe0b594c9754f386f6c6a30c8165">bool</a> CPV_streq </td>
+          <td>(</td>
+          <td class="paramtype">const <a class="el" href="classchar.html">char</a> * </td>
+          <td class="paramname"><em>S1</em>, </td>
+        </tr>
+        <tr>
+          <td class="paramkey"></td>
+          <td></td>
+          <td class="paramtype">const <a class="el" href="classchar.html">char</a> * </td>
+          <td class="paramname"><em>S2</em> </td>
+        </tr>
+        <tr>
+          <td></td>
+          <td>)</td>
+          <td></td><td><code> [static]</code></td>
+        </tr>
+      </table>
+</div>
+<div class="memdoc">
+
+<p>Definition at line <a class="el" href="ARMConstantPoolValue_8cpp_source.html#l00221">221</a> of file <a class="el" href="ARMConstantPoolValue_8cpp_source.html">ARMConstantPoolValue.cpp</a>.</p>
+
+<p>References <a class="el" href="TargetLibraryInfo_8h_source.html#l00286">llvm::LibFunc::strcmp</a>.</p>
+
+<p>Referenced by <a class="el" href="ARMConstantPoolValue_8cpp_source.html#l00229">llvm::ARMConstantPoolSymbol::getExistingMachineCPValue()</a>, and <a class="el" href="ARMConstantPoolValue_8cpp_source.html#l00249">llvm::ARMConstantPoolSymbol::hasSameValue()</a>.</p>
+
+</div>
+</div>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:26 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMDisassembler_8cpp__incl.png
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMDisassembler_8cpp__incl.png?rev=170845&view=auto
==============================================================================
Binary file - no diff available.

Propchange: www-releases/trunk/3.2/docs/doxygen/html/ARMDisassembler_8cpp__incl.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMELFObjectWriter_8cpp__incl.dot
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMELFObjectWriter_8cpp__incl.dot?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMELFObjectWriter_8cpp__incl.dot (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMELFObjectWriter_8cpp__incl.dot Fri Dec 21 00:57:24 2012
@@ -0,0 +1,149 @@
+digraph G
+{
+  bgcolor="transparent";
+  edge [fontname="FreeSans",fontsize="10",labelfontname="FreeSans",labelfontsize="10"];
+  node [fontname="FreeSans",fontsize="10",shape=record];
+  Node1 [label="ARMELFObjectWriter.cpp",height=0.2,width=0.4,color="black", fillcolor="grey75", style="filled" fontcolor="black"];
+  Node1 -> Node2 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node2 [label="MCTargetDesc/ARMFixupKinds.h",height=0.2,width=0.4,color="black",URL="$ARMFixupKinds_8h.html"];
+  Node2 -> Node3 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 [label="llvm/MC/MCFixup.h",height=0.2,width=0.4,color="black",URL="$MCFixup_8h.html"];
+  Node3 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node4 [label="llvm/Support/DataTypes.h",height=0.2,width=0.4,color="black",URL="$DataTypes_8h.html"];
+  Node4 -> Node5 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node5 [label="math.h",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node6 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node6 [label="sys/types.h",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node7 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node7 [label="inttypes.h",height=0.2,width=0.4,color="grey75"];
+  Node4 -> Node8 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node8 [label="stdint.h",height=0.2,width=0.4,color="grey75"];
+  Node3 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 [label="llvm/Support/ErrorHandling.h",height=0.2,width=0.4,color="black",URL="$ErrorHandling_8h.html"];
+  Node9 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node10 [label="llvm/Support/Compiler.h",height=0.2,width=0.4,color="black",URL="$Compiler_8h.html"];
+  Node9 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node11 [label="llvm/ADT/StringRef.h",height=0.2,width=0.4,color="black",URL="$StringRef_8h.html"];
+  Node11 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 [label="llvm/Support/type_traits.h",height=0.2,width=0.4,color="red",URL="$type__traits_8h.html"];
+  Node12 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node12 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node13 [label="utility",height=0.2,width=0.4,color="grey75"];
+  Node11 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node14 [label="algorithm",height=0.2,width=0.4,color="grey75"];
+  Node11 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node15 [label="cassert",height=0.2,width=0.4,color="grey75"];
+  Node11 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node16 [label="cstring",height=0.2,width=0.4,color="grey75"];
+  Node11 -> Node17 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node17 [label="limits",height=0.2,width=0.4,color="grey75"];
+  Node11 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node18 [label="string",height=0.2,width=0.4,color="grey75"];
+  Node11 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node9 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node19 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node19 [label="llvm/Support/SMLoc.h",height=0.2,width=0.4,color="black",URL="$SMLoc_8h.html"];
+  Node19 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node3 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node20 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 [label="MCTargetDesc/ARMMCTargetDesc.h",height=0.2,width=0.4,color="black",URL="$ARMMCTargetDesc_8h.html"];
+  Node20 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node20 -> Node21 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node21 [label="ARMGenRegisterInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node20 -> Node22 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node22 [label="ARMGenInstrInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node20 -> Node23 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node23 [label="ARMGenSubtargetInfo.inc",height=0.2,width=0.4,color="grey75"];
+  Node1 -> Node24 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node24 [label="llvm/Support/Debug.h",height=0.2,width=0.4,color="black",URL="$Debug_8h.html"];
+  Node1 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node25 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 [label="llvm/Support/raw_ostream.h",height=0.2,width=0.4,color="black",URL="$raw__ostream_8h.html"];
+  Node25 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node25 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node26 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 [label="llvm/ADT/Statistic.h",height=0.2,width=0.4,color="black",URL="$Statistic_8h.html"];
+  Node26 -> Node27 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node27 [label="llvm/Support/Atomic.h",height=0.2,width=0.4,color="black",URL="$Atomic_8h.html"];
+  Node27 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node26 -> Node28 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 [label="llvm/Support/Valgrind.h",height=0.2,width=0.4,color="black",URL="$Valgrind_8h.html"];
+  Node28 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node28 -> Node29 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node29 [label="llvm/Config/llvm-config.h",height=0.2,width=0.4,color="black",URL="$llvm-config_8h.html"];
+  Node28 -> Node30 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node30 [label="stddef.h",height=0.2,width=0.4,color="grey75"];
+  Node1 -> Node31 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 [label="llvm/ADT/StringSwitch.h",height=0.2,width=0.4,color="black",URL="$StringSwitch_8h.html"];
+  Node31 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node31 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node32 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 [label="llvm/MC/MCELFObjectWriter.h",height=0.2,width=0.4,color="black",URL="$MCELFObjectWriter_8h.html"];
+  Node32 -> Node33 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node33 [label="llvm/ADT/Triple.h",height=0.2,width=0.4,color="black",URL="$Triple_8h.html"];
+  Node33 -> Node34 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 [label="llvm/ADT/Twine.h",height=0.2,width=0.4,color="black",URL="$Twine_8h.html"];
+  Node34 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node9 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node34 -> Node18 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 [label="llvm/Support/ELF.h",height=0.2,width=0.4,color="black",URL="$Support_2ELF_8h.html"];
+  Node35 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node35 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node32 -> Node36 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node36 [label="vector",height=0.2,width=0.4,color="grey75"];
+  Node1 -> Node37 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 [label="llvm/MC/MCExpr.h",height=0.2,width=0.4,color="black",URL="$MCExpr_8h.html"];
+  Node37 -> Node38 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 [label="llvm/ADT/DenseMap.h",height=0.2,width=0.4,color="red",URL="$DenseMap_8h.html"];
+  Node38 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node39 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node39 [label="llvm/Support/AlignOf.h",height=0.2,width=0.4,color="red",URL="$AlignOf_8h.html"];
+  Node39 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node40 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node40 [label="llvm/Support/MathExtras.h",height=0.2,width=0.4,color="red",URL="$MathExtras_8h.html"];
+  Node38 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node41 [label="llvm/Support/PointerLikeTypeTraits.h",height=0.2,width=0.4,color="black",URL="$PointerLikeTypeTraits_8h.html"];
+  Node41 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node42 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 [label="llvm/ADT/DenseMapInfo.h",height=0.2,width=0.4,color="black",URL="$DenseMapInfo_8h.html"];
+  Node42 -> Node41 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node42 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node14 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node43 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node43 [label="iterator",height=0.2,width=0.4,color="grey75"];
+  Node38 -> Node44 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node44 [label="new",height=0.2,width=0.4,color="grey75"];
+  Node38 -> Node13 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node38 -> Node45 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node45 [label="climits",height=0.2,width=0.4,color="grey75"];
+  Node38 -> Node16 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node46 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 [label="llvm/Support/Casting.h",height=0.2,width=0.4,color="black",URL="$Casting_8h.html"];
+  Node46 -> Node12 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node46 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node37 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node47 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 [label="llvm/MC/MCSectionELF.h",height=0.2,width=0.4,color="black",URL="$MCSectionELF_8h.html"];
+  Node47 -> Node48 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node48 [label="llvm/MC/MCSection.h",height=0.2,width=0.4,color="red",URL="$MCSection_8h.html"];
+  Node48 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node35 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node47 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node1 -> Node49 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 [label="llvm/MC/MCValue.h",height=0.2,width=0.4,color="black",URL="$MCValue_8h.html"];
+  Node49 -> Node4 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node50 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 [label="llvm/MC/MCSymbol.h",height=0.2,width=0.4,color="black",URL="$MCSymbol_8h.html"];
+  Node50 -> Node11 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node50 -> Node10 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+  Node49 -> Node15 [color="midnightblue",fontsize="10",style="solid",fontname="FreeSans"];
+}

Added: www-releases/trunk/3.2/docs/doxygen/html/ARMFixupKinds_8h.html
URL: http://llvm.org/viewvc/llvm-project/www-releases/trunk/3.2/docs/doxygen/html/ARMFixupKinds_8h.html?rev=170845&view=auto
==============================================================================
--- www-releases/trunk/3.2/docs/doxygen/html/ARMFixupKinds_8h.html (added)
+++ www-releases/trunk/3.2/docs/doxygen/html/ARMFixupKinds_8h.html Fri Dec 21 00:57:24 2012
@@ -0,0 +1,127 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><head>
+<meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"/>
+<meta name="keywords" content="LLVM,Low Level Virtual Machine,C++,doxygen,API,documentation"/>
+<meta name="description" content="C++ source code API documentation for LLVM."/>
+<title>LLVM: ARMFixupKinds.h File Reference</title>
+<link href="doxygen.css" rel="stylesheet" type="text/css"/>
+</head><body>
+<p class="title">LLVM API Documentation</p>
+<!-- Generated by Doxygen 1.7.5.1 -->
+  <div id="navrow1" class="tabs">
+    <ul class="tablist">
+      <li><a href="index.html"><span>Main Page</span></a></li>
+      <li><a href="pages.html"><span>Related Pages</span></a></li>
+      <li><a href="modules.html"><span>Modules</span></a></li>
+      <li><a href="namespaces.html"><span>Namespaces</span></a></li>
+      <li><a href="annotated.html"><span>Classes</span></a></li>
+      <li class="current"><a href="files.html"><span>Files</span></a></li>
+      <li><a href="dirs.html"><span>Directories</span></a></li>
+    </ul>
+  </div>
+  <div id="navrow2" class="tabs2">
+    <ul class="tablist">
+      <li><a href="files.html"><span>File List</span></a></li>
+      <li><a href="globals.html"><span>File Members</span></a></li>
+    </ul>
+  </div>
+  <div id="nav-path" class="navpath">
+    <ul>
+      <li class="navelem"><a class="el" href="dir_b41d254693bea6e92988e5bb1ad97e02.html">llvm-3.2.src</a>      </li>
+      <li class="navelem"><a class="el" href="dir_74e9364f374e99e3aeab4fae4e196292.html">lib</a>      </li>
+      <li class="navelem"><a class="el" href="dir_8a55ec9894173378e0d08f27f306eeee.html">Target</a>      </li>
+      <li class="navelem"><a class="el" href="dir_579de1806e7c3f5ec4b2837753e33796.html">ARM</a>      </li>
+      <li class="navelem"><a class="el" href="dir_2b83bbec4106b4abd04d1d4005e6c646.html">MCTargetDesc</a>      </li>
+    </ul>
+  </div>
+</div>
+<div class="header">
+  <div class="summary">
+<a href="#namespaces">Namespaces</a> |
+<a href="#enum-members">Enumerations</a>  </div>
+  <div class="headertitle">
+<div class="title">ARMFixupKinds.h File Reference</div>  </div>
+</div>
+<div class="contents">
+<div class="textblock"><code>#include "<a class="el" href="MCFixup_8h_source.html">llvm/MC/MCFixup.h</a>"</code><br/>
+</div><div class="textblock"><div class="dynheader">
+Include dependency graph for ARMFixupKinds.h:</div>
+<div class="dyncontent">
+<div class="center"><img src="ARMFixupKinds_8h__incl.png" border="0" usemap="#ARMFixupKinds_8h" alt=""/></div>
+<!-- MAP 0 -->
+</div>
+</div><div class="textblock"><div class="dynheader">
+This graph shows which files directly or indirectly include this file:</div>
+<div class="dyncontent">
+<div class="center"><img src="ARMFixupKinds_8h__dep__incl.png" border="0" usemap="#ARMFixupKinds_8hdep" alt=""/></div>
+<!-- MAP 1 -->
+</div>
+</div>
+<p><a href="ARMFixupKinds_8h_source.html">Go to the source code of this file.</a></p>
+<table class="memberdecls">
+<tr><td colspan="2"><h2><a name="namespaces"></a>
+Namespaces</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm.html">llvm</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>List of target independent CodeGen pass IDs. </p>
+<br/></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">namespace  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1ARM.html">llvm::ARM</a></td></tr>
+<tr><td class="mdescLeft"> </td><td class="mdescRight"><p>Define some predicates that are used for node matching. </p>
+<br/></td></tr>
+<tr><td colspan="2"><h2><a name="enum-members"></a>
+Enumerations</h2></td></tr>
+<tr><td class="memItemLeft" align="right" valign="top">enum  </td><td class="memItemRight" valign="bottom"><a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0">llvm::ARM::Fixups</a> { <br/>
+  <a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ac8226e9dee163f040579c8cd8e5eb8c5">llvm::ARM::fixup_arm_ldst_pcrel_12</a> =  FirstTargetFixupKind, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a336d5f4419eb0ef8073bbac49a84de19">llvm::ARM::fixup_t2_ldst_pcrel_12</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8c5b03f8ae59e84ef4b8301c9cf246b3">llvm::ARM::fixup_arm_pcrel_10_unscaled</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a1eea621a676048b22be7958e8be8a714">llvm::ARM::fixup_arm_pcrel_10</a>, 
+<br/>
+  <a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a6d87443e7775d51eaf0708da110f352a">llvm::ARM::fixup_t2_pcrel_10</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a09a9168eafc337c15e7de013524a1532">llvm::ARM::fixup_thumb_adr_pcrel_10</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a0d7591bd8aae60a8151c5015a61f000b">llvm::ARM::fixup_arm_adr_pcrel_12</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0aac71630154c96f2f6b3e2e324a40037c">llvm::ARM::fixup_t2_adr_pcrel_12</a>, 
+<br/>
+  <a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0afbaadabc6e1f4ff4ddacc0b8ddf61872">llvm::ARM::fixup_arm_condbranch</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a1f91bda8769d2b0c0a7e9d6e813334b8">llvm::ARM::fixup_arm_uncondbranch</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0abd8de06471430072373886fe44229083">llvm::ARM::fixup_t2_condbranch</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a81dbbcf6c6a3e2c7c87af5dc5b9301d3">llvm::ARM::fixup_t2_uncondbranch</a>, 
+<br/>
+  <a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a02e738702c5e86913f9f7df2f83480b3">llvm::ARM::fixup_arm_thumb_br</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8b3ea0884f12a07077ecb6fd18395467">llvm::ARM::fixup_arm_uncondbl</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ac101b88c74df376a53087a2a12829576">llvm::ARM::fixup_arm_condbl</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a92999538a175673cea0e806d24285585">llvm::ARM::fixup_arm_blx</a>, 
+<br/>
+  <a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0adb86ef3fcfce8098efef7cb48f3ae98d">llvm::ARM::fixup_arm_thumb_bl</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a78f923cec6a90c05ba09b4cf99112b93">llvm::ARM::fixup_arm_thumb_blx</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a293bb495311c0764277085879d15c057">llvm::ARM::fixup_arm_thumb_cb</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a7b3659cc67fef8cc53f589860b2f1299">llvm::ARM::fixup_arm_thumb_cp</a>, 
+<br/>
+  <a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a9ad27f8b55ac56d16b5e0c378bad0051">llvm::ARM::fixup_arm_thumb_bcc</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a551a7051fef9738a64327579574a84f1">llvm::ARM::fixup_arm_movt_hi16</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a2b8a01780fc474ad24becf86799f112b">llvm::ARM::fixup_arm_movw_lo16</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a3175e012a680bfa04176f1073d837f78">llvm::ARM::fixup_t2_movt_hi16</a>, 
+<br/>
+  <a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0af29359bd1f79d7f6aec8e2c9275f44d1">llvm::ARM::fixup_t2_movw_lo16</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a156116fc4a5cd715d89b9b37a0f00997">llvm::ARM::fixup_arm_movt_hi16_pcrel</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a8e1b19d24563bdc51c05367927ec8cde">llvm::ARM::fixup_arm_movw_lo16_pcrel</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a022297f89f22e95d829705a8301d3cb5">llvm::ARM::fixup_t2_movt_hi16_pcrel</a>, 
+<br/>
+  <a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0acf41663b9377539c0f95b6fa4019009d">llvm::ARM::fixup_t2_movw_lo16_pcrel</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0ad0ae478f9613b41c69d61f11f7018c5c">llvm::ARM::LastTargetFixupKind</a>, 
+<a class="el" href="namespacellvm_1_1ARM.html#ad950a20a6062ddd7f336a9eede28bdf0a83aa9d86657b1bae143f5512d9a1b131">llvm::ARM::NumTargetFixupKinds</a> =  LastTargetFixupKind - FirstTargetFixupKind
+<br/>
+ }</td></tr>
+</table>
+</div>
+<hr>
+<p class="footer">
+Generated on Fri Dec 21 2012 00:39:26 for <a href="http://llvm.org/">LLVM</a> by
+<a href="http://www.doxygen.org"><img src="doxygen.png" alt="Doxygen"
+align="middle" border="0"/>1.7.5.1</a><br>
+Copyright © 2003-2012 University of Illinois at Urbana-Champaign.
+All Rights Reserved.</p>
+
+<hr>
+<!--#include virtual="/attrib.incl" -->
+
+</body>
+</html>





More information about the llvm-commits mailing list