diff --git a/lib/Target/X86/AsmPrinter/Makefile b/lib/Target/X86/AsmPrinter/Makefile
new file mode 100644
index 0000000..ba75b43
--- /dev/null
+++ b/lib/Target/X86/AsmPrinter/Makefile
@@ -0,0 +1,15 @@
+##===- lib/Target/X86/Makefile -----------------------------*- Makefile -*-===##
+# 
+#                     The LLVM Compiler Infrastructure
+#
+# This file is distributed under the University of Illinois Open Source
+# License. See LICENSE.TXT for details.
+# 
+##===----------------------------------------------------------------------===##
+LEVEL = ../../../..
+LIBRARYNAME = LLVMX86AsmPrinter
+
+# Hack: we need to include 'main' x86 target directory to grab private headers 
+CPPFLAGS = -I$(PROJ_OBJ_DIR)/.. -I$(PROJ_SRC_DIR)/..
+
+include $(LEVEL)/Makefile.common
diff --git a/lib/Target/X86/X86ATTAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
similarity index 100%
rename from lib/Target/X86/X86ATTAsmPrinter.cpp
rename to lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.cpp
diff --git a/lib/Target/X86/X86ATTAsmPrinter.h b/lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h
similarity index 100%
rename from lib/Target/X86/X86ATTAsmPrinter.h
rename to lib/Target/X86/AsmPrinter/X86ATTAsmPrinter.h
diff --git a/lib/Target/X86/X86AsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
similarity index 89%
rename from lib/Target/X86/X86AsmPrinter.cpp
rename to lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
index 5659282..8144ee8 100644
--- a/lib/Target/X86/X86AsmPrinter.cpp
+++ b/lib/Target/X86/AsmPrinter/X86AsmPrinter.cpp
@@ -33,3 +33,11 @@
     return new X86ATTAsmPrinter(o, tm, tm.getTargetAsmInfo());
   }
 }
+
+namespace {
+  static struct Register {
+    Register() {
+      X86TargetMachine::registerAsmPrinter(createX86CodePrinterPass);
+    }
+  } Registrator;
+}
diff --git a/lib/Target/X86/X86AsmPrinter.h b/lib/Target/X86/AsmPrinter/X86AsmPrinter.h
similarity index 100%
rename from lib/Target/X86/X86AsmPrinter.h
rename to lib/Target/X86/AsmPrinter/X86AsmPrinter.h
diff --git a/lib/Target/X86/X86IntelAsmPrinter.cpp b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp
similarity index 100%
rename from lib/Target/X86/X86IntelAsmPrinter.cpp
rename to lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.cpp
diff --git a/lib/Target/X86/X86IntelAsmPrinter.h b/lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h
similarity index 100%
rename from lib/Target/X86/X86IntelAsmPrinter.h
rename to lib/Target/X86/AsmPrinter/X86IntelAsmPrinter.h
diff --git a/lib/Target/X86/Makefile b/lib/Target/X86/Makefile
index c6af978..cb3f0ac 100644
--- a/lib/Target/X86/Makefile
+++ b/lib/Target/X86/Makefile
@@ -7,7 +7,7 @@
 # 
 ##===----------------------------------------------------------------------===##
 LEVEL = ../../..
-LIBRARYNAME = LLVMX86
+LIBRARYNAME = LLVMX86CodeGen
 TARGET = X86
 
 # Make sure that tblgen is run, first thing.
@@ -18,4 +18,6 @@
                 X86GenFastISel.inc \
                 X86GenCallingConv.inc X86GenSubtarget.inc
 
+DIRS = AsmPrinter
+
 include $(LEVEL)/Makefile.common
diff --git a/lib/Target/X86/X86TargetMachine.cpp b/lib/Target/X86/X86TargetMachine.cpp
index fdf9bdf..ba3314c 100644
--- a/lib/Target/X86/X86TargetMachine.cpp
+++ b/lib/Target/X86/X86TargetMachine.cpp
@@ -35,6 +35,9 @@
 static RegisterTarget<X86_64TargetMachine>
 Y("x86-64", "  64-bit X86: EM64T and AMD64");
 
+// No assembler printer by default
+X86TargetMachine::AsmPrinterCtorFn X86TargetMachine::AsmPrinterCtor = 0;
+
 const TargetAsmInfo *X86TargetMachine::createTargetAsmInfo() const {
   if (Subtarget.isFlavorIntel())
     return new X86WinTargetAsmInfo(*this);
@@ -187,7 +190,9 @@
 
 bool X86TargetMachine::addAssemblyEmitter(PassManagerBase &PM, bool Fast, 
                                           std::ostream &Out) {
-  PM.add(createX86CodePrinterPass(Out, *this));
+  assert(AsmPrinterCtor && "AsmPrinter was not linked in");
+  if (AsmPrinterCtor)
+    PM.add(AsmPrinterCtor(Out, *this));
   return false;
 }
 
@@ -210,8 +215,11 @@
   }
 
   PM.add(createX86CodeEmitterPass(*this, MCE));
-  if (DumpAsm)
-    PM.add(createX86CodePrinterPass(*cerr.stream(), *this));
+  if (DumpAsm) {
+    assert(AsmPrinterCtor && "AsmPrinter was not linked in");
+    if (AsmPrinterCtor)
+      PM.add(AsmPrinterCtor(*cerr.stream(), *this));
+  }
 
   return false;
 }
@@ -219,7 +227,11 @@
 bool X86TargetMachine::addSimpleCodeEmitter(PassManagerBase &PM, bool Fast,
                                         bool DumpAsm, MachineCodeEmitter &MCE) {
   PM.add(createX86CodeEmitterPass(*this, MCE));
-  if (DumpAsm)
-    PM.add(createX86CodePrinterPass(*cerr.stream(), *this));
+  if (DumpAsm) {
+    assert(AsmPrinterCtor && "AsmPrinter was not linked in");
+    if (AsmPrinterCtor)
+      PM.add(AsmPrinterCtor(*cerr.stream(), *this));
+  }
+
   return false;
 }
diff --git a/lib/Target/X86/X86TargetMachine.h b/lib/Target/X86/X86TargetMachine.h
index 5f814ea..94b7566 100644
--- a/lib/Target/X86/X86TargetMachine.h
+++ b/lib/Target/X86/X86TargetMachine.h
@@ -38,7 +38,13 @@
 
 protected:
   virtual const TargetAsmInfo *createTargetAsmInfo() const;
-  
+
+  // To avoid having target depend on the asmprinter stuff libraries, asmprinter
+  // set this functions to ctor pointer at startup time if they are linked in.
+  typedef FunctionPass *(*AsmPrinterCtorFn)(std::ostream &o,
+                                            X86TargetMachine &tm);
+  static AsmPrinterCtorFn AsmPrinterCtor;
+
 public:
   X86TargetMachine(const Module &M, const std::string &FS, bool is64Bit);
 
@@ -59,7 +65,11 @@
 
   static unsigned getModuleMatchQuality(const Module &M);
   static unsigned getJITMatchQuality();
-  
+
+  static void registerAsmPrinter(AsmPrinterCtorFn F) {
+    AsmPrinterCtor = F;
+  }
+
   // Set up the pass pipeline.
   virtual bool addInstSelector(PassManagerBase &PM, bool Fast);
   virtual bool addPreRegAlloc(PassManagerBase &PM, bool Fast);
