mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-04-02 10:33:53 +00:00
Remove code for setting the VEX L-bit as a function of operand size from the code emitters and the disassembler table builder. Fix a couple instructions that were still missing VEX_L.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164204 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
f7876426f0
commit
8a312fb3aa
@ -560,15 +560,6 @@ void X86MCCodeEmitter::EmitVEXOpcodePrefix(uint64_t TSFlags, unsigned &CurByte,
|
||||
}
|
||||
|
||||
|
||||
// Set the vector length to 256-bit if YMM0-YMM15 is used
|
||||
for (unsigned i = 0; i != MI.getNumOperands(); ++i) {
|
||||
if (!MI.getOperand(i).isReg())
|
||||
continue;
|
||||
unsigned SrcReg = MI.getOperand(i).getReg();
|
||||
if (SrcReg >= X86::YMM0 && SrcReg <= X86::YMM15)
|
||||
VEX_L = 1;
|
||||
}
|
||||
|
||||
// Classify VEX_B, VEX_4V, VEX_R, VEX_X
|
||||
unsigned NumOps = Desc.getNumOperands();
|
||||
unsigned CurOp = 0;
|
||||
|
@ -921,17 +921,6 @@ void Emitter<CodeEmitter>::emitVEXOpcodePrefix(uint64_t TSFlags,
|
||||
}
|
||||
|
||||
|
||||
// Set the vector length to 256-bit if YMM0-YMM15 is used
|
||||
for (unsigned i = 0; i != MI.getNumOperands(); ++i) {
|
||||
if (!MI.getOperand(i).isReg())
|
||||
continue;
|
||||
if (MI.getOperand(i).isImplicit())
|
||||
continue;
|
||||
unsigned SrcReg = MI.getOperand(i).getReg();
|
||||
if (SrcReg >= X86::YMM0 && SrcReg <= X86::YMM15)
|
||||
VEX_L = 1;
|
||||
}
|
||||
|
||||
// Classify VEX_B, VEX_4V, VEX_R, VEX_X
|
||||
unsigned NumOps = Desc->getNumOperands();
|
||||
unsigned CurOp = 0;
|
||||
|
@ -2614,11 +2614,11 @@ let Predicates = [HasAVX] in {
|
||||
OpSize, VEX;
|
||||
def VMOVMSKPSYr64r : PI<0x50, MRMSrcReg, (outs GR64:$dst), (ins VR256:$src),
|
||||
"movmskps\t{$src, $dst|$dst, $src}", [], IIC_SSE_MOVMSK,
|
||||
SSEPackedSingle>, TB, VEX;
|
||||
SSEPackedSingle>, TB, VEX, VEX_L;
|
||||
def VMOVMSKPDYr64r : PI<0x50, MRMSrcReg, (outs GR64:$dst), (ins VR256:$src),
|
||||
"movmskpd\t{$src, $dst|$dst, $src}", [], IIC_SSE_MOVMSK,
|
||||
SSEPackedDouble>, TB,
|
||||
OpSize, VEX;
|
||||
OpSize, VEX, VEX_L;
|
||||
}
|
||||
|
||||
defm MOVMSKPS : sse12_extr_sign_mask<VR128, int_x86_sse_movmsk_ps, "movmskps",
|
||||
|
@ -244,7 +244,7 @@ RecognizableInstr::RecognizableInstr(DisassemblerTables &tables,
|
||||
IsSSE = (HasOpSizePrefix && (Name.find("16") == Name.npos)) ||
|
||||
(Name.find("CRC32") != Name.npos);
|
||||
HasFROperands = hasFROperands();
|
||||
HasVEX_LPrefix = has256BitOperands() || Rec->getValueAsBit("hasVEX_L");
|
||||
HasVEX_LPrefix = Rec->getValueAsBit("hasVEX_L");
|
||||
|
||||
// Check for 64-bit inst which does not require REX
|
||||
Is32Bit = false;
|
||||
@ -479,20 +479,6 @@ bool RecognizableInstr::hasFROperands() const {
|
||||
return false;
|
||||
}
|
||||
|
||||
bool RecognizableInstr::has256BitOperands() const {
|
||||
const std::vector<CGIOperandList::OperandInfo> &OperandList = *Operands;
|
||||
unsigned numOperands = OperandList.size();
|
||||
|
||||
for (unsigned operandIndex = 0; operandIndex < numOperands; ++operandIndex) {
|
||||
const std::string &recName = OperandList[operandIndex].Rec->getName();
|
||||
|
||||
if (!recName.compare("VR256")) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void RecognizableInstr::handleOperand(bool optional, unsigned &operandIndex,
|
||||
unsigned &physicalOperandIndex,
|
||||
unsigned &numPhysicalOperands,
|
||||
|
@ -127,10 +127,7 @@ private:
|
||||
|
||||
/// hasFROperands - Returns true if any operand is a FR operand.
|
||||
bool hasFROperands() const;
|
||||
|
||||
/// has256BitOperands - Returns true if any operand is a 256-bit SSE operand.
|
||||
bool has256BitOperands() const;
|
||||
|
||||
|
||||
/// typeFromString - Translates an operand type from the string provided in
|
||||
/// the LLVM tables to an OperandType for use in the operand specifier.
|
||||
///
|
||||
|
Loading…
x
Reference in New Issue
Block a user