<div dir="ltr">Did we have IC_OPSIZE_ADSIZE defined but not used before this?</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Jan 16, 2014 at 7:20 AM, David Woodhouse <span dir="ltr"><<a href="mailto:dwmw2@infradead.org" target="_blank">dwmw2@infradead.org</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Wed, 2014-01-15 at 23:44 -0800, Craig Topper wrote:<br>
> I believe I have now fixed the 0x64 0xa1 0x00 0x00 0x00 0x00 bug in<br>
> r199364.<br>
<br>
</div>Still fails to correctly disassemble 0x66 0x67 0xa1… (mea culpa).<br>
<br>
This should fix it. It applies on top of the patches I sent on Monday,<br>
but probably only because it adds the test cases for 16-bit too.<br>
<br>
I'll add it to my pile.<br>
<br>
<br>
>From a98a9ab044454bdb93be25fa8dbcd72d217f5651 Mon Sep 17 00:00:00 2001<br>
From: David Woodhouse <<a href="mailto:David.Woodhouse@intel.com">David.Woodhouse@intel.com</a>><br>
Date: Thu, 16 Jan 2014 14:44:20 +0000<br>
Subject: [PATCH] [x86] Fix disassembly of MOV16ao16 et al.<br>
<br>
The addition of IC_OPSIZE_ADSIZE in r198759 wasn't quite complete. This<br>
should fix it, and adds test cases.<br>
---<br>
 .../Disassembler/X86DisassemblerDecoderCommon.h    |  2 +-<br>
 test/MC/Disassembler/X86/moffs.txt                 | 86 ++++++++++++++++++++++<br>
 utils/TableGen/X86DisassemblerTables.cpp           |  2 +<br>
 3 files changed, 89 insertions(+), 1 deletion(-)<br>
 create mode 100644 test/MC/Disassembler/X86/moffs.txt<br>
<br>
diff --git a/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h b/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h<br>
index 954a3d7..f7056bd 100644<br>
--- a/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h<br>
+++ b/lib/Target/X86/Disassembler/X86DisassemblerDecoderCommon.h<br>
@@ -92,7 +92,7 @@ enum attributeBits {<br>
                                         "operands change width")               \<br>
   ENUM_ENTRY(IC_ADSIZE,             3,  "requires an ADSIZE prefix, so "       \<br>
                                         "operands change width")               \<br>
