diff --git a/lib/Target/ARM/ARMTargetAsmInfo.cpp b/lib/Target/ARM/ARMTargetAsmInfo.cpp
index 7afbab3..10b570c 100644
--- a/lib/Target/ARM/ARMTargetAsmInfo.cpp
+++ b/lib/Target/ARM/ARMTargetAsmInfo.cpp
@@ -17,7 +17,7 @@
 #include <cctype>
 using namespace llvm;
 
-static const char *const arm_asm_table[] = {
+const char *const llvm::arm_asm_table[] = {
                                       "{r0}", "r0",
                                       "{r1}", "r1",
                                       "{r2}", "r2",
@@ -42,21 +42,17 @@
                                       "{cc}", "cc",
                                       0,0};
 
-ARMTargetAsmInfo::ARMTargetAsmInfo(const ARMTargetMachine &TM) {
-  AsmTransCBE = arm_asm_table;
-
-  AlignmentIsInBytes = false;
-  Data64bitsDirective = 0;
-  CommentString = "@";
-  ConstantPoolSection = "\t.text\n";
-  COMMDirectiveTakesAlignment = false;
-  InlineAsmStart = "@ InlineAsm Start";
-  InlineAsmEnd = "@ InlineAsm End";
-  LCOMMDirective = "\t.lcomm\t";
-}
+// Instantiate 'common' cases.
+TEMPLATE_INSTANTIATION(class ARMTargetAsmInfo<TargetAsmInfo>);
+TEMPLATE_INSTANTIATION(
+unsigned ARMTargetAsmInfo<TargetAsmInfo>::getInlineAsmLength(const char*) const);
+TEMPLATE_INSTANTIATION(
+  unsigned ARMTargetAsmInfo<TargetAsmInfo>::countArguments(const char*) const);
+TEMPLATE_INSTANTIATION(
+  unsigned ARMTargetAsmInfo<TargetAsmInfo>::countString(const char*) const);
 
 ARMDarwinTargetAsmInfo::ARMDarwinTargetAsmInfo(const ARMTargetMachine &TM):
-  ARMTargetAsmInfo(TM), DarwinTargetAsmInfo(TM) {
+  ARMTargetAsmInfo<DarwinTargetAsmInfo>(TM) {
   Subtarget = &DTM->getSubtarget<ARMSubtarget>();
 
   GlobalPrefix = "_";
@@ -104,7 +100,7 @@
 }
 
 ARMELFTargetAsmInfo::ARMELFTargetAsmInfo(const ARMTargetMachine &TM):
-  ARMTargetAsmInfo(TM), ELFTargetAsmInfo(TM) {
+  ARMTargetAsmInfo<ELFTargetAsmInfo>(TM) {
   Subtarget = &ETM->getSubtarget<ARMSubtarget>();
 
   NeedsSet = false;
@@ -138,13 +134,15 @@
 
 /// Count the number of comma-separated arguments.
 /// Do not try to detect errors.
-unsigned ARMTargetAsmInfo::countArguments(const char* p) const {
+template <class BaseTAI>
+unsigned ARMTargetAsmInfo<BaseTAI>::countArguments(const char* p) const {
   unsigned count = 0;
   while (*p && isspace(*p) && *p != '\n')
     p++;
   count++;
-  while (*p && *p!='\n' && 
-         strncmp(p, CommentString, strlen(CommentString))!=0) {
+  while (*p && *p!='\n' &&
+         strncmp(p, BaseTAI::CommentString,
+                 strlen(BaseTAI::CommentString))!=0) {
     if (*p==',')
       count++;
     p++;
@@ -154,7 +152,8 @@
 
 /// Count the length of a string enclosed in quote characters.
 /// Do not try to detect errors.
-unsigned ARMTargetAsmInfo::countString(const char* p) const {
+template <class BaseTAI>
+unsigned ARMTargetAsmInfo<BaseTAI>::countString(const char* p) const {
   unsigned count = 0;
   while (*p && isspace(*p) && *p!='\n')
     p++;
@@ -166,7 +165,8 @@
 }
 
 /// ARM-specific version of TargetAsmInfo::getInlineAsmLength.
-unsigned ARMTargetAsmInfo::getInlineAsmLength(const char *s) const {
+template <class BaseTAI>
+unsigned ARMTargetAsmInfo<BaseTAI>::getInlineAsmLength(const char *s) const {
   // Make a lowercase-folded version of s for counting purposes.
   char *q, *s_copy = (char *)malloc(strlen(s) + 1);
   strcpy(s_copy, s);
@@ -192,7 +192,7 @@
           break;
         }
       // Ignore everything from comment char(s) to EOL
-      if (strncmp(Str, CommentString, strlen(CommentString))==-0)
+      if (strncmp(Str, BaseTAI::CommentString, strlen(BaseTAI::CommentString))==-0)
         atInsnStart = false;
       // FIXME do something like the following for non-Darwin
       else if (*Str == '.' && Subtarget->isTargetDarwin()) {
@@ -282,7 +282,7 @@
           Length += 4;    // ARM
       }
     }
-    if (*Str == '\n' || *Str == SeparatorChar)
+    if (*Str == '\n' || *Str == BaseTAI::SeparatorChar)
       atInsnStart = true;
   }
   free(s_copy);
diff --git a/lib/Target/ARM/ARMTargetAsmInfo.h b/lib/Target/ARM/ARMTargetAsmInfo.h
index 9030d06..9e6f856 100644
--- a/lib/Target/ARM/ARMTargetAsmInfo.h
+++ b/lib/Target/ARM/ARMTargetAsmInfo.h
@@ -14,19 +14,31 @@
 #ifndef ARMTARGETASMINFO_H
 #define ARMTARGETASMINFO_H
 
+#include "ARMTargetMachine.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/ELFTargetAsmInfo.h"
 #include "llvm/Target/DarwinTargetAsmInfo.h"
-
-#include "ARMSubtarget.h"
+#include "llvm/Support/Compiler.h"
 
 namespace llvm {
 
-  // Forward declaration.
-  class ARMTargetMachine;
+  extern const char *const arm_asm_table[];
 
-  struct ARMTargetAsmInfo : public virtual TargetAsmInfo {
-    explicit ARMTargetAsmInfo(const ARMTargetMachine &TM);
+  template <class BaseTAI>
+  struct ARMTargetAsmInfo : public BaseTAI {
+    explicit ARMTargetAsmInfo(const ARMTargetMachine &TM):
+      BaseTAI(TM) {
+      BaseTAI::AsmTransCBE = arm_asm_table;
+
+      BaseTAI::AlignmentIsInBytes = false;
+      BaseTAI::Data64bitsDirective = 0;
+      BaseTAI::CommentString = "@";
+      BaseTAI::ConstantPoolSection = "\t.text\n";
+      BaseTAI::COMMDirectiveTakesAlignment = false;
+      BaseTAI::InlineAsmStart = "@ InlineAsm Start";
+      BaseTAI::InlineAsmEnd = "@ InlineAsm End";
+      BaseTAI::LCOMMDirective = "\t.lcomm\t";
+    }
 
     const ARMSubtarget *Subtarget;
 
@@ -35,13 +47,15 @@
     unsigned countString(const char *p) const;
   };
 
-  struct ARMDarwinTargetAsmInfo : public virtual ARMTargetAsmInfo,
-                                  public virtual DarwinTargetAsmInfo {
+  typedef ARMTargetAsmInfo<TargetAsmInfo> ARMGenericTargetAsmInfo;
+
+  EXTERN_TEMPLATE_INSTANTIATION(class ARMTargetAsmInfo<TargetAsmInfo>);
+
+  struct ARMDarwinTargetAsmInfo : public ARMTargetAsmInfo<DarwinTargetAsmInfo> {
     explicit ARMDarwinTargetAsmInfo(const ARMTargetMachine &TM);
   };
 
-  struct ARMELFTargetAsmInfo : public virtual ARMTargetAsmInfo,
-                               public virtual ELFTargetAsmInfo {
+  struct ARMELFTargetAsmInfo : public ARMTargetAsmInfo<ELFTargetAsmInfo> {
     explicit ARMELFTargetAsmInfo(const ARMTargetMachine &TM);
   };
 
diff --git a/lib/Target/ARM/ARMTargetMachine.cpp b/lib/Target/ARM/ARMTargetMachine.cpp
index 0613078..29a9d84 100644
--- a/lib/Target/ARM/ARMTargetMachine.cpp
+++ b/lib/Target/ARM/ARMTargetMachine.cpp
@@ -120,7 +120,7 @@
    case ARMSubtarget::isELF:
     return new ARMELFTargetAsmInfo(*this);
    default:
-    return new ARMTargetAsmInfo(*this);
+    return new ARMGenericTargetAsmInfo(*this);
   }
 }
 
diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
index 6988e78..717ddd6 100644
--- a/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
+++ b/lib/Target/PowerPC/PPCTargetAsmInfo.cpp
@@ -19,21 +19,10 @@
 using namespace llvm;
 using namespace llvm::dwarf;
 
-PPCTargetAsmInfo::PPCTargetAsmInfo(const PPCTargetMachine &TM) {
-  bool isPPC64 = TM.getSubtargetImpl()->isPPC64();
-
-  ZeroDirective = "\t.space\t";
-  SetDirective = "\t.set";
-  Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0;  
-  AlignmentIsInBytes = false;
-  LCOMMDirective = "\t.lcomm\t";
-  InlineAsmStart = "# InlineAsm Start";
-  InlineAsmEnd = "# InlineAsm End";
-  AssemblerDialect = TM.getSubtargetImpl()->getAsmFlavor();
-}
+TEMPLATE_INSTANTIATION(class PPCTargetAsmInfo<TargetAsmInfo>);
 
 PPCDarwinTargetAsmInfo::PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM):
-  PPCTargetAsmInfo(TM), DarwinTargetAsmInfo(TM) {
+  PPCTargetAsmInfo<DarwinTargetAsmInfo>(TM) {
   PCSymbol = ".";
   CommentString = ";";
   GlobalPrefix = "_";
@@ -103,7 +92,7 @@
 
 
 PPCLinuxTargetAsmInfo::PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM) :
-  PPCTargetAsmInfo(TM), ELFTargetAsmInfo(TM) {
+  PPCTargetAsmInfo<ELFTargetAsmInfo>(TM) {
   CommentString = "#";
   GlobalPrefix = "";
   PrivateGlobalPrefix = "";
diff --git a/lib/Target/PowerPC/PPCTargetAsmInfo.h b/lib/Target/PowerPC/PPCTargetAsmInfo.h
index c3160e3..a533d5f 100644
--- a/lib/Target/PowerPC/PPCTargetAsmInfo.h
+++ b/lib/Target/PowerPC/PPCTargetAsmInfo.h
@@ -14,28 +14,43 @@
 #ifndef PPCTARGETASMINFO_H
 #define PPCTARGETASMINFO_H
 
+#include "PPCTargetMachine.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/DarwinTargetAsmInfo.h"
 #include "llvm/Target/ELFTargetAsmInfo.h"
+#include "llvm/Support/Compiler.h"
 
 namespace llvm {
 
-  // Forward declaration.
-  class PPCTargetMachine;
+  template <class BaseTAI>
+  struct PPCTargetAsmInfo : public BaseTAI {
+    explicit PPCTargetAsmInfo(const PPCTargetMachine &TM):
+      BaseTAI(TM) {
+      const PPCSubtarget *Subtarget = &TM.getSubtarget<PPCSubtarget>();
+      bool isPPC64 = Subtarget->isPPC64();
 
-  struct PPCTargetAsmInfo : public virtual TargetAsmInfo {
-    explicit PPCTargetAsmInfo(const PPCTargetMachine &TM);
+      BaseTAI::ZeroDirective = "\t.space\t";
+      BaseTAI::SetDirective = "\t.set";
+      BaseTAI::Data64bitsDirective = isPPC64 ? "\t.quad\t" : 0;
+      BaseTAI::AlignmentIsInBytes = false;
+      BaseTAI::LCOMMDirective = "\t.lcomm\t";
+      BaseTAI::InlineAsmStart = "# InlineAsm Start";
+      BaseTAI::InlineAsmEnd = "# InlineAsm End";
+      BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor();
+    }
   };
 
-  struct PPCDarwinTargetAsmInfo : public PPCTargetAsmInfo,
-                                  public DarwinTargetAsmInfo {
+  typedef PPCTargetAsmInfo<TargetAsmInfo> PPCGenericTargetAsmInfo;
+
+  EXTERN_TEMPLATE_INSTANTIATION(class PPCTargetAsmInfo<TargetAsmInfo>);
+
+  struct PPCDarwinTargetAsmInfo : public PPCTargetAsmInfo<DarwinTargetAsmInfo> {
     explicit PPCDarwinTargetAsmInfo(const PPCTargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
   };
 
-  struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo,
-                                 public ELFTargetAsmInfo {
+  struct PPCLinuxTargetAsmInfo : public PPCTargetAsmInfo<ELFTargetAsmInfo> {
     explicit PPCLinuxTargetAsmInfo(const PPCTargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp
index 1c883ad..03fd326 100644
--- a/lib/Target/TargetAsmInfo.cpp
+++ b/lib/Target/TargetAsmInfo.cpp
@@ -25,100 +25,108 @@
 
 using namespace llvm;
 
-TargetAsmInfo::TargetAsmInfo() :
-  TextSection(0),
-  DataSection(0),
-  BSSSection("\t.bss"),
-  BSSSection_(0),
-  ReadOnlySection(0),
-  SmallDataSection(0),
-  SmallBSSSection(0),
-  SmallRODataSection(0),
-  TLSDataSection(0),
-  TLSBSSSection(0),
-  ZeroFillDirective(0),
-  NonexecutableStackDirective(0),
-  NeedsSet(false),
-  MaxInstLength(4),
-  PCSymbol("$"),
-  SeparatorChar(';'),
-  CommentString("#"),
-  GlobalPrefix(""),
-  PrivateGlobalPrefix("."),
-  LessPrivateGlobalPrefix(""),
-  JumpTableSpecialLabelPrefix(0),
-  GlobalVarAddrPrefix(""),
-  GlobalVarAddrSuffix(""),
-  FunctionAddrPrefix(""),
-  FunctionAddrSuffix(""),
-  PersonalityPrefix(""),
-  PersonalitySuffix(""),
-  NeedsIndirectEncoding(false),
-  InlineAsmStart("#APP"),
-  InlineAsmEnd("#NO_APP"),
-  AssemblerDialect(0),
-  StringConstantPrefix(".str"),
-  ZeroDirective("\t.zero\t"),
-  ZeroDirectiveSuffix(0),
-  AsciiDirective("\t.ascii\t"),
-  AscizDirective("\t.asciz\t"),
-  Data8bitsDirective("\t.byte\t"),
-  Data16bitsDirective("\t.short\t"),
-  Data32bitsDirective("\t.long\t"),
-  Data64bitsDirective("\t.quad\t"),
-  AlignDirective("\t.align\t"),
-  AlignmentIsInBytes(true),
-  TextAlignFillValue(0),
-  SwitchToSectionDirective("\t.section\t"),
-  TextSectionStartSuffix(""),
-  DataSectionStartSuffix(""),
-  SectionEndDirectiveSuffix(0),
-  ConstantPoolSection("\t.section .rodata"),
-  JumpTableDataSection("\t.section .rodata"),
-  JumpTableDirective(0),
-  CStringSection(0),
-  CStringSection_(0),
-  StaticCtorsSection("\t.section .ctors,\"aw\",@progbits"),
-  StaticDtorsSection("\t.section .dtors,\"aw\",@progbits"),
-  GlobalDirective("\t.globl\t"),
-  SetDirective(0),
-  LCOMMDirective(0),
-  COMMDirective("\t.comm\t"),
-  COMMDirectiveTakesAlignment(true),
-  HasDotTypeDotSizeDirective(true),
-  UsedDirective(0),
-  WeakRefDirective(0),
-  WeakDefDirective(0),
-  HiddenDirective("\t.hidden\t"),
-  ProtectedDirective("\t.protected\t"),
-  AbsoluteDebugSectionOffsets(false),
-  AbsoluteEHSectionOffsets(false),
-  HasLEB128(false),
-  HasDotLocAndDotFile(false),
-  SupportsDebugInformation(false),
-  SupportsExceptionHandling(false),
-  DwarfRequiresFrameSection(true),
-  GlobalEHDirective(0),
-  SupportsWeakOmittedEHFrame(true),
-  DwarfSectionOffsetDirective(0),
-  DwarfAbbrevSection(".debug_abbrev"),
-  DwarfInfoSection(".debug_info"),
-  DwarfLineSection(".debug_line"),
-  DwarfFrameSection(".debug_frame"),
-  DwarfPubNamesSection(".debug_pubnames"),
-  DwarfPubTypesSection(".debug_pubtypes"),
-  DwarfStrSection(".debug_str"),
-  DwarfLocSection(".debug_loc"),
-  DwarfARangesSection(".debug_aranges"),
-  DwarfRangesSection(".debug_ranges"),
-  DwarfMacInfoSection(".debug_macinfo"),
-  DwarfEHFrameSection(".eh_frame"),
-  DwarfExceptionSection(".gcc_except_table"),
-  AsmTransCBE(0) {
+void TargetAsmInfo::fillDefaultValues() {
+  BSSSection = "\t.bss";
+  BSSSection_ = 0;
+  ReadOnlySection = 0;
+  SmallDataSection = 0;
+  SmallBSSSection = 0;
+  SmallRODataSection = 0;
+  TLSDataSection = 0;
+  TLSBSSSection = 0;
+  ZeroFillDirective = 0;
+  NonexecutableStackDirective = 0;
+  NeedsSet = false;
+  MaxInstLength = 4;
+  PCSymbol = "$";
+  SeparatorChar = ';';
+  CommentString = "#";
+  GlobalPrefix = "";
+  PrivateGlobalPrefix = ".";
+  LessPrivateGlobalPrefix = "";
+  JumpTableSpecialLabelPrefix = 0;
+  GlobalVarAddrPrefix = "";
+  GlobalVarAddrSuffix = "";
+  FunctionAddrPrefix = "";
+  FunctionAddrSuffix = "";
+  PersonalityPrefix = "";
+  PersonalitySuffix = "";
+  NeedsIndirectEncoding = false;
+  InlineAsmStart = "#APP";
+  InlineAsmEnd = "#NO_APP";
+  AssemblerDialect = 0;
+  StringConstantPrefix = ".str";
+  ZeroDirective = "\t.zero\t";
+  ZeroDirectiveSuffix = 0;
+  AsciiDirective = "\t.ascii\t";
+  AscizDirective = "\t.asciz\t";
+  Data8bitsDirective = "\t.byte\t";
+  Data16bitsDirective = "\t.short\t";
+  Data32bitsDirective = "\t.long\t";
+  Data64bitsDirective = "\t.quad\t";
+  AlignDirective = "\t.align\t";
+  AlignmentIsInBytes = true;
+  TextAlignFillValue = 0;
+  SwitchToSectionDirective = "\t.section\t";
+  TextSectionStartSuffix = "";
+  DataSectionStartSuffix = "";
+  SectionEndDirectiveSuffix = 0;
+  ConstantPoolSection = "\t.section .rodata";
+  JumpTableDataSection = "\t.section .rodata";
+  JumpTableDirective = 0;
+  CStringSection = 0;
+  CStringSection_ = 0;
+  // FIXME: Flags are ELFish - replace with normal section stuff.
+  StaticCtorsSection = "\t.section .ctors,\"aw\",@progbits";
+  StaticDtorsSection = "\t.section .dtors,\"aw\",@progbits";
+  GlobalDirective = "\t.globl\t";
+  SetDirective = 0;
+  LCOMMDirective = 0;
+  COMMDirective = "\t.comm\t";
+  COMMDirectiveTakesAlignment = true;
+  HasDotTypeDotSizeDirective = true;
+  UsedDirective = 0;
+  WeakRefDirective = 0;
+  WeakDefDirective = 0;
+  // FIXME: These are ELFish - move to ELFTAI.
+  HiddenDirective = "\t.hidden\t";
+  ProtectedDirective = "\t.protected\t";
+  AbsoluteDebugSectionOffsets = false;
+  AbsoluteEHSectionOffsets = false;
+  HasLEB128 = false;
+  HasDotLocAndDotFile = false;
+  SupportsDebugInformation = false;
+  SupportsExceptionHandling = false;
+  DwarfRequiresFrameSection = true;
+  GlobalEHDirective = 0;
+  SupportsWeakOmittedEHFrame = true;
+  DwarfSectionOffsetDirective = 0;
+  DwarfAbbrevSection = ".debug_abbrev";
+  DwarfInfoSection = ".debug_info";
+  DwarfLineSection = ".debug_line";
+  DwarfFrameSection = ".debug_frame";
+  DwarfPubNamesSection = ".debug_pubnames";
+  DwarfPubTypesSection = ".debug_pubtypes";
+  DwarfStrSection = ".debug_str";
+  DwarfLocSection = ".debug_loc";
+  DwarfARangesSection = ".debug_aranges";
+  DwarfRangesSection = ".debug_ranges";
+  DwarfMacInfoSection = ".debug_macinfo";
+  DwarfEHFrameSection = ".eh_frame";
+  DwarfExceptionSection = ".gcc_except_table";
+  AsmTransCBE = 0;
   TextSection = getUnnamedSection("\t.text", SectionFlags::Code);
   DataSection = getUnnamedSection("\t.data", SectionFlags::Writeable);
 }
 
+TargetAsmInfo::TargetAsmInfo() {
+  fillDefaultValues();
+}
+
+TargetAsmInfo::TargetAsmInfo(const TargetMachine &TM) {
+  fillDefaultValues();
+}
+
 TargetAsmInfo::~TargetAsmInfo() {
 }
 
diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp
index c6a76f2..fcd797e 100644
--- a/lib/Target/X86/X86TargetAsmInfo.cpp
+++ b/lib/Target/X86/X86TargetAsmInfo.cpp
@@ -25,27 +25,26 @@
 using namespace llvm;
 using namespace llvm::dwarf;
 
-static const char *const x86_asm_table[] = {
-                                      "{si}", "S",
-                                      "{di}", "D",
-                                      "{ax}", "a",
-                                      "{cx}", "c",
-                                      "{memory}", "memory",
-                                      "{flags}", "",
-                                      "{dirflag}", "",
-                                      "{fpsr}", "",
-                                      "{cc}", "cc",
-                                      0,0};
+const char *const llvm::x86_asm_table[] = {
+  "{si}", "S",
+  "{di}", "D",
+  "{ax}", "a",
+  "{cx}", "c",
+  "{memory}", "memory",
+  "{flags}", "",
+  "{dirflag}", "",
+  "{fpsr}", "",
+  "{cc}", "cc",
+  0,0};
 
-X86TargetAsmInfo::X86TargetAsmInfo(const X86TargetMachine &TM) {
-  const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
+TEMPLATE_INSTANTIATION(class X86TargetAsmInfo<TargetAsmInfo>);
+TEMPLATE_INSTANTIATION(
+  bool X86TargetAsmInfo<TargetAsmInfo>::ExpandInlineAsm(CallInst*) const);
+TEMPLATE_INSTANTIATION(
+  bool X86TargetAsmInfo<TargetAsmInfo>::LowerToBSwap(CallInst*) const);
 
-  AsmTransCBE = x86_asm_table;
-
-  AssemblerDialect = Subtarget->getAsmFlavor();
-}
-
-bool X86TargetAsmInfo::LowerToBSwap(CallInst *CI) const {
+template <class BaseTAI>
+bool X86TargetAsmInfo<BaseTAI>::LowerToBSwap(CallInst *CI) const {
   // FIXME: this should verify that we are targetting a 486 or better.  If not,
   // we will turn this bswap into something that will be lowered to logical ops
   // instead of emitting the bswap asm.  For now, we don't support 486 or lower
@@ -74,7 +73,8 @@
   return true;
 }
 
-bool X86TargetAsmInfo::ExpandInlineAsm(CallInst *CI) const {
+template <class BaseTAI>
+bool X86TargetAsmInfo<BaseTAI>::ExpandInlineAsm(CallInst *CI) const {
   InlineAsm *IA = cast<InlineAsm>(CI->getCalledValue());
   std::vector<InlineAsm::ConstraintInfo> Constraints = IA->ParseConstraints();
 
@@ -125,7 +125,7 @@
 }
 
 X86DarwinTargetAsmInfo::X86DarwinTargetAsmInfo(const X86TargetMachine &TM):
-  X86TargetAsmInfo(TM), DarwinTargetAsmInfo(TM) {
+  X86TargetAsmInfo<DarwinTargetAsmInfo>(TM) {
   const X86Subtarget* Subtarget = &DTM->getSubtarget<X86Subtarget>();
   bool is64Bit = Subtarget->is64Bit();
 
@@ -225,7 +225,7 @@
 }
 
 X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM):
-  X86TargetAsmInfo(TM), ELFTargetAsmInfo(TM) {
+  X86TargetAsmInfo<ELFTargetAsmInfo>(TM) {
 
   CStringSection = ".rodata.str";
   PrivateGlobalPrefix = ".L";
@@ -302,7 +302,7 @@
 }
 
 X86COFFTargetAsmInfo::X86COFFTargetAsmInfo(const X86TargetMachine &TM):
-  X86TargetAsmInfo(TM) {
+  X86GenericTargetAsmInfo(TM) {
   X86TM = &TM;
 
   GlobalPrefix = "_";
@@ -408,7 +408,7 @@
 }
 
 X86WinTargetAsmInfo::X86WinTargetAsmInfo(const X86TargetMachine &TM):
-  X86TargetAsmInfo(TM) {
+  X86GenericTargetAsmInfo(TM) {
   GlobalPrefix = "_";
   CommentString = ";";
 
diff --git a/lib/Target/X86/X86TargetAsmInfo.h b/lib/Target/X86/X86TargetAsmInfo.h
index d7e11e0..9100fc0 100644
--- a/lib/Target/X86/X86TargetAsmInfo.h
+++ b/lib/Target/X86/X86TargetAsmInfo.h
@@ -14,17 +14,25 @@
 #ifndef X86TARGETASMINFO_H
 #define X86TARGETASMINFO_H
 
+#include "X86TargetMachine.h"
 #include "llvm/Target/TargetAsmInfo.h"
 #include "llvm/Target/ELFTargetAsmInfo.h"
 #include "llvm/Target/DarwinTargetAsmInfo.h"
+#include "llvm/Support/Compiler.h"
 
 namespace llvm {
 
-  // Forward declaration.
-  class X86TargetMachine;
+  extern const char *const x86_asm_table[];
 
-  struct X86TargetAsmInfo : public virtual TargetAsmInfo {
-    explicit X86TargetAsmInfo(const X86TargetMachine &TM);
+  template <class BaseTAI>
+  struct X86TargetAsmInfo : public BaseTAI {
+    explicit X86TargetAsmInfo(const X86TargetMachine &TM):
+      BaseTAI(TM) {
+      const X86Subtarget *Subtarget = &TM.getSubtarget<X86Subtarget>();
+
+      BaseTAI::AsmTransCBE = x86_asm_table;
+      BaseTAI::AssemblerDialect = Subtarget->getAsmFlavor();
+    }
 
     virtual bool ExpandInlineAsm(CallInst *CI) const;
 
@@ -32,21 +40,23 @@
     bool LowerToBSwap(CallInst *CI) const;
   };
 
-  struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo,
-                                  public DarwinTargetAsmInfo {
+  typedef X86TargetAsmInfo<TargetAsmInfo> X86GenericTargetAsmInfo;
+
+  EXTERN_TEMPLATE_INSTANTIATION(class X86TargetAsmInfo<TargetAsmInfo>);
+
+  struct X86DarwinTargetAsmInfo : public X86TargetAsmInfo<DarwinTargetAsmInfo> {
     explicit X86DarwinTargetAsmInfo(const X86TargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
   };
 
-  struct X86ELFTargetAsmInfo : public X86TargetAsmInfo,
-                               public ELFTargetAsmInfo {
+  struct X86ELFTargetAsmInfo : public X86TargetAsmInfo<ELFTargetAsmInfo> {
     explicit X86ELFTargetAsmInfo(const X86TargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
   };
 
-  struct X86COFFTargetAsmInfo : public X86TargetAsmInfo {
+  struct X86COFFTargetAsmInfo : public X86GenericTargetAsmInfo {
     explicit X86COFFTargetAsmInfo(const X86TargetMachine &TM);
     virtual unsigned PreferredEHDataFormat(DwarfEncoding::Target Reason,
                                            bool Global) const;
@@ -57,9 +67,11 @@
     const X86TargetMachine *X86TM;
   };
 
-  struct X86WinTargetAsmInfo : public X86TargetAsmInfo {
+  struct X86WinTargetAsmInfo : public X86GenericTargetAsmInfo {
     explicit X86WinTargetAsmInfo(const X86TargetMachine &TM);
   };
+
 } // namespace llvm
 
 #endif
+
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp
index 5be5c5d..08753e7 100644
--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -54,7 +54,7 @@
      case X86Subtarget::isWindows:
       return new X86WinTargetAsmInfo(*this);
      default:
-      return new X86TargetAsmInfo(*this);
+      return new X86GenericTargetAsmInfo(*this);
     }
 }
 
