diff --git a/include/clang/Basic/TargetInfo.h b/include/clang/Basic/TargetInfo.h
index 36fbb0d..0196de2 100644
--- a/include/clang/Basic/TargetInfo.h
+++ b/include/clang/Basic/TargetInfo.h
@@ -38,7 +38,9 @@
   unsigned char PointerWidth, PointerAlign;
   unsigned char WCharWidth, WCharAlign;
   unsigned char IntWidth, IntAlign;
+  unsigned char FloatWidth, FloatAlign;
   unsigned char DoubleWidth, DoubleAlign;
+  unsigned char LongDoubleWidth, LongDoubleAlign;
   unsigned char LongWidth, LongAlign;
   unsigned char LongLongWidth, LongLongAlign;
   
@@ -114,8 +116,8 @@
   unsigned getWCharAlign() const { return WCharAlign; }
 
   /// getFloatWidth/Align/Format - Return the size/align/format of 'float'.
-  unsigned getFloatWidth() const { return 32; } // FIXME
-  unsigned getFloatAlign() const { return 32; } // FIXME
+  unsigned getFloatWidth() const { return FloatWidth; }
+  unsigned getFloatAlign() const { return FloatAlign; }
   const llvm::fltSemantics *getFloatFormat() const { return FloatFormat; }
 
   /// getDoubleWidth/Align/Format - Return the size/align/format of 'double'.
@@ -125,8 +127,8 @@
 
   /// getLongDoubleWidth/Align/Format - Return the size/align/format of 'long
   /// double'.
-  unsigned getLongDoubleWidth() const { return 64; } // FIXME
-  unsigned getLongDoubleAlign() const { return 64; } // FIXME
+  unsigned getLongDoubleWidth() const { return LongDoubleWidth; }
+  unsigned getLongDoubleAlign() const { return LongDoubleAlign; }
   const llvm::fltSemantics *getLongDoubleFormat() const {
     return LongDoubleFormat;
   }
diff --git a/lib/Basic/TargetInfo.cpp b/lib/Basic/TargetInfo.cpp
index e8fc923..6562911 100644
--- a/lib/Basic/TargetInfo.cpp
+++ b/lib/Basic/TargetInfo.cpp
@@ -21,15 +21,21 @@
 
 // TargetInfo Constructor.
 TargetInfo::TargetInfo(const std::string &T) : Triple(T) {
-  // Set defaults.  These should be overridden by concrete targets as needed.
+  // Set defaults.  Defaults are set for a 32-bit RISC platform,
+  // like PPC or SPARC.
+  // These should be overridden by concrete targets as needed.
   CharIsSigned = true;
   PointerWidth = PointerAlign = 32;
   WCharWidth = WCharAlign = 32;
   IntWidth = IntAlign = 32;
   LongWidth = LongAlign = 32;
   LongLongWidth = LongLongAlign = 64;
+  FloatWidth = 32;
+  FloatAlign = 32;
   DoubleWidth = 64;
-  DoubleAlign = 32;
+  DoubleAlign = 64;
+  LongDoubleWidth = 64;
+  LongDoubleAlign = 64;
   FloatFormat = &llvm::APFloat::IEEEsingle;
   DoubleFormat = &llvm::APFloat::IEEEdouble;
   LongDoubleFormat = &llvm::APFloat::IEEEdouble;
diff --git a/lib/Basic/Targets.cpp b/lib/Basic/Targets.cpp
index d7bbe50..8aa4a4f 100644
--- a/lib/Basic/Targets.cpp
+++ b/lib/Basic/Targets.cpp
@@ -697,8 +697,13 @@
 namespace {
 class DarwinI386TargetInfo : public DarwinTargetInfo {
 public:
-  DarwinI386TargetInfo(const std::string& triple) : DarwinTargetInfo(triple) {}
-  
+  DarwinI386TargetInfo(const std::string& triple) : DarwinTargetInfo(triple) {
+    DoubleAlign = LongLongAlign = 32;
+    LongDoubleWidth = 96;
+    LongDoubleAlign = 32;
+    LongDoubleFormat = &llvm::APFloat::x87DoubleExtended;
+  }
+
   virtual void getTargetDefines(std::vector<char> &Defines) const {
     DarwinTargetInfo::getTargetDefines(Defines);
     getX86Defines(Defines, false);
@@ -741,6 +746,9 @@
 public:
   DarwinX86_64TargetInfo(const std::string& triple) : DarwinTargetInfo(triple) {
     LongWidth = LongAlign = PointerWidth = PointerAlign = 64;
+    LongDoubleWidth = 128;
+    LongDoubleAlign = 128;
+    LongDoubleFormat = &llvm::APFloat::x87DoubleExtended;
   }
   
   virtual void getTargetDefines(std::vector<char> &Defines) const {
@@ -782,7 +790,9 @@
 namespace {
 class DarwinARMTargetInfo : public DarwinTargetInfo {
 public:
-  DarwinARMTargetInfo(const std::string& triple) :DarwinTargetInfo(triple) {}
+  DarwinARMTargetInfo(const std::string& triple) :DarwinTargetInfo(triple) {
+    // FIXME: Are the defaults corrent for ARM?
+  }
   
   virtual void getTargetDefines(std::vector<char> &Defines) const {
     DarwinTargetInfo::getTargetDefines(Defines);
@@ -871,7 +881,10 @@
   class PIC16TargetInfo : public TargetInfo{
   public:
     PIC16TargetInfo(const std::string& triple) : TargetInfo(triple) {
-      IntWidth = IntAlign = 16;
+      // FIXME: Is IntAlign really supposed to be 16?  There seems
+      // little point on a platform with 8-bit loads.
+      IntWidth = IntAlign = LongAlign = LongLongAlign = PointerWidth = 16;
+      PointerAlign = 8;
     }
     virtual uint64_t getPointerWidthV(unsigned AddrSpace) const { return 16; }
     virtual uint64_t getPointerAlignV(unsigned AddrSpace) const { return 8; }
@@ -909,25 +922,25 @@
 TargetInfo* TargetInfo::CreateTargetInfo(const std::string &T) {
   if (T.find("ppc-") == 0 || T.find("powerpc-") == 0)
     return new DarwinPPCTargetInfo(T);
-  
+
   if (T.find("ppc64-") == 0 || T.find("powerpc64-") == 0)
     return new DarwinPPC64TargetInfo(T);
-  
+
   if (T.find("armv6-") == 0 || T.find("arm-") == 0)
     return new DarwinARMTargetInfo(T);
 
   if (T.find("sparc-") == 0)
     return new SolarisSparcV8TargetInfo(T); // ugly hack
-  
+
   if (T.find("x86_64-") == 0)
     return new DarwinX86_64TargetInfo(T);
-  
+
   if (T.find("pic16-") == 0)
     return new PIC16TargetInfo(T);
 
   if (IsX86(T))
     return new DarwinI386TargetInfo(T);
-  
+
   return NULL;
 }
 
