diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
index 6e316f6ec1a26fda15a70a6056c63f2e85a95f8d..f07e83357f313a9c2f8a8c538603b0a85bd7f0c2 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
@@ -1174,8 +1174,10 @@ void X86MCCodeEmitter::EmitOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
 {
   // Emit the operand size opcode prefix as needed.
   if ((TSFlags & X86II::OpSizeMask) == (is16BitMode(STI) ? X86II::OpSize32
-                                                         : X86II::OpSize16))
-    EmitByte(0x66, CurByte, OS);
+                                                         : X86II::OpSize16)) {
+    if (MI.getOpcode() != X86::MOV16sm)
+        EmitByte(0x66, CurByte, OS);
+  }
 
   // Emit the LOCK opcode prefix.
   if (TSFlags & X86II::LOCK)