chaoren added a reviewer: clayborg.
chaoren added a subscriber: lldb-commits.
http://reviews.llvm.org/D10976
Files:
source/Core/DataExtractor.cpp
Index: source/Core/DataExtractor.cpp
===================================================================
--- source/Core/DataExtractor.cpp
+++ source/Core/DataExtractor.cpp
@@ -1830,26 +1830,16 @@
}
else if (item_bit_size ==
ast->getTypeSize(ast->LongDoubleTy))
{
+ auto byte_size = item_byte_size;
+ const auto &semantics =
ast->getFloatTypeSemantics(ast->LongDoubleTy);
+ if (&semantics ==
&llvm::APFloat::x87DoubleExtended)
+ byte_size = 10;
+
llvm::APInt apint;
- switch
(target_sp->GetArchitecture().GetMachine())
+ if (GetAPInt(*this, &offset, byte_size, apint))
{
- 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;
-
- 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::APFloat apfloat(semantics, apint);
+ apfloat.toString(sv, format_precision,
format_max_padding);
}
}
else if (item_bit_size ==
ast->getTypeSize(ast->HalfTy))
Index: source/Core/DataExtractor.cpp
===================================================================
--- source/Core/DataExtractor.cpp
+++ source/Core/DataExtractor.cpp
@@ -1830,26 +1830,16 @@
}
else if (item_bit_size == ast->getTypeSize(ast->LongDoubleTy))
{
+ auto byte_size = item_byte_size;
+ const auto &semantics = ast->getFloatTypeSemantics(ast->LongDoubleTy);
+ if (&semantics == &llvm::APFloat::x87DoubleExtended)
+ byte_size = 10;
+
llvm::APInt apint;
- switch (target_sp->GetArchitecture().GetMachine())
+ if (GetAPInt(*this, &offset, byte_size, apint))
{
- 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;
-
- 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::APFloat apfloat(semantics, apint);
+ apfloat.toString(sv, format_precision, format_max_padding);
}
}
else if (item_bit_size == ast->getTypeSize(ast->HalfTy))
_______________________________________________
lldb-commits mailing list
[email protected]
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits