<html>
  <head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type">
  </head>
  <body text="#000000" bgcolor="#FFFFFF">
    <big><big><big><small><small><small>Hi Tamas,<br>
              </small></small></small></big></big></big><br>
    The code in release branch will fail to compile on mips if we don’t
    merge this change because the commit r245240 in the release branch
    is dependant on this change.  If we don't want to merge this change
    to the release branch then we will have to revert r245240 from the
    release branch so that the code from release branch can compile
    properly.<br>
    <br>
    Thanks,<br>
    Sagar<br>
    <br>
    <div class="moz-cite-prefix">On Friday 21 August 2015 03:06 PM,
      Tamas Berghammer wrote:<br>
    </div>
    <blockquote
cite="mid:CAG4H=E+L=us0iURwma-Y30NmMzw8pDnYh+hccZZuAbfG3S=QnA@mail.gmail.com"
      type="cite">
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <div dir="ltr">Hi Sagar,
        <div><br>
        </div>
        <div>I don't really happy with merging a big change to the
          release branch at the last moment (after RC3) especially as
          this commit caused several issues in the past and I don't
          think we tested it extensively enough to be sure it is works
          as intended at the moment.</div>
        <div><br>
        </div>
        <div>Is there any reason you really want this change in LLDB 3.7
          considering that we won't create a binary with the release as
          far as I know?</div>
        <div><br>
        </div>
        <div>Thanks,</div>
        <div>Tamas</div>
      </div>
      <br>
      <div class="gmail_quote">
        <div dir="ltr">On Fri, Aug 21, 2015 at 10:20 AM via lldb-commits
          <<a moz-do-not-send="true"
            href="mailto:lldb-commits@lists.llvm.org">lldb-commits@lists.llvm.org</a>>
          wrote:<br>
        </div>
        <blockquote class="gmail_quote" style="margin:0 0 0
          .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Hans,<br>
          <br>
          Could you please merge r245547 to the release branch ?<br>
          <br>
          Thanks,<br>
          Sagar<br>
          <br>
          On Thursday 20 August 2015 02:42 PM, Sagar Thakur via
          lldb-commits wrote:<br>
          > Author: slthakur<br>
          > Date: Thu Aug 20 04:12:46 2015<br>
          > New Revision: 245547<br>
          ><br>
          > URL: <a moz-do-not-send="true"
            href="http://llvm.org/viewvc/llvm-project?rev=245547&view=rev"
            rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project?rev=245547&view=rev</a><br>
          > Log:<br>
          > [LLDB] Use llvm::APInt and llvm::APFloat in Scalar and
          RegisterValue<br>
          ><br>
          > Eliminated ENABLE_128_BIT_SUPPORT and union ValueData
          from Scalar.cpp and use llvm::APInt and llvm::APFloat for all
          integer and floating point types. Also used Scalar in
          RegisterValue.cpp<br>
          ><br>
          > Reviewers: tberghammer, ovyalov, clayborg, labath<br>
          > Subscribers: lldb-commits, nitesh.jain, jaydeep<br>
          > Differential: <a moz-do-not-send="true"
            href="http://reviews.llvm.org/D12100" rel="noreferrer"
            target="_blank">http://reviews.llvm.org/D12100</a><br>
          ><br>
          > Modified:<br>
          >      lldb/trunk/include/lldb/Core/RegisterValue.h<br>
          >      lldb/trunk/include/lldb/Core/Scalar.h<br>
          >      lldb/trunk/include/lldb/Core/Value.h<br>
          >      lldb/trunk/include/lldb/lldb-private-types.h<br>
          >      lldb/trunk/source/Core/RegisterValue.cpp<br>
          >      lldb/trunk/source/Core/Scalar.cpp<br>
          >      lldb/trunk/source/Core/ValueObject.cpp<br>
          ><br>
          > Modified: lldb/trunk/include/lldb/Core/RegisterValue.h<br>
          > URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/RegisterValue.h?rev=245547&r1=245546&r2=245547&view=diff"
            rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/RegisterValue.h?rev=245547&r1=245546&r2=245547&view=diff</a><br>
          >
