Fix APFloat construction from 16 byte APInt.

Reviewers: clayborg

Subscribers: lldb-commits

Differential Revision: http://reviews.llvm.org/D10976

llvm-svn: 241606
This commit is contained in:
Chaoren Lin 2015-07-07 17:39:23 +00:00
parent be8b0ea854
commit 57fca019e4
1 changed files with 8 additions and 18 deletions

View File

@ -1830,26 +1830,16 @@ DataExtractor::Dump (Stream *s,
}
else if (item_bit_size == ast->getTypeSize(ast->LongDoubleTy))
{
llvm::APInt apint;
switch (target_sp->GetArchitecture().GetMachine())
{
case llvm::Triple::x86:
case llvm::Triple::x86_64:
// clang will assert when constructing the apfloat if we use a 16 byte integer value
if (GetAPInt (*this, &offset, 10, apint))
{
llvm::APFloat apfloat (ast->getFloatTypeSemantics(ast->LongDoubleTy), apint);
apfloat.toString(sv, format_precision, format_max_padding);
}
break;
auto byte_size = item_byte_size;
const auto &semantics = ast->getFloatTypeSemantics(ast->LongDoubleTy);
if (&semantics == &llvm::APFloat::x87DoubleExtended)
byte_size = 10;
default:
if (GetAPInt (*this, &offset, item_byte_size, apint))
{
llvm::APFloat apfloat (ast->getFloatTypeSemantics(ast->LongDoubleTy), apint);
apfloat.toString(sv, format_precision, format_max_padding);
}
break;
llvm::APInt apint;
if (GetAPInt(*this, &offset, byte_size, apint))
{
llvm::APFloat apfloat(semantics, apint);
apfloat.toString(sv, format_precision, format_max_padding);
}
}
else if (item_bit_size == ast->getTypeSize(ast->HalfTy))