[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