Revert r152202: "Use uint16_t to store InstrNameIndices in MCInstrInfo."
[oota-llvm.git] / utils / TableGen / SubtargetEmitter.cpp
index 34cd9a9e906d3f9d50bdda6bccff509d282ea524..986c50f878652b6ba1b72a25df9b10038856bb11 100644 (file)
@@ -39,28 +39,41 @@ void SubtargetEmitter::Enumeration(raw_ostream &OS,
 
   OS << "namespace " << Target << " {\n";
 
-  // Open enumeration
-  OS << "enum {\n";
+  // For bit flag enumerations with more than 32 items, emit constants.
+  // Emit an enum for everything else.
+  if (isBits && N > 32) {
+    // For each record
+    for (unsigned i = 0; i < N; i++) {
+      // Next record
+      Record *Def = DefList[i];
+
+      // Get and emit name and expression (1 << i)
+      OS << "  const uint64_t " << Def->getName() << " = 1ULL << " << i << ";\n";
+    }
+  } else {
+    // Open enumeration
+    OS << "enum {\n";
 
-  // For each record
-  for (unsigned i = 0; i < N;) {
-    // Next record
-    Record *Def = DefList[i];
+    // For each record
+    for (unsigned i = 0; i < N;) {
+      // Next record
+      Record *Def = DefList[i];
 
-    // Get and emit name
-    OS << "  " << Def->getName();
+      // Get and emit name
+      OS << "  " << Def->getName();
 
-    // If bit flags then emit expression (1 << i)
-    if (isBits)  OS << " = " << " 1ULL << " << i;
+      // If bit flags then emit expression (1 << i)
+      if (isBits)  OS << " = " << " 1ULL << " << i;
 
-    // Depending on 'if more in the list' emit comma
-    if (++i < N) OS << ",";
+      // Depending on 'if more in the list' emit comma
+      if (++i < N) OS << ",";
 
-    OS << "\n";
-  }
+      OS << "\n";
+    }
 
-  // Close enumeration
-  OS << "};\n";
+    // Close enumeration
+    OS << "};\n";
+  }
 
   OS << "}\n";
 }