<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>