==============================================================================<br>
          > --- lldb/trunk/include/lldb/Core/RegisterValue.h
          (original)<br>
          > +++ lldb/trunk/include/lldb/Core/RegisterValue.h Thu Aug
          20 04:12:46 2015<br>
          > @@ -19,8 +19,9 @@<br>
          >   #include "lldb/lldb-public.h"<br>
          >   #include "lldb/lldb-private.h"<br>
          >   #include "lldb/Host/Endian.h"<br>
          > +#include "llvm/ADT/APInt.h"<br>
          > +#include "lldb/Core/Scalar.h"<br>
          ><br>
          > -//#define ENABLE_128_BIT_SUPPORT 1<br>
          >   namespace lldb_private {<br>
          ><br>
          >       class RegisterValue<br>
          > @@ -37,9 +38,7 @@ namespace lldb_private {<br>
          >               eTypeUInt16,<br>
          >               eTypeUInt32,<br>
          >               eTypeUInt64,<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >               eTypeUInt128,<br>
          > -#endif<br>
          >               eTypeFloat,<br>
          >               eTypeDouble,<br>
          >               eTypeLongDouble,<br>
          > @@ -47,7 +46,8 @@ namespace lldb_private {<br>
          >           };<br>
          ><br>
          >           RegisterValue () :<br>
          > -            m_type (eTypeInvalid)<br>
          > +            m_type (eTypeInvalid),<br>
          > +            m_scalar ((unsigned long)0)<br>
          >           {<br>
          >           }<br>
          ><br>
          > @@ -55,57 +55,55 @@ namespace lldb_private {<br>
          >           RegisterValue (uint8_t inst) :<br>
          >               m_type (eTypeUInt8)<br>
          >           {<br>
          > -            m_data.uint8 = inst;<br>
          > +            m_scalar = inst;<br>
          >           }<br>
          ><br>
          >           explicit<br>
          >           RegisterValue (uint16_t inst) :<br>
          >               m_type (eTypeUInt16)<br>
          >           {<br>
          > -            m_data.uint16 = inst;<br>
          > +            m_scalar = inst;<br>
          >           }<br>
          ><br>
          >           explicit<br>
          >           RegisterValue (uint32_t inst) :<br>
          >               m_type (eTypeUInt32)<br>
          >           {<br>
          > -            m_data.uint32 = inst;<br>
          > +            m_scalar = inst;<br>
          >           }<br>
          ><br>
          >           explicit<br>
          >           RegisterValue (uint64_t inst) :<br>
          >               m_type (eTypeUInt64)<br>
          >           {<br>
          > -            m_data.uint64 = inst;<br>
          > +            m_scalar = inst;<br>
          >           }<br>
          ><br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >           explicit<br>
          > -        RegisterValue (__uint128_t inst) :<br>
          > +        RegisterValue (llvm::APInt inst) :<br>
          >               m_type (eTypeUInt128)<br>
          >           {<br>
          > -            m_data.uint128 = inst;<br>
          > +            m_scalar = llvm::APInt(inst);<br>
          >           }<br>
          > -#endif<br>
          >           explicit<br>
          >           RegisterValue (float value) :<br>
          >               m_type (eTypeFloat)<br>
          >           {<br>
          > -            m_data.ieee_float = value;<br>
          > +            m_scalar = value;<br>
          >           }<br>
          ><br>
          >           explicit<br>
          >           RegisterValue (double value) :<br>
          >               m_type (eTypeDouble)<br>
          >           {<br>
          > -            m_data.ieee_double = value;<br>
          > +            m_scalar = value;<br>
          >           }<br>
          ><br>
          >           explicit<br>
          >           RegisterValue (long double value) :<br>
          >               m_type (eTypeLongDouble)<br>
          >           {<br>
          > -            m_data.ieee_long_double = value;<br>
          > +            m_scalar = value;<br>
          >           }<br>
          ><br>
          >           explicit<br>
          > @@ -167,7 +165,7 @@ namespace lldb_private {<br>
          >               {<br>
          >                   if (success_ptr)<br>
          >                       *success_ptr = true;<br>
          > -                return m_data.uint8;<br>
          > +                return m_scalar.UChar(fail_value);<br>
          >               }<br>
          >               if (success_ptr)<br>
          >                   *success_ptr = true;<br>
          > @@ -183,10 +181,8 @@ namespace lldb_private {<br>
          >           uint64_t<br>
          >           GetAsUInt64 (uint64_t fail_value = UINT64_MAX,
          bool *success_ptr = NULL) const;<br>
          ><br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -        __uint128_t<br>
          > -        GetAsUInt128 (__uint128_t fail_value =
          ~((__uint128_t)0), bool *success_ptr = NULL) const;<br>
          > -#endif<br>
          > +        llvm::APInt<br>
          > +        GetAsUInt128 (const llvm::APInt& fail_value,
          bool *success_ptr = NULL) const;<br>
          ><br>
          >           float<br>
          >           GetAsFloat (float fail_value = 0.0f, bool
          *success_ptr = NULL) const;<br>
          > @@ -219,95 +215,92 @@ namespace lldb_private {<br>
          >           operator = (uint8_t uint)<br>
          >           {<br>
          >               m_type = eTypeUInt8;<br>
          > -            m_data.uint8 = uint;<br>
          > +            m_scalar = uint;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           operator = (uint16_t uint)<br>
          >           {<br>
          >               m_type = eTypeUInt16;<br>
          > -            m_data.uint16 = uint;<br>
          > +            m_scalar = uint;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           operator = (uint32_t uint)<br>
          >           {<br>
          >               m_type = eTypeUInt32;<br>
          > -            m_data.uint32 = uint;<br>
          > +            m_scalar = uint;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           operator = (uint64_t uint)<br>
          >           {<br>
          >               m_type = eTypeUInt64;<br>
          > -            m_data.uint64 = uint;<br>
          > +            m_scalar = uint;<br>
          >           }<br>
          ><br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >           void<br>
          > -        operator = (__uint128_t uint)<br>
          > +        operator = (llvm::APInt uint)<br>
          >           {<br>
          >               m_type = eTypeUInt128;<br>
          > -            m_data.uint128 = uint;<br>
          > +            m_scalar = llvm::APInt(uint);<br>
          >           }<br>
          > -#endif<br>
          > +<br>
          >           void<br>
          >           operator = (float f)<br>
          >           {<br>
          >               m_type = eTypeFloat;<br>
          > -            m_data.ieee_float = f;<br>
          > +            m_scalar = f;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           operator = (double f)<br>
          >           {<br>
          >               m_type = eTypeDouble;<br>
          > -            m_data.ieee_double = f;<br>
          > +            m_scalar = f;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           operator = (long double f)<br>
          >           {<br>
          >               m_type = eTypeLongDouble;<br>
          > -            m_data.ieee_long_double = f;<br>
          > +            m_scalar = f;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           SetUInt8 (uint8_t uint)<br>
          >           {<br>
          >               m_type = eTypeUInt8;<br>
          > -            m_data.uint8 = uint;<br>
          > +            m_scalar = uint;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           SetUInt16 (uint16_t uint)<br>
          >           {<br>
          >               m_type = eTypeUInt16;<br>
          > -            m_data.uint16 = uint;<br>
          > +            m_scalar = uint;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           SetUInt32 (uint32_t uint, Type t = eTypeUInt32)<br>
          >           {<br>
          >               m_type = t;<br>
          > -            m_data.uint32 = uint;<br>
          > +            m_scalar = uint;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           SetUInt64 (uint64_t uint, Type t = eTypeUInt64)<br>
          >           {<br>
          >               m_type = t;<br>
          > -            m_data.uint64 = uint;<br>
          > +            m_scalar = uint;<br>
          >           }<br>
          ><br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >           void<br>
          > -        SetUInt128 (__uint128_t uint)<br>
          > +        SetUInt128 (llvm::APInt uint)<br>
          >           {<br>
          >               m_type = eTypeUInt128;<br>
          > -            m_data.uint128 = uint;<br>
          > +            m_scalar = llvm::APInt(uint);<br>
          >           }<br>
          > -#endif<br>
          >           bool<br>
          >           SetUInt (uint64_t uint, uint32_t byte_size);<br>
          ><br>
          > @@ -315,21 +308,21 @@ namespace lldb_private {<br>
          >           SetFloat (float f)<br>
          >           {<br>
          >               m_type = eTypeFloat;<br>
          > -            m_data.ieee_float = f;<br>
          > +            m_scalar = f;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           SetDouble (double f)<br>
          >           {<br>
          >               m_type = eTypeDouble;<br>
          > -            m_data.ieee_double = f;<br>
          > +            m_scalar = f;<br>
          >           }<br>
          ><br>
          >           void<br>
          >           SetLongDouble (long double f)<br>
          >           {<br>
          >               m_type = eTypeLongDouble;<br>
          > -            m_data.ieee_long_double = f;<br>
          > +            m_scalar = f;<br>
          >           }<br>
          ><br>
          >           void<br>
          > @@ -367,7 +360,7 @@ namespace lldb_private {<br>
          >           GetByteOrder () const<br>
          >           {<br>
          >               if (m_type == eTypeBytes)<br>
          > -                return m_data.buffer.byte_order;<br>
          > +                return buffer.byte_order;<br>
          >               return lldb::endian::InlHostByteOrder();<br>
          >           }<br>
          ><br>
          > @@ -386,25 +379,13 @@ namespace lldb_private {<br>
          >       protected:<br>
          ><br>
          >           RegisterValue::Type m_type;<br>
          > -        union<br>
          > +        Scalar m_scalar;<br>
          > +        struct<br>
          >           {<br>
          > -            uint8_t  uint8;<br>
          > -            uint16_t uint16;<br>
          > -            uint32_t uint32;<br>
          > -            uint64_t uint64;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -            __uint128_t uint128;<br>
          > -#endif<br>
          > -            float ieee_float;<br>
          > -            double ieee_double;<br>
          > -            long double ieee_long_double;<br>
          > -            struct<br>
          > -            {<br>
          > -                uint8_t bytes[kMaxRegisterByteSize]; //
          This must be big enough to hold any register for any supported
          target.<br>
          > -                uint8_t length;<br>
          > -                lldb::ByteOrder byte_order;<br>
          > -            } buffer;<br>
          > -        } m_data;<br>
          > +            uint8_t bytes[kMaxRegisterByteSize]; // This
          must be big enough to hold any register for any supported
          target.<br>
          > +            uint8_t length;<br>
          > +            lldb::ByteOrder byte_order;<br>
          > +        } buffer;<br>
          >       };<br>
          ><br>
          >   } // namespace lldb_private<br>
          ><br>
          > Modified: lldb/trunk/include/lldb/Core/Scalar.h<br>
          > URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Scalar.h?rev=245547&r1=245546&r2=245547&view=diff"
            rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Scalar.h?rev=245547&r1=245546&r2=245547&view=diff</a><br>
          >
==============================================================================<br>
          > --- lldb/trunk/include/lldb/Core/Scalar.h (original)<br>
          > +++ lldb/trunk/include/lldb/Core/Scalar.h Thu Aug 20
          04:12:46 2015<br>
          > @@ -11,6 +11,11 @@<br>
          >   #define liblldb_Scalar_h_<br>
          ><br>
          >   #include "lldb/lldb-private.h"<br>
          > +#include "llvm/ADT/APInt.h"<br>
          > +#include "llvm/ADT/APFloat.h"<br>
          > +<br>
          > +#define NUM_OF_WORDS_INT128 2<br>
          > +#define BITWIDTH_INT128 128<br>
          ><br>
          >   namespace lldb_private {<br>
          ><br>
          > @@ -34,22 +39,60 @@ public:<br>
          >           e_ulonglong,<br>
          >           e_float,<br>
          >           e_double,<br>
          > -        e_long_double<br>
          > +        e_long_double,<br>
          > +        e_uint128,<br>
          > +        e_sint128<br>
          >       };<br>
          ><br>
          >     
           //------------------------------------------------------------------<br>
          >       // Constructors and Destructors<br>
          >     
           //------------------------------------------------------------------<br>
          >       Scalar();<br>
          > -    Scalar(int v)               : m_type(e_sint),       
             m_data() { m_data.sint      = v; }<br>
          > -    Scalar(unsigned int v)      : m_type(e_uint),       
             m_data() { m_data.uint      = v; }<br>
          > -    Scalar(long v)              : m_type(e_slong),     
              m_data() { m_data.slong     = v; }<br>
          > -    Scalar(unsigned long v)     : m_type(e_ulong),     
              m_data() { m_data.ulong     = v; }<br>
          > -    Scalar(long long v)         : m_type(e_slonglong), 
              m_data() { m_data.slonglong = v; }<br>
          > -    Scalar(unsigned long long v): m_type(e_ulonglong), 
              m_data() { m_data.ulonglong = v; }<br>
          > -    Scalar(float v)             : m_type(e_float),     
              m_data() { m_data.flt       = v; }<br>
          > -    Scalar(double v)            : m_type(e_double),     
             m_data() { m_data.dbl       = v; }<br>
          > -    Scalar(long double v)       :
          m_type(e_long_double),    m_data() { m_data.ldbl      = v; }<br>
          > +    Scalar(int v)               : m_type(e_sint),       
          m_float((float)0) { m_integer = llvm::APInt(sizeof(int) * 8,
          v, true);}<br>
          > +    Scalar(unsigned int v)      : m_type(e_uint),       
          m_float((float)0) { m_integer = llvm::APInt(sizeof(int) * 8,
          v);}<br>
          > +    Scalar(long v)              : m_type(e_slong),     
           m_float((float)0) { m_integer = llvm::APInt(sizeof(long) * 8,
          v, true);}<br>
          > +    Scalar(unsigned long v)     : m_type(e_ulong),     
           m_float((float)0) { m_integer = llvm::APInt(sizeof(long) * 8,
          v);}<br>
          > +    Scalar(long long v)         : m_type(e_slonglong), 
           m_float((float)0) { m_integer = llvm::APInt(sizeof(long long)
          * 8, v, true);}<br>
          > +    Scalar(unsigned long long v): m_type(e_ulonglong), 
           m_float((float)0) { m_integer = llvm::APInt(sizeof(long long)
          * 8, v);}<br>
          > +    Scalar(float v)             : m_type(e_float),     
           m_float(v) { m_float   = llvm::APFloat(v); }<br>
          > +    Scalar(double v)            : m_type(e_double),     
          m_float(v) { m_float   = llvm::APFloat(v); }<br>
          > +    Scalar(long double v, bool ieee_quad)<br>
          > +        : m_type(e_long_double), m_float((float)0),
          m_ieee_quad(ieee_quad)<br>
          > +        {<br>
          > +            if(ieee_quad)<br>
          > +                m_float =
          llvm::APFloat(llvm::APFloat::IEEEquad,
          llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128, ((type128
          *)&v)->x));<br>
          > +            else<br>
          > +                m_float =
          llvm::APFloat(llvm::APFloat::x87DoubleExtended,
          llvm::APInt(BITWIDTH_INT128, NUM_OF_WORDS_INT128, ((type128
          *)&v)->x));<br>
          > +        }<br>
          > +    Scalar(llvm::APInt v) :<br>
          > +        m_type(),<br>
          > +        m_float((float)0)<br>
          > +        {<br>
          > +            m_integer = llvm::APInt(v);<br>
          > +            switch(m_integer.getBitWidth())<br>
          > +            {<br>
          > +            case 8:<br>
          > +            case 16:<br>
          > +            case 32:<br>
          > +                if(m_integer.isSignedIntN(sizeof(sint_t)
          * 8))<br>
          > +                    m_type = e_sint;<br>
          > +                else<br>
          > +                    m_type = e_uint;<br>
          > +                break;<br>
          > +            case 64:<br>
          > +               
          if(m_integer.isSignedIntN(sizeof(slonglong_t) * 8))<br>
          > +                    m_type = e_slonglong;<br>
          > +                else<br>
          > +                    m_type = e_ulonglong;<br>
          > +                break;<br>
          > +            case 128:<br>
          > +               
          if(m_integer.isSignedIntN(BITWIDTH_INT128))<br>
          > +                    m_type = e_sint128;<br>
          > +                else<br>
          > +                    m_type = e_uint128;<br>
          > +                break;<br>
          > +            }<br>
          > +        }<br>
          >       Scalar(const Scalar& rhs);<br>
          >       //Scalar(const RegisterValue& reg_value);<br>
          >       virtual ~Scalar();<br>
          > @@ -61,15 +104,18 @@ public:<br>
          >       ExtractBitfield (uint32_t bit_size,<br>
          >                        uint32_t bit_offset);<br>
          ><br>
          > +    bool<br>
          > +    SetBit(uint32_t bit);<br>
          > +<br>
          > +    bool<br>
          > +    ClearBit(uint32_t bit);<br>
          > +<br>
          > +    void *<br>
          > +    GetBytes() const;<br>
          > +<br>
          >       size_t<br>
          >       GetByteSize() const;<br>
          ><br>
          > -    static size_t<br>
          > -    GetMaxByteSize()<br>
          > -    {<br>
          > -        return sizeof(ValueData);<br>
          > -    }<br>
          > -<br>
          >       bool<br>
          >       GetData (DataExtractor &data, size_t
          limit_byte_size = UINT32_MAX) const;<br>
          ><br>
          > @@ -83,7 +129,7 @@ public:<br>
          >       IsZero() const;<br>
          ><br>
          >       void<br>
          > -    Clear() { m_type = e_void; m_data.ulonglong = 0; }<br>
          > +    Clear() { m_type = e_void; m_integer.clearAllBits();
          }<br>
          ><br>
          >       const char *<br>
          >       GetTypeAsCString() const;<br>
          > @@ -133,6 +179,7 @@ public:<br>
          >       Scalar& operator= (float v);<br>
          >       Scalar& operator= (double v);<br>
          >       Scalar& operator= (long double v);<br>
          > +    Scalar& operator= (llvm::APInt v);<br>
          >       Scalar& operator= (const Scalar& rhs);     
          // Assignment operator<br>
          >       Scalar& operator+= (const Scalar& rhs);<br>
          >       Scalar& operator<<= (const Scalar&
          rhs);    // Shift left<br>
          > @@ -174,6 +221,9 @@ public:<br>
          >       Scalar::Type<br>
          >       GetType() const { return m_type; }<br>
          ><br>
          > +    void<br>
          > +    SetType(const RegisterInfo*);<br>
          > +<br>
          >     
 //----------------------------------------------------------------------<br>
          >       // Returns a casted value of the current contained
          data without<br>
          >       // modifying the current value. FAIL_VALUE will be
          returned if the type<br>
          > @@ -194,6 +244,18 @@ public:<br>
          >       unsigned long long<br>
          >       RawULongLong () const;<br>
          ><br>
          > +    unsigned char<br>
          > +    UChar(unsigned char fail_value = 0) const;<br>
          > +<br>
          > +    char<br>
          > +    SChar(char fail_value = 0) const;<br>
          > +<br>
          > +    unsigned short<br>
          > +    UShort(unsigned short fail_value = 0) const;<br>
          > +<br>
          > +    short<br>
          > +    SShort(short fail_value = 0) const;<br>
          > +<br>
          >       unsigned int<br>
          >       UInt(unsigned int fail_value = 0) const;<br>
          ><br>
          > @@ -209,6 +271,12 @@ public:<br>
          >       unsigned long long<br>
          >       ULongLong(unsigned long long fail_value = 0) const;<br>
          ><br>
          > +    llvm::APInt<br>
          > +    SInt128(llvm::APInt& fail_value) const;<br>
          > +<br>
          > +    llvm::APInt<br>
          > +    UInt128(const llvm::APInt& fail_value) const;<br>
          > +<br>
          >       float<br>
          >       Float(float fail_value = 0.0f) const;<br>
          ><br>
          > @@ -255,6 +323,10 @@ public:<br>
          >       }<br>
          ><br>
          >   protected:<br>
          > +    typedef char                schar_t;<br>
          > +    typedef unsigned char       uchar_t;<br>
          > +    typedef short               sshort_t;<br>
          > +    typedef unsigned short      ushort_t;<br>
          >       typedef int                 sint_t;<br>
          >       typedef unsigned int        uint_t;<br>
          >       typedef long                slong_t;<br>
          > @@ -265,24 +337,13 @@ protected:<br>
          >       typedef double              double_t;<br>
          >       typedef long double         long_double_t;<br>
          ><br>
          > -    union ValueData<br>
          > -    {<br>
          > -        int                 sint;<br>
          > -        unsigned int        uint;<br>
          > -        long                slong;<br>
          > -        unsigned long       ulong;<br>
          > -        long long           slonglong;<br>
          > -        unsigned long long  ulonglong;<br>
          > -        float               flt;<br>
          > -        double              dbl;<br>
          > -        long double         ldbl;<br>
          > -    };<br>
          > -<br>
          >     
           //------------------------------------------------------------------<br>
          >       // Classes that inherit from Scalar can see and
          modify these<br>
          >     
           //------------------------------------------------------------------<br>
          >       Scalar::Type m_type;<br>
          > -    ValueData m_data;<br>
          > +    llvm::APInt m_integer;<br>
          > +    llvm::APFloat m_float;<br>
          > +    bool m_ieee_quad = false;<br>
          ><br>
          >   private:<br>
          >       friend const Scalar operator+   (const Scalar&
          lhs, const Scalar& rhs);<br>
          ><br>
          > Modified: lldb/trunk/include/lldb/Core/Value.h<br>
          > URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Value.h?rev=245547&r1=245546&r2=245547&view=diff"
            rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/Core/Value.h?rev=245547&r1=245546&r2=245547&view=diff</a><br>
          >
==============================================================================<br>
          > --- lldb/trunk/include/lldb/Core/Value.h (original)<br>
          > +++ lldb/trunk/include/lldb/Core/Value.h Thu Aug 20
          04:12:46 2015<br>
          > @@ -101,6 +101,7 @@ public:<br>
          >           // Casts a vector, if valid, to an unsigned int
          of matching or largest supported size.<br>
          >           // Truncates to the beginning of the vector if
          required.<br>
          >           // Returns a default constructed Scalar if the
          Vector data is internally inconsistent.<br>
          > +        llvm::APInt rhs = llvm::APInt(BITWIDTH_INT128,
          NUM_OF_WORDS_INT128, ((type128 *)bytes)->x);<br>
          >           Scalar<br>
          >               GetAsScalar() const<br>
          >               {<br>
          > @@ -111,11 +112,7 @@ public:<br>
          >                   else if (length == 2) scalar = *(const
          uint16_t *)bytes;<br>
          >                   else if (length == 4) scalar = *(const
          uint32_t *)bytes;<br>
          >                   else if (length == 8) scalar = *(const
          uint64_t *)bytes;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -                else if (length >= 16) scalar =
          *(const __uint128_t *)bytes;<br>
          > -#else<br>
          > -                else if (length >= 16) scalar =
          *(const uint64_t *)bytes;<br>
          > -#endif<br>
          > +                else if (length >= 16) scalar = rhs;<br>
          >               }<br>
          >               return scalar;<br>
          >           }<br>
          ><br>
          > Modified: lldb/trunk/include/lldb/lldb-private-types.h<br>
          > URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-private-types.h?rev=245547&r1=245546&r2=245547&view=diff"
            rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/include/lldb/lldb-private-types.h?rev=245547&r1=245546&r2=245547&view=diff</a><br>
          >
==============================================================================<br>
          > --- lldb/trunk/include/lldb/lldb-private-types.h
          (original)<br>
          > +++ lldb/trunk/include/lldb/lldb-private-types.h Thu Aug
          20 04:12:46 2015<br>
          > @@ -102,6 +102,8 @@ namespace lldb_private<br>
          >                                                    //
          pass it.<br>
          >       };<br>
          ><br>
          > +    typedef struct type128 { uint64_t x[2]; } type128;<br>
          > +<br>
          >   } // namespace lldb_private<br>
          ><br>
          >   #endif  // #if defined(__cplusplus)<br>
          ><br>
          > Modified: lldb/trunk/source/Core/RegisterValue.cpp<br>
          > URL: <a moz-do-not-send="true"
href="http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/RegisterValue.cpp?rev=245547&r1=245546&r2=245547&view=diff"
            rel="noreferrer" target="_blank">http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Core/RegisterValue.cpp?rev=245547&r1=245546&r2=245547&view=diff</a><br>
          >
==============================================================================<br>
          > --- lldb/trunk/source/Core/RegisterValue.cpp (original)<br>
          > +++ lldb/trunk/source/Core/RegisterValue.cpp Thu Aug 20
          04:12:46 2015<br>
          > @@ -215,10 +215,10 @@ RegisterValue::SetFromMemoryData
          (const<br>
          >       }<br>
          >       else if (value_type == eTypeBytes)<br>
          >       {<br>
          > -        m_data.buffer.byte_order = src_byte_order;<br>
          > +        buffer.byte_order = src_byte_order;<br>
          >           // Make sure to set the buffer length of the
          destination buffer to avoid<br>
          > -        // problems due to uninitialized variables.<br>
          > -        m_data.buffer.length = src_len;<br>
          > +        // problems due to uninitalized variables.<br>
          > +        buffer.length = src_len;<br>
          >       }<br>
          ><br>
          >       const uint32_t bytes_copied =
          src_data.CopyByteOrderedData (0,               // src offset<br>
          > @@ -240,25 +240,23 @@ RegisterValue::GetScalarValue
          (Scalar &s<br>
          >           case eTypeInvalid:      break;<br>
          >           case eTypeBytes:<br>
          >           {<br>
          > -            switch (m_data.buffer.length)<br>
          > +            switch (buffer.length)<br>
          >               {<br>
          >               default:    break;<br>
          > -            case 1:     scalar = m_data.uint8; return
          true;<br>
          > -            case 2:     scalar = m_data.uint16; return
          true;<br>
          > -            case 4:     scalar = m_data.uint32; return
          true;<br>
          > -            case 8:     scalar = m_data.uint64; return
          true;<br>
          > +            case 1:     scalar = *(const uint8_t
          *)buffer.bytes; return true;<br>
          > +            case 2:     scalar = *(const uint16_t
          *)buffer.bytes; return true;<br>
          > +            case 4:     scalar = *(const uint32_t
          *)buffer.bytes; return true;<br>
          > +            case 8:     scalar = *(const uint64_t
          *)buffer.bytes; return true;<br>
          >               }<br>
          >           }<br>
          > -        case eTypeUInt8:        scalar = m_data.uint8;
          return true;<br>
          > -        case eTypeUInt16:       scalar = m_data.uint16;
          return true;<br>
          > -        case eTypeUInt32:       scalar = m_data.uint32;
          return true;<br>
          > -        case eTypeUInt64:       scalar = m_data.uint64;
          return true;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -        case eTypeUInt128:      break;<br>
          > -#endif<br>
          > -        case eTypeFloat:        scalar =
          m_data.ieee_float; return true;<br>
          > -        case eTypeDouble:       scalar =
          m_data.ieee_double; return true;<br>
          > -        case eTypeLongDouble:   scalar =
          m_data.ieee_long_double; return true;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:<br>
          > +        case eTypeUInt32:<br>
          > +        case eTypeUInt64:<br>
          > +        case eTypeUInt128:<br>
          > +        case eTypeFloat:<br>
          > +        case eTypeDouble:<br>
          > +        case eTypeLongDouble:   scalar = m_scalar;
          return true;<br>
          >       }<br>
          >       return false;<br>
          >   }<br>
          > @@ -289,10 +287,8 @@ RegisterValue::SetType (const
          RegisterIn<br>
          >                   m_type = eTypeUInt32;<br>
          >               else if (byte_size <= 8)<br>
          >                   m_type = eTypeUInt64;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >               else if (byte_size <= 16)<br>
          >                   m_type = eTypeUInt128;<br>
          > -#endif<br>
          >               break;<br>
          ><br>
          >           case eEncodingIEEE754:<br>
          > @@ -308,6 +304,7 @@ RegisterValue::SetType (const
          RegisterIn<br>
          >               m_type = eTypeBytes;<br>
          >               break;<br>
          >       }<br>
          > +    m_scalar.SetType(reg_info);<br>
          >       return m_type;<br>
          >   }<br>
          ><br>
          > @@ -342,8 +339,9 @@ RegisterValue::SetValueFromData
          (const R<br>
          >           src_len = reg_info->byte_size;<br>
          ><br>
          >       // Zero out the value in case we get partial
          data...<br>
          > -    memset (m_data.buffer.bytes, 0, sizeof
          (m_data.buffer.bytes));<br>
          > -<br>
          > +    memset (buffer.bytes, 0, sizeof (buffer.bytes));<br>
          > +<br>
          > +    type128 int128;<br>
          >       switch (SetType (reg_info))<br>
          >       {<br>
          >           case eTypeInvalid:<br>
          > @@ -353,33 +351,38 @@ RegisterValue::SetValueFromData
          (const R<br>
          >           case eTypeUInt16:   SetUInt16 (src.GetMaxU32
          (&src_offset, src_len)); break;<br>
          >           case eTypeUInt32:   SetUInt32 (src.GetMaxU32
          (&src_offset, src_len)); break;<br>
          >           case eTypeUInt64:   SetUInt64 (src.GetMaxU64
          (&src_offset, src_len)); break;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >           case eTypeUInt128:<br>
          >               {<br>
          > -                __uint128_t data1 = src.GetU64
          (&src_offset);<br>
          > -                __uint128_t data2 = src.GetU64
          (&src_offset);<br>
          > +                uint64_t data1 = src.GetU64
          (&src_offset);<br>
          > +                uint64_t data2 = src.GetU64
          (&src_offset);<br>
          >                   if (src.GetByteSize() == eByteOrderBig)<br>
          > -                    SetUInt128 (data1 << 64 +
          data2);<br>
          > +                {<br>
          > +                    int128.x[0] = data1;<br>
          > +                    int128.x[1] = data2;<br>
          > +                }<br>
          >                   else<br>
          > -                    SetUInt128 (data2 << 64 +
          data1);<br>
          > +                {<br>
          > +                    int128.x[0] = data2;<br>
          > +                    int128.x[1] = data1;<br>
          > +                }<br>
          > +                SetUInt128 (llvm::APInt(128, 2,
          int128.x));<br>
          >               }<br>
          >               break;<br>
          > -#endif<br>
          >           case eTypeFloat:        SetFloat (src.GetFloat
          (&src_offset));      break;<br>
          >           case eTypeDouble:       SetDouble(src.GetDouble
          (&src_offset));     break;<br>
          >           case eTypeLongDouble:   SetFloat
          (src.GetLongDouble (&src_offset)); break;<br>
          >           case eTypeBytes:<br>
          >           {<br>
          > -            m_data.buffer.length =
          reg_info->byte_size;<br>
          > -            m_data.buffer.byte_order =
          src.GetByteOrder();<br>
          > -            assert (m_data.buffer.length <=
          kMaxRegisterByteSize);<br>
          > -            if (m_data.buffer.length >
          kMaxRegisterByteSize)<br>
          > -                m_data.buffer.length =
          kMaxRegisterByteSize;<br>
          > +            buffer.length = reg_info->byte_size;<br>
          > +            buffer.byte_order = src.GetByteOrder();<br>
          > +            assert (buffer.length <=
          kMaxRegisterByteSize);<br>
          > +            if (buffer.length > kMaxRegisterByteSize)<br>
          > +                buffer.length = kMaxRegisterByteSize;<br>
          >               if (src.CopyByteOrderedData (src_offset,   
                          // offset within "src" to start extracting
          data<br>
          >                                            src_len,     
                           // src length<br>
          > -                                       
           m_data.buffer.bytes,           // dst buffer<br>
          > -                                       
           m_data.buffer.length,          // dst length<br>
          > -                                       
           m_data.buffer.byte_order) == 0)// dst byte order<br>
          > +                                         buffer.bytes, 
                   // dst buffer<br>
          > +                                         buffer.length, 
                  // dst length<br>
          > +                                       
           buffer.byte_order) == 0)// dst byte order<br>
          >               {<br>
          >                   error.SetErrorString ("data copy failed
          data.");<br>
          >                   return error;<br>
          > @@ -459,6 +462,9 @@ RegisterValue::SetValueFromCString
          (cons<br>
          >       }<br>
          >       bool success = false;<br>
          >       const uint32_t byte_size = reg_info->byte_size;<br>
          > +    static float flt_val;<br>
          > +    static double dbl_val;<br>
          > +    static long double ldbl_val;<br>
          >       switch (reg_info->encoding)<br>
          >       {<br>
          >           case eEncodingInvalid:<br>
          > @@ -510,22 +516,31 @@ RegisterValue::SetValueFromCString
          (cons<br>
          >           case eEncodingIEEE754:<br>
          >               if (byte_size == sizeof (float))<br>
          >               {<br>
          > -                if (::sscanf (value_str, "%f",
          &m_data.ieee_float) == 1)<br>
          > +                if (::sscanf (value_str, "%f",
          &flt_val) == 1)<br>
          > +                {<br>
          > +                    m_scalar = flt_val;<br>
          >                       m_type = eTypeFloat;<br>
          > +                }<br>
          >                   else<br>
          >                       error.SetErrorStringWithFormat
          ("'%s' is not a valid float string value", value_str);<br>
          >               }<br>
          >               else if (byte_size == sizeof (double))<br>
          >               {<br>
          > -                if (::sscanf (value_str, "%lf",
          &m_data.ieee_double) == 1)<br>
          > +                if (::sscanf (value_str, "%lf",
          &dbl_val) == 1)<br>
          > +                {<br>
          > +                    m_scalar = dbl_val;<br>
          >                       m_type = eTypeDouble;<br>
          > +                }<br>
          >                   else<br>
          >                       error.SetErrorStringWithFormat
          ("'%s' is not a valid float string value", value_str);<br>
          >               }<br>
          >               else if (byte_size == sizeof (long double))<br>
          >               {<br>
          > -                if (::sscanf (value_str, "%Lf",
          &m_data.ieee_long_double) == 1)<br>
          > +                if (::sscanf (value_str, "%Lf",
          &ldbl_val) == 1)<br>
          > +                {<br>
          > +                    m_scalar = ldbl_val;<br>
          >                       m_type = eTypeLongDouble;<br>
          > +                }<br>
          >                   else<br>
          >                       error.SetErrorStringWithFormat
          ("'%s' is not a valid float string value", value_str);<br>
          >               }<br>
          > @@ -557,81 +572,11 @@ RegisterValue::SignExtend (uint32_t
          sign<br>
          >               break;<br>
          ><br>
          >           case eTypeUInt8:<br>
          > -            if (sign_bitpos == (8-1))<br>
          > -                return true;<br>
          > -            else if (sign_bitpos < (8-1))<br>
          > -            {<br>
          > -                uint8_t sign_bit = 1u <<
          sign_bitpos;<br>
          > -                if (m_data.uint8 & sign_bit)<br>
          > -                {<br>
          > -                    const uint8_t mask = ~(sign_bit) +
          1u;<br>
          > -                    m_data.uint8 |= mask;<br>
          > -                }<br>
          > -                return true;<br>
          > -            }<br>
          > -            break;<br>
          > -<br>
          >           case eTypeUInt16:<br>
          > -            if (sign_bitpos == (16-1))<br>
          > -                return true;<br>
          > -            else if (sign_bitpos < (16-1))<br>
          > -            {<br>
          > -                uint16_t sign_bit = 1u <<
          sign_bitpos;<br>
          > -                if (m_data.uint16 & sign_bit)<br>
          > -                {<br>
          > -                    const uint16_t mask = ~(sign_bit) +
          1u;<br>
          > -                    m_data.uint16 |= mask;<br>
          > -                }<br>
          > -                return true;<br>
          > -            }<br>
          > -            break;<br>
          > -<br>
          >           case eTypeUInt32:<br>
          > -            if (sign_bitpos == (32-1))<br>
          > -                return true;<br>
          > -            else if (sign_bitpos < (32-1))<br>
          > -            {<br>
          > -                uint32_t sign_bit = 1u <<
          sign_bitpos;<br>
          > -                if (m_data.uint32 & sign_bit)<br>
          > -                {<br>
          > -                    const uint32_t mask = ~(sign_bit) +
          1u;<br>
          > -                    m_data.uint32 |= mask;<br>
          > -                }<br>
          > -                return true;<br>
          > -            }<br>
          > -            break;<br>
          > -<br>
          >           case eTypeUInt64:<br>
          > -            if (sign_bitpos == (64-1))<br>
          > -                return true;<br>
          > -            else if (sign_bitpos < (64-1))<br>
          > -            {<br>
          > -                uint64_t sign_bit = 1ull <<
          sign_bitpos;<br>
          > -                if (m_data.uint64 & sign_bit)<br>
          > -                {<br>
          > -                    const uint64_t mask = ~(sign_bit) +
          1ull;<br>
          > -                    m_data.uint64 |= mask;<br>
          > -                }<br>
          > -                return true;<br>
          > -            }<br>
          > -            break;<br>
          > -<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >           case eTypeUInt128:<br>
          > -            if (sign_bitpos == (128-1))<br>
          > -                return true;<br>
          > -            else if (sign_bitpos < (128-1))<br>
          > -            {<br>
          > -                __uint128_t sign_bit = (__uint128_t)1u
          << sign_bitpos;<br>
          > -                if (m_data.uint128 & sign_bit)<br>
          > -                {<br>
          > -                    const uint128_t mask = ~(sign_bit) +
          1u;<br>
          > -                    m_data.uint128 |= mask;<br>
          > -                }<br>
          > -                return true;<br>
          > -            }<br>
          > -            break;<br>
          > -#endif<br>
          > +            return m_scalar.SignExtend(sign_bitpos);<br>
          >           case eTypeFloat:<br>
          >           case eTypeDouble:<br>
          >           case eTypeLongDouble:<br>
          > @@ -649,21 +594,19 @@ RegisterValue::CopyValue (const
          Register<br>
          >       {<br>
          >           case eTypeInvalid:<br>
          >               return false;<br>
          > -        case eTypeUInt8:        m_data.uint8 =
          rhs.m_data.uint8; break;<br>
          > -        case eTypeUInt16:       m_data.uint16 =
          rhs.m_data.uint16; break;<br>
          > -        case eTypeUInt32:       m_data.uint32 =
          rhs.m_data.uint32; break;<br>
          > -        case eTypeUInt64:       m_data.uint64 =
          rhs.m_data.uint64; break;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -        case eTypeUInt128:      m_data.uint128 =
          rhs.m_data.uint128; break;<br>
          > -#endif<br>
          > -        case eTypeFloat:        m_data.ieee_float =
          rhs.m_data.ieee_float; break;<br>
          > -        case eTypeDouble:       m_data.ieee_double =
          rhs.m_data.ieee_double; break;<br>
          > -        case eTypeLongDouble:   m_data.ieee_long_double
          = rhs.m_data.ieee_long_double; break;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:<br>
          > +        case eTypeUInt32:<br>
          > +        case eTypeUInt64:<br>
          > +        case eTypeUInt128:<br>
          > +        case eTypeFloat:<br>
          > +        case eTypeDouble:<br>
          > +        case eTypeLongDouble:   m_scalar = rhs.m_scalar;
          break;<br>
          >           case eTypeBytes:<br>
          > -            assert (rhs.m_data.buffer.length <=
          kMaxRegisterByteSize);<br>
          > -            ::memcpy (m_data.buffer.bytes,
          rhs.m_data.buffer.bytes, kMaxRegisterByteSize);<br>
          > -            m_data.buffer.length =
          rhs.m_data.buffer.length;<br>
          > -            m_data.buffer.byte_order =
          rhs.m_data.buffer.byte_order;<br>
          > +            assert (rhs.buffer.length <=
          kMaxRegisterByteSize);<br>
          > +            ::memcpy (buffer.bytes, rhs.buffer.bytes,
          kMaxRegisterByteSize);<br>
          > +            buffer.length = rhs.buffer.length;<br>
          > +            buffer.byte_order = rhs.buffer.byte_order;<br>
          >               break;<br>
          >       }<br>
          >       return true;<br>
          > @@ -678,15 +621,15 @@ RegisterValue::GetAsUInt16
          (uint16_t fai<br>
          >       switch (m_type)<br>
          >       {<br>
          >           default:            break;<br>
          > -        case eTypeUInt8:    return m_data.uint8;<br>
          > -        case eTypeUInt16:   return m_data.uint16;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:   return
          m_scalar.UShort(fail_value);<br>
          >           case eTypeBytes:<br>
          >           {<br>
          > -            switch (m_data.buffer.length)<br>
          > +            switch (buffer.length)<br>
          >               {<br>
          >               default:    break;<br>
          > -            case 1:     return m_data.uint8;<br>
          > -            case 2:     return m_data.uint16;<br>
          > +            case 1:<br>
          > +            case 2:     return *(const uint16_t
          *)buffer.bytes;<br>
          >               }<br>
          >           }<br>
          >           break;<br>
          > @@ -704,29 +647,20 @@ RegisterValue::GetAsUInt32
          (uint32_t fai<br>
          >       switch (m_type)<br>
          >       {<br>
          >           default:            break;<br>
          > -        case eTypeUInt8:    return m_data.uint8;<br>
          > -        case eTypeUInt16:   return m_data.uint16;<br>
          > -        case eTypeUInt32:   return m_data.uint32;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:<br>
          > +        case eTypeUInt32:<br>
          >           case eTypeFloat:<br>
          > -            if (sizeof(float) == sizeof(uint32_t))<br>
          > -                return m_data.uint32;<br>
          > -            break;<br>
          >           case eTypeDouble:<br>
          > -            if (sizeof(double) == sizeof(uint32_t))<br>
          > -                return m_data.uint32;<br>
          > -            break;<br>
          > -        case eTypeLongDouble:<br>
          > -            if (sizeof(long double) == sizeof(uint32_t))<br>
          > -                return m_data.uint32;<br>
          > -            break;<br>
          > +        case eTypeLongDouble:   return
          m_scalar.UInt(fail_value);<br>
          >           case eTypeBytes:<br>
          >           {<br>
          > -            switch (m_data.buffer.length)<br>
          > +            switch (buffer.length)<br>
          >               {<br>
          >               default:    break;<br>
          > -            case 1:     return m_data.uint8;<br>
          > -            case 2:     return m_data.uint16;<br>
          > -            case 4:     return m_data.uint32;<br>
          > +            case 1:<br>
          > +            case 2:<br>
          > +            case 4:     return *(const uint32_t
          *)buffer.bytes;<br>
          >               }<br>
          >           }<br>
          >           break;<br>
          > @@ -744,31 +678,22 @@ RegisterValue::GetAsUInt64
          (uint64_t fai<br>
          >       switch (m_type)<br>
          >       {<br>
          >           default:            break;<br>
          > -        case eTypeUInt8:    return m_data.uint8;<br>
          > -        case eTypeUInt16:   return m_data.uint16;<br>
          > -        case eTypeUInt32:   return m_data.uint32;<br>
          > -        case eTypeUInt64:   return m_data.uint64;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:<br>
          > +        case eTypeUInt32:<br>
          > +        case eTypeUInt64:<br>
          >           case eTypeFloat:<br>
          > -            if (sizeof(float) == sizeof(uint64_t))<br>
          > -                return m_data.uint64;<br>
          > -            break;<br>
          >           case eTypeDouble:<br>
          > -            if (sizeof(double) == sizeof(uint64_t))<br>
          > -                return m_data.uint64;<br>
          > -            break;<br>
          > -        case eTypeLongDouble:<br>
          > -            if (sizeof(long double) == sizeof(uint64_t))<br>
          > -                return m_data.uint64;<br>
          > -            break;<br>
          > +        case eTypeLongDouble: return
          m_scalar.ULongLong(fail_value);<br>
          >           case eTypeBytes:<br>
          >           {<br>
          > -            switch (m_data.buffer.length)<br>
          > +            switch (buffer.length)<br>
          >               {<br>
          >               default:    break;<br>
          > -            case 1:     return m_data.uint8;<br>
          > -            case 2:     return m_data.uint16;<br>
          > -            case 4:     return m_data.uint32;<br>
          > -            case 8:     return m_data.uint64;<br>
          > +            case 1:<br>
          > +            case 2:<br>
          > +            case 4:<br>
          > +            case 8:     return *(const uint64_t
          *)buffer.bytes;<br>
          >               }<br>
          >           }<br>
          >           break;<br>
          > @@ -778,43 +703,36 @@ RegisterValue::GetAsUInt64
          (uint64_t fai<br>
          >       return fail_value;<br>
          >   }<br>
          ><br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -__uint128_t<br>
          > -RegisterValue::GetAsUInt128 (__uint128_t fail_value,
          bool *success_ptr) const<br>
          > +llvm::APInt<br>
          > +RegisterValue::GetAsUInt128 (const llvm::APInt&
          fail_value, bool *success_ptr) const<br>
          >   {<br>
          >       if (success_ptr)<br>
          >           *success_ptr = true;<br>
          >       switch (m_type)<br>
          >       {<br>
          >           default:            break;<br>
          > -        case eTypeUInt8:    return m_data.uint8;<br>
          > -        case eTypeUInt16:   return m_data.uint16;<br>
          > -        case eTypeUInt32:   return m_data.uint32;<br>
          > -        case eTypeUInt64:   return m_data.uint64;<br>
          > -        case eTypeUInt128:  return m_data.uint128;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:<br>
          > +        case eTypeUInt32:<br>
          > +        case eTypeUInt64:<br>
          > +        case eTypeUInt128:<br>
          >           case eTypeFloat:<br>
          > -            if (sizeof(float) == sizeof(__uint128_t))<br>
          > -                return m_data.uint128;<br>
          > -            break;<br>
          >           case eTypeDouble:<br>
          > -            if (sizeof(double) == sizeof(__uint128_t))<br>
          > -                return m_data.uint128;<br>
          > -            break;<br>
          > -        case eTypeLongDouble:<br>
          > -            if (sizeof(long double) ==
          sizeof(__uint128_t))<br>
          > -                return m_data.uint128;<br>
          > -            break;<br>
          > +        case eTypeLongDouble:  return
          m_scalar.UInt128(fail_value);<br>
          >           case eTypeBytes:<br>
          >           {<br>
          > -            switch (m_data.buffer.length)<br>
          > +            switch (buffer.length)<br>
          >               {<br>
          > -            default:<br>
          > -                break;<br>
          > -            case 1:     return m_data.uint8;<br>
          > -            case 2:     return m_data.uint16;<br>
          > -            case 4:     return m_data.uint32;<br>
          > -            case 8:     return m_data.uint64;<br>
          > -            case 16:    return m_data.uint128;<br>
          > +                default:<br>
          > +                    break;<br>
          > +                case 1:<br>
          > +                case 2:<br>
          > +                case 4:<br>
          > +                case 8:<br>
          > +                case 16:<br>
          > +                {<br>
          > +                    return llvm::APInt(BITWIDTH_INT128,
          NUM_OF_WORDS_INT128, ((const type128 *)buffer.bytes)->x);<br>
          > +                }<br>
          >               }<br>
          >           }<br>
          >           break;<br>
          > @@ -823,7 +741,7 @@ RegisterValue::GetAsUInt128
          (__uint128_t<br>
          >           *success_ptr = false;<br>
          >       return fail_value;<br>
          >   }<br>
          > -#endif<br>
          > +<br>
          >   float<br>
          >   RegisterValue::GetAsFloat (float fail_value, bool
          *success_ptr) const<br>
          >   {<br>
          > @@ -833,28 +751,12 @@ RegisterValue::GetAsFloat (float
          fail_va<br>
          >       {<br>
          >           default:            break;<br>
          >           case eTypeUInt32:<br>
          > -            if (sizeof(float) == sizeof(m_data.uint32))<br>
          > -                return m_data.ieee_float;<br>
          > -            break;<br>
          >           case eTypeUInt64:<br>
          > -            if (sizeof(float) == sizeof(m_data.uint64))<br>
          > -                return m_data.ieee_float;<br>
          > -            break;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >           case eTypeUInt128:<br>
          > -            if (sizeof(float) == sizeof(m_data.uint128))<br>
          > -                return m_data.ieee_float;<br>
          > -            break;<br>
          > -#endif<br>
          > -        case eTypeFloat:    return m_data.ieee_float;<br>
          > +        case eTypeFloat:<br>
          >           case eTypeDouble:<br>
          > -            if (sizeof(float) == sizeof(double))<br>
          > -                return m_data.ieee_float;<br>
          > -            break;<br>
          >           case eTypeLongDouble:<br>
          > -            if (sizeof(float) == sizeof(long double))<br>
          > -                return m_data.ieee_float;<br>
          > -            break;<br>
          > +            return m_scalar.Float(fail_value);<br>
          >       }<br>
          >       if (success_ptr)<br>
          >           *success_ptr = false;<br>
          > @@ -872,27 +774,12 @@ RegisterValue::GetAsDouble (double
          fail_<br>
          >               break;<br>
          ><br>
          >           case eTypeUInt32:<br>
          > -            if (sizeof(double) == sizeof(m_data.uint32))<br>
          > -                return m_data.ieee_double;<br>
          > -            break;<br>
          > -<br>
          >           case eTypeUInt64:<br>
          > -            if (sizeof(double) == sizeof(m_data.uint64))<br>
          > -                return m_data.ieee_double;<br>
          > -            break;<br>
          > -<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >           case eTypeUInt128:<br>
          > -            if (sizeof(double) ==
          sizeof(m_data.uint128))<br>
          > -                return m_data.ieee_double;<br>
          > -#endif<br>
          > -        case eTypeFloat:    return m_data.ieee_float;<br>
          > -        case eTypeDouble:   return m_data.ieee_double;<br>
          > -<br>
          > +        case eTypeFloat:<br>
          > +        case eTypeDouble:<br>
          >           case eTypeLongDouble:<br>
          > -            if (sizeof(double) == sizeof(long double))<br>
          > -                return m_data.ieee_double;<br>
          > -            break;<br>
          > +            return m_scalar.Double(fail_value);<br>
          >       }<br>
          >       if (success_ptr)<br>
          >           *success_ptr = false;<br>
          > @@ -910,24 +797,12 @@ RegisterValue::GetAsLongDouble
          (long dou<br>
          >               break;<br>
          ><br>
          >           case eTypeUInt32:<br>
          > -            if (sizeof(long double) ==
          sizeof(m_data.uint32))<br>
          > -                return m_data.ieee_long_double;<br>
          > -            break;<br>
          > -<br>
          >           case eTypeUInt64:<br>
          > -            if (sizeof(long double) ==
          sizeof(m_data.uint64))<br>
          > -                return m_data.ieee_long_double;<br>
          > -            break;<br>
          > -<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >           case eTypeUInt128:<br>
          > -            if (sizeof(long double) ==
          sizeof(m_data.uint128))<br>
          > -                return m_data.ieee_long_double;<br>
          > -#endif<br>
          > -        case eTypeFloat:        return
          m_data.ieee_float;<br>
          > -        case eTypeDouble:       return
          m_data.ieee_double;<br>
          > -        case eTypeLongDouble:   return
          m_data.ieee_long_double;<br>
          > -            break;<br>
          > +        case eTypeFloat:<br>
          > +        case eTypeDouble:<br>
          > +        case eTypeLongDouble:<br>
          > +            return m_scalar.LongDouble();<br>
          >       }<br>
          >       if (success_ptr)<br>
          >           *success_ptr = false;<br>
          > @@ -940,17 +815,15 @@ RegisterValue::GetBytes () const<br>
          >       switch (m_type)<br>
          >       {<br>
          >           case eTypeInvalid:      break;<br>
          > -        case eTypeUInt8:        return
          &m_data.uint8;<br>
          > -        case eTypeUInt16:       return
          &m_data.uint16;<br>
          > -        case eTypeUInt32:       return
          &m_data.uint32;<br>
          > -        case eTypeUInt64:       return
          &m_data.uint64;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -        case eTypeUInt128:      return
          &m_data.uint128;<br>
          > -#endif<br>
          > -        case eTypeFloat:        return
          &m_data.ieee_float;<br>
          > -        case eTypeDouble:       return
          &m_data.ieee_double;<br>
          > -        case eTypeLongDouble:   return
          &m_data.ieee_long_double;<br>
          > -        case eTypeBytes:        return
          m_data.buffer.bytes;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:<br>
          > +        case eTypeUInt32:<br>
          > +        case eTypeUInt64:<br>
          > +        case eTypeUInt128:<br>
          > +        case eTypeFloat:<br>
          > +        case eTypeDouble:<br>
          > +        case eTypeLongDouble:   return
          m_scalar.GetBytes();<br>
          > +        case eTypeBytes:        return buffer.bytes;<br>
          >       }<br>
          >       return NULL;<br>
          >   }<br>
          > @@ -961,17 +834,15 @@ RegisterValue::GetBytes ()<br>
          >       switch (m_type)<br>
          >       {<br>
          >           case eTypeInvalid:      break;<br>
          > -        case eTypeUInt8:        return
          &m_data.uint8;<br>
          > -        case eTypeUInt16:       return
          &m_data.uint16;<br>
          > -        case eTypeUInt32:       return
          &m_data.uint32;<br>
          > -        case eTypeUInt64:       return
          &m_data.uint64;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -        case eTypeUInt128:      return
          &m_data.uint128;<br>
          > -#endif<br>
          > -        case eTypeFloat:        return
          &m_data.ieee_float;<br>
          > -        case eTypeDouble:       return
          &m_data.ieee_double;<br>
          > -        case eTypeLongDouble:   return
          &m_data.ieee_long_double;<br>
          > -        case eTypeBytes:        return
          m_data.buffer.bytes;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:<br>
          > +        case eTypeUInt32:<br>
          > +        case eTypeUInt64:<br>
          > +        case eTypeUInt128:<br>
          > +        case eTypeFloat:<br>
          > +        case eTypeDouble:<br>
          > +        case eTypeLongDouble:   return
          m_scalar.GetBytes();<br>
          > +        case eTypeBytes:        return buffer.bytes;<br>
          >       }<br>
          >       return NULL;<br>
          >   }<br>
          > @@ -982,17 +853,15 @@ RegisterValue::GetByteSize () const<br>
          >       switch (m_type)<br>
          >       {<br>
          >           case eTypeInvalid: break;<br>
          > -        case eTypeUInt8:        return
          sizeof(m_data.uint8);<br>
          > -        case eTypeUInt16:       return
          sizeof(m_data.uint16);<br>
          > -        case eTypeUInt32:       return
          sizeof(m_data.uint32);<br>
          > -        case eTypeUInt64:       return
          sizeof(m_data.uint64);<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -        case eTypeUInt128:      return
          sizeof(m_data.uint128);<br>
          > -#endif<br>
          > -        case eTypeFloat:        return
          sizeof(m_data.ieee_float);<br>
          > -        case eTypeDouble:       return
          sizeof(m_data.ieee_double);<br>
          > -        case eTypeLongDouble:   return
          sizeof(m_data.ieee_long_double);<br>
          > -        case eTypeBytes: return m_data.buffer.length;<br>
          > +        case eTypeUInt8:   return 1;<br>
          > +        case eTypeUInt16:  return 2;<br>
          > +        case eTypeUInt32:<br>
          > +        case eTypeUInt64:<br>
          > +        case eTypeUInt128:<br>
          > +        case eTypeFloat:<br>
          > +        case eTypeDouble:<br>
          > +        case eTypeLongDouble: return
          m_scalar.GetByteSize();<br>
          > +        case eTypeBytes: return buffer.length;<br>
          >       }<br>
          >       return 0;<br>
          >   }<br>
          > @@ -1021,12 +890,10 @@ RegisterValue::SetUInt (uint64_t
          uint, u<br>
          >       {<br>
          >           SetUInt64 (uint);<br>
          >       }<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          >       else if (byte_size <= 16)<br>
          >       {<br>
          > -        SetUInt128 (uint);<br>
          > +        SetUInt128 (llvm::APInt(64, uint));<br>
          >       }<br>
          > -#endif<br>
          >       else<br>
          >           return false;<br>
          >       return true;<br>
          > @@ -1036,21 +903,21 @@ void<br>
          >   RegisterValue::SetBytes (const void *bytes, size_t
          length, lldb::ByteOrder byte_order)<br>
          >   {<br>
          >       // If this assertion fires off we need to increase
          the size of<br>
          > -    // m_data.buffer.bytes, or make it something that is
          allocated on<br>
          > +    // buffer.bytes, or make it something that is
          allocated on<br>
          >       // the heap. Since the data buffer is in a union,
          we can't make it<br>
          >       // a collection class like SmallVector...<br>
          >       if (bytes && length > 0)<br>
          >       {<br>
          > -        assert (length <= sizeof
          (m_data.buffer.bytes) && "Storing too many bytes in a
          RegisterValue.");<br>
          > +        assert (length <= sizeof (buffer.bytes)
          && "Storing too many bytes in a RegisterValue.");<br>
          >           m_type = eTypeBytes;<br>
          > -        m_data.buffer.length = length;<br>
          > -        memcpy (m_data.buffer.bytes, bytes, length);<br>
          > -        m_data.buffer.byte_order = byte_order;<br>
          > +        buffer.length = length;<br>
          > +        memcpy (buffer.bytes, bytes, length);<br>
          > +        buffer.byte_order = byte_order;<br>
          >       }<br>
          >       else<br>
          >       {<br>
          >           m_type = eTypeInvalid;<br>
          > -        m_data.buffer.length = 0;<br>
          > +        buffer.length = 0;<br>
          >       }<br>
          >   }<br>
          ><br>
          > @@ -1063,25 +930,23 @@ RegisterValue::operator == (const
          Regist<br>
          >           switch (m_type)<br>
          >           {<br>
          >               case eTypeInvalid:      return true;<br>
          > -            case eTypeUInt8:        return m_data.uint8
          == rhs.m_data.uint8;<br>
          > -            case eTypeUInt16:       return m_data.uint16
          == rhs.m_data.uint16;<br>
          > -            case eTypeUInt32:       return m_data.uint32
          == rhs.m_data.uint32;<br>
          > -            case eTypeUInt64:       return m_data.uint64
          == rhs.m_data.uint64;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -            case eTypeUInt128:      return
          m_data.uint128 == rhs.m_data.uint128;<br>
          > -#endif<br>
          > -            case eTypeFloat:        return
          m_data.ieee_float == rhs.m_data.ieee_float;<br>
          > -            case eTypeDouble:       return
          m_data.ieee_double == rhs.m_data.ieee_double;<br>
          > -            case eTypeLongDouble:   return
          m_data.ieee_long_double == rhs.m_data.ieee_long_double;<br>
          > +            case eTypeUInt8:<br>
          > +            case eTypeUInt16:<br>
          > +            case eTypeUInt32:<br>
          > +            case eTypeUInt64:<br>
          > +            case eTypeUInt128:<br>
          > +            case eTypeFloat:<br>
          > +            case eTypeDouble:<br>
          > +            case eTypeLongDouble:   return m_scalar ==
          rhs.m_scalar;<br>
          >               case eTypeBytes:<br>
          > -                if (m_data.buffer.length !=
          rhs.m_data.buffer.length)<br>
          > +                if (buffer.length != rhs.buffer.length)<br>
          >                       return false;<br>
          >                   else<br>
          >                   {<br>
          > -                    uint8_t length =
          m_data.buffer.length;<br>
          > +                    uint8_t length = buffer.length;<br>
          >                       if (length >
          kMaxRegisterByteSize)<br>
          >                           length = kMaxRegisterByteSize;<br>
          > -                    return memcmp (m_data.buffer.bytes,
          rhs.m_data.buffer.bytes, length) == 0;<br>
          > +                    return memcmp (buffer.bytes,
          rhs.buffer.bytes, length) == 0;<br>
          >                   }<br>
          >                   break;<br>
          >           }<br>
          > @@ -1097,27 +962,25 @@ RegisterValue::operator != (const
          Regist<br>
          >       switch (m_type)<br>
          >       {<br>
          >           case eTypeInvalid:      return false;<br>
          > -        case eTypeUInt8:        return m_data.uint8 !=
          rhs.m_data.uint8;<br>
          > -        case eTypeUInt16:       return m_data.uint16 !=
          rhs.m_data.uint16;<br>
          > -        case eTypeUInt32:       return m_data.uint32 !=
          rhs.m_data.uint32;<br>
          > -        case eTypeUInt64:       return m_data.uint64 !=
          rhs.m_data.uint64;<br>
          > -#if defined (ENABLE_128_BIT_SUPPORT)<br>
          > -        case eTypeUInt128:      return m_data.uint128 !=
          rhs.m_data.uint128;<br>
          > -#endif<br>
          > -        case eTypeFloat:        return m_data.ieee_float
          != rhs.m_data.ieee_float;<br>
          > -        case eTypeDouble:       return
          m_data.ieee_double != rhs.m_data.ieee_double;<br>
          > -        case eTypeLongDouble:   return
          m_data.ieee_long_double != rhs.m_data.ieee_long_double;<br>
          > +        case eTypeUInt8:<br>
          > +        case eTypeUInt16:<br>
          > +        case eTypeUInt32:<br>
          > +        case eTypeUInt64:<br>
          > +        case eTypeUInt128:<br>
          > +        case eTypeFloat:<br>
          > +        case eTypeDouble:<br>
          > +        case eTypeLongDouble:   return m_scalar !=
          rhs.m_scalar;<br>
          >           case eTypeBytes:<br>
          > -            if (m_data.buffer.length !=
          rhs.m_data.buffer.length)<br>
          > +            if (buffer.length != rhs.buffer.length)<br>
          >               {<br>
          >                   return true;<br>
          >               }<br>
          >               else<br>
          >               {<br>
          > -                uint8_t length = m_data.buffer.length;<br>
          > +                uint8_t length = buffer.length;<br>
          >                   if (length > kMaxRegisterByteSize)<br>
          >                       length = kMaxRegisterByteSize;<br>
          > -                return memcmp (m_data.buffer.bytes,
          rhs.m_data.buffer.bytes, length) != 0;<br>
          > +                return memcmp (buffer.bytes,
          rhs.buffer.bytes, length) != 0;<br>
          >               }<br>
          >               break;<br>
          >       }<br>
          > @@ -1132,63 +995,35 @@ RegisterValue::ClearBit (uint32_t
          bit)<br>
          >           case eTypeInvalid:<br>
          >               break;<br>
          ><br>
          > -        case eTypeUInt8:<br>
          > -            if (bit < 8)<br>
          > -            {<br>
        </blockquote>
      </div>
    </blockquote>
    <br>
  </body>
</html>