Index: llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp =================================================================== --- llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp +++ llvm/trunk/lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp @@ -949,8 +949,10 @@ } } - if (insn->rexPrefix & 0x08) + if (insn->rexPrefix & 0x08) { attrMask |= ATTR_REXW; + attrMask &= ~ATTR_ADSIZE; + } /* * JCXZ/JECXZ need special handling for 16-bit mode because the meaning Index: llvm/trunk/test/MC/Disassembler/X86/x86-64.txt =================================================================== --- llvm/trunk/test/MC/Disassembler/X86/x86-64.txt +++ llvm/trunk/test/MC/Disassembler/X86/x86-64.txt @@ -479,12 +479,10 @@ # CHECK: nopq %rax 0x48 0x0f 0x1f 0xC0 -# TODO: wrong dissassembler with 0x67 prefix: expected popq -# CHECK: popw %r14 +# CHECK: popq %r14 0x67 0x49 0x5e -# TODO: wrong dissassembler with 0x67 prefix: expected pushq -# CHECK: pushw %r14 +# CHECK: pushq %r14 0x67 0x49 0x56 # CHECK: xchgw %di, %ax