Index: lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp =================================================================== --- lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp +++ lib/Target/X86/Disassembler/X86DisassemblerDecoder.cpp @@ -1369,13 +1369,14 @@ switch (rm) { case 0x14: case 0x4: - case 0xc: /* in case REXW.b is set */ + case 0xc: /* in case REX.b is set */ insn->eaBase = (insn->addressSize == 4 ? EA_BASE_sib : EA_BASE_sib64); if (readSIB(insn) || readDisplacement(insn)) return -1; break; case 0x5: + case 0xd: /* in case REX.b is set */ insn->eaBase = EA_BASE_NONE; insn->eaDisplacement = EA_DISP_32; if (readDisplacement(insn)) @@ -1394,7 +1395,7 @@ switch (rm) { case 0x14: case 0x4: - case 0xc: /* in case REXW.b is set */ + case 0xc: /* in case REX.b is set */ insn->eaBase = EA_BASE_sib; if (readSIB(insn) || readDisplacement(insn)) return -1; Index: test/MC/Disassembler/X86/x86-64.txt =================================================================== --- test/MC/Disassembler/X86/x86-64.txt +++ test/MC/Disassembler/X86/x86-64.txt @@ -301,3 +301,6 @@ # CHECK: movq %rax, 1515870810 0x67, 0x48 0xa3 0x5a 0x5a 0x5a 0x5a + +# CHECK: addq 255(%rip), %rbx +0x49, 0x03, 0x1d, 0xff, 0x00, 0x00, 0x00