diff --git a/lib/Bytecode/Reader/Reader.cpp b/lib/Bytecode/Reader/Reader.cpp
index 097a8d4..3076f20 100644
--- a/lib/Bytecode/Reader/Reader.cpp
+++ b/lib/Bytecode/Reader/Reader.cpp
@@ -498,9 +498,15 @@
   if (read_vbr(Buf, EndBuf, Version)) return true;
 
   // Unpack version number: low four bits are for flags, top bits = version
-  isBigEndian     = Version & 1;
-  hasLongPointers = Version & 2;
-  RevisionNum     = Version >> 4;
+  Module::Endianness  Endianness;
+  Module::PointerSize PointerSize;
+  Endianness  = (Version & 1) ? Module::BigEndian : Module::LittleEndian;
+  PointerSize = (Version & 2) ? Module::Pointer64 : Module::Pointer32;
+
+  bool hasNoEndianness = Version & 4;
+  bool hasNoPointerSize = Version & 8;
+  
+  RevisionNum = Version >> 4;
 
   // Default values for the current bytecode version
   HasImplicitZeroInitializer = true;
@@ -515,11 +521,14 @@
     //
     if (Version != 14) return true;  // Unknown revision 0 flags?
     HasImplicitZeroInitializer = false;
-    isBigEndian = hasLongPointers = true;
+    Endianness  = Module::BigEndian;
+    PointerSize = Module::Pointer64;
     hasInternalMarkerOnly = true;
+    hasNoEndianness = hasNoPointerSize = false;
     break;
   case 1:
-    // Version #1 has two bit fields: isBigEndian and hasLongPointers
+    // Version #1 has four bit fields: isBigEndian, hasLongPointers,
+    // hasNoEndianness, and hasNoPointerSize.
     hasInternalMarkerOnly = true;
     break;
   case 2:
@@ -531,14 +540,14 @@
     return true;
   }
 
-  TheModule->setEndianness(isBigEndian ? Module::BigEndian :
-                                         Module::LittleEndian);
-  TheModule->setPointerSize(hasLongPointers ? Module::Pointer64 : 
-                                              Module::Pointer32);
+  if (hasNoEndianness) Endianness  = Module::AnyEndianness;
+  if (hasNoPointerSize) PointerSize = Module::AnyPointerSize;
 
+  TheModule->setEndianness(Endianness);
+  TheModule->setPointerSize(PointerSize);
   BCR_TRACE(1, "Bytecode Rev = " << (unsigned)RevisionNum << "\n");
-  BCR_TRACE(1, "BigEndian/LongPointers = " << isBigEndian << ","
-               << hasLongPointers << "\n");
+  BCR_TRACE(1, "Endianness/PointerSize = " << Endianness << ","
+               << PointerSize << "\n");
   BCR_TRACE(1, "HasImplicitZeroInit = " << HasImplicitZeroInitializer << "\n");
   return false;
 }
diff --git a/lib/Bytecode/Reader/ReaderInternals.h b/lib/Bytecode/Reader/ReaderInternals.h
index e09e5e5..a57ad7c 100644
--- a/lib/Bytecode/Reader/ReaderInternals.h
+++ b/lib/Bytecode/Reader/ReaderInternals.h
@@ -86,7 +86,6 @@
   unsigned char RevisionNum;        // The rev # itself
   unsigned char FirstDerivedTyID;   // First variable index to use for type
   bool HasImplicitZeroInitializer;  // Is entry 0 of every slot implicity zeros?
-  bool isBigEndian, hasLongPointers;// Information about the target compiled for
   bool hasInternalMarkerOnly;       // Only types of linkage are intern/external
 
   typedef std::vector<ValueList*> ValueTable;
diff --git a/lib/Bytecode/Writer/Writer.cpp b/lib/Bytecode/Writer/Writer.cpp
index f8d9489..096dc69 100644
--- a/lib/Bytecode/Writer/Writer.cpp
+++ b/lib/Bytecode/Writer/Writer.cpp
@@ -43,11 +43,14 @@
   // Emit the top level CLASS block.
   BytecodeBlock ModuleBlock(BytecodeFormat::Module, Out);
 
-  bool isBigEndian = M->isBigEndian();
-  bool hasLongPointers = M->has64BitPointers();
+  bool isBigEndian      = M->getEndianness() == Module::BigEndian;
+  bool hasLongPointers  = M->getPointerSize() == Module::Pointer64;
+  bool hasNoEndianness  = M->getEndianness() == Module::AnyEndianness;
+  bool hasNoPointerSize = M->getPointerSize() == Module::AnyPointerSize;
 
   // Output the version identifier... we are currently on bytecode version #2
-  unsigned Version = (2 << 4) | isBigEndian | (hasLongPointers << 1);
+  unsigned Version = (2 << 4) | isBigEndian | (hasLongPointers << 1) |
+                     (hasNoEndianness << 2) | (hasNoPointerSize << 3);
   output_vbr(Version, Out);
   align32(Out);
 