-  ENUM_ENTRY(IC_OPSIZE_ADSIZE,      3,  "requires both OPSIZE and ADSIZE "     \<br>
+  ENUM_ENTRY(IC_OPSIZE_ADSIZE,      4,  "requires both OPSIZE and ADSIZE "     \<br>
                                         "prefixes")                            \<br>
   ENUM_ENTRY(IC_XD,                 2,  "may say something about the opcode "  \<br>
                                         "but not the operands")                \<br>
diff --git a/test/MC/Disassembler/X86/moffs.txt b/test/MC/Disassembler/X86/moffs.txt<br>
new file mode 100644<br>
index 0000000..67d64e8<br>
--- /dev/null<br>
+++ b/test/MC/Disassembler/X86/moffs.txt<br>
@@ -0,0 +1,86 @@<br>
+# RUN: llvm-mc --hdis %s -triple=i686-linux-gnu-code16 | FileCheck --check-prefix=16 %s<br>
+# RUN: llvm-mc --hdis %s -triple=i686-linux-gnu | FileCheck --check-prefix=32 %s<br>
+# RUN: llvm-mc --hdis %s -triple=x86_64-linux-gnu | FileCheck --check-prefix=64 %s<br>
+<br>
+# 16: movb 0x5a5a, %al<br>
+# 32: movb 0x5a5a5a5a, %al<br>
+# 64: movabsb 0x5a5a5a5a5a5a5a5a, %al<br>
+0xa0 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movb 0x5a5a5a5a, %al<br>
+# 32: movb 0x5a5a, %al<br>
+# 64: movabsb 0x5a5a5a5a, %al<br>
+0x67 0xa0 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movw 0x5a5a, %ax<br>
+# 32: movl 0x5a5a5a5a, %eax<br>
+# 64: movabsl 0x5a5a5a5a5a5a5a5a, %eax<br>
+0xa1 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movw 0x5a5a5a5a, %ax<br>
+# 32: movl 0x5a5a, %eax<br>
+# 64: movabsl 0x5a5a5a5a, %eax<br>
+0x67 0xa1 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movl 0x5a5a, %eax<br>
+# 32: movw 0x5a5a5a5a, %ax<br>
+# 64: movabsw 0x5a5a5a5a5a5a5a5a, %ax<br>
+0x66 0xa1 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movl 0x5a5a5a5a, %eax<br>
+# 32: movw 0x5a5a, %ax<br>
+# 64: movabsw 0x5a5a5a5a, %ax<br>
+0x66 0x67 0xa1 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movl 0x5a5a5a5a, %eax<br>
+# 32: movw 0x5a5a, %ax<br>
+# 64: movabsw 0x5a5a5a5a, %ax<br>
+0x67 0x66 0xa1 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movl %es:0x5a5a5a5a, %eax<br>
+# 32: movw %es:0x5a5a, %ax<br>
+# 64: movabsw %es:0x5a5a5a5a, %ax<br>
+0x67 0x26 0x66 0xa1 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+<br>
+<br>
+# 16: movb %al, 0x5a5a<br>
+# 32: movb %al, 0x5a5a5a5a<br>
+# 64: movabsb %al, 0x5a5a5a5a5a5a5a5a<br>
+0xa2 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movb %al, 0x5a5a5a5a<br>
+# 32: movb %al, 0x5a5a<br>
+# 64: movabsb %al, 0x5a5a5a5a<br>
+0x67 0xa2 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movw %ax, 0x5a5a<br>
+# 32: movl %eax, 0x5a5a5a5a<br>
+# 64: movabsl %eax, 0x5a5a5a5a5a5a5a5a<br>
+0xa3 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movw %ax, %gs:0x5a5a5a5a<br>
+# 32: movl %eax, %gs:0x5a5a<br>
+# 64: movabsl %eax, %gs:0x5a5a5a5a<br>
+0x65 0x67 0xa3 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movl %eax, 0x5a5a<br>
+# 32: movw %ax, 0x5a5a5a5a<br>
+# 64: movabsw %ax, 0x5a5a5a5a5a5a5a5a<br>
+0x66 0xa3 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movl %eax, 0x5a5a5a5a<br>
+# 32: movw %ax, 0x5a5a<br>
+# 64: movabsw %ax, 0x5a5a5a5a<br>
+0x66 0x67 0xa3 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movl %eax, 0x5a5a5a5a<br>
+# 32: movw %ax, 0x5a5a<br>
+# 64: movabsw %ax, 0x5a5a5a5a<br>
+0x67 0x66 0xa3 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
+# 16: movl %eax, %es:0x5a5a5a5a<br>
+# 32: movw %ax, %es:0x5a5a<br>
+# 64: movabsw %ax, %es:0x5a5a5a5a<br>
+0x67 0x26 0x66 0xa3 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a 0x5a<br>
+<br>
diff --git a/utils/TableGen/X86DisassemblerTables.cpp b/utils/TableGen/X86DisassemblerTables.cpp<br>
index 0ccfac7..d513369 100644<br>
--- a/utils/TableGen/X86DisassemblerTables.cpp<br>
+++ b/utils/TableGen/X86DisassemblerTables.cpp<br>
@@ -713,6 +713,8 @@ void DisassemblerTables::emitContextTable(raw_ostream &o, unsigned &i) const {<br>
       o << "IC_XS";<br>
     else if (index & ATTR_XD)<br>
       o << "IC_XD";<br>
+    else if ((index & ATTR_OPSIZE) && (index & ATTR_ADSIZE))<br>
+      o << "IC_OPSIZE_ADSIZE";<br>
     else if (index & ATTR_OPSIZE)<br>
       o << "IC_OPSIZE";<br>
     else if (index & ATTR_ADSIZE)<br>
<span class="HOEnZb"><font color="#888888">--<br>
1.8.4.2<br>
<br>
<br>
<br>
<br>
--<br>
dwmw2<br>
</font></span></blockquote></div><br><br clear="all"><div><br></div>-- <br>~Craig
</div>