From fac2f8829087ccee670ac382e42c21727783ded2 Mon Sep 17 00:00:00 2001
From: Nguyen Anh Quynh <aquynh@gmail.com>
Date: Wed, 25 May 2016 13:59:10 +0800
Subject: [PATCH] x86: do not emit extra 0x66 prefix for MOV16sm. this fixes
 issue #104

---
 llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
index 6e316f6..f07e833 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)
-- 
GitLab