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
lldb-commits@cs.uiuc.edu
http://lists.cs.uiuc.edu/mailman/listinfo/lldb-commits

Reply via email to