| Index: lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
|
| diff --git a/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
|
| index 31b8e2da8e4e635646fb9c71f6e82ab5be0eea32..3ed7953d1d9501fce721f22978363708114e0ae1 100644
|
| --- a/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
|
| +++ b/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
|
| @@ -590,6 +590,8 @@ void X86MCCodeEmitter::EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
|
| int MemOperand, const MCInst &MI,
|
| const MCInstrDesc &Desc,
|
| raw_ostream &OS) const {
|
| + assert(!(TSFlags & X86II::LOCK)); // Can't have LOCK VEX. @LOCALMOD
|
| +
|
| uint64_t Encoding = TSFlags & X86II::EncodingMask;
|
| bool HasEVEX_K = TSFlags & X86II::EVEX_K;
|
| bool HasVEX_4V = TSFlags & X86II::VEX_4V;
|
| @@ -1109,6 +1111,12 @@ void X86MCCodeEmitter::EmitOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
|
| : X86II::OpSize16))
|
| EmitByte(0x66, CurByte, OS);
|
|
|
| + // @LOCALMOD-START
|
| + // Emit the LOCK opcode prefix.
|
| + if (TSFlags & X86II::LOCK)
|
| + EmitByte(0xF0, CurByte, OS);
|
| + // @LOCALMOD-END
|
| +
|
| switch (TSFlags & X86II::OpPrefixMask) {
|
| case X86II::PD: // 66
|
| EmitByte(0x66, CurByte, OS);
|
| @@ -1182,9 +1190,7 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS,
|
| int MemoryOperand = X86II::getMemoryOperandNo(TSFlags, Opcode);
|
| if (MemoryOperand != -1) MemoryOperand += CurOp;
|
|
|
| - // Emit the lock opcode prefix as needed.
|
| - if (TSFlags & X86II::LOCK)
|
| - EmitByte(0xF0, CurByte, OS);
|
| + // @LOCALMOD Moved LOCK prefix generation to EmitOpcodePrefix.
|
|
|
| // Emit segment override opcode prefix as needed.
|
| if (MemoryOperand >= 0)
|
| @@ -1239,6 +1245,10 @@ EncodeInstruction(const MCInst &MI, raw_ostream &OS,
|
| switch (TSFlags & X86II::FormMask) {
|
| default: errs() << "FORM: " << (TSFlags & X86II::FormMask) << "\n";
|
| llvm_unreachable("Unknown FormMask value in X86MCCodeEmitter!");
|
| + // @LOCALMOD-BEGIN
|
| + case X86II::CustomFrm:
|
| + llvm_unreachable("CustomFrm instruction shouldn't be emitted");
|
| + // @LOCALMOD-END
|
| case X86II::Pseudo:
|
| llvm_unreachable("Pseudo instruction shouldn't be emitted");
|
| case X86II::RawFrmDstSrc: {
|
|
|