Fixed handling of immediate operand sizes, which
authorSean Callanan <scallanan@apple.com>
Fri, 22 Oct 2010 01:24:11 +0000 (01:24 +0000)
committerSean Callanan <scallanan@apple.com>
Fri, 22 Oct 2010 01:24:11 +0000 (01:24 +0000)
weren't properly reflecting the OperandSize attribute
of the instruction leading to improper decoding of
certain instructions with the 66H prefix.  Also added
a test case for this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@117084 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/Disassembler/X86DisassemblerDecoder.c
test/MC/Disassembler/simple-tests.txt

index 6c3ff6bd4a55fcd23c961dc1fadb3617185dccc6..22b38b9d7d22f01b4654a9fe45bdd3103b4b76c5 100644 (file)
@@ -405,7 +405,7 @@ static int readPrefixes(struct InternalInstruction* insn) {
     insn->registerSize       = (hasOpSize ? 2 : 4);
     insn->addressSize        = (hasAdSize ? 2 : 4);
     insn->displacementSize   = (hasAdSize ? 2 : 4);
-    insn->immediateSize      = (hasAdSize ? 2 : 4);
+    insn->immediateSize      = (hasOpSize ? 2 : 4);
   } else if (insn->mode == MODE_64BIT) {
     if (insn->rexPrefix && wFromREX(insn->rexPrefix)) {
       insn->registerSize       = 8;
index 48a439e80dd19e7c4a7ec03d47d9ed47a41825f7..13a19d2ca4c39df40b37fa23e87181bfaaffbd06 100644 (file)
@@ -63,3 +63,6 @@
 
 # CHECK: enter $1, $2
 0xc8 0x01 0x00 0x02
+
+# CHECK: movw  $47416, -66(%rbp)
+0x66 0xc7 0x45 0xbe 0x38 0xb9