diff options
author | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2011-08-19 02:23:56 +0000 |
---|---|---|
committer | Bruno Cardoso Lopes <bruno.cardoso@gmail.com> | 2011-08-19 02:23:56 +0000 |
commit | 863e0f25b7b53f6c7f43cdb8a0b900003096595e (patch) | |
tree | 5e6f3efe1615e1ee0bb0ad960c247241fdc1acbf /lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp | |
parent | 61b2d7f20780409143f312bcfa29149d237f99d8 (diff) | |
download | llvm-863e0f25b7b53f6c7f43cdb8a0b900003096595e.tar.gz llvm-863e0f25b7b53f6c7f43cdb8a0b900003096595e.tar.bz2 llvm-863e0f25b7b53f6c7f43cdb8a0b900003096595e.tar.xz |
Fix PR10677. Initial patch and idea by Peter Cooper but I've changed the
implementation!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@138029 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp')
-rw-r--r-- | lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp index cf582b5844..6c7b386f2d 100644 --- a/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp +++ b/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp @@ -533,9 +533,14 @@ void X86MCCodeEmitter::EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte, const MCOperand &MO = MI.getOperand(CurOp); if (MO.isReg() && X86II::isX86_64ExtendedReg(MO.getReg())) VEX_B = 0x0; - if (!VEX_B && MO.isReg() && - ((TSFlags & X86II::FormMask) == X86II::MRMSrcMem) && - X86II::isX86_64ExtendedReg(MO.getReg())) + // Only set VEX_X if the Index Register is extended + if (VEX_B || !MO.isReg()) + continue; + if (!X86II::isX86_64ExtendedReg(MO.getReg())) + continue; + unsigned Frm = TSFlags & X86II::FormMask; + if ((Frm == X86II::MRMSrcMem && CurOp-1 == X86::AddrIndexReg) || + (Frm == X86II::MRMDestMem && CurOp == X86::AddrIndexReg)) VEX_X = 0x0; } break; |