Index: lib/Basic/Targets.cpp
===================================================================
--- lib/Basic/Targets.cpp	(revision 213197)
+++ lib/Basic/Targets.cpp	(working copy)
@@ -1616,6 +1616,7 @@
 
 static const char* const GCCRegNames[] = {
   "ax", "dx", "cx", "bx", "si", "di", "bp", "sp",
+  "cs", "ds", "es", "fs", "gs", "ss",
   "st", "st(1)", "st(2)", "st(3)", "st(4)", "st(5)", "st(6)", "st(7)",
   "argp", "flags", "fpcr", "fpsr", "dirflag", "frame",
   "xmm0", "xmm1", "xmm2", "xmm3", "xmm4", "xmm5", "xmm6", "xmm7",
Index: test/CodeGen/ms-inline-asm.c
===================================================================
--- test/CodeGen/ms-inline-asm.c	(revision 213197)
+++ test/CodeGen/ms-inline-asm.c	(working copy)
@@ -476,3 +476,19 @@
   // CHECK: call void asm sideeffect inteldialect "fld dword ptr $0", "*m,~{dirflag},~{fpsr},~{flags}"(float* {{.*}})
   // CHECK: call void asm sideeffect inteldialect "fistp dword ptr $0", "=*m,~{dirflag},~{fpsr},~{flags}"(i32* {{.*}})
 }
+
+void t41(unsigned short a) {
+  __asm mov cs, a;
+  __asm mov ds, a;
+  __asm mov es, a;
+  __asm mov fs, a;
+  __asm mov gs, a;
+  __asm mov ss, a;
+  // CHECK-LABEL: define void @t41
+  // CHECK: call void asm sideeffect inteldialect "mov cs, word ptr $0", "*m,~{cs},~{dirflag},~{fpsr},~{flags}"(i16* %a.addr)
+  // CHECK: call void asm sideeffect inteldialect "mov ds, word ptr $0", "*m,~{ds},~{dirflag},~{fpsr},~{flags}"(i16* %a.addr)
+  // CHECK: call void asm sideeffect inteldialect "mov es, word ptr $0", "*m,~{es},~{dirflag},~{fpsr},~{flags}"(i16* %a.addr)
+  // CHECK: call void asm sideeffect inteldialect "mov fs, word ptr $0", "*m,~{fs},~{dirflag},~{fpsr},~{flags}"(i16* %a.addr)
+  // CHECK: call void asm sideeffect inteldialect "mov gs, word ptr $0", "*m,~{gs},~{dirflag},~{fpsr},~{flags}"(i16* %a.addr)
+  // CHECK: call void asm sideeffect inteldialect "mov ss, word ptr $0", "*m,~{ss},~{dirflag},~{fpsr},~{flags}"(i16* %a.addr)
+}
