diff --git a/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h b/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h index b0683ac2e32c0..3aceb247a26c2 100644 --- a/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h +++ b/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h @@ -70,7 +70,8 @@ enum attributeBits { ATTR_EVEXKZ = 0x1 << 11, ATTR_EVEXB = 0x1 << 12, ATTR_REX2 = 0x1 << 13, - ATTR_max = 0x1 << 14, + ATTR_EVEXNF = 0x1 << 14, + ATTR_max = 0x1 << 15, }; // Combinations of the above attributes that are relevant to instruction @@ -137,12 +138,15 @@ enum attributeBits { ENUM_ENTRY(IC_VEX_L_W_XD, 5, "requires VEX, L, W and XD prefix") \ ENUM_ENTRY(IC_VEX_L_W_OPSIZE, 5, "requires VEX, L, W and OpSize") \ ENUM_ENTRY(IC_EVEX, 1, "requires an EVEX prefix") \ + ENUM_ENTRY(IC_EVEX_NF, 2, "requires EVEX and NF prefix") \ ENUM_ENTRY(IC_EVEX_XS, 2, "requires EVEX and the XS prefix") \ ENUM_ENTRY(IC_EVEX_XD, 2, "requires EVEX and the XD prefix") \ ENUM_ENTRY(IC_EVEX_OPSIZE, 2, "requires EVEX and the OpSize prefix") \ + ENUM_ENTRY(IC_EVEX_OPSIZE_NF, 3, "requires EVEX, NF and the OpSize prefix") \ ENUM_ENTRY(IC_EVEX_OPSIZE_ADSIZE, 3, \ "requires EVEX, OPSIZE and the ADSIZE prefix") \ ENUM_ENTRY(IC_EVEX_W, 3, "requires EVEX and the W prefix") \ + ENUM_ENTRY(IC_EVEX_W_NF, 4, "requires EVEX, W and NF prefix") \ ENUM_ENTRY(IC_EVEX_W_XS, 4, "requires EVEX, W, and XS prefix") \ ENUM_ENTRY(IC_EVEX_W_XD, 4, "requires EVEX, W, and XD prefix") \ ENUM_ENTRY(IC_EVEX_W_OPSIZE, 4, "requires EVEX, W, and OpSize") \ @@ -187,10 +191,13 @@ enum attributeBits { ENUM_ENTRY(IC_EVEX_L2_W_XD_K, 4, "requires EVEX_K, L2, W and XD prefix") \ ENUM_ENTRY(IC_EVEX_L2_W_OPSIZE_K, 4, "requires EVEX_K, L2, W and OpSize") \ ENUM_ENTRY(IC_EVEX_B, 1, "requires an EVEX_B prefix") \ + ENUM_ENTRY(IC_EVEX_B_NF, 2, "requires EVEX_NF and EVEX_B prefix") \ ENUM_ENTRY(IC_EVEX_XS_B, 2, "requires EVEX_B and the XS prefix") \ ENUM_ENTRY(IC_EVEX_XD_B, 2, "requires EVEX_B and the XD prefix") \ ENUM_ENTRY(IC_EVEX_OPSIZE_B, 2, "requires EVEX_B and the OpSize prefix") \ + ENUM_ENTRY(IC_EVEX_OPSIZE_B_NF, 3, "requires EVEX_B, NF and Opsize prefix") \ ENUM_ENTRY(IC_EVEX_W_B, 3, "requires EVEX_B and the W prefix") \ + ENUM_ENTRY(IC_EVEX_W_B_NF, 4, "requires EVEX_NF, EVEX_B and the W prefix") \ ENUM_ENTRY(IC_EVEX_W_XS_B, 4, "requires EVEX_B, W, and XS prefix") \ ENUM_ENTRY(IC_EVEX_W_XD_B, 4, "requires EVEX_B, W, and XD prefix") \ ENUM_ENTRY(IC_EVEX_W_OPSIZE_B, 4, "requires EVEX_B, W, and OpSize") \ diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index 5a231a046e931..051f6caa8c047 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -108,6 +108,8 @@ class X86AsmParser : public MCTargetAsmParser { // Does this instruction use apx extended register? bool UseApxExtendedReg = false; + // Is this instruction explicitly required not to update flags? + bool ForcedNoFlag = false; private: SMLoc consumeToken() { @@ -3125,6 +3127,7 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name, ForcedVEXEncoding = VEXEncoding_Default; ForcedDispEncoding = DispEncoding_Default; UseApxExtendedReg = false; + ForcedNoFlag = false; // Parse pseudo prefixes. while (true) { @@ -3149,6 +3152,8 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name, ForcedDispEncoding = DispEncoding_Disp8; else if (Prefix == "disp32") ForcedDispEncoding = DispEncoding_Disp32; + else if (Prefix == "nf") + ForcedNoFlag = true; else return Error(NameLoc, "unknown prefix"); @@ -3996,6 +4001,8 @@ unsigned X86AsmParser::checkTargetMatchPredicate(MCInst &Inst) { if (UseApxExtendedReg && !X86II::canUseApxExtendedReg(MCID)) return Match_Unsupported; + if (ForcedNoFlag != !!(MCID.TSFlags & X86II::EVEX_NF)) + return Match_Unsupported; if (ForcedVEXEncoding == VEXEncoding_EVEX && (MCID.TSFlags & X86II::EncodingMask) != X86II::EVEX) diff --git a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp index 59e2008f56321..347dc0d4ed43a 100644 --- a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp +++ b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp @@ -1169,7 +1169,11 @@ static int getInstructionID(struct InternalInstruction *insn, attrMask |= ATTR_EVEXKZ; if (bFromEVEX4of4(insn->vectorExtensionPrefix[3])) attrMask |= ATTR_EVEXB; - if (aaaFromEVEX4of4(insn->vectorExtensionPrefix[3])) + // nf bit is the MSB of aaa + if (nfFromEVEX4of4(insn->vectorExtensionPrefix[3]) && + insn->opcodeType == MAP4) + attrMask |= ATTR_EVEXNF; + else if (aaaFromEVEX4of4(insn->vectorExtensionPrefix[3])) attrMask |= ATTR_EVEXK; if (lFromEVEX4of4(insn->vectorExtensionPrefix[3])) attrMask |= ATTR_VEXL; diff --git a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h index decc45091941d..4c7b1c094522e 100644 --- a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h +++ b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h @@ -103,6 +103,7 @@ namespace X86Disassembler { #define bFromEVEX4of4(evex) bitFromOffset4(evex) #define v2FromEVEX4of4(evex) invertedBitFromOffset3(evex) #define aaaFromEVEX4of4(evex) threeBitsFromOffset0(evex) +#define nfFromEVEX4of4(evex) bitFromOffset2(evex) // These enums represent Intel registers for use by the decoder. #define REGS_8BIT \ diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h b/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h index b0fcaef5f4b06..e006dd8773609 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h +++ b/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h @@ -870,7 +870,10 @@ enum : uint64_t { ExplicitVEXPrefix = 2ULL << ExplicitOpPrefixShift, /// For instructions that are promoted to EVEX space for EGPR. ExplicitEVEXPrefix = 3ULL << ExplicitOpPrefixShift, - ExplicitOpPrefixMask = 3ULL << ExplicitOpPrefixShift + ExplicitOpPrefixMask = 3ULL << ExplicitOpPrefixShift, + /// EVEX_NF - Set if this instruction has EVEX.NF field set. + EVEX_NFShift = ExplicitOpPrefixShift + 2, + EVEX_NF = 1ULL << EVEX_NFShift }; /// \returns true if the instruction with given opcode is a prefix. @@ -992,6 +995,12 @@ inline unsigned getOperandBias(const MCInstrDesc &Desc) { } } +/// \returns true if the instruction has a NDD (new data destination). +inline bool hasNewDataDest(uint64_t TSFlags) { + return (TSFlags & X86II::OpMapMask) == X86II::T_MAP4 && + (TSFlags & X86II::EVEX_B) && (TSFlags & X86II::VEX_4V); +} + /// \returns operand # for the first field of the memory operand or -1 if no /// memory operands. /// NOTE: This ignores tied operands. If there is a tied register which is @@ -1018,7 +1027,7 @@ inline int getMemoryOperandNo(uint64_t TSFlags) { return -1; case X86II::MRMDestMem: case X86II::MRMDestMemFSIB: - return 0; + return hasNewDataDest(TSFlags); case X86II::MRMSrcMem: case X86II::MRMSrcMemFSIB: // Start from 1, skip any registers encoded in VEX_VVVV or I8IMM, or a diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp index cab2f0a2e1c1a..1947313a9dfb0 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp @@ -369,6 +369,9 @@ void X86InstPrinterCommon::printInstFlags(const MCInst *MI, raw_ostream &O, else if (Flags & X86::IP_HAS_REPEAT) O << "\trep\t"; + if (TSFlags & X86II::EVEX_NF) + O << "\t{nf}"; + // These all require a pseudo prefix if ((Flags & X86::IP_USE_VEX) || (TSFlags & X86II::ExplicitOpPrefixMask) == X86II::ExplicitVEXPrefix) diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp index 9e1f1eb97e703..924956295e7c6 100644 --- a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp +++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp @@ -251,6 +251,7 @@ class X86OpcodePrefixHelper { void setAAA(const MCInst &MI, unsigned OpNum) { EVEX_aaa = getRegEncoding(MI, OpNum); } + void setNF(bool V) { EVEX_aaa |= V << 2; } X86OpcodePrefixHelper(const MCRegisterInfo &MRI) : W(0), R(0), X(0), B(0), M(0), R2(0), X2(0), B2(0), VEX_4V(0), VEX_L(0), @@ -987,9 +988,11 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI, } Prefix.setW(TSFlags & X86II::REX_W); + Prefix.setNF(TSFlags & X86II::EVEX_NF); bool HasEVEX_K = TSFlags & X86II::EVEX_K; bool HasVEX_4V = TSFlags & X86II::VEX_4V; + bool IsND = X86II::hasNewDataDest(TSFlags); // IsND implies HasVEX_4V bool HasEVEX_RC = TSFlags & X86II::EVEX_RC; switch (TSFlags & X86II::OpMapMask) { @@ -1049,6 +1052,7 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI, bool EncodeRC = false; uint8_t EVEX_rc = 0; + unsigned CurOp = X86II::getOperandBias(Desc); switch (TSFlags & X86II::FormMask) { @@ -1073,16 +1077,21 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI, // MemAddr, src1(VEX_4V), src2(ModR/M) // MemAddr, src1(ModR/M), imm8 // + // NDD: + // dst(VEX_4V), MemAddr, src1(ModR/M) Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg); Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg); Prefix.setV2(MI, MemOperand + X86::AddrIndexReg, HasVEX_4V); + if (IsND) + Prefix.set4VV2(MI, CurOp++); + CurOp += X86::AddrNumOperands; if (HasEVEX_K) Prefix.setAAA(MI, CurOp++); - if (HasVEX_4V) + if (!IsND && HasVEX_4V) Prefix.set4VV2(MI, CurOp++); Prefix.setRR2(MI, CurOp++); @@ -1098,12 +1107,18 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI, // // FMA4: // dst(ModR/M.reg), src1(VEX_4V), src2(ModR/M), src3(Imm[7:4]) + // + // NDD: + // dst(VEX_4V), src1(ModR/M), MemAddr + if (IsND) + Prefix.set4VV2(MI, CurOp++); + Prefix.setRR2(MI, CurOp++); if (HasEVEX_K) Prefix.setAAA(MI, CurOp++); - if (HasVEX_4V) + if (!IsND && HasVEX_4V) Prefix.set4VV2(MI, CurOp++); Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg); @@ -1160,12 +1175,17 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI, // // FMA4: // dst(ModR/M.reg), src1(VEX_4V), src2(Imm[7:4]), src3(ModR/M), + // + // NDD: + // dst(VEX_4V), src1(ModR/M.reg), src2(ModR/M) + if (IsND) + Prefix.set4VV2(MI, CurOp++); Prefix.setRR2(MI, CurOp++); if (HasEVEX_K) Prefix.setAAA(MI, CurOp++); - if (HasVEX_4V) + if (!IsND && HasVEX_4V) Prefix.set4VV2(MI, CurOp++); Prefix.setBB2(MI, CurOp); @@ -1209,6 +1229,11 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI, // dst(ModR/M), src(ModR/M) // dst(ModR/M), src(ModR/M), imm8 // dst(ModR/M), src1(VEX_4V), src2(ModR/M) + // + // NDD: + // dst(VEX_4V), src1(ModR/M), src2(ModR/M) + if (IsND) + Prefix.set4VV2(MI, CurOp++); Prefix.setBB2(MI, CurOp); Prefix.setX(MI, CurOp, 4); ++CurOp; @@ -1216,7 +1241,7 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI, if (HasEVEX_K) Prefix.setAAA(MI, CurOp++); - if (HasVEX_4V) + if (!IsND && HasVEX_4V) Prefix.set4VV2(MI, CurOp++); Prefix.setRR2(MI, CurOp++); @@ -1508,6 +1533,8 @@ void X86MCCodeEmitter::encodeInstruction(const MCInst &MI, unsigned OpcodeOffset = 0; + bool IsND = X86II::hasNewDataDest(TSFlags); + uint64_t Form = TSFlags & X86II::FormMask; switch (Form) { default: @@ -1576,6 +1603,8 @@ void X86MCCodeEmitter::encodeInstruction(const MCInst &MI, if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV) ++SrcRegNum; + if (IsND) // Skip the NDD operand encoded in EVEX_VVVV + ++CurOp; emitRegModRMByte(MI.getOperand(CurOp), getX86RegNum(MI.getOperand(SrcRegNum)), CB); @@ -1602,6 +1631,9 @@ void X86MCCodeEmitter::encodeInstruction(const MCInst &MI, if (HasVEX_4V) // Skip 1st src (which is encoded in VEX_VVVV) ++SrcRegNum; + if (IsND) // Skip new data destination + ++CurOp; + bool ForceSIB = (Form == X86II::MRMDestMemFSIB); emitMemModRMByte(MI, CurOp, getX86RegNum(MI.getOperand(SrcRegNum)), TSFlags, Kind, StartByte, CB, Fixups, STI, ForceSIB); @@ -1669,6 +1701,9 @@ void X86MCCodeEmitter::encodeInstruction(const MCInst &MI, case X86II::MRMSrcMem: { unsigned FirstMemOp = CurOp + 1; + if (IsND) // Skip new data destination + CurOp++; + if (HasEVEX_K) // Skip writemask ++FirstMemOp; diff --git a/llvm/lib/Target/X86/X86InstrArithmetic.td b/llvm/lib/Target/X86/X86InstrArithmetic.td index 220ca31a825f9..cd9ad091143cd 100644 --- a/llvm/lib/Target/X86/X86InstrArithmetic.td +++ b/llvm/lib/Target/X86/X86InstrArithmetic.td @@ -45,12 +45,12 @@ def PLEA64r : PseudoI<(outs GR64:$dst), (ins anymem:$src), []>; } // BinOpRR - Instructions that read "reg, reg". -class BinOpRR o, string m, X86TypeInfo t, dag out, list p> +class BinOpRR o, string m, string args, X86TypeInfo t, dag out, list p> : ITy, Sched<[WriteALU]>; + args, p>, Sched<[WriteALU]>; // BinOpRR_F - Instructions that read "reg, reg" and write EFLAGS only. class BinOpRR_F o, string m, X86TypeInfo t, SDPatternOperator node> - : BinOpRR, DefEFLAGS; // BinOpRR_F_Rev - Reversed encoding of BinOpRR_F @@ -58,55 +58,69 @@ class BinOpRR_F_Rev o, string m, X86TypeInfo t> : BinOpRR_F, DisassembleOnly { let Form = MRMSrcReg; } +// BinOpRR_R - Instructions that read "reg, reg" and write "reg". +class BinOpRR_R o, string m, X86TypeInfo t, bit ndd = 0> + : BinOpRR, NDD; +// BinOpRR_R_Rev - Reversed encoding of BinOpRR_R +class BinOpRR_R_Rev o, string m, X86TypeInfo t, bit ndd = 0> + : BinOpRR_R, DisassembleOnly { + let Form = MRMSrcReg; +} // BinOpRR_RF - Instructions that read "reg, reg", and write "reg", EFLAGS. -class BinOpRR_RF o, string m, X86TypeInfo t, SDPatternOperator node> - : BinOpRR o, string m, X86TypeInfo t, SDPatternOperator node, bit ndd = 0> + : BinOpRR, DefEFLAGS; + (node t.RegClass:$src1, t.RegClass:$src2))]>, DefEFLAGS, NDD; // BinOpRR_RF_Rev - Reversed encoding of BinOpRR_RF. -class BinOpRR_RF_Rev o, string m, X86TypeInfo t> - : BinOpRR_RF, DisassembleOnly { +class BinOpRR_RF_Rev o, string m, X86TypeInfo t, bit ndd = 0> + : BinOpRR_RF, DisassembleOnly { let Form = MRMSrcReg; } // BinOpRRF_RF - Instructions that read "reg, reg", write "reg" and read/write // EFLAGS. -class BinOpRRF_RF o, string m, X86TypeInfo t, SDPatternOperator node> - : BinOpRR o, string m, X86TypeInfo t, SDPatternOperator node, bit ndd = 0> + : BinOpRR, DefEFLAGS, UseEFLAGS { + EFLAGS))]>, DefEFLAGS, UseEFLAGS, NDD { let SchedRW = [WriteADC]; } // BinOpRRF_RF_Rev - Reversed encoding of BinOpRRF_RF -class BinOpRRF_RF_Rev o, string m, X86TypeInfo t> - : BinOpRRF_RF, DisassembleOnly { +class BinOpRRF_RF_Rev o, string m, X86TypeInfo t, bit ndd = 0> + : BinOpRRF_RF, DisassembleOnly { let Form = MRMSrcReg; } // BinOpRM - Instructions that read "reg, [mem]". -class BinOpRM o, string m, X86TypeInfo t, dag out, list p> +class BinOpRM o, string m, string args, X86TypeInfo t, dag out, list p> : ITy, + args, p>, Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]> { let mayLoad = 1; } // BinOpRM_F - Instructions that read "reg, [mem]" and write EFLAGS only. class BinOpRM_F o, string m, X86TypeInfo t, SDNode node> - : BinOpRM, DefEFLAGS; -// BinOpRM_RF - Instructions that read "reg, reg", and write "reg", EFLAGS. -class BinOpRM_RF o, string m, X86TypeInfo t, SDPatternOperator node> - : BinOpRM o, string m, X86TypeInfo t, bit ndd = 0> + : BinOpRM, NDD; +// BinOpRM_RF - Instructions that read "reg, [mem]", and write "reg", EFLAGS. +class BinOpRM_RF o, string m, X86TypeInfo t, SDPatternOperator node, bit ndd = 0> + : BinOpRM, DefEFLAGS; + (t.LoadNode addr:$src2)))]>, DefEFLAGS, NDD; // BinOpRMF_RF - Instructions that read "reg, [mem]", write "reg" and read/write // EFLAGS. -class BinOpRMF_RF o, string m, X86TypeInfo t, SDPatternOperator node> - : BinOpRM o, string m, X86TypeInfo t, SDPatternOperator node, bit ndd = 0> + : BinOpRM, - DefEFLAGS, UseEFLAGS { + DefEFLAGS, UseEFLAGS, NDD { let SchedRW = [WriteADC.Folded, WriteADC.ReadAfterFold, // base, scale, index, offset, segment. ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault, @@ -126,18 +140,22 @@ class BinOpRI_F o, string m, X86TypeInfo t, SDPatternOperator node, : BinOpRI, DefEFLAGS; +// BinOpRI_R - Instructions that read "reg, imm" and write "reg". +class BinOpRI_R o, string m, X86TypeInfo t, Format f, bit ndd = 0> + : BinOpRI, NDD; // BinOpRI_RF - Instructions that read "reg, imm" and write "reg", EFLAGS. -class BinOpRI_RF o, string m, X86TypeInfo t, SDNode node, Format f> - : BinOpRI o, string m, X86TypeInfo t, SDPatternOperator node, Format f, bit ndd = 0> + : BinOpRI, DefEFLAGS; + (node t.RegClass:$src1, t.ImmOperator:$src2))]>, DefEFLAGS, NDD; // BinOpRIF_RF - Instructions that read "reg, imm", write "reg" and read/write // EFLAGS. -class BinOpRIF_RF o, string m, X86TypeInfo t, SDNode node, Format f> - : BinOpRI o, string m, X86TypeInfo t, SDNode node, Format f, bit ndd = 0> + : BinOpRI, DefEFLAGS, UseEFLAGS { + EFLAGS))]>, DefEFLAGS, UseEFLAGS, NDD { let SchedRW = [WriteADC]; } // BinOpRI8 - Instructions that read "reg, imm8". @@ -149,31 +167,51 @@ class BinOpRI8 o, string m, string args, X86TypeInfo t, Format f, dag ou // BinOpRI8_F - Instructions that read "reg, imm8" and write EFLAGS only. class BinOpRI8_F o, string m, X86TypeInfo t, Format f> : BinOpRI8, DefEFLAGS; +// BinOpRI8_R - Instructions that read "reg, imm8" and write "reg". +class BinOpRI8_R o, string m, X86TypeInfo t, Format f, bit ndd = 0> + : BinOpRI8, NDD; // BinOpRI8_RF - Instructions that read "reg, imm8" and write "reg", EFLAGS. -class BinOpRI8_RF o, string m, X86TypeInfo t, Format f> - : BinOpRI8, DefEFLAGS; +class BinOpRI8_RF o, string m, X86TypeInfo t, Format f, bit ndd = 0> + : BinOpRI8, DefEFLAGS, NDD; // BinOpRI8F_RF - Instructions that read "reg, imm", write "reg" and read/write // EFLAGS. -class BinOpRI8F_RF o, string m, X86TypeInfo t, Format f> - : BinOpRI8, DefEFLAGS, UseEFLAGS { +class BinOpRI8F_RF o, string m, X86TypeInfo t, Format f, bit ndd = 0> + : BinOpRI8, DefEFLAGS, UseEFLAGS, NDD { let SchedRW = [WriteADC]; } // BinOpMR - Instructions that read "[mem], reg". -class BinOpMR o, string m, X86TypeInfo t, list p> - : ITy { +class BinOpMR o, string m, string args, X86TypeInfo t, dag out, list p> + : ITy { let mayLoad = 1; + let SchedRW = [WriteALU.Folded, WriteALU.ReadAfterFold]; } +// BinOpMR_R - Instructions that read "[mem], reg", and write "reg". +class BinOpMR_R o, string m, X86TypeInfo t> + : BinOpMR, NDD<1>; +// BinOpMR_RF - Instructions that read "[mem], reg", and write "reg", EFLAGS. +class BinOpMR_RF o, string m, X86TypeInfo t, SDPatternOperator node> + : BinOpMR, DefEFLAGS, NDD<1>; // BinOpMR_F - Instructions that read "[mem], imm8" and write EFLAGS only. class BinOpMR_F o, string m, X86TypeInfo t, SDPatternOperator node> - : BinOpMR, Sched<[WriteALU.Folded, ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault, WriteALU.ReadAfterFold]>, DefEFLAGS; +// BinOpMR_M - Instructions that read "[mem], reg" and write "[mem]". +class BinOpMR_M o, string m, X86TypeInfo t> + : BinOpMR, + Sched<[WriteALURMW, + // base, scale, index, offset, segment + ReadDefault, ReadDefault, ReadDefault, ReadDefault, ReadDefault]> { + let mayStore = 1; +} // BinOpMR_MF - Instructions that read "[mem], reg" and write "[mem]", EFLAGS. -class BinOpMR_MF o, string m, X86TypeInfo t, SDNode node> - : BinOpMR o, string m, X86TypeInfo t, SDPatternOperator node> + : BinOpMR, Sched<[WriteALURMW, @@ -183,10 +221,17 @@ class BinOpMR_MF o, string m, X86TypeInfo t, SDNode node> DefEFLAGS { let mayStore = 1; } +// BinOpMRF_RF - Instructions that read "[mem], reg", write "reg" and +// read/write EFLAGS. +class BinOpMRF_RF o, string m, X86TypeInfo t, SDPatternOperator node> + : BinOpMR, DefEFLAGS, UseEFLAGS, NDD<1>, + Sched<[WriteADC.Folded, WriteADC.ReadAfterFold]>; // BinOpMRF_MF - Instructions that read "[mem], reg", write "[mem]" and // read/write EFLAGS. -class BinOpMRF_MF o, string m, X86TypeInfo t, SDNode node> - : BinOpMR o, string m, X86TypeInfo t, SDPatternOperator node> + : BinOpMR, Sched<[WriteADCRMW, @@ -212,14 +257,36 @@ class BinOpMI_F o, string m, X86TypeInfo t, SDPatternOperator node, : BinOpMI, Sched<[WriteALU.Folded]>, DefEFLAGS; +// BinOpMI_R - Instructions that read "[mem], imm" and write "reg". +class BinOpMI_R o, string m, X86TypeInfo t, Format f> + : BinOpMI, + Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]>, NDD<1>; +// BinOpMI_R - Instructions that read "[mem], imm" and write "reg", EFLAGS. +class BinOpMI_RF o, string m, X86TypeInfo t, SDPatternOperator node, + Format f> + : BinOpMI, + Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]>, DefEFLAGS, NDD<1>; +// BinOpMI_M - Instructions that read "[mem], imm" and write "[mem]". +class BinOpMI_M o, string m, X86TypeInfo t, Format f> + : BinOpMI, Sched<[WriteALURMW]> { + let mayStore = 1; +} // BinOpMI_MF - Instructions that read "[mem], imm" and write "[mem]", EFLAGS. -class BinOpMI_MF o, string m, X86TypeInfo t, SDNode node, Format f> +class BinOpMI_MF o, string m, X86TypeInfo t, SDPatternOperator node, Format f> : BinOpMI, Sched<[WriteALURMW]>, DefEFLAGS { let mayStore = 1; } +// BinOpMIF_RF - Instructions that read "[mem], imm", write "reg" and +// read/write EFLAGS. +class BinOpMIF_RF o, string m, X86TypeInfo t, SDNode node, Format f> + : BinOpMI, + Sched<[WriteADC.Folded, WriteADC.ReadAfterFold]>, DefEFLAGS, UseEFLAGS, NDD<1>; // BinOpMIF_MF - Instructions that read "[mem], imm", write "[mem]" and // read/write EFLAGS. class BinOpMIF_MF o, string m, X86TypeInfo t, SDNode node, Format f> @@ -240,11 +307,27 @@ class BinOpMI8 // BinOpMI8_F - Instructions that read "[mem], imm8" and write EFLAGS only. class BinOpMI8_F : BinOpMI8, Sched<[WriteALU.Folded]>, DefEFLAGS; +// BinOpMI8_R - Instructions that read "[mem], imm8" and write "reg". +class BinOpMI8_R + : BinOpMI8, Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]>, NDD<1>; +// BinOpMI8_RF - Instructions that read "[mem], imm8" and write "reg"/EFLAGS. +class BinOpMI8_RF + : BinOpMI8, Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]>, DefEFLAGS, NDD<1>; +// BinOpMI8_M - Instructions that read "[mem], imm8" and write "[mem]". +class BinOpMI8_M + : BinOpMI8, Sched<[WriteALURMW]> { + let mayStore = 1; +} // BinOpMI8_MF - Instructions that read "[mem], imm8" and write "[mem]", EFLAGS. class BinOpMI8_MF : BinOpMI8, Sched<[WriteALURMW]>, DefEFLAGS { let mayStore = 1; } +// BinOpMI8F_RF - Instructions that read "[mem], imm8", write "reg" and +// read/write EFLAGS. +class BinOpMI8F_RF + : BinOpMI8, + Sched<[WriteADC.Folded, WriteADC.ReadAfterFold]>, DefEFLAGS, UseEFLAGS, NDD<1>; // BinOpMI8F_MF - Instructions that read "[mem], imm8", write "[mem]" and // read/write EFLAGS. class BinOpMI8F_MF @@ -280,30 +363,44 @@ class BinOpAIF_AF o, string m, X86TypeInfo t, Register areg, // UnaryOpR - Instructions that read "reg". class UnaryOpR o, Format f, string m, string args, X86TypeInfo t, dag out, list p> - : ITy, Sched<[WriteALU]>; + : ITy, Sched<[WriteALU]>; // UnaryOpR_R - Instructions that read "reg" and write "reg". class UnaryOpR_R o, Format f, string m, X86TypeInfo t, - SDPatternOperator node> - : UnaryOpR; + SDPatternOperator node, bit ndd = 0> + : UnaryOpR, NDD; // UnaryOpR_RF - Instructions that read "reg" and write "reg"/EFLAGS. class UnaryOpR_RF o, Format f, string m, X86TypeInfo t, - SDPatternOperator node> - : UnaryOpR, DefEFLAGS; + SDPatternOperator node, bit ndd = 0> + : UnaryOpR, DefEFLAGS, NDD; // UnaryOpM - Instructions that read "[mem]". class UnaryOpM o, Format f, string m, string args, X86TypeInfo t, dag out, list p> - : ITy { + : ITy { let mayLoad = 1; } +// UnaryOpM_R - Instructions that read "[mem]" and writes "reg". +class UnaryOpM_R o, Format f, string m, X86TypeInfo t, + SDPatternOperator node> + : UnaryOpM, + Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]>, NDD<1>; +// UnaryOpM_RF - Instructions that read "[mem]" and writes "reg"/EFLAGS. +class UnaryOpM_RF o, Format f, string m, X86TypeInfo t, + SDPatternOperator node> + : UnaryOpM, + Sched<[WriteALU.Folded, WriteALU.ReadAfterFold]>, DefEFLAGS, NDD<1>; // UnaryOpM_M - Instructions that read "[mem]" and writes "[mem]". class UnaryOpM_M o, Format f, string m, X86TypeInfo t, SDPatternOperator node> : UnaryOpM, + [(store (node (t.LoadNode addr:$src1)), addr:$src1)]>, Sched<[WriteALURMW]>{ let mayStore = 1; } @@ -311,7 +408,7 @@ class UnaryOpM_M o, Format f, string m, X86TypeInfo t, class UnaryOpM_MF o, Format f, string m, X86TypeInfo t, SDPatternOperator node> : UnaryOpM, Sched<[WriteALURMW]>, DefEFLAGS { let mayStore = 1; } @@ -321,13 +418,13 @@ class UnaryOpM_MF o, Format f, string m, X86TypeInfo t, // class MulDivOpR o, Format f, string m, X86TypeInfo t, X86FoldableSchedWrite sched, list p> - : UnaryOpR { + : UnaryOpR { let SchedRW = [sched]; } class MulDivOpM o, Format f, string m, X86TypeInfo t, X86FoldableSchedWrite sched, list p> - : UnaryOpM { + : UnaryOpM { let SchedRW = [sched.Folded, // Memory operand. @@ -345,7 +442,7 @@ multiclass Mul o, string m, Format RegMRM, Format MemMRM, SDPatternOpera // syntax can be accepted. let Defs = [AL,EFLAGS,AX], Uses = [AL] in def 8r : MulDivOpR; + [(set AL, (node AL, GR8:$src1)), (implicit EFLAGS)]>; let Defs = [AX,DX,EFLAGS], Uses = [AX] in def 16r : MulDivOpR, OpSize16; let Defs = [EAX,EDX,EFLAGS], Uses = [EAX] in @@ -354,7 +451,7 @@ multiclass Mul o, string m, Format RegMRM, Format MemMRM, SDPatternOpera def 64r : MulDivOpR; let Defs = [AL,EFLAGS,AX], Uses = [AL] in def 8m : MulDivOpM; + [(set AL, (node AL, (loadi8 addr:$src1))), (implicit EFLAGS)]>; let Defs = [AX,DX,EFLAGS], Uses = [AX] in def 16m : MulDivOpM, OpSize16; let Defs = [EAX,EDX,EFLAGS], Uses = [EAX] in @@ -460,18 +557,18 @@ def IMUL64rmi32 : IMulOpMI_R; // class IncOpR_RF : UnaryOpR_RF<0xFF, MRM0r, "inc", t, null_frag> { let Pattern = [(set t.RegClass:$dst, EFLAGS, - (X86add_flag_nocf t.RegClass:$src, 1))]; + (X86add_flag_nocf t.RegClass:$src1, 1))]; } class DecOpR_RF : UnaryOpR_RF<0xFF, MRM1r, "dec", t, null_frag> { let Pattern = [(set t.RegClass:$dst, EFLAGS, - (X86sub_flag_nocf t.RegClass:$src, 1))]; + (X86sub_flag_nocf t.RegClass:$src1, 1))]; } class IncOpM_M : UnaryOpM_MF<0xFF, MRM0m, "inc", t, null_frag> { - let Pattern = [(store (add (t.LoadNode addr:$src), 1), addr:$src), + let Pattern = [(store (add (t.LoadNode addr:$src1), 1), addr:$src1), (implicit EFLAGS)]; } class DecOpM_M : UnaryOpM_MF<0xFF, MRM1m, "dec", t, null_frag> { - let Pattern = [(store (add (t.LoadNode addr:$src), -1), addr:$src), + let Pattern = [(store (add (t.LoadNode addr:$src1), -1), addr:$src1), (implicit EFLAGS)]; } // IncDec_Alt - Instructions like "inc reg" short forms. @@ -479,7 +576,7 @@ class DecOpM_M : UnaryOpM_MF<0xFF, MRM1m, "dec", t, null_frag> { class IncDec_Alt o, string m, X86TypeInfo t> : UnaryOpR_RF, Requires<[Not64BitMode]>; -let Constraints = "$src = $dst", isConvertibleToThreeAddress = 1 in { +let isConvertibleToThreeAddress = 1 in { def INC16r_alt : IncDec_Alt<0x40, "inc", Xi16>, OpSize16; def INC32r_alt : IncDec_Alt<0x40, "inc", Xi32>, OpSize32; def DEC16r_alt : IncDec_Alt<0x48, "dec", Xi16>, OpSize16; @@ -509,34 +606,108 @@ def DEC64m : DecOpM_M; //===----------------------------------------------------------------------===// // NEG and NOT Instructions // -class NegOpR_RF : UnaryOpR_RF<0xF7, MRM3r, "neg", t, ineg>; +class NegOpR_R + : UnaryOpR_R<0xF7, MRM3r, "neg", t, ineg, ndd>; +class NegOpR_RF + : UnaryOpR_RF<0xF7, MRM3r, "neg", t, ineg, ndd>; +class NegOpM_M : UnaryOpM_M<0xF7, MRM3m, "neg", t, null_frag>; class NegOpM_MF : UnaryOpM_MF<0xF7, MRM3m, "neg", t, ineg>; +class NegOpM_R : UnaryOpM_R<0xF7, MRM3m, "neg", t, null_frag>; +class NegOpM_RF : UnaryOpM_RF<0xF7, MRM3m, "neg", t, ineg>; -class NotOpR_R : UnaryOpR_R<0xF7, MRM2r, "not", t, not>; +class NotOpR_R + : UnaryOpR_R<0xF7, MRM2r, "not", t, not, ndd>; class NotOpM_M : UnaryOpM_M<0xF7, MRM2m, "not", t, not>; +class NotOpM_R : UnaryOpM_R<0xF7, MRM2m, "not", t, not>; -let Constraints = "$src = $dst" in { +let Predicates = [NoNDD] in { def NEG8r : NegOpR_RF; def NEG16r : NegOpR_RF, OpSize16; def NEG32r : NegOpR_RF, OpSize32; def NEG64r : NegOpR_RF; - def NOT8r : NotOpR_R; def NOT16r : NotOpR_R, OpSize16; def NOT32r : NotOpR_R, OpSize32; def NOT64r : NotOpR_R; } +let Predicates = [HasNDD, In64BitMode] in { +def NEG8r_ND : NegOpR_RF; +def NEG16r_ND : NegOpR_RF, PD; +def NEG32r_ND : NegOpR_RF; +def NEG64r_ND : NegOpR_RF; + +def NOT8r_ND : NotOpR_R; +def NOT16r_ND : NotOpR_R, PD; +def NOT32r_ND : NotOpR_R; +def NOT64r_ND : NotOpR_R; + +def NEG8r_NF_ND : NegOpR_R, EVEX_NF; +def NEG16r_NF_ND : NegOpR_R, EVEX_NF, PD; +def NEG32r_NF_ND : NegOpR_R, EVEX_NF; +def NEG64r_NF_ND : NegOpR_R, EVEX_NF; +} + def NEG8m : NegOpM_MF; def NEG16m : NegOpM_MF, OpSize16; def NEG32m : NegOpM_MF, OpSize32; def NEG64m : NegOpM_MF, Requires<[In64BitMode]>; +let Predicates = [HasNDD, In64BitMode] in { +def NEG8m_ND : NegOpM_RF; +def NEG16m_ND : NegOpM_RF, PD; +def NEG32m_ND : NegOpM_RF; +def NEG64m_ND : NegOpM_RF; + +def NEG8m_NF_ND : NegOpM_R, EVEX_NF; +def NEG16m_NF_ND : NegOpM_R, EVEX_NF, PD; +def NEG32m_NF_ND : NegOpM_R, EVEX_NF; +def NEG64m_NF_ND : NegOpM_R, EVEX_NF; +} + def NOT8m : NotOpM_M; def NOT16m : NotOpM_M, OpSize16; def NOT32m : NotOpM_M, OpSize32; def NOT64m : NotOpM_M, Requires<[In64BitMode]>; +let Predicates = [HasNDD, In64BitMode] in { +def NOT8m_ND : NotOpM_R; +def NOT16m_ND : NotOpM_R, PD; +def NOT32m_ND : NotOpM_R; +def NOT64m_ND : NotOpM_R; +} + +let Predicates = [In64BitMode], Pattern = [(null_frag)] in { +def NEG8r_NF : NegOpR_R, NF; +def NEG16r_NF : NegOpR_R, NF, PD; +def NEG32r_NF : NegOpR_R, NF; +def NEG64r_NF : NegOpR_R, NF; +def NEG8m_NF : NegOpM_M, NF; +def NEG16m_NF : NegOpM_M, NF, PD; +def NEG32m_NF : NegOpM_M, NF; +def NEG64m_NF : NegOpM_M, NF; + +def NEG8r_EVEX : NegOpR_RF, PL; +def NEG16r_EVEX : NegOpR_RF, PL, PD; +def NEG32r_EVEX : NegOpR_RF, PL; +def NEG64r_EVEX : NegOpR_RF, PL; + +def NOT8r_EVEX : NotOpR_R, PL; +def NOT16r_EVEX : NotOpR_R, PL, PD; +def NOT32r_EVEX : NotOpR_R, PL; +def NOT64r_EVEX : NotOpR_R, PL; + +def NEG8m_EVEX : NegOpM_MF, PL; +def NEG16m_EVEX : NegOpM_MF, PL, PD; +def NEG32m_EVEX : NegOpM_MF, PL; +def NEG64m_EVEX : NegOpM_MF, PL; + +def NOT8m_EVEX : NotOpM_M, PL; +def NOT16m_EVEX : NotOpM_M, PL, PD; +def NOT32m_EVEX : NotOpM_M, PL; +def NOT64m_EVEX : NotOpM_M, PL; +} + /// ArithBinOp_RF - This is an arithmetic binary operator where the pattern is /// defined with "(set GPR:$dst, EFLAGS, (...". /// @@ -547,56 +718,200 @@ multiclass ArithBinOp_RF BaseOpc, bits<8> BaseOpc2, bits<8> BaseOpc4, SDNode opnodeflag, SDNode opnode, bit CommutableRR, bit ConvertibleToThreeAddress, bit ConvertibleToThreeAddressRR> { - let Constraints = "$src1 = $dst" in { - let isCommutable = CommutableRR, - isConvertibleToThreeAddress = ConvertibleToThreeAddressRR in { - def NAME#8rr : BinOpRR_RF; - def NAME#16rr : BinOpRR_RF, OpSize16; - def NAME#32rr : BinOpRR_RF, OpSize32; - def NAME#64rr : BinOpRR_RF; + let isCommutable = CommutableRR, + isConvertibleToThreeAddress = ConvertibleToThreeAddressRR in { + let Predicates = [NoNDD] in { + def NAME#8rr : BinOpRR_RF; + def NAME#16rr : BinOpRR_RF, OpSize16; + def NAME#32rr : BinOpRR_RF, OpSize32; + def NAME#64rr : BinOpRR_RF; + } + let Predicates = [HasNDD, In64BitMode] in { + def NAME#8rr_ND : BinOpRR_RF; + def NAME#16rr_ND : BinOpRR_RF, PD; + def NAME#32rr_ND : BinOpRR_RF; + def NAME#64rr_ND : BinOpRR_RF; + def NAME#8rr_NF_ND : BinOpRR_R, EVEX_NF; + def NAME#16rr_NF_ND : BinOpRR_R, EVEX_NF, PD; + def NAME#32rr_NF_ND : BinOpRR_R, EVEX_NF; + def NAME#64rr_NF_ND : BinOpRR_R, EVEX_NF; + } + let Predicates = [In64BitMode] in { + def NAME#8rr_NF : BinOpRR_R, NF; + def NAME#16rr_NF : BinOpRR_R, NF, PD; + def NAME#32rr_NF : BinOpRR_R, NF; + def NAME#64rr_NF : BinOpRR_R, NF; + def NAME#8rr_EVEX : BinOpRR_RF, PL; + def NAME#16rr_EVEX : BinOpRR_RF, PL, PD; + def NAME#32rr_EVEX : BinOpRR_RF, PL; + def NAME#64rr_EVEX : BinOpRR_RF, PL; } + } - def NAME#8rr_REV : BinOpRR_RF_Rev; - def NAME#16rr_REV : BinOpRR_RF_Rev, OpSize16; - def NAME#32rr_REV : BinOpRR_RF_Rev, OpSize32; - def NAME#64rr_REV : BinOpRR_RF_Rev; + def NAME#8rr_REV : BinOpRR_RF_Rev; + def NAME#16rr_REV : BinOpRR_RF_Rev, OpSize16; + def NAME#32rr_REV : BinOpRR_RF_Rev, OpSize32; + def NAME#64rr_REV : BinOpRR_RF_Rev; + let Predicates = [In64BitMode] in { + def NAME#8rr_EVEX_REV : BinOpRR_RF_Rev, PL; + def NAME#16rr_EVEX_REV : BinOpRR_RF_Rev, PL, PD; + def NAME#32rr_EVEX_REV : BinOpRR_RF_Rev, PL; + def NAME#64rr_EVEX_REV : BinOpRR_RF_Rev, PL; + def NAME#8rr_ND_REV : BinOpRR_RF_Rev; + def NAME#16rr_ND_REV : BinOpRR_RF_Rev, PD; + def NAME#32rr_ND_REV : BinOpRR_RF_Rev; + def NAME#64rr_ND_REV : BinOpRR_RF_Rev; + def NAME#8rr_NF_REV : BinOpRR_R_Rev, NF; + def NAME#16rr_NF_REV : BinOpRR_R_Rev, NF, PD; + def NAME#32rr_NF_REV : BinOpRR_R_Rev, NF; + def NAME#64rr_NF_REV : BinOpRR_R_Rev, NF; + def NAME#8rr_NF_ND_REV : BinOpRR_R_Rev, EVEX_NF; + def NAME#16rr_NF_ND_REV : BinOpRR_R_Rev, EVEX_NF, PD; + def NAME#32rr_NF_ND_REV : BinOpRR_R_Rev, EVEX_NF; + def NAME#64rr_NF_ND_REV : BinOpRR_R_Rev, EVEX_NF; + } - def NAME#8rm : BinOpRM_RF; - def NAME#16rm : BinOpRM_RF, OpSize16; - def NAME#32rm : BinOpRM_RF, OpSize32; - def NAME#64rm : BinOpRM_RF; + let Predicates = [NoNDD] in { + def NAME#8rm : BinOpRM_RF; + def NAME#16rm : BinOpRM_RF, OpSize16; + def NAME#32rm : BinOpRM_RF, OpSize32; + def NAME#64rm : BinOpRM_RF; + } + let Predicates = [HasNDD, In64BitMode] in { + def NAME#8rm_ND : BinOpRM_RF; + def NAME#16rm_ND : BinOpRM_RF, PD; + def NAME#32rm_ND : BinOpRM_RF; + def NAME#64rm_ND : BinOpRM_RF; + def NAME#8rm_NF_ND : BinOpRM_R, EVEX_NF; + def NAME#16rm_NF_ND : BinOpRM_R, EVEX_NF, PD; + def NAME#32rm_NF_ND : BinOpRM_R, EVEX_NF; + def NAME#64rm_NF_ND : BinOpRM_R, EVEX_NF; + } + let Predicates = [In64BitMode] in { + def NAME#8rm_NF : BinOpRM_R, NF; + def NAME#16rm_NF : BinOpRM_R, NF, PD; + def NAME#32rm_NF : BinOpRM_R, NF; + def NAME#64rm_NF : BinOpRM_R, NF; + def NAME#8rm_EVEX : BinOpRM_RF, PL; + def NAME#16rm_EVEX : BinOpRM_RF, PL, PD; + def NAME#32rm_EVEX : BinOpRM_RF, PL; + def NAME#64rm_EVEX : BinOpRM_RF, PL; + } let isConvertibleToThreeAddress = ConvertibleToThreeAddress in { - def NAME#8ri : BinOpRI_RF<0x80, mnemonic, Xi8 , opnodeflag, RegMRM>; - // NOTE: These are order specific, we want the ri8 forms to be listed - // first so that they are slightly preferred to the ri forms. - def NAME#16ri8 : BinOpRI8_RF<0x83, mnemonic, Xi16, RegMRM>, OpSize16; - def NAME#32ri8 : BinOpRI8_RF<0x83, mnemonic, Xi32, RegMRM>, OpSize32; - def NAME#64ri8 : BinOpRI8_RF<0x83, mnemonic, Xi64, RegMRM>; - - def NAME#16ri : BinOpRI_RF<0x81, mnemonic, Xi16, opnodeflag, RegMRM>, OpSize16; - def NAME#32ri : BinOpRI_RF<0x81, mnemonic, Xi32, opnodeflag, RegMRM>, OpSize32; - def NAME#64ri32: BinOpRI_RF<0x81, mnemonic, Xi64, opnodeflag, RegMRM>; + let Predicates = [NoNDD] in { + // NOTE: These are order specific, we want the ri8 forms to be listed + // first so that they are slightly preferred to the ri forms. + def NAME#16ri8 : BinOpRI8_RF<0x83, mnemonic, Xi16, RegMRM>, OpSize16; + def NAME#32ri8 : BinOpRI8_RF<0x83, mnemonic, Xi32, RegMRM>, OpSize32; + def NAME#64ri8 : BinOpRI8_RF<0x83, mnemonic, Xi64, RegMRM>; + def NAME#8ri : BinOpRI_RF<0x80, mnemonic, Xi8 , opnodeflag, RegMRM>; + def NAME#16ri : BinOpRI_RF<0x81, mnemonic, Xi16, opnodeflag, RegMRM>, OpSize16; + def NAME#32ri : BinOpRI_RF<0x81, mnemonic, Xi32, opnodeflag, RegMRM>, OpSize32; + def NAME#64ri32: BinOpRI_RF<0x81, mnemonic, Xi64, opnodeflag, RegMRM>; + } + let Predicates = [HasNDD, In64BitMode] in { + def NAME#16ri8_ND : BinOpRI8_RF<0x83, mnemonic, Xi16, RegMRM, 1>, PD; + def NAME#32ri8_ND : BinOpRI8_RF<0x83, mnemonic, Xi32, RegMRM, 1>; + def NAME#64ri8_ND : BinOpRI8_RF<0x83, mnemonic, Xi64, RegMRM, 1>; + def NAME#8ri_ND : BinOpRI_RF<0x80, mnemonic, Xi8 , opnodeflag, RegMRM, 1>; + def NAME#16ri_ND : BinOpRI_RF<0x81, mnemonic, Xi16, opnodeflag, RegMRM, 1>, PD; + def NAME#32ri_ND : BinOpRI_RF<0x81, mnemonic, Xi32, opnodeflag, RegMRM, 1>; + def NAME#64ri32_ND: BinOpRI_RF<0x81, mnemonic, Xi64, opnodeflag, RegMRM, 1>; + def NAME#16ri8_NF_ND : BinOpRI8_R<0x83, mnemonic, Xi16, RegMRM, 1>, EVEX_NF, PD; + def NAME#32ri8_NF_ND : BinOpRI8_R<0x83, mnemonic, Xi32, RegMRM, 1>, EVEX_NF; + def NAME#64ri8_NF_ND : BinOpRI8_R<0x83, mnemonic, Xi64, RegMRM, 1>, EVEX_NF; + def NAME#8ri_NF_ND : BinOpRI_R<0x80, mnemonic, Xi8, RegMRM, 1>, EVEX_NF; + def NAME#16ri_NF_ND : BinOpRI_R<0x81, mnemonic, Xi16, RegMRM, 1>, EVEX_NF, PD; + def NAME#32ri_NF_ND : BinOpRI_R<0x81, mnemonic, Xi32, RegMRM, 1>, EVEX_NF; + def NAME#64ri_NF_ND : BinOpRI_R<0x81, mnemonic, Xi64, RegMRM, 1>, EVEX_NF; + } + let Predicates = [In64BitMode] in { + def NAME#16ri8_NF : BinOpRI8_R<0x83, mnemonic, Xi16, RegMRM>, NF, PD; + def NAME#32ri8_NF : BinOpRI8_R<0x83, mnemonic, Xi32, RegMRM>, NF; + def NAME#64ri8_NF : BinOpRI8_R<0x83, mnemonic, Xi64, RegMRM>, NF; + def NAME#8ri_NF : BinOpRI_R<0x80, mnemonic, Xi8, RegMRM>, NF; + def NAME#16ri_NF : BinOpRI_R<0x81, mnemonic, Xi16, RegMRM>, NF, PD; + def NAME#32ri_NF : BinOpRI_R<0x81, mnemonic, Xi32, RegMRM>, NF; + def NAME#64ri_NF : BinOpRI_R<0x81, mnemonic, Xi64, RegMRM>, NF; + def NAME#16ri8_EVEX : BinOpRI8_RF<0x83, mnemonic, Xi16, RegMRM>, PL, PD; + def NAME#32ri8_EVEX : BinOpRI8_RF<0x83, mnemonic, Xi32, RegMRM>, PL; + def NAME#64ri8_EVEX : BinOpRI8_RF<0x83, mnemonic, Xi64, RegMRM>, PL; + def NAME#8ri_EVEX : BinOpRI_RF<0x80, mnemonic, Xi8 , null_frag, RegMRM>, PL; + def NAME#16ri_EVEX : BinOpRI_RF<0x81, mnemonic, Xi16, null_frag, RegMRM>, PL, PD; + def NAME#32ri_EVEX : BinOpRI_RF<0x81, mnemonic, Xi32, null_frag, RegMRM>, PL; + def NAME#64ri32_EVEX: BinOpRI_RF<0x81, mnemonic, Xi64, null_frag, RegMRM>, PL; + } } - } // Constraints = "$src1 = $dst" - def NAME#8mr : BinOpMR_MF; - def NAME#16mr : BinOpMR_MF, OpSize16; - def NAME#32mr : BinOpMR_MF, OpSize32; - def NAME#64mr : BinOpMR_MF; + def NAME#8mr : BinOpMR_MF; + def NAME#16mr : BinOpMR_MF, OpSize16; + def NAME#32mr : BinOpMR_MF, OpSize32; + def NAME#64mr : BinOpMR_MF; + let Predicates = [HasNDD, In64BitMode] in { + def NAME#8mr_ND : BinOpMR_RF; + def NAME#16mr_ND : BinOpMR_RF, PD; + def NAME#32mr_ND : BinOpMR_RF; + def NAME#64mr_ND : BinOpMR_RF; + def NAME#8mr_NF_ND : BinOpMR_R, EVEX_NF; + def NAME#16mr_NF_ND : BinOpMR_R, EVEX_NF, PD; + def NAME#32mr_NF_ND : BinOpMR_R, EVEX_NF; + def NAME#64mr_NF_ND : BinOpMR_R, EVEX_NF; + } + let Predicates = [In64BitMode] in { + def NAME#8mr_NF : BinOpMR_M, NF; + def NAME#16mr_NF : BinOpMR_M, NF, PD; + def NAME#32mr_NF : BinOpMR_M, NF; + def NAME#64mr_NF : BinOpMR_M, NF; + def NAME#8mr_EVEX : BinOpMR_MF, PL; + def NAME#16mr_EVEX : BinOpMR_MF, PL, PD; + def NAME#32mr_EVEX : BinOpMR_MF, PL; + def NAME#64mr_EVEX : BinOpMR_MF, PL; + } // NOTE: These are order specific, we want the mi8 forms to be listed // first so that they are slightly preferred to the mi forms. def NAME#16mi8 : BinOpMI8_MF, OpSize16; def NAME#32mi8 : BinOpMI8_MF, OpSize32; let Predicates = [In64BitMode] in - def NAME#64mi8 : BinOpMI8_MF; - + def NAME#64mi8 : BinOpMI8_MF; def NAME#8mi : BinOpMI_MF<0x80, mnemonic, Xi8 , opnode, MemMRM>; def NAME#16mi : BinOpMI_MF<0x81, mnemonic, Xi16, opnode, MemMRM>, OpSize16; def NAME#32mi : BinOpMI_MF<0x81, mnemonic, Xi32, opnode, MemMRM>, OpSize32; let Predicates = [In64BitMode] in - def NAME#64mi32 : BinOpMI_MF<0x81, mnemonic, Xi64, opnode, MemMRM>; + def NAME#64mi32 : BinOpMI_MF<0x81, mnemonic, Xi64, opnode, MemMRM>; + let Predicates = [HasNDD, In64BitMode] in { + def NAME#16mi8_ND : BinOpMI8_RF, PD; + def NAME#32mi8_ND : BinOpMI8_RF; + def NAME#64mi8_ND : BinOpMI8_RF; + def NAME#8mi_ND : BinOpMI_RF<0x80, mnemonic, Xi8 , opnode, MemMRM>; + def NAME#16mi_ND : BinOpMI_RF<0x81, mnemonic, Xi16, opnode, MemMRM>, PD; + def NAME#32mi_ND : BinOpMI_RF<0x81, mnemonic, Xi32, opnode, MemMRM>; + def NAME#64mi32_ND : BinOpMI_RF<0x81, mnemonic, Xi64, opnode, MemMRM>; + def NAME#16mi8_NF_ND : BinOpMI8_R, NF, PD; + def NAME#32mi8_NF_ND : BinOpMI8_R, NF; + def NAME#64mi8_NF_ND : BinOpMI8_R, NF; + def NAME#8mi_NF_ND : BinOpMI_R<0x80, mnemonic, Xi8, MemMRM>, NF; + def NAME#16mi_NF_ND : BinOpMI_R<0x81, mnemonic, Xi16, MemMRM>, NF, PD; + def NAME#32mi_NF_ND : BinOpMI_R<0x81, mnemonic, Xi32, MemMRM>, NF; + def NAME#64mi32_NF_ND : BinOpMI_R<0x81, mnemonic, Xi64, MemMRM>, NF; + } + let Predicates = [In64BitMode] in { + def NAME#16mi8_NF : BinOpMI8_M, NF, PD; + def NAME#32mi8_NF : BinOpMI8_M, NF; + def NAME#64mi8_NF : BinOpMI8_M, NF; + def NAME#8mi_NF : BinOpMI_M<0x80, mnemonic, Xi8, MemMRM>, NF; + def NAME#16mi_NF : BinOpMI_M<0x81, mnemonic, Xi16, MemMRM>, NF, PD; + def NAME#32mi_NF : BinOpMI_M<0x81, mnemonic, Xi32, MemMRM>, NF; + def NAME#64mi32_NF : BinOpMI_M<0x81, mnemonic, Xi64, MemMRM>, NF; + def NAME#16mi8_EVEX : BinOpMI8_MF, PL, PD; + def NAME#32mi8_EVEX : BinOpMI8_MF, PL; + def NAME#64mi8_EVEX : BinOpMI8_MF, PL; + def NAME#8mi_EVEX : BinOpMI_MF<0x80, mnemonic, Xi8 , null_frag, MemMRM>, PL; + def NAME#16mi_EVEX : BinOpMI_MF<0x81, mnemonic, Xi16, null_frag, MemMRM>, PL, PD; + def NAME#32mi_EVEX : BinOpMI_MF<0x81, mnemonic, Xi32, null_frag, MemMRM>, PL; + def NAME#64mi32_EVEX : BinOpMI_MF<0x81, mnemonic, Xi64, null_frag, MemMRM>, PL; + } // These are for the disassembler since 0x82 opcode behaves like 0x80, but // not in 64-bit mode. @@ -626,57 +941,149 @@ multiclass ArithBinOp_RFF BaseOpc, bits<8> BaseOpc2, bits<8> BaseOpc4, string mnemonic, Format RegMRM, Format MemMRM, SDNode opnode, bit CommutableRR, bit ConvertibleToThreeAddress> { - let Constraints = "$src1 = $dst" in { - let isCommutable = CommutableRR in { - def NAME#8rr : BinOpRRF_RF; + let isCommutable = CommutableRR in { + let Predicates = [NoNDD] in { + def NAME#8rr : BinOpRRF_RF; let isConvertibleToThreeAddress = ConvertibleToThreeAddress in { - def NAME#16rr : BinOpRRF_RF, OpSize16; - def NAME#32rr : BinOpRRF_RF, OpSize32; - def NAME#64rr : BinOpRRF_RF; - } // isConvertibleToThreeAddress + def NAME#16rr : BinOpRRF_RF, OpSize16; + def NAME#32rr : BinOpRRF_RF, OpSize32; + def NAME#64rr : BinOpRRF_RF; + } + } + let Predicates = [HasNDD, In64BitMode] in { + def NAME#8rr_ND : BinOpRRF_RF; + let isConvertibleToThreeAddress = ConvertibleToThreeAddress in { + def NAME#16rr_ND : BinOpRRF_RF, PD; + def NAME#32rr_ND : BinOpRRF_RF; + def NAME#64rr_ND : BinOpRRF_RF; + } + } } // isCommutable + let Predicates = [In64BitMode] in { + def NAME#8rr_EVEX : BinOpRRF_RF, PL; + def NAME#16rr_EVEX : BinOpRRF_RF, PL, PD; + def NAME#32rr_EVEX : BinOpRRF_RF, PL; + def NAME#64rr_EVEX : BinOpRRF_RF, PL; + } + def NAME#8rr_REV : BinOpRRF_RF_Rev; def NAME#16rr_REV : BinOpRRF_RF_Rev, OpSize16; def NAME#32rr_REV : BinOpRRF_RF_Rev, OpSize32; def NAME#64rr_REV : BinOpRRF_RF_Rev; + let Predicates = [In64BitMode] in { + def NAME#8rr_ND_REV : BinOpRRF_RF_Rev; + def NAME#16rr_ND_REV : BinOpRRF_RF_Rev, PD; + def NAME#32rr_ND_REV : BinOpRRF_RF_Rev; + def NAME#64rr_ND_REV : BinOpRRF_RF_Rev; + def NAME#8rr_EVEX_REV : BinOpRRF_RF_Rev, PL; + def NAME#16rr_EVEX_REV : BinOpRRF_RF_Rev, PL, PD; + def NAME#32rr_EVEX_REV : BinOpRRF_RF_Rev, PL; + def NAME#64rr_EVEX_REV : BinOpRRF_RF_Rev, PL; + } + + let Predicates = [NoNDD] in { + def NAME#8rm : BinOpRMF_RF; + def NAME#16rm : BinOpRMF_RF, OpSize16; + def NAME#32rm : BinOpRMF_RF, OpSize32; + def NAME#64rm : BinOpRMF_RF; + } + let Predicates = [HasNDD, In64BitMode] in { + def NAME#8rm_ND : BinOpRMF_RF; + def NAME#16rm_ND : BinOpRMF_RF, PD; + def NAME#32rm_ND : BinOpRMF_RF; + def NAME#64rm_ND : BinOpRMF_RF; + } + let Predicates = [In64BitMode] in { + def NAME#8rm_EVEX : BinOpRMF_RF, PL; + def NAME#16rm_EVEX : BinOpRMF_RF, PL, PD; + def NAME#32rm_EVEX : BinOpRMF_RF, PL; + def NAME#64rm_EVEX : BinOpRMF_RF, PL; + } - def NAME#8rm : BinOpRMF_RF; - def NAME#16rm : BinOpRMF_RF, OpSize16; - def NAME#32rm : BinOpRMF_RF, OpSize32; - def NAME#64rm : BinOpRMF_RF; + let Predicates = [NoNDD] in { + def NAME#8ri : BinOpRIF_RF<0x80, mnemonic, Xi8 , opnode, RegMRM>; + let isConvertibleToThreeAddress = ConvertibleToThreeAddress in { + // NOTE: These are order specific, we want the ri8 forms to be listed + // first so that they are slightly preferred to the ri forms. + def NAME#16ri8 : BinOpRI8F_RF<0x83, mnemonic, Xi16, RegMRM>, OpSize16; + def NAME#32ri8 : BinOpRI8F_RF<0x83, mnemonic, Xi32, RegMRM>, OpSize32; + def NAME#64ri8 : BinOpRI8F_RF<0x83, mnemonic, Xi64, RegMRM>; + + def NAME#16ri : BinOpRIF_RF<0x81, mnemonic, Xi16, opnode, RegMRM>, OpSize16; + def NAME#32ri : BinOpRIF_RF<0x81, mnemonic, Xi32, opnode, RegMRM>, OpSize32; + def NAME#64ri32: BinOpRIF_RF<0x81, mnemonic, Xi64, opnode, RegMRM>; + } + } - def NAME#8ri : BinOpRIF_RF<0x80, mnemonic, Xi8 , opnode, RegMRM>; + let Predicates = [HasNDD, In64BitMode] in { + def NAME#8ri_ND : BinOpRIF_RF<0x80, mnemonic, Xi8 , opnode, RegMRM, 1>; let isConvertibleToThreeAddress = ConvertibleToThreeAddress in { - // NOTE: These are order specific, we want the ri8 forms to be listed - // first so that they are slightly preferred to the ri forms. - def NAME#16ri8 : BinOpRI8F_RF<0x83, mnemonic, Xi16, RegMRM>, OpSize16; - def NAME#32ri8 : BinOpRI8F_RF<0x83, mnemonic, Xi32, RegMRM>, OpSize32; - def NAME#64ri8 : BinOpRI8F_RF<0x83, mnemonic, Xi64, RegMRM>; - - def NAME#16ri : BinOpRIF_RF<0x81, mnemonic, Xi16, opnode, RegMRM>, OpSize16; - def NAME#32ri : BinOpRIF_RF<0x81, mnemonic, Xi32, opnode, RegMRM>, OpSize32; - def NAME#64ri32: BinOpRIF_RF<0x81, mnemonic, Xi64, opnode, RegMRM>; + def NAME#16ri8_ND : BinOpRI8F_RF<0x83, mnemonic, Xi16, RegMRM, 1>, PD; + def NAME#32ri8_ND : BinOpRI8F_RF<0x83, mnemonic, Xi32, RegMRM, 1>; + def NAME#64ri8_ND : BinOpRI8F_RF<0x83, mnemonic, Xi64, RegMRM, 1>; + def NAME#16ri_ND : BinOpRIF_RF<0x81, mnemonic, Xi16, opnode, RegMRM, 1>, PD; + def NAME#32ri_ND : BinOpRIF_RF<0x81, mnemonic, Xi32, opnode, RegMRM, 1>; + def NAME#64ri32_ND: BinOpRIF_RF<0x81, mnemonic, Xi64, opnode, RegMRM, 1>; } - } // Constraints = "$src1 = $dst" + } + let Predicates = [In64BitMode] in { + def NAME#8ri_EVEX : BinOpRIF_RF<0x80, mnemonic, Xi8 , opnode, RegMRM>, PL; + def NAME#16ri8_EVEX : BinOpRI8F_RF<0x83, mnemonic, Xi16, RegMRM>, PL, PD; + def NAME#32ri8_EVEX : BinOpRI8F_RF<0x83, mnemonic, Xi32, RegMRM>, PL; + def NAME#64ri8_EVEX : BinOpRI8F_RF<0x83, mnemonic, Xi64, RegMRM>, PL; + def NAME#16ri_EVEX : BinOpRIF_RF<0x81, mnemonic, Xi16, opnode, RegMRM>, PL, PD; + def NAME#32ri_EVEX : BinOpRIF_RF<0x81, mnemonic, Xi32, opnode, RegMRM>, PL; + def NAME#64ri32_EVEX: BinOpRIF_RF<0x81, mnemonic, Xi64, opnode, RegMRM>, PL; + } def NAME#8mr : BinOpMRF_MF; def NAME#16mr : BinOpMRF_MF, OpSize16; def NAME#32mr : BinOpMRF_MF, OpSize32; def NAME#64mr : BinOpMRF_MF; + let Predicates = [HasNDD, In64BitMode] in { + def NAME#8mr_ND : BinOpMRF_RF; + def NAME#16mr_ND : BinOpMRF_RF, PD; + def NAME#32mr_ND : BinOpMRF_RF; + def NAME#64mr_ND : BinOpMRF_RF; + } + let Predicates = [In64BitMode] in { + def NAME#8mr_EVEX : BinOpMRF_MF, PL; + def NAME#16mr_EVEX : BinOpMRF_MF, PL, PD; + def NAME#32mr_EVEX : BinOpMRF_MF, PL; + def NAME#64mr_EVEX : BinOpMRF_MF, PL; + } // NOTE: These are order specific, we want the mi8 forms to be listed // first so that they are slightly preferred to the mi forms. + def NAME#8mi : BinOpMIF_MF<0x80, mnemonic, Xi8 , opnode, MemMRM>; def NAME#16mi8 : BinOpMI8F_MF, OpSize16; def NAME#32mi8 : BinOpMI8F_MF, OpSize32; let Predicates = [In64BitMode] in - def NAME#64mi8 : BinOpMI8F_MF; - - def NAME#8mi : BinOpMIF_MF<0x80, mnemonic, Xi8 , opnode, MemMRM>; + def NAME#64mi8 : BinOpMI8F_MF; def NAME#16mi : BinOpMIF_MF<0x81, mnemonic, Xi16, opnode, MemMRM>, OpSize16; def NAME#32mi : BinOpMIF_MF<0x81, mnemonic, Xi32, opnode, MemMRM>, OpSize32; let Predicates = [In64BitMode] in - def NAME#64mi32 : BinOpMIF_MF<0x81, mnemonic, Xi64, opnode, MemMRM>; + def NAME#64mi32 : BinOpMIF_MF<0x81, mnemonic, Xi64, opnode, MemMRM>; + + let Predicates = [HasNDD, In64BitMode] in { + def NAME#8mi_ND : BinOpMIF_RF<0x80, mnemonic, Xi8 , opnode, MemMRM>; + def NAME#16mi8_ND : BinOpMI8F_RF, PD; + def NAME#32mi8_ND : BinOpMI8F_RF; + def NAME#64mi8_ND : BinOpMI8F_RF; + def NAME#16mi_ND : BinOpMIF_RF<0x81, mnemonic, Xi16, opnode, MemMRM>, PD; + def NAME#32mi_ND : BinOpMIF_RF<0x81, mnemonic, Xi32, opnode, MemMRM>; + def NAME#64mi32_ND : BinOpMIF_RF<0x81, mnemonic, Xi64, opnode, MemMRM>; + } + let Predicates = [In64BitMode] in { + def NAME#8mi_EVEX : BinOpMIF_MF<0x80, mnemonic, Xi8 , opnode, MemMRM>, PL; + def NAME#16mi8_EVEX : BinOpMI8F_MF, PL, PD; + def NAME#32mi8_EVEX : BinOpMI8F_MF, PL; + def NAME#64mi8_EVEX : BinOpMI8F_MF, PL; + def NAME#16mi_EVEX : BinOpMIF_MF<0x81, mnemonic, Xi16, opnode, MemMRM>, PL, PD; + def NAME#32mi_EVEX : BinOpMIF_MF<0x81, mnemonic, Xi32, opnode, MemMRM>, PL; + def NAME#64mi32_EVEX : BinOpMIF_MF<0x81, mnemonic, Xi64, opnode, MemMRM>, PL; + } // These are for the disassembler since 0x82 opcode behaves like 0x80, but // not in 64-bit mode. diff --git a/llvm/lib/Target/X86/X86InstrFormats.td b/llvm/lib/Target/X86/X86InstrFormats.td index 07e5576960d65..6e76b44b66a30 100644 --- a/llvm/lib/Target/X86/X86InstrFormats.td +++ b/llvm/lib/Target/X86/X86InstrFormats.td @@ -256,6 +256,7 @@ class X86Inst opcod, Format f, ImmType i, dag outs, dag ins, bit hasEVEX_Z = 0; // Does this inst set the EVEX_Z field? bit hasEVEX_L2 = 0; // Does this inst set the EVEX_L2 field? bit hasEVEX_B = 0; // Does this inst set the EVEX_B field? + bit hasEVEX_NF = 0; // Does this inst set the EVEX_NF field? bits<3> CD8_Form = 0; // Compressed disp8 form - vector-width. // Declare it int rather than bits<4> so that all bits are defined when // assigning to bits<7>. @@ -309,4 +310,5 @@ class X86Inst opcod, Format f, ImmType i, dag outs, dag ins, let TSFlags{48} = hasEVEX_RC; let TSFlags{49} = hasNoTrackPrefix; let TSFlags{51-50} = explicitOpPrefixBits; + let TSFlags{52} = hasEVEX_NF; } diff --git a/llvm/lib/Target/X86/X86InstrPredicates.td b/llvm/lib/Target/X86/X86InstrPredicates.td index df4bc38aa0b56..94fa6e45ded9d 100644 --- a/llvm/lib/Target/X86/X86InstrPredicates.td +++ b/llvm/lib/Target/X86/X86InstrPredicates.td @@ -10,6 +10,8 @@ def TruePredicate : Predicate<"true">; def HasEGPR : Predicate<"Subtarget->hasEGPR()">; def NoEGPR : Predicate<"!Subtarget->hasEGPR()">; +def HasNDD : Predicate<"Subtarget->hasNDD()">; +def NoNDD : Predicate<"!Subtarget->hasNDD()">; def HasCMOV : Predicate<"Subtarget->canUseCMOV()">; def NoCMOV : Predicate<"!Subtarget->canUseCMOV()">; def HasNOPL : Predicate<"Subtarget->hasNOPL()">; diff --git a/llvm/lib/Target/X86/X86InstrUtils.td b/llvm/lib/Target/X86/X86InstrUtils.td index b7d2d8096ff54..5b2caaae05cd9 100644 --- a/llvm/lib/Target/X86/X86InstrUtils.td +++ b/llvm/lib/Target/X86/X86InstrUtils.td @@ -50,6 +50,7 @@ class EVEX { Encoding OpEnc = EncEVEX; } class EVEX_K { bit hasEVEX_K = 1; } class EVEX_KZ : EVEX_K { bit hasEVEX_Z = 1; } class EVEX_B { bit hasEVEX_B = 1; } +class EVEX_NF { bit hasEVEX_NF = 1; } class EVEX_RC { bit hasEVEX_RC = 1; } class EVEX_V512 { bit hasEVEX_L2 = 1; bit hasVEX_L = 0; } class EVEX_V256 { bit hasEVEX_L2 = 0; bit hasVEX_L = 1; } @@ -955,6 +956,21 @@ class ITy o, Format f, X86TypeInfo t, dag outs, dag ins, string m, let hasREX_W = t.HasREX_W; } -defvar unaryop_args = "$src"; +defvar unaryop_args = "$src1"; +defvar unaryop_ndd_args = "{$src1, $dst|$dst, $src1}"; defvar binop_args = "{$src2, $src1|$src1, $src2}"; defvar binop_ndd_args = "{$src2, $src1, $dst|$dst, $src1, $src2}"; +defvar tie_dst_src1 = "$src1 = $dst"; + +// NDD - Helper for new data destination instructions +class NDD { + string Constraints = !if(!eq(ndd, 0), tie_dst_src1, ""); + Encoding OpEnc = !if(!eq(ndd, 0), EncNormal, EncEVEX); + bit hasEVEX_B = ndd; + bit hasVEX_4V = ndd; + Map OpMap = !if(!eq(ndd, 0), OB, T_MAP4); +} +// NF - Helper for NF (no flags update) instructions +class NF: T_MAP4, EVEX, EVEX_NF, NoCD8; +// PL - Helper for promoted legacy instructions +class PL: T_MAP4, EVEX, NoCD8, ExplicitEVEXPrefix; diff --git a/llvm/test/MC/Disassembler/X86/apx/adc.txt b/llvm/test/MC/Disassembler/X86/apx/adc.txt new file mode 100644 index 0000000000000..b46957888719c --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/adc.txt @@ -0,0 +1,210 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} adcb $123, %bl +# INTEL: {evex} adc bl, 123 +0x62,0xf4,0x7c,0x08,0x80,0xd3,0x7b + +# ATT: adcb $123, %bl, %cl +# INTEL: adc cl, bl, 123 +0x62,0xf4,0x74,0x18,0x80,0xd3,0x7b + +# ATT: {evex} adcw $123, %dx +# INTEL: {evex} adc dx, 123 +0x62,0xf4,0x7d,0x08,0x83,0xd2,0x7b + +# ATT: adcw $123, %dx, %ax +# INTEL: adc ax, dx, 123 +0x62,0xf4,0x7d,0x18,0x83,0xd2,0x7b + +# ATT: {evex} adcl $123, %ecx +# INTEL: {evex} adc ecx, 123 +0x62,0xf4,0x7c,0x08,0x83,0xd1,0x7b + +# ATT: adcl $123, %ecx, %edx +# INTEL: adc edx, ecx, 123 +0x62,0xf4,0x6c,0x18,0x83,0xd1,0x7b + +# ATT: {evex} adcq $123, %r9 +# INTEL: {evex} adc r9, 123 +0x62,0xd4,0xfc,0x08,0x83,0xd1,0x7b + +# ATT: adcq $123, %r9, %r15 +# INTEL: adc r15, r9, 123 +0x62,0xd4,0x84,0x18,0x83,0xd1,0x7b + +# ATT: {evex} adcb $123, 291(%r8,%rax,4) +# INTEL: {evex} adc byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x80,0x94,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: adcb $123, 291(%r8,%rax,4), %bl +# INTEL: adc bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x18,0x80,0x94,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} adcw $123, 291(%r8,%rax,4) +# INTEL: {evex} adc word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: adcw $123, 291(%r8,%rax,4), %dx +# INTEL: adc dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} adcl $123, 291(%r8,%rax,4) +# INTEL: {evex} adc dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: adcl $123, 291(%r8,%rax,4), %ecx +# INTEL: adc ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} adcq $123, 291(%r8,%rax,4) +# INTEL: {evex} adc qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: adcq $123, 291(%r8,%rax,4), %r9 +# INTEL: adc r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} adcw $1234, %dx +# INTEL: {evex} adc dx, 1234 +0x62,0xf4,0x7d,0x08,0x81,0xd2,0xd2,0x04 + +# ATT: adcw $1234, %dx, %ax +# INTEL: adc ax, dx, 1234 +0x62,0xf4,0x7d,0x18,0x81,0xd2,0xd2,0x04 + +# ATT: {evex} adcw $1234, 291(%r8,%rax,4) +# INTEL: {evex} adc word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: adcw $1234, 291(%r8,%rax,4), %dx +# INTEL: adc dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {evex} adcl $123456, %ecx +# INTEL: {evex} adc ecx, 123456 +0x62,0xf4,0x7c,0x08,0x81,0xd1,0x40,0xe2,0x01,0x00 + +# ATT: adcl $123456, %ecx, %edx +# INTEL: adc edx, ecx, 123456 +0x62,0xf4,0x6c,0x18,0x81,0xd1,0x40,0xe2,0x01,0x00 + +# ATT: {evex} adcq $123456, %r9 +# INTEL: {evex} adc r9, 123456 +0x62,0xd4,0xfc,0x08,0x81,0xd1,0x40,0xe2,0x01,0x00 + +# ATT: adcq $123456, %r9, %r15 +# INTEL: adc r15, r9, 123456 +0x62,0xd4,0x84,0x18,0x81,0xd1,0x40,0xe2,0x01,0x00 + +# ATT: {evex} adcl $123456, 291(%r8,%rax,4) +# INTEL: {evex} adc dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: adcl $123456, 291(%r8,%rax,4), %ecx +# INTEL: adc ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} adcq $123456, 291(%r8,%rax,4) +# INTEL: {evex} adc qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: adcq $123456, 291(%r8,%rax,4), %r9 +# INTEL: adc r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} adcb %bl, %cl +# INTEL: {evex} adc cl, bl +0x62,0xf4,0x7c,0x08,0x10,0xd9 + +# ATT: adcb %bl, %cl, %r8b +# INTEL: adc r8b, cl, bl +0x62,0xf4,0x3c,0x18,0x10,0xd9 + +# ATT: {evex} adcb %bl, 291(%r8,%rax,4) +# INTEL: {evex} adc byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x08,0x10,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: adcb %bl, 291(%r8,%rax,4), %cl +# INTEL: adc cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x18,0x10,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} adcw %dx, %ax +# INTEL: {evex} adc ax, dx +0x62,0xf4,0x7d,0x08,0x11,0xd0 + +# ATT: adcw %dx, %ax, %r9w +# INTEL: adc r9w, ax, dx +0x62,0xf4,0x35,0x18,0x11,0xd0 + +# ATT: {evex} adcw %dx, 291(%r8,%rax,4) +# INTEL: {evex} adc word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x08,0x11,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: adcw %dx, 291(%r8,%rax,4), %ax +# INTEL: adc ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x18,0x11,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} adcl %ecx, %edx +# INTEL: {evex} adc edx, ecx +0x62,0xf4,0x7c,0x08,0x11,0xca + +# ATT: adcl %ecx, %edx, %r10d +# INTEL: adc r10d, edx, ecx +0x62,0xf4,0x2c,0x18,0x11,0xca + +# ATT: {evex} adcl %ecx, 291(%r8,%rax,4) +# INTEL: {evex} adc dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x08,0x11,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: adcl %ecx, 291(%r8,%rax,4), %edx +# INTEL: adc edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x18,0x11,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} adcq %r9, %r15 +# INTEL: {evex} adc r15, r9 +0x62,0x54,0xfc,0x08,0x11,0xcf + +# ATT: adcq %r9, %r15, %r11 +# INTEL: adc r11, r15, r9 +0x62,0x54,0xa4,0x18,0x11,0xcf + +# ATT: {evex} adcq %r9, 291(%r8,%rax,4) +# INTEL: {evex} adc qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x08,0x11,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: adcq %r9, 291(%r8,%rax,4), %r15 +# INTEL: adc r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x18,0x11,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} adcb 291(%r8,%rax,4), %bl +# INTEL: {evex} adc bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x12,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: adcb 291(%r8,%rax,4), %bl, %cl +# INTEL: adc cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0x12,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} adcw 291(%r8,%rax,4), %dx +# INTEL: {evex} adc dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0x13,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: adcw 291(%r8,%rax,4), %dx, %ax +# INTEL: adc ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x18,0x13,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} adcl 291(%r8,%rax,4), %ecx +# INTEL: {evex} adc ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x13,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: adcl 291(%r8,%rax,4), %ecx, %edx +# INTEL: adc edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x18,0x13,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} adcq 291(%r8,%rax,4), %r9 +# INTEL: {evex} adc r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x08,0x13,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: adcq 291(%r8,%rax,4), %r9, %r15 +# INTEL: adc r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x18,0x13,0x8c,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/X86/apx/add.txt b/llvm/test/MC/Disassembler/X86/apx/add.txt new file mode 100644 index 0000000000000..4dcb523b0be71 --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/add.txt @@ -0,0 +1,418 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} addb $123, %bl +# INTEL: {evex} add bl, 123 +0x62,0xf4,0x7c,0x08,0x80,0xc3,0x7b + +# ATT: {nf} addb $123, %bl +# INTEL: {nf} add bl, 123 +0x62,0xf4,0x7c,0x0c,0x80,0xc3,0x7b + +# ATT: addb $123, %bl, %cl +# INTEL: add cl, bl, 123 +0x62,0xf4,0x74,0x18,0x80,0xc3,0x7b + +# ATT: {nf} addb $123, %bl, %cl +# INTEL: {nf} add cl, bl, 123 +0x62,0xf4,0x74,0x1c,0x80,0xc3,0x7b + +# ATT: {evex} addw $123, %dx +# INTEL: {evex} add dx, 123 +0x62,0xf4,0x7d,0x08,0x83,0xc2,0x7b + +# ATT: {nf} addw $123, %dx +# INTEL: {nf} add dx, 123 +0x62,0xf4,0x7d,0x0c,0x83,0xc2,0x7b + +# ATT: addw $123, %dx, %ax +# INTEL: add ax, dx, 123 +0x62,0xf4,0x7d,0x18,0x83,0xc2,0x7b + +# ATT: {nf} addw $123, %dx, %ax +# INTEL: {nf} add ax, dx, 123 +0x62,0xf4,0x7d,0x1c,0x83,0xc2,0x7b + +# ATT: {evex} addl $123, %ecx +# INTEL: {evex} add ecx, 123 +0x62,0xf4,0x7c,0x08,0x83,0xc1,0x7b + +# ATT: {nf} addl $123, %ecx +# INTEL: {nf} add ecx, 123 +0x62,0xf4,0x7c,0x0c,0x83,0xc1,0x7b + +# ATT: addl $123, %ecx, %edx +# INTEL: add edx, ecx, 123 +0x62,0xf4,0x6c,0x18,0x83,0xc1,0x7b + +# ATT: {nf} addl $123, %ecx, %edx +# INTEL: {nf} add edx, ecx, 123 +0x62,0xf4,0x6c,0x1c,0x83,0xc1,0x7b + +# ATT: {evex} addq $123, %r9 +# INTEL: {evex} add r9, 123 +0x62,0xd4,0xfc,0x08,0x83,0xc1,0x7b + +# ATT: {nf} addq $123, %r9 +# INTEL: {nf} add r9, 123 +0x62,0xd4,0xfc,0x0c,0x83,0xc1,0x7b + +# ATT: addq $123, %r9, %r15 +# INTEL: add r15, r9, 123 +0x62,0xd4,0x84,0x18,0x83,0xc1,0x7b + +# ATT: {nf} addq $123, %r9, %r15 +# INTEL: {nf} add r15, r9, 123 +0x62,0xd4,0x84,0x1c,0x83,0xc1,0x7b + +# ATT: {evex} addb $123, 291(%r8,%rax,4) +# INTEL: {evex} add byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} addb $123, 291(%r8,%rax,4) +# INTEL: {nf} add byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: addb $123, 291(%r8,%rax,4), %bl +# INTEL: add bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x18,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} addb $123, 291(%r8,%rax,4), %bl +# INTEL: {nf} add bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x1c,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} addw $123, 291(%r8,%rax,4) +# INTEL: {evex} add word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} addw $123, 291(%r8,%rax,4) +# INTEL: {nf} add word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: addw $123, 291(%r8,%rax,4), %dx +# INTEL: add dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} addw $123, 291(%r8,%rax,4), %dx +# INTEL: {nf} add dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} addl $123, 291(%r8,%rax,4) +# INTEL: {evex} add dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} addl $123, 291(%r8,%rax,4) +# INTEL: {nf} add dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: addl $123, 291(%r8,%rax,4), %ecx +# INTEL: add ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} addl $123, 291(%r8,%rax,4), %ecx +# INTEL: {nf} add ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} addq $123, 291(%r8,%rax,4) +# INTEL: {evex} add qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} addq $123, 291(%r8,%rax,4) +# INTEL: {nf} add qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: addq $123, 291(%r8,%rax,4), %r9 +# INTEL: add r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} addq $123, 291(%r8,%rax,4), %r9 +# INTEL: {nf} add r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} addw $1234, %dx +# INTEL: {evex} add dx, 1234 +0x62,0xf4,0x7d,0x08,0x81,0xc2,0xd2,0x04 + +# ATT: {nf} addw $1234, %dx +# INTEL: {nf} add dx, 1234 +0x62,0xf4,0x7d,0x0c,0x81,0xc2,0xd2,0x04 + +# ATT: addw $1234, %dx, %ax +# INTEL: add ax, dx, 1234 +0x62,0xf4,0x7d,0x18,0x81,0xc2,0xd2,0x04 + +# ATT: {nf} addw $1234, %dx, %ax +# INTEL: {nf} add ax, dx, 1234 +0x62,0xf4,0x7d,0x1c,0x81,0xc2,0xd2,0x04 + +# ATT: {evex} addw $1234, 291(%r8,%rax,4) +# INTEL: {evex} add word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} addw $1234, 291(%r8,%rax,4) +# INTEL: {nf} add word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: addw $1234, 291(%r8,%rax,4), %dx +# INTEL: add dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} addw $1234, 291(%r8,%rax,4), %dx +# INTEL: {nf} add dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {evex} addl $123456, %ecx +# INTEL: {evex} add ecx, 123456 +0x62,0xf4,0x7c,0x08,0x81,0xc1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} addl $123456, %ecx +# INTEL: {nf} add ecx, 123456 +0x62,0xf4,0x7c,0x0c,0x81,0xc1,0x40,0xe2,0x01,0x00 + +# ATT: addl $123456, %ecx, %edx +# INTEL: add edx, ecx, 123456 +0x62,0xf4,0x6c,0x18,0x81,0xc1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} addl $123456, %ecx, %edx +# INTEL: {nf} add edx, ecx, 123456 +0x62,0xf4,0x6c,0x1c,0x81,0xc1,0x40,0xe2,0x01,0x00 + +# ATT: {evex} addq $123456, %r9 +# INTEL: {evex} add r9, 123456 +0x62,0xd4,0xfc,0x08,0x81,0xc1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} addq $123456, %r9 +# INTEL: {nf} add r9, 123456 +0x62,0xd4,0xfc,0x0c,0x81,0xc1,0x40,0xe2,0x01,0x00 + +# ATT: addq $123456, %r9, %r15 +# INTEL: add r15, r9, 123456 +0x62,0xd4,0x84,0x18,0x81,0xc1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} addq $123456, %r9, %r15 +# INTEL: {nf} add r15, r9, 123456 +0x62,0xd4,0x84,0x1c,0x81,0xc1,0x40,0xe2,0x01,0x00 + +# ATT: {evex} addl $123456, 291(%r8,%rax,4) +# INTEL: {evex} add dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} addl $123456, 291(%r8,%rax,4) +# INTEL: {nf} add dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: addl $123456, 291(%r8,%rax,4), %ecx +# INTEL: add ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} addl $123456, 291(%r8,%rax,4), %ecx +# INTEL: {nf} add ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} addq $123456, 291(%r8,%rax,4) +# INTEL: {evex} add qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} addq $123456, 291(%r8,%rax,4) +# INTEL: {nf} add qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: addq $123456, 291(%r8,%rax,4), %r9 +# INTEL: add r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} addq $123456, 291(%r8,%rax,4), %r9 +# INTEL: {nf} add r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} addb %bl, %cl +# INTEL: {evex} add cl, bl +0x62,0xf4,0x7c,0x08,0x00,0xd9 + +# ATT: {nf} addb %bl, %cl +# INTEL: {nf} add cl, bl +0x62,0xf4,0x7c,0x0c,0x00,0xd9 + +# ATT: addb %bl, %cl, %r8b +# INTEL: add r8b, cl, bl +0x62,0xf4,0x3c,0x18,0x00,0xd9 + +# ATT: {nf} addb %bl, %cl, %r8b +# INTEL: {nf} add r8b, cl, bl +0x62,0xf4,0x3c,0x1c,0x00,0xd9 + +# ATT: {evex} addb %bl, 291(%r8,%rax,4) +# INTEL: {evex} add byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x08,0x00,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addb %bl, 291(%r8,%rax,4) +# INTEL: {nf} add byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x0c,0x00,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: addb %bl, 291(%r8,%rax,4), %cl +# INTEL: add cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x18,0x00,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addb %bl, 291(%r8,%rax,4), %cl +# INTEL: {nf} add cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x1c,0x00,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} addw %dx, %ax +# INTEL: {evex} add ax, dx +0x62,0xf4,0x7d,0x08,0x01,0xd0 + +# ATT: {nf} addw %dx, %ax +# INTEL: {nf} add ax, dx +0x62,0xf4,0x7d,0x0c,0x01,0xd0 + +# ATT: addw %dx, %ax, %r9w +# INTEL: add r9w, ax, dx +0x62,0xf4,0x35,0x18,0x01,0xd0 + +# ATT: {nf} addw %dx, %ax, %r9w +# INTEL: {nf} add r9w, ax, dx +0x62,0xf4,0x35,0x1c,0x01,0xd0 + +# ATT: {evex} addw %dx, 291(%r8,%rax,4) +# INTEL: {evex} add word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x08,0x01,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addw %dx, 291(%r8,%rax,4) +# INTEL: {nf} add word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x0c,0x01,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: addw %dx, 291(%r8,%rax,4), %ax +# INTEL: add ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x18,0x01,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addw %dx, 291(%r8,%rax,4), %ax +# INTEL: {nf} add ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x1c,0x01,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} addl %ecx, %edx +# INTEL: {evex} add edx, ecx +0x62,0xf4,0x7c,0x08,0x01,0xca + +# ATT: {nf} addl %ecx, %edx +# INTEL: {nf} add edx, ecx +0x62,0xf4,0x7c,0x0c,0x01,0xca + +# ATT: addl %ecx, %edx, %r10d +# INTEL: add r10d, edx, ecx +0x62,0xf4,0x2c,0x18,0x01,0xca + +# ATT: {nf} addl %ecx, %edx, %r10d +# INTEL: {nf} add r10d, edx, ecx +0x62,0xf4,0x2c,0x1c,0x01,0xca + +# ATT: {evex} addl %ecx, 291(%r8,%rax,4) +# INTEL: {evex} add dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x08,0x01,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addl %ecx, 291(%r8,%rax,4) +# INTEL: {nf} add dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x0c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: addl %ecx, 291(%r8,%rax,4), %edx +# INTEL: add edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x18,0x01,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addl %ecx, 291(%r8,%rax,4), %edx +# INTEL: {nf} add edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x1c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} addq %r9, %r15 +# INTEL: {evex} add r15, r9 +0x62,0x54,0xfc,0x08,0x01,0xcf + +# ATT: {nf} addq %r9, %r15 +# INTEL: {nf} add r15, r9 +0x62,0x54,0xfc,0x0c,0x01,0xcf + +# ATT: addq %r9, %r15, %r11 +# INTEL: add r11, r15, r9 +0x62,0x54,0xa4,0x18,0x01,0xcf + +# ATT: {nf} addq %r9, %r15, %r11 +# INTEL: {nf} add r11, r15, r9 +0x62,0x54,0xa4,0x1c,0x01,0xcf + +# ATT: {evex} addq %r9, 291(%r8,%rax,4) +# INTEL: {evex} add qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x08,0x01,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addq %r9, 291(%r8,%rax,4) +# INTEL: {nf} add qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x0c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: addq %r9, 291(%r8,%rax,4), %r15 +# INTEL: add r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x18,0x01,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addq %r9, 291(%r8,%rax,4), %r15 +# INTEL: {nf} add r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x1c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} addb 291(%r8,%rax,4), %bl +# INTEL: {evex} add bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x02,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addb 291(%r8,%rax,4), %bl +# INTEL: {nf} add bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x02,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: addb 291(%r8,%rax,4), %bl, %cl +# INTEL: add cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0x02,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addb 291(%r8,%rax,4), %bl, %cl +# INTEL: {nf} add cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x1c,0x02,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} addw 291(%r8,%rax,4), %dx +# INTEL: {evex} add dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0x03,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addw 291(%r8,%rax,4), %dx +# INTEL: {nf} add dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x0c,0x03,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: addw 291(%r8,%rax,4), %dx, %ax +# INTEL: add ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x18,0x03,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addw 291(%r8,%rax,4), %dx, %ax +# INTEL: {nf} add ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x1c,0x03,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} addl 291(%r8,%rax,4), %ecx +# INTEL: {evex} add ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x03,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addl 291(%r8,%rax,4), %ecx +# INTEL: {nf} add ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: addl 291(%r8,%rax,4), %ecx, %edx +# INTEL: add edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x18,0x03,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addl 291(%r8,%rax,4), %ecx, %edx +# INTEL: {nf} add edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x1c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} addq 291(%r8,%rax,4), %r9 +# INTEL: {evex} add r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x08,0x03,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addq 291(%r8,%rax,4), %r9 +# INTEL: {nf} add r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x0c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: addq 291(%r8,%rax,4), %r9, %r15 +# INTEL: add r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x18,0x03,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} addq 291(%r8,%rax,4), %r9, %r15 +# INTEL: {nf} add r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x1c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/X86/apx/and.txt b/llvm/test/MC/Disassembler/X86/apx/and.txt new file mode 100644 index 0000000000000..39697516a8e63 --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/and.txt @@ -0,0 +1,418 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} andb $123, %bl +# INTEL: {evex} and bl, 123 +0x62,0xf4,0x7c,0x08,0x80,0xe3,0x7b + +# ATT: {nf} andb $123, %bl +# INTEL: {nf} and bl, 123 +0x62,0xf4,0x7c,0x0c,0x80,0xe3,0x7b + +# ATT: andb $123, %bl, %cl +# INTEL: and cl, bl, 123 +0x62,0xf4,0x74,0x18,0x80,0xe3,0x7b + +# ATT: {nf} andb $123, %bl, %cl +# INTEL: {nf} and cl, bl, 123 +0x62,0xf4,0x74,0x1c,0x80,0xe3,0x7b + +# ATT: {evex} andw $123, %dx +# INTEL: {evex} and dx, 123 +0x62,0xf4,0x7d,0x08,0x83,0xe2,0x7b + +# ATT: {nf} andw $123, %dx +# INTEL: {nf} and dx, 123 +0x62,0xf4,0x7d,0x0c,0x83,0xe2,0x7b + +# ATT: andw $123, %dx, %ax +# INTEL: and ax, dx, 123 +0x62,0xf4,0x7d,0x18,0x83,0xe2,0x7b + +# ATT: {nf} andw $123, %dx, %ax +# INTEL: {nf} and ax, dx, 123 +0x62,0xf4,0x7d,0x1c,0x83,0xe2,0x7b + +# ATT: {evex} andl $123, %ecx +# INTEL: {evex} and ecx, 123 +0x62,0xf4,0x7c,0x08,0x83,0xe1,0x7b + +# ATT: {nf} andl $123, %ecx +# INTEL: {nf} and ecx, 123 +0x62,0xf4,0x7c,0x0c,0x83,0xe1,0x7b + +# ATT: andl $123, %ecx, %edx +# INTEL: and edx, ecx, 123 +0x62,0xf4,0x6c,0x18,0x83,0xe1,0x7b + +# ATT: {nf} andl $123, %ecx, %edx +# INTEL: {nf} and edx, ecx, 123 +0x62,0xf4,0x6c,0x1c,0x83,0xe1,0x7b + +# ATT: {evex} andq $123, %r9 +# INTEL: {evex} and r9, 123 +0x62,0xd4,0xfc,0x08,0x83,0xe1,0x7b + +# ATT: {nf} andq $123, %r9 +# INTEL: {nf} and r9, 123 +0x62,0xd4,0xfc,0x0c,0x83,0xe1,0x7b + +# ATT: andq $123, %r9, %r15 +# INTEL: and r15, r9, 123 +0x62,0xd4,0x84,0x18,0x83,0xe1,0x7b + +# ATT: {nf} andq $123, %r9, %r15 +# INTEL: {nf} and r15, r9, 123 +0x62,0xd4,0x84,0x1c,0x83,0xe1,0x7b + +# ATT: {evex} andb $123, 291(%r8,%rax,4) +# INTEL: {evex} and byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} andb $123, 291(%r8,%rax,4) +# INTEL: {nf} and byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: andb $123, 291(%r8,%rax,4), %bl +# INTEL: and bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x18,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} andb $123, 291(%r8,%rax,4), %bl +# INTEL: {nf} and bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x1c,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} andw $123, 291(%r8,%rax,4) +# INTEL: {evex} and word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} andw $123, 291(%r8,%rax,4) +# INTEL: {nf} and word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: andw $123, 291(%r8,%rax,4), %dx +# INTEL: and dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} andw $123, 291(%r8,%rax,4), %dx +# INTEL: {nf} and dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} andl $123, 291(%r8,%rax,4) +# INTEL: {evex} and dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} andl $123, 291(%r8,%rax,4) +# INTEL: {nf} and dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: andl $123, 291(%r8,%rax,4), %ecx +# INTEL: and ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} andl $123, 291(%r8,%rax,4), %ecx +# INTEL: {nf} and ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} andq $123, 291(%r8,%rax,4) +# INTEL: {evex} and qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} andq $123, 291(%r8,%rax,4) +# INTEL: {nf} and qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: andq $123, 291(%r8,%rax,4), %r9 +# INTEL: and r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} andq $123, 291(%r8,%rax,4), %r9 +# INTEL: {nf} and r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} andw $1234, %dx +# INTEL: {evex} and dx, 1234 +0x62,0xf4,0x7d,0x08,0x81,0xe2,0xd2,0x04 + +# ATT: {nf} andw $1234, %dx +# INTEL: {nf} and dx, 1234 +0x62,0xf4,0x7d,0x0c,0x81,0xe2,0xd2,0x04 + +# ATT: andw $1234, %dx, %ax +# INTEL: and ax, dx, 1234 +0x62,0xf4,0x7d,0x18,0x81,0xe2,0xd2,0x04 + +# ATT: {nf} andw $1234, %dx, %ax +# INTEL: {nf} and ax, dx, 1234 +0x62,0xf4,0x7d,0x1c,0x81,0xe2,0xd2,0x04 + +# ATT: {evex} andw $1234, 291(%r8,%rax,4) +# INTEL: {evex} and word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} andw $1234, 291(%r8,%rax,4) +# INTEL: {nf} and word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: andw $1234, 291(%r8,%rax,4), %dx +# INTEL: and dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} andw $1234, 291(%r8,%rax,4), %dx +# INTEL: {nf} and dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {evex} andl $123456, %ecx +# INTEL: {evex} and ecx, 123456 +0x62,0xf4,0x7c,0x08,0x81,0xe1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} andl $123456, %ecx +# INTEL: {nf} and ecx, 123456 +0x62,0xf4,0x7c,0x0c,0x81,0xe1,0x40,0xe2,0x01,0x00 + +# ATT: andl $123456, %ecx, %edx +# INTEL: and edx, ecx, 123456 +0x62,0xf4,0x6c,0x18,0x81,0xe1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} andl $123456, %ecx, %edx +# INTEL: {nf} and edx, ecx, 123456 +0x62,0xf4,0x6c,0x1c,0x81,0xe1,0x40,0xe2,0x01,0x00 + +# ATT: {evex} andq $123456, %r9 +# INTEL: {evex} and r9, 123456 +0x62,0xd4,0xfc,0x08,0x81,0xe1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} andq $123456, %r9 +# INTEL: {nf} and r9, 123456 +0x62,0xd4,0xfc,0x0c,0x81,0xe1,0x40,0xe2,0x01,0x00 + +# ATT: andq $123456, %r9, %r15 +# INTEL: and r15, r9, 123456 +0x62,0xd4,0x84,0x18,0x81,0xe1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} andq $123456, %r9, %r15 +# INTEL: {nf} and r15, r9, 123456 +0x62,0xd4,0x84,0x1c,0x81,0xe1,0x40,0xe2,0x01,0x00 + +# ATT: {evex} andl $123456, 291(%r8,%rax,4) +# INTEL: {evex} and dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} andl $123456, 291(%r8,%rax,4) +# INTEL: {nf} and dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: andl $123456, 291(%r8,%rax,4), %ecx +# INTEL: and ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} andl $123456, 291(%r8,%rax,4), %ecx +# INTEL: {nf} and ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} andq $123456, 291(%r8,%rax,4) +# INTEL: {evex} and qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} andq $123456, 291(%r8,%rax,4) +# INTEL: {nf} and qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: andq $123456, 291(%r8,%rax,4), %r9 +# INTEL: and r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} andq $123456, 291(%r8,%rax,4), %r9 +# INTEL: {nf} and r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} andb %bl, %cl +# INTEL: {evex} and cl, bl +0x62,0xf4,0x7c,0x08,0x20,0xd9 + +# ATT: {nf} andb %bl, %cl +# INTEL: {nf} and cl, bl +0x62,0xf4,0x7c,0x0c,0x20,0xd9 + +# ATT: andb %bl, %cl, %r8b +# INTEL: and r8b, cl, bl +0x62,0xf4,0x3c,0x18,0x20,0xd9 + +# ATT: {nf} andb %bl, %cl, %r8b +# INTEL: {nf} and r8b, cl, bl +0x62,0xf4,0x3c,0x1c,0x20,0xd9 + +# ATT: {evex} andb %bl, 291(%r8,%rax,4) +# INTEL: {evex} and byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x08,0x20,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andb %bl, 291(%r8,%rax,4) +# INTEL: {nf} and byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x0c,0x20,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: andb %bl, 291(%r8,%rax,4), %cl +# INTEL: and cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x18,0x20,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andb %bl, 291(%r8,%rax,4), %cl +# INTEL: {nf} and cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x1c,0x20,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} andw %dx, %ax +# INTEL: {evex} and ax, dx +0x62,0xf4,0x7d,0x08,0x21,0xd0 + +# ATT: {nf} andw %dx, %ax +# INTEL: {nf} and ax, dx +0x62,0xf4,0x7d,0x0c,0x21,0xd0 + +# ATT: andw %dx, %ax, %r9w +# INTEL: and r9w, ax, dx +0x62,0xf4,0x35,0x18,0x21,0xd0 + +# ATT: {nf} andw %dx, %ax, %r9w +# INTEL: {nf} and r9w, ax, dx +0x62,0xf4,0x35,0x1c,0x21,0xd0 + +# ATT: {evex} andw %dx, 291(%r8,%rax,4) +# INTEL: {evex} and word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x08,0x21,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andw %dx, 291(%r8,%rax,4) +# INTEL: {nf} and word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x0c,0x21,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: andw %dx, 291(%r8,%rax,4), %ax +# INTEL: and ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x18,0x21,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andw %dx, 291(%r8,%rax,4), %ax +# INTEL: {nf} and ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x1c,0x21,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} andl %ecx, %edx +# INTEL: {evex} and edx, ecx +0x62,0xf4,0x7c,0x08,0x21,0xca + +# ATT: {nf} andl %ecx, %edx +# INTEL: {nf} and edx, ecx +0x62,0xf4,0x7c,0x0c,0x21,0xca + +# ATT: andl %ecx, %edx, %r10d +# INTEL: and r10d, edx, ecx +0x62,0xf4,0x2c,0x18,0x21,0xca + +# ATT: {nf} andl %ecx, %edx, %r10d +# INTEL: {nf} and r10d, edx, ecx +0x62,0xf4,0x2c,0x1c,0x21,0xca + +# ATT: {evex} andl %ecx, 291(%r8,%rax,4) +# INTEL: {evex} and dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x08,0x21,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andl %ecx, 291(%r8,%rax,4) +# INTEL: {nf} and dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x0c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: andl %ecx, 291(%r8,%rax,4), %edx +# INTEL: and edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x18,0x21,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andl %ecx, 291(%r8,%rax,4), %edx +# INTEL: {nf} and edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x1c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} andq %r9, %r15 +# INTEL: {evex} and r15, r9 +0x62,0x54,0xfc,0x08,0x21,0xcf + +# ATT: {nf} andq %r9, %r15 +# INTEL: {nf} and r15, r9 +0x62,0x54,0xfc,0x0c,0x21,0xcf + +# ATT: andq %r9, %r15, %r11 +# INTEL: and r11, r15, r9 +0x62,0x54,0xa4,0x18,0x21,0xcf + +# ATT: {nf} andq %r9, %r15, %r11 +# INTEL: {nf} and r11, r15, r9 +0x62,0x54,0xa4,0x1c,0x21,0xcf + +# ATT: {evex} andq %r9, 291(%r8,%rax,4) +# INTEL: {evex} and qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x08,0x21,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andq %r9, 291(%r8,%rax,4) +# INTEL: {nf} and qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x0c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: andq %r9, 291(%r8,%rax,4), %r15 +# INTEL: and r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x18,0x21,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andq %r9, 291(%r8,%rax,4), %r15 +# INTEL: {nf} and r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x1c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} andb 291(%r8,%rax,4), %bl +# INTEL: {evex} and bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x22,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andb 291(%r8,%rax,4), %bl +# INTEL: {nf} and bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x22,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: andb 291(%r8,%rax,4), %bl, %cl +# INTEL: and cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0x22,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andb 291(%r8,%rax,4), %bl, %cl +# INTEL: {nf} and cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x1c,0x22,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} andw 291(%r8,%rax,4), %dx +# INTEL: {evex} and dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0x23,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andw 291(%r8,%rax,4), %dx +# INTEL: {nf} and dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x0c,0x23,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: andw 291(%r8,%rax,4), %dx, %ax +# INTEL: and ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x18,0x23,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andw 291(%r8,%rax,4), %dx, %ax +# INTEL: {nf} and ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x1c,0x23,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} andl 291(%r8,%rax,4), %ecx +# INTEL: {evex} and ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x23,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andl 291(%r8,%rax,4), %ecx +# INTEL: {nf} and ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: andl 291(%r8,%rax,4), %ecx, %edx +# INTEL: and edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x18,0x23,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andl 291(%r8,%rax,4), %ecx, %edx +# INTEL: {nf} and edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x1c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} andq 291(%r8,%rax,4), %r9 +# INTEL: {evex} and r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x08,0x23,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andq 291(%r8,%rax,4), %r9 +# INTEL: {nf} and r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x0c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: andq 291(%r8,%rax,4), %r9, %r15 +# INTEL: and r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x18,0x23,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} andq 291(%r8,%rax,4), %r9, %r15 +# INTEL: {nf} and r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x1c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/X86/apx/evex-format.txt b/llvm/test/MC/Disassembler/X86/apx/evex-format.txt index 01676fe056925..88258e7e29b5c 100644 --- a/llvm/test/MC/Disassembler/X86/apx/evex-format.txt +++ b/llvm/test/MC/Disassembler/X86/apx/evex-format.txt @@ -8,54 +8,90 @@ # INTEL: vextractf32x4 xmmword ptr [r16 + r17], zmm0, 1 0x62,0xfb,0x79,0x48,0x19,0x04,0x08,0x01 +# ATT: addq %r16, 123(%r17), %r18 +# INTEL: add r18, qword ptr [r17 + 123], r16 +0x62,0xec,0xec,0x10,0x01,0x41,0x7b + ## MRMSrcMem # ATT: vbroadcasti32x4 (%r16,%r17), %zmm0 # INTEL: vbroadcasti32x4 zmm0, xmmword ptr [r16 + r17] 0x62,0xfa,0x79,0x48,0x5a,0x04,0x08 +# ATT: subq 123(%r16), %r17, %r18 +# INTEL: sub r18, r17, qword ptr [r16 + 123] +0x62,0xec,0xec,0x10,0x2b,0x48,0x7b + ## MRM0m # ATT: vprorq $0, (%r16,%r17), %zmm0 # INTEL: vprorq zmm0, zmmword ptr [r16 + r17], 0 0x62,0xf9,0xf9,0x48,0x72,0x04,0x08,0x00 +# ATT: addq $127, 123(%r16), %r17 +# INTEL: add r17, qword ptr [r16 + 123], 127 +0x62,0xfc,0xf4,0x10,0x83,0x40,0x7b,0x7f + ## MRM1m # ATT: vprolq $0, (%r16,%r17), %zmm0 # INTEL: vprolq zmm0, zmmword ptr [r16 + r17], 0 0x62,0xf9,0xf9,0x48,0x72,0x0c,0x08,0x00 +# ATT: orq $127, 123(%r16), %r17 +# INTEL: or r17, qword ptr [r16 + 123], 127 +0x62,0xfc,0xf4,0x10,0x83,0x48,0x7b,0x7f + ## MRM2m # ATT: vpsrlq $0, (%r16,%r17), %zmm0 # INTEL: vpsrlq zmm0, zmmword ptr [r16 + r17], 0 0x62,0xf9,0xf9,0x48,0x73,0x14,0x08,0x00 +# ATT: adcq $127, 123(%r16), %r17 +# INTEL: adc r17, qword ptr [r16 + 123], 127 +0x62,0xfc,0xf4,0x10,0x83,0x50,0x7b,0x7f + ## MRM3m # ATT: vpsrldq $0, (%r16,%r17), %zmm0 # INTEL: vpsrldq zmm0, zmmword ptr [r16 + r17], 0 0x62,0xf9,0x79,0x48,0x73,0x1c,0x08,0x00 +# ATT: sbbq $127, 123(%r16), %r17 +# INTEL: sbb r17, qword ptr [r16 + 123], 127 +0x62,0xfc,0xf4,0x10,0x83,0x58,0x7b,0x7f + ## MRM4m # ATT: vpsraq $0, (%r16,%r17), %zmm0 # INTEL: vpsraq zmm0, zmmword ptr [r16 + r17], 0 0x62,0xf9,0xf9,0x48,0x72,0x24,0x08,0x00 +# ATT: andq $127, 123(%r16), %r17 +# INTEL: and r17, qword ptr [r16 + 123], 127 +0x62,0xfc,0xf4,0x10,0x83,0x60,0x7b,0x7f + ## MRM5m # ATT: vscatterpf0dps (%r16,%zmm0) {%k1} # INTEL: vscatterpf0dps {k1}, zmmword ptr [r16 + zmm0] 0x62,0xfa,0x7d,0x49,0xc6,0x2c,0x00 +# ATT: subq $127, 123(%r16), %r17 +# INTEL: sub r17, qword ptr [r16 + 123], 127 +0x62,0xfc,0xf4,0x10,0x83,0x68,0x7b,0x7f + ## MRM6m # ATT: vpsllq $0, (%r16,%r17), %zmm0 # INTEL: vpsllq zmm0, zmmword ptr [r16 + r17], 0 0x62,0xf9,0xf9,0x48,0x73,0x34,0x08,0x00 +# ATT: xorq $127, 123(%r16), %r17 +# INTEL: xor r17, qword ptr [r16 + 123], 127 +0x62,0xfc,0xf4,0x10,0x83,0x70,0x7b,0x7f + ## MRM7m # ATT: vpslldq $0, (%r16,%r17), %zmm0 @@ -80,8 +116,70 @@ # INTEL: vextractps r16d, xmm16, 1 0x62,0xeb,0x7d,0x08,0x17,0xc0,0x01 +# ATT: {nf} addq %r16, %r17 +# INTEL: {nf} add r17, r16 +0x62,0xec,0xfc,0x0c,0x01,0xc1 + +## MRMSrcReg + +# ATT: mulxq %r16, %r17, %r18 +# INTEL: mulx r18, r17, r16 +0x62,0xea,0xf7,0x00,0xf6,0xd0 + ## MRMSrcReg4VOp3 # ATT: bzhiq %r19, %r23, %r27 # INTEL: bzhi r27, r23, r19 0x62,0x6a,0xe4,0x00,0xf5,0xdf + +## MRM0r + +# ATT: addq $127, %r16, %r17 +# INTEL: add r17, r16, 127 +0x62,0xfc,0xf4,0x10,0x83,0xc0,0x7f + +## MRM1r + +# ATT: orq $127, %r16, %r17 +# INTEL: or r17, r16, 127 +0x62,0xfc,0xf4,0x10,0x83,0xc8,0x7f + +## MRM2r + +# ATT: adcq $127, %r16, %r17 +# INTEL: adc r17, r16, 127 +0x62,0xfc,0xf4,0x10,0x83,0xd0,0x7f + +## MRM3r + +# ATT: sbbq $127, %r16, %r17 +# INTEL: sbb r17, r16, 127 +0x62,0xfc,0xf4,0x10,0x83,0xd8,0x7f + +## MRM4r + +# ATT: andq $127, %r16, %r17 +# INTEL: and r17, r16, 127 +0x62,0xfc,0xf4,0x10,0x83,0xe0,0x7f + +## MRM5r + +# ATT: subq $127, %r16, %r17 +# INTEL: sub r17, r16, 127 +0x62,0xfc,0xf4,0x10,0x83,0xe8,0x7f + +## MRM6r + +# ATT: xorq $127, %r16, %r17 +# INTEL: xor r17, r16, 127 +0x62,0xfc,0xf4,0x10,0x83,0xf0,0x7f + +## NoCD8 + +# ATT: {nf} negq 123(%r16) +# INTEL: {nf} neg qword ptr [r16 + 123] +0x62,0xfc,0xfc,0x0c,0xf7,0x58,0x7b + +# ATT: {evex} notq 123(%r16) +# INTEL: {evex} not qword ptr [r16 + 123] +0x62,0xfc,0xfc,0x08,0xf7,0x50,0x7b diff --git a/llvm/test/MC/Disassembler/X86/apx/neg.txt b/llvm/test/MC/Disassembler/X86/apx/neg.txt new file mode 100644 index 0000000000000..91cffb3b4b13b --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/neg.txt @@ -0,0 +1,130 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} negb %bl +# INTEL: {evex} neg bl +0x62,0xf4,0x7c,0x08,0xf6,0xdb + +# ATT: {nf} negb %bl +# INTEL: {nf} neg bl +0x62,0xf4,0x7c,0x0c,0xf6,0xdb + +# ATT: negb %bl, %bl +# INTEL: neg bl, bl +0x62,0xf4,0x64,0x18,0xf6,0xdb + +# ATT: {nf} negb %bl, %bl +# INTEL: {nf} neg bl, bl +0x62,0xf4,0x64,0x1c,0xf6,0xdb + +# ATT: {evex} negw %dx +# INTEL: {evex} neg dx +0x62,0xf4,0x7d,0x08,0xf7,0xda + +# ATT: {nf} negw %dx +# INTEL: {nf} neg dx +0x62,0xf4,0x7d,0x0c,0xf7,0xda + +# ATT: negw %dx, %dx +# INTEL: neg dx, dx +0x62,0xf4,0x6d,0x18,0xf7,0xda + +# ATT: {nf} negw %dx, %dx +# INTEL: {nf} neg dx, dx +0x62,0xf4,0x6d,0x1c,0xf7,0xda + +# ATT: {evex} negl %ecx +# INTEL: {evex} neg ecx +0x62,0xf4,0x7c,0x08,0xf7,0xd9 + +# ATT: {nf} negl %ecx +# INTEL: {nf} neg ecx +0x62,0xf4,0x7c,0x0c,0xf7,0xd9 + +# ATT: negl %ecx, %ecx +# INTEL: neg ecx, ecx +0x62,0xf4,0x74,0x18,0xf7,0xd9 + +# ATT: {nf} negl %ecx, %ecx +# INTEL: {nf} neg ecx, ecx +0x62,0xf4,0x74,0x1c,0xf7,0xd9 + +# ATT: {evex} negq %r9 +# INTEL: {evex} neg r9 +0x62,0xd4,0xfc,0x08,0xf7,0xd9 + +# ATT: {nf} negq %r9 +# INTEL: {nf} neg r9 +0x62,0xd4,0xfc,0x0c,0xf7,0xd9 + +# ATT: negq %r9, %r9 +# INTEL: neg r9, r9 +0x62,0xd4,0xb4,0x18,0xf7,0xd9 + +# ATT: {nf} negq %r9, %r9 +# INTEL: {nf} neg r9, r9 +0x62,0xd4,0xb4,0x1c,0xf7,0xd9 + +# ATT: {evex} negb 291(%r8,%rax,4) +# INTEL: {evex} neg byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} negb 291(%r8,%rax,4) +# INTEL: {nf} neg byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: negb 291(%r8,%rax,4), %bl +# INTEL: neg bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x64,0x18,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} negb 291(%r8,%rax,4), %bl +# INTEL: {nf} neg bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x64,0x1c,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} negw 291(%r8,%rax,4) +# INTEL: {evex} neg word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} negw 291(%r8,%rax,4) +# INTEL: {nf} neg word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: negw 291(%r8,%rax,4), %dx +# INTEL: neg dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6d,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} negw 291(%r8,%rax,4), %dx +# INTEL: {nf} neg dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6d,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} negl 291(%r8,%rax,4) +# INTEL: {evex} neg dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} negl 291(%r8,%rax,4) +# INTEL: {nf} neg dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: negl 291(%r8,%rax,4), %ecx +# INTEL: neg ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} negl 291(%r8,%rax,4), %ecx +# INTEL: {nf} neg ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} negq 291(%r8,%rax,4) +# INTEL: {evex} neg qword ptr [r8 + 4*rax + 291] +0x62,0xd4,0xfc,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} negq 291(%r8,%rax,4) +# INTEL: {nf} neg qword ptr [r8 + 4*rax + 291] +0x62,0xd4,0xfc,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: negq 291(%r8,%rax,4), %r9 +# INTEL: neg r9, qword ptr [r8 + 4*rax + 291] +0x62,0xd4,0xb4,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} negq 291(%r8,%rax,4), %r9 +# INTEL: {nf} neg r9, qword ptr [r8 + 4*rax + 291] +0x62,0xd4,0xb4,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/X86/apx/not.txt b/llvm/test/MC/Disassembler/X86/apx/not.txt new file mode 100644 index 0000000000000..e2c4d57fc69da --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/not.txt @@ -0,0 +1,66 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} notb %bl +# INTEL: {evex} not bl +0x62,0xf4,0x7c,0x08,0xf6,0xd3 + +# ATT: notb %bl, %bl +# INTEL: not bl, bl +0x62,0xf4,0x64,0x18,0xf6,0xd3 + +# ATT: {evex} notw %dx +# INTEL: {evex} not dx +0x62,0xf4,0x7d,0x08,0xf7,0xd2 + +# ATT: notw %dx, %dx +# INTEL: not dx, dx +0x62,0xf4,0x6d,0x18,0xf7,0xd2 + +# ATT: {evex} notl %ecx +# INTEL: {evex} not ecx +0x62,0xf4,0x7c,0x08,0xf7,0xd1 + +# ATT: notl %ecx, %ecx +# INTEL: not ecx, ecx +0x62,0xf4,0x74,0x18,0xf7,0xd1 + +# ATT: {evex} notq %r9 +# INTEL: {evex} not r9 +0x62,0xd4,0xfc,0x08,0xf7,0xd1 + +# ATT: notq %r9, %r9 +# INTEL: not r9, r9 +0x62,0xd4,0xb4,0x18,0xf7,0xd1 + +# ATT: {evex} notb 291(%r8,%rax,4) +# INTEL: {evex} not byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0xf6,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: notb 291(%r8,%rax,4), %bl +# INTEL: not bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x64,0x18,0xf6,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} notw 291(%r8,%rax,4) +# INTEL: {evex} not word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: notw 291(%r8,%rax,4), %dx +# INTEL: not dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6d,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} notl 291(%r8,%rax,4) +# INTEL: {evex} not dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: notl 291(%r8,%rax,4), %ecx +# INTEL: not ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} notq 291(%r8,%rax,4) +# INTEL: {evex} not qword ptr [r8 + 4*rax + 291] +0x62,0xd4,0xfc,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: notq 291(%r8,%rax,4), %r9 +# INTEL: not r9, qword ptr [r8 + 4*rax + 291] +0x62,0xd4,0xb4,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/X86/apx/or.txt b/llvm/test/MC/Disassembler/X86/apx/or.txt new file mode 100644 index 0000000000000..53225c0659e88 --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/or.txt @@ -0,0 +1,418 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} orb $123, %bl +# INTEL: {evex} or bl, 123 +0x62,0xf4,0x7c,0x08,0x80,0xcb,0x7b + +# ATT: {nf} orb $123, %bl +# INTEL: {nf} or bl, 123 +0x62,0xf4,0x7c,0x0c,0x80,0xcb,0x7b + +# ATT: orb $123, %bl, %cl +# INTEL: or cl, bl, 123 +0x62,0xf4,0x74,0x18,0x80,0xcb,0x7b + +# ATT: {nf} orb $123, %bl, %cl +# INTEL: {nf} or cl, bl, 123 +0x62,0xf4,0x74,0x1c,0x80,0xcb,0x7b + +# ATT: {evex} orw $123, %dx +# INTEL: {evex} or dx, 123 +0x62,0xf4,0x7d,0x08,0x83,0xca,0x7b + +# ATT: {nf} orw $123, %dx +# INTEL: {nf} or dx, 123 +0x62,0xf4,0x7d,0x0c,0x83,0xca,0x7b + +# ATT: orw $123, %dx, %ax +# INTEL: or ax, dx, 123 +0x62,0xf4,0x7d,0x18,0x83,0xca,0x7b + +# ATT: {nf} orw $123, %dx, %ax +# INTEL: {nf} or ax, dx, 123 +0x62,0xf4,0x7d,0x1c,0x83,0xca,0x7b + +# ATT: {evex} orl $123, %ecx +# INTEL: {evex} or ecx, 123 +0x62,0xf4,0x7c,0x08,0x83,0xc9,0x7b + +# ATT: {nf} orl $123, %ecx +# INTEL: {nf} or ecx, 123 +0x62,0xf4,0x7c,0x0c,0x83,0xc9,0x7b + +# ATT: orl $123, %ecx, %edx +# INTEL: or edx, ecx, 123 +0x62,0xf4,0x6c,0x18,0x83,0xc9,0x7b + +# ATT: {nf} orl $123, %ecx, %edx +# INTEL: {nf} or edx, ecx, 123 +0x62,0xf4,0x6c,0x1c,0x83,0xc9,0x7b + +# ATT: {evex} orq $123, %r9 +# INTEL: {evex} or r9, 123 +0x62,0xd4,0xfc,0x08,0x83,0xc9,0x7b + +# ATT: {nf} orq $123, %r9 +# INTEL: {nf} or r9, 123 +0x62,0xd4,0xfc,0x0c,0x83,0xc9,0x7b + +# ATT: orq $123, %r9, %r15 +# INTEL: or r15, r9, 123 +0x62,0xd4,0x84,0x18,0x83,0xc9,0x7b + +# ATT: {nf} orq $123, %r9, %r15 +# INTEL: {nf} or r15, r9, 123 +0x62,0xd4,0x84,0x1c,0x83,0xc9,0x7b + +# ATT: {evex} orb $123, 291(%r8,%rax,4) +# INTEL: {evex} or byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} orb $123, 291(%r8,%rax,4) +# INTEL: {nf} or byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: orb $123, 291(%r8,%rax,4), %bl +# INTEL: or bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x18,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} orb $123, 291(%r8,%rax,4), %bl +# INTEL: {nf} or bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x1c,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} orw $123, 291(%r8,%rax,4) +# INTEL: {evex} or word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} orw $123, 291(%r8,%rax,4) +# INTEL: {nf} or word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: orw $123, 291(%r8,%rax,4), %dx +# INTEL: or dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} orw $123, 291(%r8,%rax,4), %dx +# INTEL: {nf} or dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} orl $123, 291(%r8,%rax,4) +# INTEL: {evex} or dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} orl $123, 291(%r8,%rax,4) +# INTEL: {nf} or dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: orl $123, 291(%r8,%rax,4), %ecx +# INTEL: or ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} orl $123, 291(%r8,%rax,4), %ecx +# INTEL: {nf} or ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} orq $123, 291(%r8,%rax,4) +# INTEL: {evex} or qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} orq $123, 291(%r8,%rax,4) +# INTEL: {nf} or qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: orq $123, 291(%r8,%rax,4), %r9 +# INTEL: or r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} orq $123, 291(%r8,%rax,4), %r9 +# INTEL: {nf} or r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} orw $1234, %dx +# INTEL: {evex} or dx, 1234 +0x62,0xf4,0x7d,0x08,0x81,0xca,0xd2,0x04 + +# ATT: {nf} orw $1234, %dx +# INTEL: {nf} or dx, 1234 +0x62,0xf4,0x7d,0x0c,0x81,0xca,0xd2,0x04 + +# ATT: orw $1234, %dx, %ax +# INTEL: or ax, dx, 1234 +0x62,0xf4,0x7d,0x18,0x81,0xca,0xd2,0x04 + +# ATT: {nf} orw $1234, %dx, %ax +# INTEL: {nf} or ax, dx, 1234 +0x62,0xf4,0x7d,0x1c,0x81,0xca,0xd2,0x04 + +# ATT: {evex} orw $1234, 291(%r8,%rax,4) +# INTEL: {evex} or word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} orw $1234, 291(%r8,%rax,4) +# INTEL: {nf} or word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: orw $1234, 291(%r8,%rax,4), %dx +# INTEL: or dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} orw $1234, 291(%r8,%rax,4), %dx +# INTEL: {nf} or dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {evex} orl $123456, %ecx +# INTEL: {evex} or ecx, 123456 +0x62,0xf4,0x7c,0x08,0x81,0xc9,0x40,0xe2,0x01,0x00 + +# ATT: {nf} orl $123456, %ecx +# INTEL: {nf} or ecx, 123456 +0x62,0xf4,0x7c,0x0c,0x81,0xc9,0x40,0xe2,0x01,0x00 + +# ATT: orl $123456, %ecx, %edx +# INTEL: or edx, ecx, 123456 +0x62,0xf4,0x6c,0x18,0x81,0xc9,0x40,0xe2,0x01,0x00 + +# ATT: {nf} orl $123456, %ecx, %edx +# INTEL: {nf} or edx, ecx, 123456 +0x62,0xf4,0x6c,0x1c,0x81,0xc9,0x40,0xe2,0x01,0x00 + +# ATT: {evex} orq $123456, %r9 +# INTEL: {evex} or r9, 123456 +0x62,0xd4,0xfc,0x08,0x81,0xc9,0x40,0xe2,0x01,0x00 + +# ATT: {nf} orq $123456, %r9 +# INTEL: {nf} or r9, 123456 +0x62,0xd4,0xfc,0x0c,0x81,0xc9,0x40,0xe2,0x01,0x00 + +# ATT: orq $123456, %r9, %r15 +# INTEL: or r15, r9, 123456 +0x62,0xd4,0x84,0x18,0x81,0xc9,0x40,0xe2,0x01,0x00 + +# ATT: {nf} orq $123456, %r9, %r15 +# INTEL: {nf} or r15, r9, 123456 +0x62,0xd4,0x84,0x1c,0x81,0xc9,0x40,0xe2,0x01,0x00 + +# ATT: {evex} orl $123456, 291(%r8,%rax,4) +# INTEL: {evex} or dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} orl $123456, 291(%r8,%rax,4) +# INTEL: {nf} or dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: orl $123456, 291(%r8,%rax,4), %ecx +# INTEL: or ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} orl $123456, 291(%r8,%rax,4), %ecx +# INTEL: {nf} or ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} orq $123456, 291(%r8,%rax,4) +# INTEL: {evex} or qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} orq $123456, 291(%r8,%rax,4) +# INTEL: {nf} or qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: orq $123456, 291(%r8,%rax,4), %r9 +# INTEL: or r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} orq $123456, 291(%r8,%rax,4), %r9 +# INTEL: {nf} or r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} orb %bl, %cl +# INTEL: {evex} or cl, bl +0x62,0xf4,0x7c,0x08,0x08,0xd9 + +# ATT: {nf} orb %bl, %cl +# INTEL: {nf} or cl, bl +0x62,0xf4,0x7c,0x0c,0x08,0xd9 + +# ATT: orb %bl, %cl, %r8b +# INTEL: or r8b, cl, bl +0x62,0xf4,0x3c,0x18,0x08,0xd9 + +# ATT: {nf} orb %bl, %cl, %r8b +# INTEL: {nf} or r8b, cl, bl +0x62,0xf4,0x3c,0x1c,0x08,0xd9 + +# ATT: {evex} orb %bl, 291(%r8,%rax,4) +# INTEL: {evex} or byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x08,0x08,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orb %bl, 291(%r8,%rax,4) +# INTEL: {nf} or byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x0c,0x08,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: orb %bl, 291(%r8,%rax,4), %cl +# INTEL: or cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x18,0x08,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orb %bl, 291(%r8,%rax,4), %cl +# INTEL: {nf} or cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x1c,0x08,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} orw %dx, %ax +# INTEL: {evex} or ax, dx +0x62,0xf4,0x7d,0x08,0x09,0xd0 + +# ATT: {nf} orw %dx, %ax +# INTEL: {nf} or ax, dx +0x62,0xf4,0x7d,0x0c,0x09,0xd0 + +# ATT: orw %dx, %ax, %r9w +# INTEL: or r9w, ax, dx +0x62,0xf4,0x35,0x18,0x09,0xd0 + +# ATT: {nf} orw %dx, %ax, %r9w +# INTEL: {nf} or r9w, ax, dx +0x62,0xf4,0x35,0x1c,0x09,0xd0 + +# ATT: {evex} orw %dx, 291(%r8,%rax,4) +# INTEL: {evex} or word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x08,0x09,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orw %dx, 291(%r8,%rax,4) +# INTEL: {nf} or word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x0c,0x09,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: orw %dx, 291(%r8,%rax,4), %ax +# INTEL: or ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x18,0x09,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orw %dx, 291(%r8,%rax,4), %ax +# INTEL: {nf} or ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x1c,0x09,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} orl %ecx, %edx +# INTEL: {evex} or edx, ecx +0x62,0xf4,0x7c,0x08,0x09,0xca + +# ATT: {nf} orl %ecx, %edx +# INTEL: {nf} or edx, ecx +0x62,0xf4,0x7c,0x0c,0x09,0xca + +# ATT: orl %ecx, %edx, %r10d +# INTEL: or r10d, edx, ecx +0x62,0xf4,0x2c,0x18,0x09,0xca + +# ATT: {nf} orl %ecx, %edx, %r10d +# INTEL: {nf} or r10d, edx, ecx +0x62,0xf4,0x2c,0x1c,0x09,0xca + +# ATT: {evex} orl %ecx, 291(%r8,%rax,4) +# INTEL: {evex} or dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x08,0x09,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orl %ecx, 291(%r8,%rax,4) +# INTEL: {nf} or dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x0c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: orl %ecx, 291(%r8,%rax,4), %edx +# INTEL: or edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x18,0x09,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orl %ecx, 291(%r8,%rax,4), %edx +# INTEL: {nf} or edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x1c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} orq %r9, %r15 +# INTEL: {evex} or r15, r9 +0x62,0x54,0xfc,0x08,0x09,0xcf + +# ATT: {nf} orq %r9, %r15 +# INTEL: {nf} or r15, r9 +0x62,0x54,0xfc,0x0c,0x09,0xcf + +# ATT: orq %r9, %r15, %r11 +# INTEL: or r11, r15, r9 +0x62,0x54,0xa4,0x18,0x09,0xcf + +# ATT: {nf} orq %r9, %r15, %r11 +# INTEL: {nf} or r11, r15, r9 +0x62,0x54,0xa4,0x1c,0x09,0xcf + +# ATT: {evex} orq %r9, 291(%r8,%rax,4) +# INTEL: {evex} or qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x08,0x09,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orq %r9, 291(%r8,%rax,4) +# INTEL: {nf} or qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x0c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: orq %r9, 291(%r8,%rax,4), %r15 +# INTEL: or r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x18,0x09,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orq %r9, 291(%r8,%rax,4), %r15 +# INTEL: {nf} or r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x1c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} orb 291(%r8,%rax,4), %bl +# INTEL: {evex} or bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orb 291(%r8,%rax,4), %bl +# INTEL: {nf} or bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: orb 291(%r8,%rax,4), %bl, %cl +# INTEL: or cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orb 291(%r8,%rax,4), %bl, %cl +# INTEL: {nf} or cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x1c,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} orw 291(%r8,%rax,4), %dx +# INTEL: {evex} or dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0x0b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orw 291(%r8,%rax,4), %dx +# INTEL: {nf} or dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x0c,0x0b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: orw 291(%r8,%rax,4), %dx, %ax +# INTEL: or ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x18,0x0b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orw 291(%r8,%rax,4), %dx, %ax +# INTEL: {nf} or ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x1c,0x0b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} orl 291(%r8,%rax,4), %ecx +# INTEL: {evex} or ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orl 291(%r8,%rax,4), %ecx +# INTEL: {nf} or ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: orl 291(%r8,%rax,4), %ecx, %edx +# INTEL: or edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x18,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orl 291(%r8,%rax,4), %ecx, %edx +# INTEL: {nf} or edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x1c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} orq 291(%r8,%rax,4), %r9 +# INTEL: {evex} or r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x08,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orq 291(%r8,%rax,4), %r9 +# INTEL: {nf} or r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x0c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: orq 291(%r8,%rax,4), %r9, %r15 +# INTEL: or r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x18,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} orq 291(%r8,%rax,4), %r9, %r15 +# INTEL: {nf} or r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x1c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/X86/apx/reverse-encoding.txt b/llvm/test/MC/Disassembler/X86/apx/reverse-encoding.txt new file mode 100644 index 0000000000000..e686e5aa28af0 --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/reverse-encoding.txt @@ -0,0 +1,400 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +## add + +# ATT: {evex} addb %r17b, %r16b +# INTEL: {evex} add r16b, r17b +0x62,0xec,0x7c,0x08,0x02,0xc1 + +# ATT: {evex} addw %r17w, %r16w +# INTEL: {evex} add r16w, r17w +0x62,0xec,0x7d,0x08,0x03,0xc1 + +# ATT: {evex} addl %r17d, %r16d +# INTEL: {evex} add r16d, r17d +0x62,0xec,0x7c,0x08,0x03,0xc1 + +# ATT: {evex} addq %r17, %r16 +# INTEL: {evex} add r16, r17 +0x62,0xec,0xfc,0x08,0x03,0xc1 + +# ATT: addb %r17b, %r16b, %r18b +# INTEL: add r18b, r16b, r17b +0x62,0xec,0x6c,0x10,0x02,0xc1 + +# ATT: addw %r17w, %r16w, %r18w +# INTEL: add r18w, r16w, r17w +0x62,0xec,0x6d,0x10,0x03,0xc1 + +# ATT: addl %r17d, %r16d, %r18d +# INTEL: add r18d, r16d, r17d +0x62,0xec,0x6c,0x10,0x03,0xc1 + +# ATT: addq %r17, %r16, %r18 +# INTEL: add r18, r16, r17 +0x62,0xec,0xec,0x10,0x03,0xc1 + +# ATT: {nf} addb %r17b, %r16b +# INTEL: {nf} add r16b, r17b +0x62,0xec,0x7c,0x0c,0x02,0xc1 + +# ATT: {nf} addw %r17w, %r16w +# INTEL: {nf} add r16w, r17w +0x62,0xec,0x7d,0x0c,0x03,0xc1 + +# ATT: {nf} addl %r17d, %r16d +# INTEL: {nf} add r16d, r17d +0x62,0xec,0x7c,0x0c,0x03,0xc1 + +# ATT: {nf} addq %r17, %r16 +# INTEL: {nf} add r16, r17 +0x62,0xec,0xfc,0x0c,0x03,0xc1 + +# ATT: {nf} addb %r17b, %r16b, %r18b +# INTEL: {nf} add r18b, r16b, r17b +0x62,0xec,0x6c,0x14,0x02,0xc1 + +# ATT: {nf} addw %r17w, %r16w, %r18w +# INTEL: {nf} add r18w, r16w, r17w +0x62,0xec,0x6d,0x14,0x03,0xc1 + +# ATT: {nf} addl %r17d, %r16d, %r18d +# INTEL: {nf} add r18d, r16d, r17d +0x62,0xec,0x6c,0x14,0x03,0xc1 + +# ATT: {nf} addq %r17, %r16, %r18 +# INTEL: {nf} add r18, r16, r17 +0x62,0xec,0xec,0x14,0x03,0xc1 + +## sub + +# ATT: {evex} subb %r17b, %r16b +# INTEL: {evex} sub r16b, r17b +0x62,0xec,0x7c,0x08,0x2a,0xc1 + +# ATT: {evex} subw %r17w, %r16w +# INTEL: {evex} sub r16w, r17w +0x62,0xec,0x7d,0x08,0x2b,0xc1 + +# ATT: {evex} subl %r17d, %r16d +# INTEL: {evex} sub r16d, r17d +0x62,0xec,0x7c,0x08,0x2b,0xc1 + +# ATT: {evex} subq %r17, %r16 +# INTEL: {evex} sub r16, r17 +0x62,0xec,0xfc,0x08,0x2b,0xc1 + +# ATT: subb %r17b, %r16b, %r18b +# INTEL: sub r18b, r16b, r17b +0x62,0xec,0x6c,0x10,0x2a,0xc1 + +# ATT: subw %r17w, %r16w, %r18w +# INTEL: sub r18w, r16w, r17w +0x62,0xec,0x6d,0x10,0x2b,0xc1 + +# ATT: subl %r17d, %r16d, %r18d +# INTEL: sub r18d, r16d, r17d +0x62,0xec,0x6c,0x10,0x2b,0xc1 + +# ATT: subq %r17, %r16, %r18 +# INTEL: sub r18, r16, r17 +0x62,0xec,0xec,0x10,0x2b,0xc1 + +# ATT: {nf} subb %r17b, %r16b +# INTEL: {nf} sub r16b, r17b +0x62,0xec,0x7c,0x0c,0x2a,0xc1 + +# ATT: {nf} subw %r17w, %r16w +# INTEL: {nf} sub r16w, r17w +0x62,0xec,0x7d,0x0c,0x2b,0xc1 + +# ATT: {nf} subl %r17d, %r16d +# INTEL: {nf} sub r16d, r17d +0x62,0xec,0x7c,0x0c,0x2b,0xc1 + +# ATT: {nf} subq %r17, %r16 +# INTEL: {nf} sub r16, r17 +0x62,0xec,0xfc,0x0c,0x2b,0xc1 + +# ATT: {nf} subb %r17b, %r16b, %r18b +# INTEL: {nf} sub r18b, r16b, r17b +0x62,0xec,0x6c,0x14,0x2a,0xc1 + +# ATT: {nf} subw %r17w, %r16w, %r18w +# INTEL: {nf} sub r18w, r16w, r17w +0x62,0xec,0x6d,0x14,0x2b,0xc1 + +# ATT: {nf} subl %r17d, %r16d, %r18d +# INTEL: {nf} sub r18d, r16d, r17d +0x62,0xec,0x6c,0x14,0x2b,0xc1 + +# ATT: {nf} subq %r17, %r16, %r18 +# INTEL: {nf} sub r18, r16, r17 +0x62,0xec,0xec,0x14,0x2b,0xc1 + +## and + +# ATT: {evex} andb %r17b, %r16b +# INTEL: {evex} and r16b, r17b +0x62,0xec,0x7c,0x08,0x22,0xc1 + +# ATT: {evex} andw %r17w, %r16w +# INTEL: {evex} and r16w, r17w +0x62,0xec,0x7d,0x08,0x23,0xc1 + +# ATT: {evex} andl %r17d, %r16d +# INTEL: {evex} and r16d, r17d +0x62,0xec,0x7c,0x08,0x23,0xc1 + +# ATT: {evex} andq %r17, %r16 +# INTEL: {evex} and r16, r17 +0x62,0xec,0xfc,0x08,0x23,0xc1 + +# ATT: andb %r17b, %r16b, %r18b +# INTEL: and r18b, r16b, r17b +0x62,0xec,0x6c,0x10,0x22,0xc1 + +# ATT: andw %r17w, %r16w, %r18w +# INTEL: and r18w, r16w, r17w +0x62,0xec,0x6d,0x10,0x23,0xc1 + +# ATT: andl %r17d, %r16d, %r18d +# INTEL: and r18d, r16d, r17d +0x62,0xec,0x6c,0x10,0x23,0xc1 + +# ATT: andq %r17, %r16, %r18 +# INTEL: and r18, r16, r17 +0x62,0xec,0xec,0x10,0x23,0xc1 + +# ATT: {nf} andb %r17b, %r16b +# INTEL: {nf} and r16b, r17b +0x62,0xec,0x7c,0x0c,0x22,0xc1 + +# ATT: {nf} andw %r17w, %r16w +# INTEL: {nf} and r16w, r17w +0x62,0xec,0x7d,0x0c,0x23,0xc1 + +# ATT: {nf} andl %r17d, %r16d +# INTEL: {nf} and r16d, r17d +0x62,0xec,0x7c,0x0c,0x23,0xc1 + +# ATT: {nf} andq %r17, %r16 +# INTEL: {nf} and r16, r17 +0x62,0xec,0xfc,0x0c,0x23,0xc1 + +# ATT: {nf} andb %r17b, %r16b, %r18b +# INTEL: {nf} and r18b, r16b, r17b +0x62,0xec,0x6c,0x14,0x22,0xc1 + +# ATT: {nf} andw %r17w, %r16w, %r18w +# INTEL: {nf} and r18w, r16w, r17w +0x62,0xec,0x6d,0x14,0x23,0xc1 + +# ATT: {nf} andl %r17d, %r16d, %r18d +# INTEL: {nf} and r18d, r16d, r17d +0x62,0xec,0x6c,0x14,0x23,0xc1 + +# ATT: {nf} andq %r17, %r16, %r18 +# INTEL: {nf} and r18, r16, r17 +0x62,0xec,0xec,0x14,0x23,0xc1 + +## or + +# ATT: {evex} orb %r17b, %r16b +# INTEL: {evex} or r16b, r17b +0x62,0xec,0x7c,0x08,0x0a,0xc1 + +# ATT: {evex} orw %r17w, %r16w +# INTEL: {evex} or r16w, r17w +0x62,0xec,0x7d,0x08,0x0b,0xc1 + +# ATT: {evex} orl %r17d, %r16d +# INTEL: {evex} or r16d, r17d +0x62,0xec,0x7c,0x08,0x0b,0xc1 + +# ATT: {evex} orq %r17, %r16 +# INTEL: {evex} or r16, r17 +0x62,0xec,0xfc,0x08,0x0b,0xc1 + +# ATT: orb %r17b, %r16b, %r18b +# INTEL: or r18b, r16b, r17b +0x62,0xec,0x6c,0x10,0x0a,0xc1 + +# ATT: orw %r17w, %r16w, %r18w +# INTEL: or r18w, r16w, r17w +0x62,0xec,0x6d,0x10,0x0b,0xc1 + +# ATT: orl %r17d, %r16d, %r18d +# INTEL: or r18d, r16d, r17d +0x62,0xec,0x6c,0x10,0x0b,0xc1 + +# ATT: orq %r17, %r16, %r18 +# INTEL: or r18, r16, r17 +0x62,0xec,0xec,0x10,0x0b,0xc1 + +# ATT: {nf} orb %r17b, %r16b +# INTEL: {nf} or r16b, r17b +0x62,0xec,0x7c,0x0c,0x0a,0xc1 + +# ATT: {nf} orw %r17w, %r16w +# INTEL: {nf} or r16w, r17w +0x62,0xec,0x7d,0x0c,0x0b,0xc1 + +# ATT: {nf} orl %r17d, %r16d +# INTEL: {nf} or r16d, r17d +0x62,0xec,0x7c,0x0c,0x0b,0xc1 + +# ATT: {nf} orq %r17, %r16 +# INTEL: {nf} or r16, r17 +0x62,0xec,0xfc,0x0c,0x0b,0xc1 + +# ATT: {nf} orb %r17b, %r16b, %r18b +# INTEL: {nf} or r18b, r16b, r17b +0x62,0xec,0x6c,0x14,0x0a,0xc1 + +# ATT: {nf} orw %r17w, %r16w, %r18w +# INTEL: {nf} or r18w, r16w, r17w +0x62,0xec,0x6d,0x14,0x0b,0xc1 + +# ATT: {nf} orl %r17d, %r16d, %r18d +# INTEL: {nf} or r18d, r16d, r17d +0x62,0xec,0x6c,0x14,0x0b,0xc1 + +# ATT: {nf} orq %r17, %r16, %r18 +# INTEL: {nf} or r18, r16, r17 +0x62,0xec,0xec,0x14,0x0b,0xc1 + +## xor + +# ATT: {evex} xorb %r17b, %r16b +# INTEL: {evex} xor r16b, r17b +0x62,0xec,0x7c,0x08,0x32,0xc1 + +# ATT: {evex} xorw %r17w, %r16w +# INTEL: {evex} xor r16w, r17w +0x62,0xec,0x7d,0x08,0x33,0xc1 + +# ATT: {evex} xorl %r17d, %r16d +# INTEL: {evex} xor r16d, r17d +0x62,0xec,0x7c,0x08,0x33,0xc1 + +# ATT: {evex} xorq %r17, %r16 +# INTEL: {evex} xor r16, r17 +0x62,0xec,0xfc,0x08,0x33,0xc1 + +# ATT: xorb %r17b, %r16b, %r18b +# INTEL: xor r18b, r16b, r17b +0x62,0xec,0x6c,0x10,0x32,0xc1 + +# ATT: xorw %r17w, %r16w, %r18w +# INTEL: xor r18w, r16w, r17w +0x62,0xec,0x6d,0x10,0x33,0xc1 + +# ATT: xorl %r17d, %r16d, %r18d +# INTEL: xor r18d, r16d, r17d +0x62,0xec,0x6c,0x10,0x33,0xc1 + +# ATT: xorq %r17, %r16, %r18 +# INTEL: xor r18, r16, r17 +0x62,0xec,0xec,0x10,0x33,0xc1 + +# ATT: {nf} xorb %r17b, %r16b +# INTEL: {nf} xor r16b, r17b +0x62,0xec,0x7c,0x0c,0x32,0xc1 + +# ATT: {nf} xorw %r17w, %r16w +# INTEL: {nf} xor r16w, r17w +0x62,0xec,0x7d,0x0c,0x33,0xc1 + +# ATT: {nf} xorl %r17d, %r16d +# INTEL: {nf} xor r16d, r17d +0x62,0xec,0x7c,0x0c,0x33,0xc1 + +# ATT: {nf} xorq %r17, %r16 +# INTEL: {nf} xor r16, r17 +0x62,0xec,0xfc,0x0c,0x33,0xc1 + +# ATT: {nf} xorb %r17b, %r16b, %r18b +# INTEL: {nf} xor r18b, r16b, r17b +0x62,0xec,0x6c,0x14,0x32,0xc1 + +# ATT: {nf} xorw %r17w, %r16w, %r18w +# INTEL: {nf} xor r18w, r16w, r17w +0x62,0xec,0x6d,0x14,0x33,0xc1 + +# ATT: {nf} xorl %r17d, %r16d, %r18d +# INTEL: {nf} xor r18d, r16d, r17d +0x62,0xec,0x6c,0x14,0x33,0xc1 + +# ATT: {nf} xorq %r17, %r16, %r18 +# INTEL: {nf} xor r18, r16, r17 +0x62,0xec,0xec,0x14,0x33,0xc1 + +## adc + +# ATT: {evex} adcb %r17b, %r16b +# INTEL: {evex} adc r16b, r17b +0x62,0xec,0x7c,0x08,0x12,0xc1 + +# ATT: {evex} adcw %r17w, %r16w +# INTEL: {evex} adc r16w, r17w +0x62,0xec,0x7d,0x08,0x13,0xc1 + +# ATT: {evex} adcl %r17d, %r16d +# INTEL: {evex} adc r16d, r17d +0x62,0xec,0x7c,0x08,0x13,0xc1 + +# ATT: {evex} adcq %r17, %r16 +# INTEL: {evex} adc r16, r17 +0x62,0xec,0xfc,0x08,0x13,0xc1 + +# ATT: adcb %r17b, %r16b, %r18b +# INTEL: adc r18b, r16b, r17b +0x62,0xec,0x6c,0x10,0x12,0xc1 + +# ATT: adcw %r17w, %r16w, %r18w +# INTEL: adc r18w, r16w, r17w +0x62,0xec,0x6d,0x10,0x13,0xc1 + +# ATT: adcl %r17d, %r16d, %r18d +# INTEL: adc r18d, r16d, r17d +0x62,0xec,0x6c,0x10,0x13,0xc1 + +# ATT: adcq %r17, %r16, %r18 +# INTEL: adc r18, r16, r17 +0x62,0xec,0xec,0x10,0x13,0xc1 + +## sbb + +# ATT: {evex} sbbb %r17b, %r16b +# INTEL: {evex} sbb r16b, r17b +0x62,0xec,0x7c,0x08,0x1a,0xc1 + +# ATT: {evex} sbbw %r17w, %r16w +# INTEL: {evex} sbb r16w, r17w +0x62,0xec,0x7d,0x08,0x1b,0xc1 + +# ATT: {evex} sbbl %r17d, %r16d +# INTEL: {evex} sbb r16d, r17d +0x62,0xec,0x7c,0x08,0x1b,0xc1 + +# ATT: {evex} sbbq %r17, %r16 +# INTEL: {evex} sbb r16, r17 +0x62,0xec,0xfc,0x08,0x1b,0xc1 + +# ATT: sbbb %r17b, %r16b, %r18b +# INTEL: sbb r18b, r16b, r17b +0x62,0xec,0x6c,0x10,0x1a,0xc1 + +# ATT: sbbw %r17w, %r16w, %r18w +# INTEL: sbb r18w, r16w, r17w +0x62,0xec,0x6d,0x10,0x1b,0xc1 + +# ATT: sbbl %r17d, %r16d, %r18d +# INTEL: sbb r18d, r16d, r17d +0x62,0xec,0x6c,0x10,0x1b,0xc1 + +# ATT: sbbq %r17, %r16, %r18 +# INTEL: sbb r18, r16, r17 +0x62,0xec,0xec,0x10,0x1b,0xc1 diff --git a/llvm/test/MC/Disassembler/X86/apx/sbb.txt b/llvm/test/MC/Disassembler/X86/apx/sbb.txt new file mode 100644 index 0000000000000..c707d519326cd --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/sbb.txt @@ -0,0 +1,210 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} sbbb $123, %bl +# INTEL: {evex} sbb bl, 123 +0x62,0xf4,0x7c,0x08,0x80,0xdb,0x7b + +# ATT: sbbb $123, %bl, %cl +# INTEL: sbb cl, bl, 123 +0x62,0xf4,0x74,0x18,0x80,0xdb,0x7b + +# ATT: {evex} sbbw $123, %dx +# INTEL: {evex} sbb dx, 123 +0x62,0xf4,0x7d,0x08,0x83,0xda,0x7b + +# ATT: sbbw $123, %dx, %ax +# INTEL: sbb ax, dx, 123 +0x62,0xf4,0x7d,0x18,0x83,0xda,0x7b + +# ATT: {evex} sbbl $123, %ecx +# INTEL: {evex} sbb ecx, 123 +0x62,0xf4,0x7c,0x08,0x83,0xd9,0x7b + +# ATT: sbbl $123, %ecx, %edx +# INTEL: sbb edx, ecx, 123 +0x62,0xf4,0x6c,0x18,0x83,0xd9,0x7b + +# ATT: {evex} sbbq $123, %r9 +# INTEL: {evex} sbb r9, 123 +0x62,0xd4,0xfc,0x08,0x83,0xd9,0x7b + +# ATT: sbbq $123, %r9, %r15 +# INTEL: sbb r15, r9, 123 +0x62,0xd4,0x84,0x18,0x83,0xd9,0x7b + +# ATT: {evex} sbbb $123, 291(%r8,%rax,4) +# INTEL: {evex} sbb byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x80,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: sbbb $123, 291(%r8,%rax,4), %bl +# INTEL: sbb bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x18,0x80,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} sbbw $123, 291(%r8,%rax,4) +# INTEL: {evex} sbb word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: sbbw $123, 291(%r8,%rax,4), %dx +# INTEL: sbb dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} sbbl $123, 291(%r8,%rax,4) +# INTEL: {evex} sbb dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: sbbl $123, 291(%r8,%rax,4), %ecx +# INTEL: sbb ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} sbbq $123, 291(%r8,%rax,4) +# INTEL: {evex} sbb qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: sbbq $123, 291(%r8,%rax,4), %r9 +# INTEL: sbb r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} sbbw $1234, %dx +# INTEL: {evex} sbb dx, 1234 +0x62,0xf4,0x7d,0x08,0x81,0xda,0xd2,0x04 + +# ATT: sbbw $1234, %dx, %ax +# INTEL: sbb ax, dx, 1234 +0x62,0xf4,0x7d,0x18,0x81,0xda,0xd2,0x04 + +# ATT: {evex} sbbw $1234, 291(%r8,%rax,4) +# INTEL: {evex} sbb word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: sbbw $1234, 291(%r8,%rax,4), %dx +# INTEL: sbb dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {evex} sbbl $123456, %ecx +# INTEL: {evex} sbb ecx, 123456 +0x62,0xf4,0x7c,0x08,0x81,0xd9,0x40,0xe2,0x01,0x00 + +# ATT: sbbl $123456, %ecx, %edx +# INTEL: sbb edx, ecx, 123456 +0x62,0xf4,0x6c,0x18,0x81,0xd9,0x40,0xe2,0x01,0x00 + +# ATT: {evex} sbbq $123456, %r9 +# INTEL: {evex} sbb r9, 123456 +0x62,0xd4,0xfc,0x08,0x81,0xd9,0x40,0xe2,0x01,0x00 + +# ATT: sbbq $123456, %r9, %r15 +# INTEL: sbb r15, r9, 123456 +0x62,0xd4,0x84,0x18,0x81,0xd9,0x40,0xe2,0x01,0x00 + +# ATT: {evex} sbbl $123456, 291(%r8,%rax,4) +# INTEL: {evex} sbb dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: sbbl $123456, 291(%r8,%rax,4), %ecx +# INTEL: sbb ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} sbbq $123456, 291(%r8,%rax,4) +# INTEL: {evex} sbb qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: sbbq $123456, 291(%r8,%rax,4), %r9 +# INTEL: sbb r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} sbbb %bl, %cl +# INTEL: {evex} sbb cl, bl +0x62,0xf4,0x7c,0x08,0x18,0xd9 + +# ATT: sbbb %bl, %cl, %r8b +# INTEL: sbb r8b, cl, bl +0x62,0xf4,0x3c,0x18,0x18,0xd9 + +# ATT: {evex} sbbb %bl, 291(%r8,%rax,4) +# INTEL: {evex} sbb byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x08,0x18,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: sbbb %bl, 291(%r8,%rax,4), %cl +# INTEL: sbb cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x18,0x18,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} sbbw %dx, %ax +# INTEL: {evex} sbb ax, dx +0x62,0xf4,0x7d,0x08,0x19,0xd0 + +# ATT: sbbw %dx, %ax, %r9w +# INTEL: sbb r9w, ax, dx +0x62,0xf4,0x35,0x18,0x19,0xd0 + +# ATT: {evex} sbbw %dx, 291(%r8,%rax,4) +# INTEL: {evex} sbb word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x08,0x19,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: sbbw %dx, 291(%r8,%rax,4), %ax +# INTEL: sbb ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x18,0x19,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} sbbl %ecx, %edx +# INTEL: {evex} sbb edx, ecx +0x62,0xf4,0x7c,0x08,0x19,0xca + +# ATT: sbbl %ecx, %edx, %r10d +# INTEL: sbb r10d, edx, ecx +0x62,0xf4,0x2c,0x18,0x19,0xca + +# ATT: {evex} sbbl %ecx, 291(%r8,%rax,4) +# INTEL: {evex} sbb dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x08,0x19,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: sbbl %ecx, 291(%r8,%rax,4), %edx +# INTEL: sbb edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x18,0x19,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} sbbq %r9, %r15 +# INTEL: {evex} sbb r15, r9 +0x62,0x54,0xfc,0x08,0x19,0xcf + +# ATT: sbbq %r9, %r15, %r11 +# INTEL: sbb r11, r15, r9 +0x62,0x54,0xa4,0x18,0x19,0xcf + +# ATT: {evex} sbbq %r9, 291(%r8,%rax,4) +# INTEL: {evex} sbb qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x08,0x19,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: sbbq %r9, 291(%r8,%rax,4), %r15 +# INTEL: sbb r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x18,0x19,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} sbbb 291(%r8,%rax,4), %bl +# INTEL: {evex} sbb bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x1a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: sbbb 291(%r8,%rax,4), %bl, %cl +# INTEL: sbb cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0x1a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} sbbw 291(%r8,%rax,4), %dx +# INTEL: {evex} sbb dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0x1b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: sbbw 291(%r8,%rax,4), %dx, %ax +# INTEL: sbb ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x18,0x1b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} sbbl 291(%r8,%rax,4), %ecx +# INTEL: {evex} sbb ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: sbbl 291(%r8,%rax,4), %ecx, %edx +# INTEL: sbb edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x18,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} sbbq 291(%r8,%rax,4), %r9 +# INTEL: {evex} sbb r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x08,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: sbbq 291(%r8,%rax,4), %r9, %r15 +# INTEL: sbb r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x18,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/X86/apx/sub.txt b/llvm/test/MC/Disassembler/X86/apx/sub.txt new file mode 100644 index 0000000000000..d5ec87d376fd0 --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/sub.txt @@ -0,0 +1,418 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} subb $123, %bl +# INTEL: {evex} sub bl, 123 +0x62,0xf4,0x7c,0x08,0x80,0xeb,0x7b + +# ATT: {nf} subb $123, %bl +# INTEL: {nf} sub bl, 123 +0x62,0xf4,0x7c,0x0c,0x80,0xeb,0x7b + +# ATT: subb $123, %bl, %cl +# INTEL: sub cl, bl, 123 +0x62,0xf4,0x74,0x18,0x80,0xeb,0x7b + +# ATT: {nf} subb $123, %bl, %cl +# INTEL: {nf} sub cl, bl, 123 +0x62,0xf4,0x74,0x1c,0x80,0xeb,0x7b + +# ATT: {evex} subw $123, %dx +# INTEL: {evex} sub dx, 123 +0x62,0xf4,0x7d,0x08,0x83,0xea,0x7b + +# ATT: {nf} subw $123, %dx +# INTEL: {nf} sub dx, 123 +0x62,0xf4,0x7d,0x0c,0x83,0xea,0x7b + +# ATT: subw $123, %dx, %ax +# INTEL: sub ax, dx, 123 +0x62,0xf4,0x7d,0x18,0x83,0xea,0x7b + +# ATT: {nf} subw $123, %dx, %ax +# INTEL: {nf} sub ax, dx, 123 +0x62,0xf4,0x7d,0x1c,0x83,0xea,0x7b + +# ATT: {evex} subl $123, %ecx +# INTEL: {evex} sub ecx, 123 +0x62,0xf4,0x7c,0x08,0x83,0xe9,0x7b + +# ATT: {nf} subl $123, %ecx +# INTEL: {nf} sub ecx, 123 +0x62,0xf4,0x7c,0x0c,0x83,0xe9,0x7b + +# ATT: subl $123, %ecx, %edx +# INTEL: sub edx, ecx, 123 +0x62,0xf4,0x6c,0x18,0x83,0xe9,0x7b + +# ATT: {nf} subl $123, %ecx, %edx +# INTEL: {nf} sub edx, ecx, 123 +0x62,0xf4,0x6c,0x1c,0x83,0xe9,0x7b + +# ATT: {evex} subq $123, %r9 +# INTEL: {evex} sub r9, 123 +0x62,0xd4,0xfc,0x08,0x83,0xe9,0x7b + +# ATT: {nf} subq $123, %r9 +# INTEL: {nf} sub r9, 123 +0x62,0xd4,0xfc,0x0c,0x83,0xe9,0x7b + +# ATT: subq $123, %r9, %r15 +# INTEL: sub r15, r9, 123 +0x62,0xd4,0x84,0x18,0x83,0xe9,0x7b + +# ATT: {nf} subq $123, %r9, %r15 +# INTEL: {nf} sub r15, r9, 123 +0x62,0xd4,0x84,0x1c,0x83,0xe9,0x7b + +# ATT: {evex} subb $123, 291(%r8,%rax,4) +# INTEL: {evex} sub byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} subb $123, 291(%r8,%rax,4) +# INTEL: {nf} sub byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: subb $123, 291(%r8,%rax,4), %bl +# INTEL: sub bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x18,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} subb $123, 291(%r8,%rax,4), %bl +# INTEL: {nf} sub bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x1c,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} subw $123, 291(%r8,%rax,4) +# INTEL: {evex} sub word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} subw $123, 291(%r8,%rax,4) +# INTEL: {nf} sub word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: subw $123, 291(%r8,%rax,4), %dx +# INTEL: sub dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} subw $123, 291(%r8,%rax,4), %dx +# INTEL: {nf} sub dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} subl $123, 291(%r8,%rax,4) +# INTEL: {evex} sub dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} subl $123, 291(%r8,%rax,4) +# INTEL: {nf} sub dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: subl $123, 291(%r8,%rax,4), %ecx +# INTEL: sub ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} subl $123, 291(%r8,%rax,4), %ecx +# INTEL: {nf} sub ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} subq $123, 291(%r8,%rax,4) +# INTEL: {evex} sub qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} subq $123, 291(%r8,%rax,4) +# INTEL: {nf} sub qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: subq $123, 291(%r8,%rax,4), %r9 +# INTEL: sub r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} subq $123, 291(%r8,%rax,4), %r9 +# INTEL: {nf} sub r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} subw $1234, %dx +# INTEL: {evex} sub dx, 1234 +0x62,0xf4,0x7d,0x08,0x81,0xea,0xd2,0x04 + +# ATT: {nf} subw $1234, %dx +# INTEL: {nf} sub dx, 1234 +0x62,0xf4,0x7d,0x0c,0x81,0xea,0xd2,0x04 + +# ATT: subw $1234, %dx, %ax +# INTEL: sub ax, dx, 1234 +0x62,0xf4,0x7d,0x18,0x81,0xea,0xd2,0x04 + +# ATT: {nf} subw $1234, %dx, %ax +# INTEL: {nf} sub ax, dx, 1234 +0x62,0xf4,0x7d,0x1c,0x81,0xea,0xd2,0x04 + +# ATT: {evex} subw $1234, 291(%r8,%rax,4) +# INTEL: {evex} sub word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} subw $1234, 291(%r8,%rax,4) +# INTEL: {nf} sub word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: subw $1234, 291(%r8,%rax,4), %dx +# INTEL: sub dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} subw $1234, 291(%r8,%rax,4), %dx +# INTEL: {nf} sub dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {evex} subl $123456, %ecx +# INTEL: {evex} sub ecx, 123456 +0x62,0xf4,0x7c,0x08,0x81,0xe9,0x40,0xe2,0x01,0x00 + +# ATT: {nf} subl $123456, %ecx +# INTEL: {nf} sub ecx, 123456 +0x62,0xf4,0x7c,0x0c,0x81,0xe9,0x40,0xe2,0x01,0x00 + +# ATT: subl $123456, %ecx, %edx +# INTEL: sub edx, ecx, 123456 +0x62,0xf4,0x6c,0x18,0x81,0xe9,0x40,0xe2,0x01,0x00 + +# ATT: {nf} subl $123456, %ecx, %edx +# INTEL: {nf} sub edx, ecx, 123456 +0x62,0xf4,0x6c,0x1c,0x81,0xe9,0x40,0xe2,0x01,0x00 + +# ATT: {evex} subq $123456, %r9 +# INTEL: {evex} sub r9, 123456 +0x62,0xd4,0xfc,0x08,0x81,0xe9,0x40,0xe2,0x01,0x00 + +# ATT: {nf} subq $123456, %r9 +# INTEL: {nf} sub r9, 123456 +0x62,0xd4,0xfc,0x0c,0x81,0xe9,0x40,0xe2,0x01,0x00 + +# ATT: subq $123456, %r9, %r15 +# INTEL: sub r15, r9, 123456 +0x62,0xd4,0x84,0x18,0x81,0xe9,0x40,0xe2,0x01,0x00 + +# ATT: {nf} subq $123456, %r9, %r15 +# INTEL: {nf} sub r15, r9, 123456 +0x62,0xd4,0x84,0x1c,0x81,0xe9,0x40,0xe2,0x01,0x00 + +# ATT: {evex} subl $123456, 291(%r8,%rax,4) +# INTEL: {evex} sub dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} subl $123456, 291(%r8,%rax,4) +# INTEL: {nf} sub dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: subl $123456, 291(%r8,%rax,4), %ecx +# INTEL: sub ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} subl $123456, 291(%r8,%rax,4), %ecx +# INTEL: {nf} sub ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} subq $123456, 291(%r8,%rax,4) +# INTEL: {evex} sub qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} subq $123456, 291(%r8,%rax,4) +# INTEL: {nf} sub qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: subq $123456, 291(%r8,%rax,4), %r9 +# INTEL: sub r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} subq $123456, 291(%r8,%rax,4), %r9 +# INTEL: {nf} sub r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} subb %bl, %cl +# INTEL: {evex} sub cl, bl +0x62,0xf4,0x7c,0x08,0x28,0xd9 + +# ATT: {nf} subb %bl, %cl +# INTEL: {nf} sub cl, bl +0x62,0xf4,0x7c,0x0c,0x28,0xd9 + +# ATT: subb %bl, %cl, %r8b +# INTEL: sub r8b, cl, bl +0x62,0xf4,0x3c,0x18,0x28,0xd9 + +# ATT: {nf} subb %bl, %cl, %r8b +# INTEL: {nf} sub r8b, cl, bl +0x62,0xf4,0x3c,0x1c,0x28,0xd9 + +# ATT: {evex} subb %bl, 291(%r8,%rax,4) +# INTEL: {evex} sub byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x08,0x28,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subb %bl, 291(%r8,%rax,4) +# INTEL: {nf} sub byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x0c,0x28,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: subb %bl, 291(%r8,%rax,4), %cl +# INTEL: sub cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x18,0x28,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subb %bl, 291(%r8,%rax,4), %cl +# INTEL: {nf} sub cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x1c,0x28,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} subw %dx, %ax +# INTEL: {evex} sub ax, dx +0x62,0xf4,0x7d,0x08,0x29,0xd0 + +# ATT: {nf} subw %dx, %ax +# INTEL: {nf} sub ax, dx +0x62,0xf4,0x7d,0x0c,0x29,0xd0 + +# ATT: subw %dx, %ax, %r9w +# INTEL: sub r9w, ax, dx +0x62,0xf4,0x35,0x18,0x29,0xd0 + +# ATT: {nf} subw %dx, %ax, %r9w +# INTEL: {nf} sub r9w, ax, dx +0x62,0xf4,0x35,0x1c,0x29,0xd0 + +# ATT: {evex} subw %dx, 291(%r8,%rax,4) +# INTEL: {evex} sub word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x08,0x29,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subw %dx, 291(%r8,%rax,4) +# INTEL: {nf} sub word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x0c,0x29,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: subw %dx, 291(%r8,%rax,4), %ax +# INTEL: sub ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x18,0x29,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subw %dx, 291(%r8,%rax,4), %ax +# INTEL: {nf} sub ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x1c,0x29,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} subl %ecx, %edx +# INTEL: {evex} sub edx, ecx +0x62,0xf4,0x7c,0x08,0x29,0xca + +# ATT: {nf} subl %ecx, %edx +# INTEL: {nf} sub edx, ecx +0x62,0xf4,0x7c,0x0c,0x29,0xca + +# ATT: subl %ecx, %edx, %r10d +# INTEL: sub r10d, edx, ecx +0x62,0xf4,0x2c,0x18,0x29,0xca + +# ATT: {nf} subl %ecx, %edx, %r10d +# INTEL: {nf} sub r10d, edx, ecx +0x62,0xf4,0x2c,0x1c,0x29,0xca + +# ATT: {evex} subl %ecx, 291(%r8,%rax,4) +# INTEL: {evex} sub dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x08,0x29,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subl %ecx, 291(%r8,%rax,4) +# INTEL: {nf} sub dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x0c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: subl %ecx, 291(%r8,%rax,4), %edx +# INTEL: sub edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x18,0x29,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subl %ecx, 291(%r8,%rax,4), %edx +# INTEL: {nf} sub edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x1c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} subq %r9, %r15 +# INTEL: {evex} sub r15, r9 +0x62,0x54,0xfc,0x08,0x29,0xcf + +# ATT: {nf} subq %r9, %r15 +# INTEL: {nf} sub r15, r9 +0x62,0x54,0xfc,0x0c,0x29,0xcf + +# ATT: subq %r9, %r15, %r11 +# INTEL: sub r11, r15, r9 +0x62,0x54,0xa4,0x18,0x29,0xcf + +# ATT: {nf} subq %r9, %r15, %r11 +# INTEL: {nf} sub r11, r15, r9 +0x62,0x54,0xa4,0x1c,0x29,0xcf + +# ATT: {evex} subq %r9, 291(%r8,%rax,4) +# INTEL: {evex} sub qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x08,0x29,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subq %r9, 291(%r8,%rax,4) +# INTEL: {nf} sub qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x0c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: subq %r9, 291(%r8,%rax,4), %r15 +# INTEL: sub r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x18,0x29,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subq %r9, 291(%r8,%rax,4), %r15 +# INTEL: {nf} sub r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x1c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} subb 291(%r8,%rax,4), %bl +# INTEL: {evex} sub bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subb 291(%r8,%rax,4), %bl +# INTEL: {nf} sub bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: subb 291(%r8,%rax,4), %bl, %cl +# INTEL: sub cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subb 291(%r8,%rax,4), %bl, %cl +# INTEL: {nf} sub cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x1c,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} subw 291(%r8,%rax,4), %dx +# INTEL: {evex} sub dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0x2b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subw 291(%r8,%rax,4), %dx +# INTEL: {nf} sub dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x0c,0x2b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: subw 291(%r8,%rax,4), %dx, %ax +# INTEL: sub ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x18,0x2b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subw 291(%r8,%rax,4), %dx, %ax +# INTEL: {nf} sub ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x1c,0x2b,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} subl 291(%r8,%rax,4), %ecx +# INTEL: {evex} sub ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subl 291(%r8,%rax,4), %ecx +# INTEL: {nf} sub ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: subl 291(%r8,%rax,4), %ecx, %edx +# INTEL: sub edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x18,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subl 291(%r8,%rax,4), %ecx, %edx +# INTEL: {nf} sub edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x1c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} subq 291(%r8,%rax,4), %r9 +# INTEL: {evex} sub r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x08,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subq 291(%r8,%rax,4), %r9 +# INTEL: {nf} sub r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x0c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: subq 291(%r8,%rax,4), %r9, %r15 +# INTEL: sub r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x18,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} subq 291(%r8,%rax,4), %r9, %r15 +# INTEL: {nf} sub r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x1c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/Disassembler/X86/apx/xor.txt b/llvm/test/MC/Disassembler/X86/apx/xor.txt new file mode 100644 index 0000000000000..69c52989c13f3 --- /dev/null +++ b/llvm/test/MC/Disassembler/X86/apx/xor.txt @@ -0,0 +1,418 @@ +# RUN: llvm-mc -triple x86_64 -disassemble %s | FileCheck %s --check-prefix=ATT +# RUN: llvm-mc -triple x86_64 -disassemble -output-asm-variant=1 %s | FileCheck %s --check-prefix=INTEL + +# ATT: {evex} xorb $123, %bl +# INTEL: {evex} xor bl, 123 +0x62,0xf4,0x7c,0x08,0x80,0xf3,0x7b + +# ATT: {nf} xorb $123, %bl +# INTEL: {nf} xor bl, 123 +0x62,0xf4,0x7c,0x0c,0x80,0xf3,0x7b + +# ATT: xorb $123, %bl, %cl +# INTEL: xor cl, bl, 123 +0x62,0xf4,0x74,0x18,0x80,0xf3,0x7b + +# ATT: {nf} xorb $123, %bl, %cl +# INTEL: {nf} xor cl, bl, 123 +0x62,0xf4,0x74,0x1c,0x80,0xf3,0x7b + +# ATT: {evex} xorw $123, %dx +# INTEL: {evex} xor dx, 123 +0x62,0xf4,0x7d,0x08,0x83,0xf2,0x7b + +# ATT: {nf} xorw $123, %dx +# INTEL: {nf} xor dx, 123 +0x62,0xf4,0x7d,0x0c,0x83,0xf2,0x7b + +# ATT: xorw $123, %dx, %ax +# INTEL: xor ax, dx, 123 +0x62,0xf4,0x7d,0x18,0x83,0xf2,0x7b + +# ATT: {nf} xorw $123, %dx, %ax +# INTEL: {nf} xor ax, dx, 123 +0x62,0xf4,0x7d,0x1c,0x83,0xf2,0x7b + +# ATT: {evex} xorl $123, %ecx +# INTEL: {evex} xor ecx, 123 +0x62,0xf4,0x7c,0x08,0x83,0xf1,0x7b + +# ATT: {nf} xorl $123, %ecx +# INTEL: {nf} xor ecx, 123 +0x62,0xf4,0x7c,0x0c,0x83,0xf1,0x7b + +# ATT: xorl $123, %ecx, %edx +# INTEL: xor edx, ecx, 123 +0x62,0xf4,0x6c,0x18,0x83,0xf1,0x7b + +# ATT: {nf} xorl $123, %ecx, %edx +# INTEL: {nf} xor edx, ecx, 123 +0x62,0xf4,0x6c,0x1c,0x83,0xf1,0x7b + +# ATT: {evex} xorq $123, %r9 +# INTEL: {evex} xor r9, 123 +0x62,0xd4,0xfc,0x08,0x83,0xf1,0x7b + +# ATT: {nf} xorq $123, %r9 +# INTEL: {nf} xor r9, 123 +0x62,0xd4,0xfc,0x0c,0x83,0xf1,0x7b + +# ATT: xorq $123, %r9, %r15 +# INTEL: xor r15, r9, 123 +0x62,0xd4,0x84,0x18,0x83,0xf1,0x7b + +# ATT: {nf} xorq $123, %r9, %r15 +# INTEL: {nf} xor r15, r9, 123 +0x62,0xd4,0x84,0x1c,0x83,0xf1,0x7b + +# ATT: {evex} xorb $123, 291(%r8,%rax,4) +# INTEL: {evex} xor byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} xorb $123, 291(%r8,%rax,4) +# INTEL: {nf} xor byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: xorb $123, 291(%r8,%rax,4), %bl +# INTEL: xor bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x18,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} xorb $123, 291(%r8,%rax,4), %bl +# INTEL: {nf} xor bl, byte ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x64,0x1c,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} xorw $123, 291(%r8,%rax,4) +# INTEL: {evex} xor word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} xorw $123, 291(%r8,%rax,4) +# INTEL: {nf} xor word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7d,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: xorw $123, 291(%r8,%rax,4), %dx +# INTEL: xor dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} xorw $123, 291(%r8,%rax,4), %dx +# INTEL: {nf} xor dx, word ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x6d,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} xorl $123, 291(%r8,%rax,4) +# INTEL: {evex} xor dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} xorl $123, 291(%r8,%rax,4) +# INTEL: {nf} xor dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x7c,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: xorl $123, 291(%r8,%rax,4), %ecx +# INTEL: xor ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} xorl $123, 291(%r8,%rax,4), %ecx +# INTEL: {nf} xor ecx, dword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0x74,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} xorq $123, 291(%r8,%rax,4) +# INTEL: {evex} xor qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} xorq $123, 291(%r8,%rax,4) +# INTEL: {nf} xor qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xfc,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: xorq $123, 291(%r8,%rax,4), %r9 +# INTEL: xor r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {nf} xorq $123, 291(%r8,%rax,4), %r9 +# INTEL: {nf} xor r9, qword ptr [r8 + 4*rax + 291], 123 +0x62,0xd4,0xb4,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b + +# ATT: {evex} xorw $1234, %dx +# INTEL: {evex} xor dx, 1234 +0x62,0xf4,0x7d,0x08,0x81,0xf2,0xd2,0x04 + +# ATT: {nf} xorw $1234, %dx +# INTEL: {nf} xor dx, 1234 +0x62,0xf4,0x7d,0x0c,0x81,0xf2,0xd2,0x04 + +# ATT: xorw $1234, %dx, %ax +# INTEL: xor ax, dx, 1234 +0x62,0xf4,0x7d,0x18,0x81,0xf2,0xd2,0x04 + +# ATT: {nf} xorw $1234, %dx, %ax +# INTEL: {nf} xor ax, dx, 1234 +0x62,0xf4,0x7d,0x1c,0x81,0xf2,0xd2,0x04 + +# ATT: {evex} xorw $1234, 291(%r8,%rax,4) +# INTEL: {evex} xor word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} xorw $1234, 291(%r8,%rax,4) +# INTEL: {nf} xor word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x7d,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: xorw $1234, 291(%r8,%rax,4), %dx +# INTEL: xor dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {nf} xorw $1234, 291(%r8,%rax,4), %dx +# INTEL: {nf} xor dx, word ptr [r8 + 4*rax + 291], 1234 +0x62,0xd4,0x6d,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04 + +# ATT: {evex} xorl $123456, %ecx +# INTEL: {evex} xor ecx, 123456 +0x62,0xf4,0x7c,0x08,0x81,0xf1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} xorl $123456, %ecx +# INTEL: {nf} xor ecx, 123456 +0x62,0xf4,0x7c,0x0c,0x81,0xf1,0x40,0xe2,0x01,0x00 + +# ATT: xorl $123456, %ecx, %edx +# INTEL: xor edx, ecx, 123456 +0x62,0xf4,0x6c,0x18,0x81,0xf1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} xorl $123456, %ecx, %edx +# INTEL: {nf} xor edx, ecx, 123456 +0x62,0xf4,0x6c,0x1c,0x81,0xf1,0x40,0xe2,0x01,0x00 + +# ATT: {evex} xorq $123456, %r9 +# INTEL: {evex} xor r9, 123456 +0x62,0xd4,0xfc,0x08,0x81,0xf1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} xorq $123456, %r9 +# INTEL: {nf} xor r9, 123456 +0x62,0xd4,0xfc,0x0c,0x81,0xf1,0x40,0xe2,0x01,0x00 + +# ATT: xorq $123456, %r9, %r15 +# INTEL: xor r15, r9, 123456 +0x62,0xd4,0x84,0x18,0x81,0xf1,0x40,0xe2,0x01,0x00 + +# ATT: {nf} xorq $123456, %r9, %r15 +# INTEL: {nf} xor r15, r9, 123456 +0x62,0xd4,0x84,0x1c,0x81,0xf1,0x40,0xe2,0x01,0x00 + +# ATT: {evex} xorl $123456, 291(%r8,%rax,4) +# INTEL: {evex} xor dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} xorl $123456, 291(%r8,%rax,4) +# INTEL: {nf} xor dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x7c,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: xorl $123456, 291(%r8,%rax,4), %ecx +# INTEL: xor ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} xorl $123456, 291(%r8,%rax,4), %ecx +# INTEL: {nf} xor ecx, dword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0x74,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} xorq $123456, 291(%r8,%rax,4) +# INTEL: {evex} xor qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} xorq $123456, 291(%r8,%rax,4) +# INTEL: {nf} xor qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xfc,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: xorq $123456, 291(%r8,%rax,4), %r9 +# INTEL: xor r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {nf} xorq $123456, 291(%r8,%rax,4), %r9 +# INTEL: {nf} xor r9, qword ptr [r8 + 4*rax + 291], 123456 +0x62,0xd4,0xb4,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00 + +# ATT: {evex} xorb %bl, %cl +# INTEL: {evex} xor cl, bl +0x62,0xf4,0x7c,0x08,0x30,0xd9 + +# ATT: {nf} xorb %bl, %cl +# INTEL: {nf} xor cl, bl +0x62,0xf4,0x7c,0x0c,0x30,0xd9 + +# ATT: xorb %bl, %cl, %r8b +# INTEL: xor r8b, cl, bl +0x62,0xf4,0x3c,0x18,0x30,0xd9 + +# ATT: {nf} xorb %bl, %cl, %r8b +# INTEL: {nf} xor r8b, cl, bl +0x62,0xf4,0x3c,0x1c,0x30,0xd9 + +# ATT: {evex} xorb %bl, 291(%r8,%rax,4) +# INTEL: {evex} xor byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x08,0x30,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorb %bl, 291(%r8,%rax,4) +# INTEL: {nf} xor byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x7c,0x0c,0x30,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: xorb %bl, 291(%r8,%rax,4), %cl +# INTEL: xor cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x18,0x30,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorb %bl, 291(%r8,%rax,4), %cl +# INTEL: {nf} xor cl, byte ptr [r8 + 4*rax + 291], bl +0x62,0xd4,0x74,0x1c,0x30,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} xorw %dx, %ax +# INTEL: {evex} xor ax, dx +0x62,0xf4,0x7d,0x08,0x31,0xd0 + +# ATT: {nf} xorw %dx, %ax +# INTEL: {nf} xor ax, dx +0x62,0xf4,0x7d,0x0c,0x31,0xd0 + +# ATT: xorw %dx, %ax, %r9w +# INTEL: xor r9w, ax, dx +0x62,0xf4,0x35,0x18,0x31,0xd0 + +# ATT: {nf} xorw %dx, %ax, %r9w +# INTEL: {nf} xor r9w, ax, dx +0x62,0xf4,0x35,0x1c,0x31,0xd0 + +# ATT: {evex} xorw %dx, 291(%r8,%rax,4) +# INTEL: {evex} xor word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x08,0x31,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorw %dx, 291(%r8,%rax,4) +# INTEL: {nf} xor word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x0c,0x31,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: xorw %dx, 291(%r8,%rax,4), %ax +# INTEL: xor ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x18,0x31,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorw %dx, 291(%r8,%rax,4), %ax +# INTEL: {nf} xor ax, word ptr [r8 + 4*rax + 291], dx +0x62,0xd4,0x7d,0x1c,0x31,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} xorl %ecx, %edx +# INTEL: {evex} xor edx, ecx +0x62,0xf4,0x7c,0x08,0x31,0xca + +# ATT: {nf} xorl %ecx, %edx +# INTEL: {nf} xor edx, ecx +0x62,0xf4,0x7c,0x0c,0x31,0xca + +# ATT: xorl %ecx, %edx, %r10d +# INTEL: xor r10d, edx, ecx +0x62,0xf4,0x2c,0x18,0x31,0xca + +# ATT: {nf} xorl %ecx, %edx, %r10d +# INTEL: {nf} xor r10d, edx, ecx +0x62,0xf4,0x2c,0x1c,0x31,0xca + +# ATT: {evex} xorl %ecx, 291(%r8,%rax,4) +# INTEL: {evex} xor dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x08,0x31,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorl %ecx, 291(%r8,%rax,4) +# INTEL: {nf} xor dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x7c,0x0c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: xorl %ecx, 291(%r8,%rax,4), %edx +# INTEL: xor edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x18,0x31,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorl %ecx, 291(%r8,%rax,4), %edx +# INTEL: {nf} xor edx, dword ptr [r8 + 4*rax + 291], ecx +0x62,0xd4,0x6c,0x1c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} xorq %r9, %r15 +# INTEL: {evex} xor r15, r9 +0x62,0x54,0xfc,0x08,0x31,0xcf + +# ATT: {nf} xorq %r9, %r15 +# INTEL: {nf} xor r15, r9 +0x62,0x54,0xfc,0x0c,0x31,0xcf + +# ATT: xorq %r9, %r15, %r11 +# INTEL: xor r11, r15, r9 +0x62,0x54,0xa4,0x18,0x31,0xcf + +# ATT: {nf} xorq %r9, %r15, %r11 +# INTEL: {nf} xor r11, r15, r9 +0x62,0x54,0xa4,0x1c,0x31,0xcf + +# ATT: {evex} xorq %r9, 291(%r8,%rax,4) +# INTEL: {evex} xor qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x08,0x31,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorq %r9, 291(%r8,%rax,4) +# INTEL: {nf} xor qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0xfc,0x0c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: xorq %r9, 291(%r8,%rax,4), %r15 +# INTEL: xor r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x18,0x31,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorq %r9, 291(%r8,%rax,4), %r15 +# INTEL: {nf} xor r15, qword ptr [r8 + 4*rax + 291], r9 +0x62,0x54,0x84,0x1c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} xorb 291(%r8,%rax,4), %bl +# INTEL: {evex} xor bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x32,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorb 291(%r8,%rax,4), %bl +# INTEL: {nf} xor bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x32,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: xorb 291(%r8,%rax,4), %bl, %cl +# INTEL: xor cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x18,0x32,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorb 291(%r8,%rax,4), %bl, %cl +# INTEL: {nf} xor cl, bl, byte ptr [r8 + 4*rax + 291] +0x62,0xd4,0x74,0x1c,0x32,0x9c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} xorw 291(%r8,%rax,4), %dx +# INTEL: {evex} xor dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x08,0x33,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorw 291(%r8,%rax,4), %dx +# INTEL: {nf} xor dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x0c,0x33,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: xorw 291(%r8,%rax,4), %dx, %ax +# INTEL: xor ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x18,0x33,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorw 291(%r8,%rax,4), %dx, %ax +# INTEL: {nf} xor ax, dx, word ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7d,0x1c,0x33,0x94,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} xorl 291(%r8,%rax,4), %ecx +# INTEL: {evex} xor ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x08,0x33,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorl 291(%r8,%rax,4), %ecx +# INTEL: {nf} xor ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x7c,0x0c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: xorl 291(%r8,%rax,4), %ecx, %edx +# INTEL: xor edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x18,0x33,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorl 291(%r8,%rax,4), %ecx, %edx +# INTEL: {nf} xor edx, ecx, dword ptr [r8 + 4*rax + 291] +0x62,0xd4,0x6c,0x1c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {evex} xorq 291(%r8,%rax,4), %r9 +# INTEL: {evex} xor r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x08,0x33,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorq 291(%r8,%rax,4), %r9 +# INTEL: {nf} xor r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0xfc,0x0c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: xorq 291(%r8,%rax,4), %r9, %r15 +# INTEL: xor r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x18,0x33,0x8c,0x80,0x23,0x01,0x00,0x00 + +# ATT: {nf} xorq 291(%r8,%rax,4), %r9, %r15 +# INTEL: {nf} xor r15, r9, qword ptr [r8 + 4*rax + 291] +0x62,0x54,0x84,0x1c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00 diff --git a/llvm/test/MC/X86/apx/adc-att.s b/llvm/test/MC/X86/apx/adc-att.s new file mode 100644 index 0000000000000..e4862161d1f3d --- /dev/null +++ b/llvm/test/MC/X86/apx/adc-att.s @@ -0,0 +1,161 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-52: error: +# ERROR-NOT: error: +# CHECK: {evex} adcb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xd3,0x7b] + {evex} adcb $123, %bl +# CHECK: adcb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xd3,0x7b] + adcb $123, %bl, %cl +# CHECK: {evex} adcw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xd2,0x7b] + {evex} adcw $123, %dx +# CHECK: adcw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xd2,0x7b] + adcw $123, %dx, %ax +# CHECK: {evex} adcl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xd1,0x7b] + {evex} adcl $123, %ecx +# CHECK: adcl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xd1,0x7b] + adcl $123, %ecx, %edx +# CHECK: {evex} adcq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xd1,0x7b] + {evex} adcq $123, %r9 +# CHECK: adcq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xd1,0x7b] + adcq $123, %r9, %r15 +# CHECK: {evex} adcb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} adcb $123, 291(%r8,%rax,4) +# CHECK: adcb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + adcb $123, 291(%r8,%rax,4), %bl +# CHECK: {evex} adcw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} adcw $123, 291(%r8,%rax,4) +# CHECK: adcw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + adcw $123, 291(%r8,%rax,4), %dx +# CHECK: {evex} adcl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} adcl $123, 291(%r8,%rax,4) +# CHECK: adcl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + adcl $123, 291(%r8,%rax,4), %ecx +# CHECK: {evex} adcq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} adcq $123, 291(%r8,%rax,4) +# CHECK: adcq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + adcq $123, 291(%r8,%rax,4), %r9 +# CHECK: {evex} adcw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xd2,0xd2,0x04] + {evex} adcw $1234, %dx +# CHECK: adcw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xd2,0xd2,0x04] + adcw $1234, %dx, %ax +# CHECK: {evex} adcw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} adcw $1234, 291(%r8,%rax,4) +# CHECK: adcw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + adcw $1234, 291(%r8,%rax,4), %dx +# CHECK: {evex} adcl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xd1,0x40,0xe2,0x01,0x00] + {evex} adcl $123456, %ecx +# CHECK: adcl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xd1,0x40,0xe2,0x01,0x00] + adcl $123456, %ecx, %edx +# CHECK: {evex} adcq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xd1,0x40,0xe2,0x01,0x00] + {evex} adcq $123456, %r9 +# CHECK: adcq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xd1,0x40,0xe2,0x01,0x00] + adcq $123456, %r9, %r15 +# CHECK: {evex} adcl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} adcl $123456, 291(%r8,%rax,4) +# CHECK: adcl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + adcl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {evex} adcq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} adcq $123456, 291(%r8,%rax,4) +# CHECK: adcq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + adcq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {evex} adcb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x10,0xd9] + {evex} adcb %bl, %cl +# CHECK: adcb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x10,0xd9] + adcb %bl, %cl, %r8b +# CHECK: {evex} adcb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x10,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} adcb %bl, 291(%r8,%rax,4) +# CHECK: adcb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x10,0x9c,0x80,0x23,0x01,0x00,0x00] + adcb %bl, 291(%r8,%rax,4), %cl +# CHECK: {evex} adcw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x11,0xd0] + {evex} adcw %dx, %ax +# CHECK: adcw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x11,0xd0] + adcw %dx, %ax, %r9w +# CHECK: {evex} adcw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x11,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} adcw %dx, 291(%r8,%rax,4) +# CHECK: adcw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x11,0x94,0x80,0x23,0x01,0x00,0x00] + adcw %dx, 291(%r8,%rax,4), %ax +# CHECK: {evex} adcl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x11,0xca] + {evex} adcl %ecx, %edx +# CHECK: adcl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x11,0xca] + adcl %ecx, %edx, %r10d +# CHECK: {evex} adcl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x11,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} adcl %ecx, 291(%r8,%rax,4) +# CHECK: adcl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x11,0x8c,0x80,0x23,0x01,0x00,0x00] + adcl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {evex} adcq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x11,0xcf] + {evex} adcq %r9, %r15 +# CHECK: adcq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x11,0xcf] + adcq %r9, %r15, %r11 +# CHECK: {evex} adcq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x11,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} adcq %r9, 291(%r8,%rax,4) +# CHECK: adcq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x11,0x8c,0x80,0x23,0x01,0x00,0x00] + adcq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {evex} adcb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x12,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} adcb 291(%r8,%rax,4), %bl +# CHECK: adcb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x12,0x9c,0x80,0x23,0x01,0x00,0x00] + adcb 291(%r8,%rax,4), %bl, %cl +# CHECK: {evex} adcw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x13,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} adcw 291(%r8,%rax,4), %dx +# CHECK: adcw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x13,0x94,0x80,0x23,0x01,0x00,0x00] + adcw 291(%r8,%rax,4), %dx, %ax +# CHECK: {evex} adcl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x13,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} adcl 291(%r8,%rax,4), %ecx +# CHECK: adcl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x13,0x8c,0x80,0x23,0x01,0x00,0x00] + adcl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {evex} adcq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x13,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} adcq 291(%r8,%rax,4), %r9 +# CHECK: adcq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x13,0x8c,0x80,0x23,0x01,0x00,0x00] + adcq 291(%r8,%rax,4), %r9, %r15 diff --git a/llvm/test/MC/X86/apx/adc-intel.s b/llvm/test/MC/X86/apx/adc-intel.s new file mode 100644 index 0000000000000..740b2463bad79 --- /dev/null +++ b/llvm/test/MC/X86/apx/adc-intel.s @@ -0,0 +1,158 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} adc bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xd3,0x7b] + {evex} adc bl, 123 +# CHECK: adc cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xd3,0x7b] + adc cl, bl, 123 +# CHECK: {evex} adc dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xd2,0x7b] + {evex} adc dx, 123 +# CHECK: adc ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xd2,0x7b] + adc ax, dx, 123 +# CHECK: {evex} adc ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xd1,0x7b] + {evex} adc ecx, 123 +# CHECK: adc edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xd1,0x7b] + adc edx, ecx, 123 +# CHECK: {evex} adc r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xd1,0x7b] + {evex} adc r9, 123 +# CHECK: adc r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xd1,0x7b] + adc r15, r9, 123 +# CHECK: {evex} adc byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} adc byte ptr [r8 + 4*rax + 291], 123 +# CHECK: adc bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + adc bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} adc word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} adc word ptr [r8 + 4*rax + 291], 123 +# CHECK: adc dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + adc dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} adc dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} adc dword ptr [r8 + 4*rax + 291], 123 +# CHECK: adc ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + adc ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} adc qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} adc qword ptr [r8 + 4*rax + 291], 123 +# CHECK: adc r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0x94,0x80,0x23,0x01,0x00,0x00,0x7b] + adc r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} adc dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xd2,0xd2,0x04] + {evex} adc dx, 1234 +# CHECK: adc ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xd2,0xd2,0x04] + adc ax, dx, 1234 +# CHECK: {evex} adc word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} adc word ptr [r8 + 4*rax + 291], 1234 +# CHECK: adc dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + adc dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {evex} adc ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xd1,0x40,0xe2,0x01,0x00] + {evex} adc ecx, 123456 +# CHECK: adc edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xd1,0x40,0xe2,0x01,0x00] + adc edx, ecx, 123456 +# CHECK: {evex} adc r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xd1,0x40,0xe2,0x01,0x00] + {evex} adc r9, 123456 +# CHECK: adc r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xd1,0x40,0xe2,0x01,0x00] + adc r15, r9, 123456 +# CHECK: {evex} adc dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} adc dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: adc ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + adc ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} adc qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} adc qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: adc r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0x94,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + adc r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} adc cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x10,0xd9] + {evex} adc cl, bl +# CHECK: adc r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x10,0xd9] + adc r8b, cl, bl +# CHECK: {evex} adc byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x10,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} adc byte ptr [r8 + 4*rax + 291], bl +# CHECK: adc cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x10,0x9c,0x80,0x23,0x01,0x00,0x00] + adc cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {evex} adc ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x11,0xd0] + {evex} adc ax, dx +# CHECK: adc r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x11,0xd0] + adc r9w, ax, dx +# CHECK: {evex} adc word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x11,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} adc word ptr [r8 + 4*rax + 291], dx +# CHECK: adc ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x11,0x94,0x80,0x23,0x01,0x00,0x00] + adc ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {evex} adc edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x11,0xca] + {evex} adc edx, ecx +# CHECK: adc r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x11,0xca] + adc r10d, edx, ecx +# CHECK: {evex} adc dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x11,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} adc dword ptr [r8 + 4*rax + 291], ecx +# CHECK: adc edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x11,0x8c,0x80,0x23,0x01,0x00,0x00] + adc edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {evex} adc r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x11,0xcf] + {evex} adc r15, r9 +# CHECK: adc r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x11,0xcf] + adc r11, r15, r9 +# CHECK: {evex} adc qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x11,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} adc qword ptr [r8 + 4*rax + 291], r9 +# CHECK: adc r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x11,0x8c,0x80,0x23,0x01,0x00,0x00] + adc r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {evex} adc bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x12,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} adc bl, byte ptr [r8 + 4*rax + 291] +# CHECK: adc cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x12,0x9c,0x80,0x23,0x01,0x00,0x00] + adc cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} adc dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x13,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} adc dx, word ptr [r8 + 4*rax + 291] +# CHECK: adc ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x13,0x94,0x80,0x23,0x01,0x00,0x00] + adc ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} adc ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x13,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} adc ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: adc edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x13,0x8c,0x80,0x23,0x01,0x00,0x00] + adc edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} adc r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x13,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} adc r9, qword ptr [r8 + 4*rax + 291] +# CHECK: adc r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x13,0x8c,0x80,0x23,0x01,0x00,0x00] + adc r15, r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/MC/X86/apx/add-att.s b/llvm/test/MC/X86/apx/add-att.s new file mode 100644 index 0000000000000..97c0b036c4338 --- /dev/null +++ b/llvm/test/MC/X86/apx/add-att.s @@ -0,0 +1,317 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-104: error: +# ERROR-NOT: error: +# CHECK: {evex} addb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xc3,0x7b] + {evex} addb $123, %bl +# CHECK: {nf} addb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xc3,0x7b] + {nf} addb $123, %bl +# CHECK: addb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xc3,0x7b] + addb $123, %bl, %cl +# CHECK: {nf} addb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xc3,0x7b] + {nf} addb $123, %bl, %cl +# CHECK: {evex} addw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xc2,0x7b] + {evex} addw $123, %dx +# CHECK: {nf} addw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xc2,0x7b] + {nf} addw $123, %dx +# CHECK: addw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xc2,0x7b] + addw $123, %dx, %ax +# CHECK: {nf} addw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xc2,0x7b] + {nf} addw $123, %dx, %ax +# CHECK: {evex} addl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xc1,0x7b] + {evex} addl $123, %ecx +# CHECK: {nf} addl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xc1,0x7b] + {nf} addl $123, %ecx +# CHECK: addl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xc1,0x7b] + addl $123, %ecx, %edx +# CHECK: {nf} addl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xc1,0x7b] + {nf} addl $123, %ecx, %edx +# CHECK: {evex} addq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xc1,0x7b] + {evex} addq $123, %r9 +# CHECK: {nf} addq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xc1,0x7b] + {nf} addq $123, %r9 +# CHECK: addq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xc1,0x7b] + addq $123, %r9, %r15 +# CHECK: {nf} addq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xc1,0x7b] + {nf} addq $123, %r9, %r15 +# CHECK: {evex} addb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} addb $123, 291(%r8,%rax,4) +# CHECK: {nf} addb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} addb $123, 291(%r8,%rax,4) +# CHECK: addb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + addb $123, 291(%r8,%rax,4), %bl +# CHECK: {nf} addb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} addb $123, 291(%r8,%rax,4), %bl +# CHECK: {evex} addw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} addw $123, 291(%r8,%rax,4) +# CHECK: {nf} addw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} addw $123, 291(%r8,%rax,4) +# CHECK: addw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + addw $123, 291(%r8,%rax,4), %dx +# CHECK: {nf} addw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} addw $123, 291(%r8,%rax,4), %dx +# CHECK: {evex} addl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} addl $123, 291(%r8,%rax,4) +# CHECK: {nf} addl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} addl $123, 291(%r8,%rax,4) +# CHECK: addl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + addl $123, 291(%r8,%rax,4), %ecx +# CHECK: {nf} addl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} addl $123, 291(%r8,%rax,4), %ecx +# CHECK: {evex} addq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} addq $123, 291(%r8,%rax,4) +# CHECK: {nf} addq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} addq $123, 291(%r8,%rax,4) +# CHECK: addq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + addq $123, 291(%r8,%rax,4), %r9 +# CHECK: {nf} addq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} addq $123, 291(%r8,%rax,4), %r9 +# CHECK: {evex} addw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xc2,0xd2,0x04] + {evex} addw $1234, %dx +# CHECK: {nf} addw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xc2,0xd2,0x04] + {nf} addw $1234, %dx +# CHECK: addw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xc2,0xd2,0x04] + addw $1234, %dx, %ax +# CHECK: {nf} addw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xc2,0xd2,0x04] + {nf} addw $1234, %dx, %ax +# CHECK: {evex} addw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} addw $1234, 291(%r8,%rax,4) +# CHECK: {nf} addw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} addw $1234, 291(%r8,%rax,4) +# CHECK: addw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + addw $1234, 291(%r8,%rax,4), %dx +# CHECK: {nf} addw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} addw $1234, 291(%r8,%rax,4), %dx +# CHECK: {evex} addl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xc1,0x40,0xe2,0x01,0x00] + {evex} addl $123456, %ecx +# CHECK: {nf} addl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xc1,0x40,0xe2,0x01,0x00] + {nf} addl $123456, %ecx +# CHECK: addl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xc1,0x40,0xe2,0x01,0x00] + addl $123456, %ecx, %edx +# CHECK: {nf} addl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xc1,0x40,0xe2,0x01,0x00] + {nf} addl $123456, %ecx, %edx +# CHECK: {evex} addq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xc1,0x40,0xe2,0x01,0x00] + {evex} addq $123456, %r9 +# CHECK: {nf} addq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xc1,0x40,0xe2,0x01,0x00] + {nf} addq $123456, %r9 +# CHECK: addq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xc1,0x40,0xe2,0x01,0x00] + addq $123456, %r9, %r15 +# CHECK: {nf} addq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xc1,0x40,0xe2,0x01,0x00] + {nf} addq $123456, %r9, %r15 +# CHECK: {evex} addl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} addl $123456, 291(%r8,%rax,4) +# CHECK: {nf} addl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} addl $123456, 291(%r8,%rax,4) +# CHECK: addl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + addl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {nf} addl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} addl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {evex} addq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} addq $123456, 291(%r8,%rax,4) +# CHECK: {nf} addq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} addq $123456, 291(%r8,%rax,4) +# CHECK: addq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + addq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {nf} addq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} addq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {evex} addb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x00,0xd9] + {evex} addb %bl, %cl +# CHECK: {nf} addb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x00,0xd9] + {nf} addb %bl, %cl +# CHECK: addb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x00,0xd9] + addb %bl, %cl, %r8b +# CHECK: {nf} addb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x00,0xd9] + {nf} addb %bl, %cl, %r8b +# CHECK: {evex} addb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x00,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} addb %bl, 291(%r8,%rax,4) +# CHECK: {nf} addb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x00,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} addb %bl, 291(%r8,%rax,4) +# CHECK: addb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x00,0x9c,0x80,0x23,0x01,0x00,0x00] + addb %bl, 291(%r8,%rax,4), %cl +# CHECK: {nf} addb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x00,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} addb %bl, 291(%r8,%rax,4), %cl +# CHECK: {evex} addw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x01,0xd0] + {evex} addw %dx, %ax +# CHECK: {nf} addw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x01,0xd0] + {nf} addw %dx, %ax +# CHECK: addw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x01,0xd0] + addw %dx, %ax, %r9w +# CHECK: {nf} addw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x01,0xd0] + {nf} addw %dx, %ax, %r9w +# CHECK: {evex} addw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x01,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} addw %dx, 291(%r8,%rax,4) +# CHECK: {nf} addw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x01,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} addw %dx, 291(%r8,%rax,4) +# CHECK: addw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x01,0x94,0x80,0x23,0x01,0x00,0x00] + addw %dx, 291(%r8,%rax,4), %ax +# CHECK: {nf} addw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x01,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} addw %dx, 291(%r8,%rax,4), %ax +# CHECK: {evex} addl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x01,0xca] + {evex} addl %ecx, %edx +# CHECK: {nf} addl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x01,0xca] + {nf} addl %ecx, %edx +# CHECK: addl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x01,0xca] + addl %ecx, %edx, %r10d +# CHECK: {nf} addl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x01,0xca] + {nf} addl %ecx, %edx, %r10d +# CHECK: {evex} addl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} addl %ecx, 291(%r8,%rax,4) +# CHECK: {nf} addl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} addl %ecx, 291(%r8,%rax,4) +# CHECK: addl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + addl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {nf} addl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} addl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {evex} addq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x01,0xcf] + {evex} addq %r9, %r15 +# CHECK: {nf} addq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x01,0xcf] + {nf} addq %r9, %r15 +# CHECK: addq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x01,0xcf] + addq %r9, %r15, %r11 +# CHECK: {nf} addq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x01,0xcf] + {nf} addq %r9, %r15, %r11 +# CHECK: {evex} addq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} addq %r9, 291(%r8,%rax,4) +# CHECK: {nf} addq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} addq %r9, 291(%r8,%rax,4) +# CHECK: addq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + addq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {nf} addq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} addq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {evex} addb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x02,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} addb 291(%r8,%rax,4), %bl +# CHECK: {nf} addb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x02,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} addb 291(%r8,%rax,4), %bl +# CHECK: addb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x02,0x9c,0x80,0x23,0x01,0x00,0x00] + addb 291(%r8,%rax,4), %bl, %cl +# CHECK: {nf} addb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x02,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} addb 291(%r8,%rax,4), %bl, %cl +# CHECK: {evex} addw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x03,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} addw 291(%r8,%rax,4), %dx +# CHECK: {nf} addw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x03,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} addw 291(%r8,%rax,4), %dx +# CHECK: addw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x03,0x94,0x80,0x23,0x01,0x00,0x00] + addw 291(%r8,%rax,4), %dx, %ax +# CHECK: {nf} addw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x03,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} addw 291(%r8,%rax,4), %dx, %ax +# CHECK: {evex} addl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} addl 291(%r8,%rax,4), %ecx +# CHECK: {nf} addl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} addl 291(%r8,%rax,4), %ecx +# CHECK: addl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + addl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {nf} addl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} addl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {evex} addq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} addq 291(%r8,%rax,4), %r9 +# CHECK: {nf} addq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} addq 291(%r8,%rax,4), %r9 +# CHECK: addq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + addq 291(%r8,%rax,4), %r9, %r15 +# CHECK: {nf} addq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} addq 291(%r8,%rax,4), %r9, %r15 diff --git a/llvm/test/MC/X86/apx/add-intel.s b/llvm/test/MC/X86/apx/add-intel.s new file mode 100644 index 0000000000000..5f0a931e2ff48 --- /dev/null +++ b/llvm/test/MC/X86/apx/add-intel.s @@ -0,0 +1,314 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} add bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xc3,0x7b] + {evex} add bl, 123 +# CHECK: {nf} add bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xc3,0x7b] + {nf} add bl, 123 +# CHECK: add cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xc3,0x7b] + add cl, bl, 123 +# CHECK: {nf} add cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xc3,0x7b] + {nf} add cl, bl, 123 +# CHECK: {evex} add dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xc2,0x7b] + {evex} add dx, 123 +# CHECK: {nf} add dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xc2,0x7b] + {nf} add dx, 123 +# CHECK: add ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xc2,0x7b] + add ax, dx, 123 +# CHECK: {nf} add ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xc2,0x7b] + {nf} add ax, dx, 123 +# CHECK: {evex} add ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xc1,0x7b] + {evex} add ecx, 123 +# CHECK: {nf} add ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xc1,0x7b] + {nf} add ecx, 123 +# CHECK: add edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xc1,0x7b] + add edx, ecx, 123 +# CHECK: {nf} add edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xc1,0x7b] + {nf} add edx, ecx, 123 +# CHECK: {evex} add r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xc1,0x7b] + {evex} add r9, 123 +# CHECK: {nf} add r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xc1,0x7b] + {nf} add r9, 123 +# CHECK: add r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xc1,0x7b] + add r15, r9, 123 +# CHECK: {nf} add r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xc1,0x7b] + {nf} add r15, r9, 123 +# CHECK: {evex} add byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} add byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} add byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} add byte ptr [r8 + 4*rax + 291], 123 +# CHECK: add bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + add bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} add bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} add bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} add word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} add word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} add word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} add word ptr [r8 + 4*rax + 291], 123 +# CHECK: add dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + add dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} add dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} add dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} add dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} add dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} add dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} add dword ptr [r8 + 4*rax + 291], 123 +# CHECK: add ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + add ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} add ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} add ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} add qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} add qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} add qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} add qword ptr [r8 + 4*rax + 291], 123 +# CHECK: add r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + add r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} add r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0x84,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} add r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} add dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xc2,0xd2,0x04] + {evex} add dx, 1234 +# CHECK: {nf} add dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xc2,0xd2,0x04] + {nf} add dx, 1234 +# CHECK: add ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xc2,0xd2,0x04] + add ax, dx, 1234 +# CHECK: {nf} add ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xc2,0xd2,0x04] + {nf} add ax, dx, 1234 +# CHECK: {evex} add word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} add word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} add word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} add word ptr [r8 + 4*rax + 291], 1234 +# CHECK: add dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + add dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} add dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} add dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {evex} add ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xc1,0x40,0xe2,0x01,0x00] + {evex} add ecx, 123456 +# CHECK: {nf} add ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xc1,0x40,0xe2,0x01,0x00] + {nf} add ecx, 123456 +# CHECK: add edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xc1,0x40,0xe2,0x01,0x00] + add edx, ecx, 123456 +# CHECK: {nf} add edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xc1,0x40,0xe2,0x01,0x00] + {nf} add edx, ecx, 123456 +# CHECK: {evex} add r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xc1,0x40,0xe2,0x01,0x00] + {evex} add r9, 123456 +# CHECK: {nf} add r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xc1,0x40,0xe2,0x01,0x00] + {nf} add r9, 123456 +# CHECK: add r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xc1,0x40,0xe2,0x01,0x00] + add r15, r9, 123456 +# CHECK: {nf} add r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xc1,0x40,0xe2,0x01,0x00] + {nf} add r15, r9, 123456 +# CHECK: {evex} add dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} add dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} add dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} add dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: add ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + add ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} add ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} add ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} add qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} add qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} add qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} add qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: add r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + add r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} add r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0x84,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} add r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} add cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x00,0xd9] + {evex} add cl, bl +# CHECK: {nf} add cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x00,0xd9] + {nf} add cl, bl +# CHECK: add r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x00,0xd9] + add r8b, cl, bl +# CHECK: {nf} add r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x00,0xd9] + {nf} add r8b, cl, bl +# CHECK: {evex} add byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x00,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} add byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} add byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x00,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} add byte ptr [r8 + 4*rax + 291], bl +# CHECK: add cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x00,0x9c,0x80,0x23,0x01,0x00,0x00] + add cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} add cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x00,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} add cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {evex} add ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x01,0xd0] + {evex} add ax, dx +# CHECK: {nf} add ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x01,0xd0] + {nf} add ax, dx +# CHECK: add r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x01,0xd0] + add r9w, ax, dx +# CHECK: {nf} add r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x01,0xd0] + {nf} add r9w, ax, dx +# CHECK: {evex} add word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x01,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} add word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} add word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x01,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} add word ptr [r8 + 4*rax + 291], dx +# CHECK: add ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x01,0x94,0x80,0x23,0x01,0x00,0x00] + add ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} add ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x01,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} add ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {evex} add edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x01,0xca] + {evex} add edx, ecx +# CHECK: {nf} add edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x01,0xca] + {nf} add edx, ecx +# CHECK: add r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x01,0xca] + add r10d, edx, ecx +# CHECK: {nf} add r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x01,0xca] + {nf} add r10d, edx, ecx +# CHECK: {evex} add dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} add dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} add dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} add dword ptr [r8 + 4*rax + 291], ecx +# CHECK: add edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + add edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} add edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} add edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {evex} add r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x01,0xcf] + {evex} add r15, r9 +# CHECK: {nf} add r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x01,0xcf] + {nf} add r15, r9 +# CHECK: add r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x01,0xcf] + add r11, r15, r9 +# CHECK: {nf} add r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x01,0xcf] + {nf} add r11, r15, r9 +# CHECK: {evex} add qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} add qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} add qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} add qword ptr [r8 + 4*rax + 291], r9 +# CHECK: add r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + add r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} add r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x01,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} add r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {evex} add bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x02,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} add bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} add bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x02,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} add bl, byte ptr [r8 + 4*rax + 291] +# CHECK: add cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x02,0x9c,0x80,0x23,0x01,0x00,0x00] + add cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} add cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x02,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} add cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} add dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x03,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} add dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} add dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x03,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} add dx, word ptr [r8 + 4*rax + 291] +# CHECK: add ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x03,0x94,0x80,0x23,0x01,0x00,0x00] + add ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} add ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x03,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} add ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} add ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} add ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} add ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} add ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: add edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + add edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} add edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} add edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} add r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} add r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} add r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} add r9, qword ptr [r8 + 4*rax + 291] +# CHECK: add r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + add r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} add r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x03,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} add r15, r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/MC/X86/apx/and-att.s b/llvm/test/MC/X86/apx/and-att.s new file mode 100644 index 0000000000000..7b4953756e3bc --- /dev/null +++ b/llvm/test/MC/X86/apx/and-att.s @@ -0,0 +1,317 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-104: error: +# ERROR-NOT: error: +# CHECK: {evex} andb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xe3,0x7b] + {evex} andb $123, %bl +# CHECK: {nf} andb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xe3,0x7b] + {nf} andb $123, %bl +# CHECK: andb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xe3,0x7b] + andb $123, %bl, %cl +# CHECK: {nf} andb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xe3,0x7b] + {nf} andb $123, %bl, %cl +# CHECK: {evex} andw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xe2,0x7b] + {evex} andw $123, %dx +# CHECK: {nf} andw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xe2,0x7b] + {nf} andw $123, %dx +# CHECK: andw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xe2,0x7b] + andw $123, %dx, %ax +# CHECK: {nf} andw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xe2,0x7b] + {nf} andw $123, %dx, %ax +# CHECK: {evex} andl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xe1,0x7b] + {evex} andl $123, %ecx +# CHECK: {nf} andl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xe1,0x7b] + {nf} andl $123, %ecx +# CHECK: andl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xe1,0x7b] + andl $123, %ecx, %edx +# CHECK: {nf} andl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xe1,0x7b] + {nf} andl $123, %ecx, %edx +# CHECK: {evex} andq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xe1,0x7b] + {evex} andq $123, %r9 +# CHECK: {nf} andq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xe1,0x7b] + {nf} andq $123, %r9 +# CHECK: andq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xe1,0x7b] + andq $123, %r9, %r15 +# CHECK: {nf} andq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xe1,0x7b] + {nf} andq $123, %r9, %r15 +# CHECK: {evex} andb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} andb $123, 291(%r8,%rax,4) +# CHECK: {nf} andb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} andb $123, 291(%r8,%rax,4) +# CHECK: andb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + andb $123, 291(%r8,%rax,4), %bl +# CHECK: {nf} andb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} andb $123, 291(%r8,%rax,4), %bl +# CHECK: {evex} andw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} andw $123, 291(%r8,%rax,4) +# CHECK: {nf} andw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} andw $123, 291(%r8,%rax,4) +# CHECK: andw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + andw $123, 291(%r8,%rax,4), %dx +# CHECK: {nf} andw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} andw $123, 291(%r8,%rax,4), %dx +# CHECK: {evex} andl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} andl $123, 291(%r8,%rax,4) +# CHECK: {nf} andl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} andl $123, 291(%r8,%rax,4) +# CHECK: andl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + andl $123, 291(%r8,%rax,4), %ecx +# CHECK: {nf} andl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} andl $123, 291(%r8,%rax,4), %ecx +# CHECK: {evex} andq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} andq $123, 291(%r8,%rax,4) +# CHECK: {nf} andq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} andq $123, 291(%r8,%rax,4) +# CHECK: andq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + andq $123, 291(%r8,%rax,4), %r9 +# CHECK: {nf} andq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} andq $123, 291(%r8,%rax,4), %r9 +# CHECK: {evex} andw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xe2,0xd2,0x04] + {evex} andw $1234, %dx +# CHECK: {nf} andw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xe2,0xd2,0x04] + {nf} andw $1234, %dx +# CHECK: andw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xe2,0xd2,0x04] + andw $1234, %dx, %ax +# CHECK: {nf} andw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xe2,0xd2,0x04] + {nf} andw $1234, %dx, %ax +# CHECK: {evex} andw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} andw $1234, 291(%r8,%rax,4) +# CHECK: {nf} andw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} andw $1234, 291(%r8,%rax,4) +# CHECK: andw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + andw $1234, 291(%r8,%rax,4), %dx +# CHECK: {nf} andw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} andw $1234, 291(%r8,%rax,4), %dx +# CHECK: {evex} andl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xe1,0x40,0xe2,0x01,0x00] + {evex} andl $123456, %ecx +# CHECK: {nf} andl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xe1,0x40,0xe2,0x01,0x00] + {nf} andl $123456, %ecx +# CHECK: andl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xe1,0x40,0xe2,0x01,0x00] + andl $123456, %ecx, %edx +# CHECK: {nf} andl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xe1,0x40,0xe2,0x01,0x00] + {nf} andl $123456, %ecx, %edx +# CHECK: {evex} andq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xe1,0x40,0xe2,0x01,0x00] + {evex} andq $123456, %r9 +# CHECK: {nf} andq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xe1,0x40,0xe2,0x01,0x00] + {nf} andq $123456, %r9 +# CHECK: andq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xe1,0x40,0xe2,0x01,0x00] + andq $123456, %r9, %r15 +# CHECK: {nf} andq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xe1,0x40,0xe2,0x01,0x00] + {nf} andq $123456, %r9, %r15 +# CHECK: {evex} andl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} andl $123456, 291(%r8,%rax,4) +# CHECK: {nf} andl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} andl $123456, 291(%r8,%rax,4) +# CHECK: andl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + andl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {nf} andl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} andl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {evex} andq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} andq $123456, 291(%r8,%rax,4) +# CHECK: {nf} andq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} andq $123456, 291(%r8,%rax,4) +# CHECK: andq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + andq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {nf} andq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} andq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {evex} andb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x20,0xd9] + {evex} andb %bl, %cl +# CHECK: {nf} andb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x20,0xd9] + {nf} andb %bl, %cl +# CHECK: andb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x20,0xd9] + andb %bl, %cl, %r8b +# CHECK: {nf} andb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x20,0xd9] + {nf} andb %bl, %cl, %r8b +# CHECK: {evex} andb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x20,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} andb %bl, 291(%r8,%rax,4) +# CHECK: {nf} andb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x20,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} andb %bl, 291(%r8,%rax,4) +# CHECK: andb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x20,0x9c,0x80,0x23,0x01,0x00,0x00] + andb %bl, 291(%r8,%rax,4), %cl +# CHECK: {nf} andb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x20,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} andb %bl, 291(%r8,%rax,4), %cl +# CHECK: {evex} andw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x21,0xd0] + {evex} andw %dx, %ax +# CHECK: {nf} andw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x21,0xd0] + {nf} andw %dx, %ax +# CHECK: andw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x21,0xd0] + andw %dx, %ax, %r9w +# CHECK: {nf} andw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x21,0xd0] + {nf} andw %dx, %ax, %r9w +# CHECK: {evex} andw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x21,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} andw %dx, 291(%r8,%rax,4) +# CHECK: {nf} andw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x21,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} andw %dx, 291(%r8,%rax,4) +# CHECK: andw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x21,0x94,0x80,0x23,0x01,0x00,0x00] + andw %dx, 291(%r8,%rax,4), %ax +# CHECK: {nf} andw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x21,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} andw %dx, 291(%r8,%rax,4), %ax +# CHECK: {evex} andl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x21,0xca] + {evex} andl %ecx, %edx +# CHECK: {nf} andl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x21,0xca] + {nf} andl %ecx, %edx +# CHECK: andl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x21,0xca] + andl %ecx, %edx, %r10d +# CHECK: {nf} andl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x21,0xca] + {nf} andl %ecx, %edx, %r10d +# CHECK: {evex} andl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} andl %ecx, 291(%r8,%rax,4) +# CHECK: {nf} andl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} andl %ecx, 291(%r8,%rax,4) +# CHECK: andl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + andl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {nf} andl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} andl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {evex} andq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x21,0xcf] + {evex} andq %r9, %r15 +# CHECK: {nf} andq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x21,0xcf] + {nf} andq %r9, %r15 +# CHECK: andq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x21,0xcf] + andq %r9, %r15, %r11 +# CHECK: {nf} andq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x21,0xcf] + {nf} andq %r9, %r15, %r11 +# CHECK: {evex} andq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} andq %r9, 291(%r8,%rax,4) +# CHECK: {nf} andq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} andq %r9, 291(%r8,%rax,4) +# CHECK: andq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + andq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {nf} andq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} andq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {evex} andb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x22,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} andb 291(%r8,%rax,4), %bl +# CHECK: {nf} andb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x22,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} andb 291(%r8,%rax,4), %bl +# CHECK: andb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x22,0x9c,0x80,0x23,0x01,0x00,0x00] + andb 291(%r8,%rax,4), %bl, %cl +# CHECK: {nf} andb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x22,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} andb 291(%r8,%rax,4), %bl, %cl +# CHECK: {evex} andw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x23,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} andw 291(%r8,%rax,4), %dx +# CHECK: {nf} andw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x23,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} andw 291(%r8,%rax,4), %dx +# CHECK: andw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x23,0x94,0x80,0x23,0x01,0x00,0x00] + andw 291(%r8,%rax,4), %dx, %ax +# CHECK: {nf} andw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x23,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} andw 291(%r8,%rax,4), %dx, %ax +# CHECK: {evex} andl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} andl 291(%r8,%rax,4), %ecx +# CHECK: {nf} andl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} andl 291(%r8,%rax,4), %ecx +# CHECK: andl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + andl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {nf} andl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} andl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {evex} andq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} andq 291(%r8,%rax,4), %r9 +# CHECK: {nf} andq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} andq 291(%r8,%rax,4), %r9 +# CHECK: andq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + andq 291(%r8,%rax,4), %r9, %r15 +# CHECK: {nf} andq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} andq 291(%r8,%rax,4), %r9, %r15 diff --git a/llvm/test/MC/X86/apx/and-intel.s b/llvm/test/MC/X86/apx/and-intel.s new file mode 100644 index 0000000000000..fa4a0fbb3006a --- /dev/null +++ b/llvm/test/MC/X86/apx/and-intel.s @@ -0,0 +1,314 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} and bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xe3,0x7b] + {evex} and bl, 123 +# CHECK: {nf} and bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xe3,0x7b] + {nf} and bl, 123 +# CHECK: and cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xe3,0x7b] + and cl, bl, 123 +# CHECK: {nf} and cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xe3,0x7b] + {nf} and cl, bl, 123 +# CHECK: {evex} and dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xe2,0x7b] + {evex} and dx, 123 +# CHECK: {nf} and dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xe2,0x7b] + {nf} and dx, 123 +# CHECK: and ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xe2,0x7b] + and ax, dx, 123 +# CHECK: {nf} and ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xe2,0x7b] + {nf} and ax, dx, 123 +# CHECK: {evex} and ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xe1,0x7b] + {evex} and ecx, 123 +# CHECK: {nf} and ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xe1,0x7b] + {nf} and ecx, 123 +# CHECK: and edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xe1,0x7b] + and edx, ecx, 123 +# CHECK: {nf} and edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xe1,0x7b] + {nf} and edx, ecx, 123 +# CHECK: {evex} and r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xe1,0x7b] + {evex} and r9, 123 +# CHECK: {nf} and r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xe1,0x7b] + {nf} and r9, 123 +# CHECK: and r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xe1,0x7b] + and r15, r9, 123 +# CHECK: {nf} and r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xe1,0x7b] + {nf} and r15, r9, 123 +# CHECK: {evex} and byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} and byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} and byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} and byte ptr [r8 + 4*rax + 291], 123 +# CHECK: and bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + and bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} and bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} and bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} and word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} and word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} and word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} and word ptr [r8 + 4*rax + 291], 123 +# CHECK: and dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + and dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} and dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} and dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} and dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} and dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} and dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} and dword ptr [r8 + 4*rax + 291], 123 +# CHECK: and ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + and ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} and ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} and ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} and qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} and qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} and qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} and qword ptr [r8 + 4*rax + 291], 123 +# CHECK: and r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + and r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} and r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0xa4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} and r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} and dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xe2,0xd2,0x04] + {evex} and dx, 1234 +# CHECK: {nf} and dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xe2,0xd2,0x04] + {nf} and dx, 1234 +# CHECK: and ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xe2,0xd2,0x04] + and ax, dx, 1234 +# CHECK: {nf} and ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xe2,0xd2,0x04] + {nf} and ax, dx, 1234 +# CHECK: {evex} and word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} and word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} and word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} and word ptr [r8 + 4*rax + 291], 1234 +# CHECK: and dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + and dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} and dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} and dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {evex} and ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xe1,0x40,0xe2,0x01,0x00] + {evex} and ecx, 123456 +# CHECK: {nf} and ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xe1,0x40,0xe2,0x01,0x00] + {nf} and ecx, 123456 +# CHECK: and edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xe1,0x40,0xe2,0x01,0x00] + and edx, ecx, 123456 +# CHECK: {nf} and edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xe1,0x40,0xe2,0x01,0x00] + {nf} and edx, ecx, 123456 +# CHECK: {evex} and r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xe1,0x40,0xe2,0x01,0x00] + {evex} and r9, 123456 +# CHECK: {nf} and r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xe1,0x40,0xe2,0x01,0x00] + {nf} and r9, 123456 +# CHECK: and r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xe1,0x40,0xe2,0x01,0x00] + and r15, r9, 123456 +# CHECK: {nf} and r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xe1,0x40,0xe2,0x01,0x00] + {nf} and r15, r9, 123456 +# CHECK: {evex} and dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} and dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} and dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} and dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: and ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + and ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} and ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} and ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} and qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} and qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} and qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} and qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: and r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + and r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} and r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0xa4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} and r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} and cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x20,0xd9] + {evex} and cl, bl +# CHECK: {nf} and cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x20,0xd9] + {nf} and cl, bl +# CHECK: and r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x20,0xd9] + and r8b, cl, bl +# CHECK: {nf} and r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x20,0xd9] + {nf} and r8b, cl, bl +# CHECK: {evex} and byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x20,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} and byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} and byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x20,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} and byte ptr [r8 + 4*rax + 291], bl +# CHECK: and cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x20,0x9c,0x80,0x23,0x01,0x00,0x00] + and cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} and cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x20,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} and cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {evex} and ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x21,0xd0] + {evex} and ax, dx +# CHECK: {nf} and ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x21,0xd0] + {nf} and ax, dx +# CHECK: and r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x21,0xd0] + and r9w, ax, dx +# CHECK: {nf} and r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x21,0xd0] + {nf} and r9w, ax, dx +# CHECK: {evex} and word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x21,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} and word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} and word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x21,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} and word ptr [r8 + 4*rax + 291], dx +# CHECK: and ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x21,0x94,0x80,0x23,0x01,0x00,0x00] + and ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} and ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x21,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} and ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {evex} and edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x21,0xca] + {evex} and edx, ecx +# CHECK: {nf} and edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x21,0xca] + {nf} and edx, ecx +# CHECK: and r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x21,0xca] + and r10d, edx, ecx +# CHECK: {nf} and r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x21,0xca] + {nf} and r10d, edx, ecx +# CHECK: {evex} and dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} and dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} and dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} and dword ptr [r8 + 4*rax + 291], ecx +# CHECK: and edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + and edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} and edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} and edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {evex} and r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x21,0xcf] + {evex} and r15, r9 +# CHECK: {nf} and r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x21,0xcf] + {nf} and r15, r9 +# CHECK: and r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x21,0xcf] + and r11, r15, r9 +# CHECK: {nf} and r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x21,0xcf] + {nf} and r11, r15, r9 +# CHECK: {evex} and qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} and qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} and qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} and qword ptr [r8 + 4*rax + 291], r9 +# CHECK: and r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + and r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} and r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x21,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} and r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {evex} and bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x22,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} and bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} and bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x22,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} and bl, byte ptr [r8 + 4*rax + 291] +# CHECK: and cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x22,0x9c,0x80,0x23,0x01,0x00,0x00] + and cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} and cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x22,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} and cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} and dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x23,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} and dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} and dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x23,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} and dx, word ptr [r8 + 4*rax + 291] +# CHECK: and ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x23,0x94,0x80,0x23,0x01,0x00,0x00] + and ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} and ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x23,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} and ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} and ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} and ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} and ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} and ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: and edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + and edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} and edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} and edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} and r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} and r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} and r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} and r9, qword ptr [r8 + 4*rax + 291] +# CHECK: and r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + and r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} and r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x23,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} and r15, r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/MC/X86/apx/evex-format-att.s b/llvm/test/MC/X86/apx/evex-format-att.s index 33ad8e3abe75f..577e196976948 100644 --- a/llvm/test/MC/X86/apx/evex-format-att.s +++ b/llvm/test/MC/X86/apx/evex-format-att.s @@ -7,53 +7,90 @@ # CHECK: encoding: [0x62,0xfb,0x79,0x48,0x19,0x04,0x08,0x01] vextractf32x4 $1, %zmm0, (%r16,%r17) +# CHECK: addq %r16, 123(%r17), %r18 +# CHECK: encoding: [0x62,0xec,0xec,0x10,0x01,0x41,0x7b] + addq %r16, 123(%r17), %r18 + ## MRMSrcMem # CHECK: vbroadcasti32x4 (%r16,%r17), %zmm0 # CHECK: encoding: [0x62,0xfa,0x79,0x48,0x5a,0x04,0x08] vbroadcasti32x4 (%r16,%r17), %zmm0 +# CHECK: subq 123(%r16), %r17, %r18 +# CHECK: encoding: [0x62,0xec,0xec,0x10,0x2b,0x48,0x7b] + subq 123(%r16), %r17, %r18 + ## MRM0m # CHECK: vprorq $0, (%r16,%r17), %zmm0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x72,0x04,0x08,0x00] vprorq $0, (%r16,%r17), %zmm0 +# CHECK: addq $127, 123(%r16), %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x40,0x7b,0x7f] + addq $127, 123(%r16), %r17 + ## MRM1m # CHECK: vprolq $0, (%r16,%r17), %zmm0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x72,0x0c,0x08,0x00] vprolq $0, (%r16,%r17), %zmm0 + +# CHECK: orq $127, 123(%r16), %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x48,0x7b,0x7f] + orq $127, 123(%r16), %r17 + ## MRM2m # CHECK: vpsrlq $0, (%r16,%r17), %zmm0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x73,0x14,0x08,0x00] vpsrlq $0, (%r16,%r17), %zmm0 +# CHECK: adcq $127, 123(%r16), %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x50,0x7b,0x7f] + adcq $127, 123(%r16), %r17 + ## MRM3m # CHECK: vpsrldq $0, (%r16,%r17), %zmm0 # CHECK: encoding: [0x62,0xf9,0x79,0x48,0x73,0x1c,0x08,0x00] vpsrldq $0, (%r16,%r17), %zmm0 +# CHECK: sbbq $127, 123(%r16), %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x58,0x7b,0x7f] + sbbq $127, 123(%r16), %r17 + ## MRM4m # CHECK: vpsraq $0, (%r16,%r17), %zmm0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x72,0x24,0x08,0x00] vpsraq $0, (%r16,%r17), %zmm0 +# CHECK: andq $127, 123(%r16), %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x60,0x7b,0x7f] + andq $127, 123(%r16), %r17 + ## MRM5m # CHECK: vscatterpf0dps (%r16,%zmm0) {%k1} # CHECK: encoding: [0x62,0xfa,0x7d,0x49,0xc6,0x2c,0x00] vscatterpf0dps (%r16,%zmm0) {%k1} +# CHECK: subq $127, 123(%r16), %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x68,0x7b,0x7f] + subq $127, 123(%r16), %r17 + ## MRM6m # CHECK: vpsllq $0, (%r16,%r17), %zmm0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x73,0x34,0x08,0x00] vpsllq $0, (%r16,%r17), %zmm0 +# CHECK: xorq $127, 123(%r16), %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x70,0x7b,0x7f] + xorq $127, 123(%r16), %r17 + ## MRM7m # CHECK: vpslldq $0, (%r16,%r17), %zmm0 @@ -78,8 +115,70 @@ # CHECK: encoding: [0x62,0xeb,0x7d,0x08,0x17,0xc0,0x01] vextractps $1, %xmm16, %r16d +# CHECK: {nf} addq %r16, %r17 +# CHECK: encoding: [0x62,0xec,0xfc,0x0c,0x01,0xc1] + {nf} addq %r16, %r17 + +## MRMSrcReg + +# CHECK: mulxq %r16, %r17, %r18 +# CHECK: encoding: [0x62,0xea,0xf7,0x00,0xf6,0xd0] + mulxq %r16, %r17, %r18 + ## MRMSrcReg4VOp3 # CHECK: bzhiq %r19, %r23, %r27 # CHECK: encoding: [0x62,0x6a,0xe4,0x00,0xf5,0xdf] bzhiq %r19, %r23, %r27 + +## MRM0r + +# CHECK: addq $127, %r16, %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xc0,0x7f] + addq $127, %r16, %r17 + +## MRM1r + +# CHECK: orq $127, %r16, %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xc8,0x7f] + orq $127, %r16, %r17 + +## MRM2r + +# CHECK: adcq $127, %r16, %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xd0,0x7f] + adcq $127, %r16, %r17 + +## MRM3r + +# CHECK: sbbq $127, %r16, %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xd8,0x7f] + sbbq $127, %r16, %r17 + +## MRM4r + +# CHECK: andq $127, %r16, %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xe0,0x7f] + andq $127, %r16, %r17 + +## MRM5r + +# CHECK: subq $127, %r16, %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xe8,0x7f] + subq $127, %r16, %r17 + +## MRM6r + +# CHECK: xorq $127, %r16, %r17 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xf0,0x7f] + xorq $127, %r16, %r17 + +## NoCD8 + +# CHECK: {nf} negq 123(%r16) +# CHECK: encoding: [0x62,0xfc,0xfc,0x0c,0xf7,0x58,0x7b] + {nf} negq 123(%r16) + +# CHECK: {evex} notq 123(%r16) +# CHECK: encoding: [0x62,0xfc,0xfc,0x08,0xf7,0x50,0x7b] + {evex} notq 123(%r16) diff --git a/llvm/test/MC/X86/apx/evex-format-intel.s b/llvm/test/MC/X86/apx/evex-format-intel.s index 1b8f761cdfd3a..b35664343bf60 100644 --- a/llvm/test/MC/X86/apx/evex-format-intel.s +++ b/llvm/test/MC/X86/apx/evex-format-intel.s @@ -7,53 +7,90 @@ # CHECK: encoding: [0x62,0xfb,0x79,0x48,0x19,0x04,0x08,0x01] vextractf32x4 xmmword ptr [r16 + r17], zmm0, 1 +# CHECK: add r18, qword ptr [r17 + 123], r16 +# CHECK: encoding: [0x62,0xec,0xec,0x10,0x01,0x41,0x7b] + add r18, qword ptr [r17 + 123], r16 + ## MRMSrcMem # CHECK: vbroadcasti32x4 zmm0, xmmword ptr [r16 + r17] # CHECK: encoding: [0x62,0xfa,0x79,0x48,0x5a,0x04,0x08] vbroadcasti32x4 zmm0, xmmword ptr [r16 + r17] +# CHECK: sub r18, r17, qword ptr [r16 + 123] +# CHECK: encoding: [0x62,0xec,0xec,0x10,0x2b,0x48,0x7b] + sub r18, r17, qword ptr [r16 + 123] + ## MRM0m # CHECK: vprorq zmm0, zmmword ptr [r16 + r17], 0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x72,0x04,0x08,0x00] vprorq zmm0, zmmword ptr [r16 + r17], 0 +# CHECK: add r17, qword ptr [r16 + 123], 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x40,0x7b,0x7f] + add r17, qword ptr [r16 + 123], 127 + ## MRM1m # CHECK: vprolq zmm0, zmmword ptr [r16 + r17], 0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x72,0x0c,0x08,0x00] vprolq zmm0, zmmword ptr [r16 + r17], 0 +# CHECK: or r17, qword ptr [r16 + 123], 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x48,0x7b,0x7f] + or r17, qword ptr [r16 + 123], 127 + ## MRM2m # CHECK: vpsrlq zmm0, zmmword ptr [r16 + r17], 0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x73,0x14,0x08,0x00] vpsrlq zmm0, zmmword ptr [r16 + r17], 0 +# CHECK: adc r17, qword ptr [r16 + 123], 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x50,0x7b,0x7f] + adc r17, qword ptr [r16 + 123], 127 + ## MRM3m # CHECK: vpsrldq zmm0, zmmword ptr [r16 + r17], 0 # CHECK: encoding: [0x62,0xf9,0x79,0x48,0x73,0x1c,0x08,0x00] vpsrldq zmm0, zmmword ptr [r16 + r17], 0 + +# CHECK: sbb r17, qword ptr [r16 + 123], 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x58,0x7b,0x7f] + sbb r17, qword ptr [r16 + 123], 127 + ## MRM4m # CHECK: vpsraq zmm0, zmmword ptr [r16 + r17], 0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x72,0x24,0x08,0x00] vpsraq zmm0, zmmword ptr [r16 + r17], 0 +# CHECK: and r17, qword ptr [r16 + 123], 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x60,0x7b,0x7f] + and r17, qword ptr [r16 + 123], 127 + ## MRM5m ## AsmParser is buggy for this KNC instruction # C;HECK: vscatterpf0dps {k1}, zmmword ptr [r16 + zmm0] # C;HECK: encoding: [0x62,0xfa,0x7d,0x49,0xc6,0x2c,0x00] # vscatterpf0dps {k1}, zmmword ptr [r16 + zmm0] +# CHECK: sub r17, qword ptr [r16 + 123], 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x68,0x7b,0x7f] + sub r17, qword ptr [r16 + 123], 127 + ## MRM6m # CHECK: vpsllq zmm0, zmmword ptr [r16 + r17], 0 # CHECK: encoding: [0x62,0xf9,0xf9,0x48,0x73,0x34,0x08,0x00] vpsllq zmm0, zmmword ptr [r16 + r17], 0 +# CHECK: xor r17, qword ptr [r16 + 123], 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0x70,0x7b,0x7f] + xor r17, qword ptr [r16 + 123], 127 + ## MRM7m # CHECK: vpslldq zmm0, zmmword ptr [r16 + r17], 0 @@ -78,8 +115,70 @@ # CHECK: encoding: [0x62,0xeb,0x7d,0x08,0x17,0xc0,0x01] vextractps r16d, xmm16, 1 +# CHECK: {nf} add r17, r16 +# CHECK: encoding: [0x62,0xec,0xfc,0x0c,0x01,0xc1] + {nf} add r17, r16 + +## MRMSrcReg + +# CHECK: mulx r18, r17, r16 +# CHECK: encoding: [0x62,0xea,0xf7,0x00,0xf6,0xd0] + mulx r18, r17, r16 + ## MRMSrcReg4VOp3 # CHECK: bzhi r27, r23, r19 # CHECK: encoding: [0x62,0x6a,0xe4,0x00,0xf5,0xdf] bzhi r27, r23, r19 + +## MRM0r + +# CHECK: add r17, r16, 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xc0,0x7f] + add r17, r16, 127 + +## MRM1r + +# CHECK: or r17, r16, 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xc8,0x7f] + or r17, r16, 127 + +## MRM2r + +# CHECK: adc r17, r16, 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xd0,0x7f] + adc r17, r16, 127 + +## MRM3r + +# CHECK: sbb r17, r16, 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xd8,0x7f] + sbb r17, r16, 127 + +## MRM4r + +# CHECK: and r17, r16, 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xe0,0x7f] + and r17, r16, 127 + +## MRM5r + +# CHECK: sub r17, r16, 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xe8,0x7f] + sub r17, r16, 127 + +## MRM6r + +# CHECK: xor r17, r16, 127 +# CHECK: encoding: [0x62,0xfc,0xf4,0x10,0x83,0xf0,0x7f] + xor r17, r16, 127 + +## NoCD8 + +# CHECK: {nf} neg qword ptr [r16 + 123] +# CHECK: encoding: [0x62,0xfc,0xfc,0x0c,0xf7,0x58,0x7b] + {nf} neg qword ptr [r16 + 123] + +# CHECK: {evex} not qword ptr [r16 + 123] +# CHECK: encoding: [0x62,0xfc,0xfc,0x08,0xf7,0x50,0x7b] + {evex} not qword ptr [r16 + 123] diff --git a/llvm/test/MC/X86/apx/neg-att.s b/llvm/test/MC/X86/apx/neg-att.s new file mode 100644 index 0000000000000..c40241b7960d0 --- /dev/null +++ b/llvm/test/MC/X86/apx/neg-att.s @@ -0,0 +1,101 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-32: error: +# ERROR-NOT: error: +# CHECK: {evex} negb %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf6,0xdb] + {evex} negb %bl +# CHECK: {nf} negb %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0xf6,0xdb] + {nf} negb %bl +# CHECK: negb %bl, %bl +# CHECK: encoding: [0x62,0xf4,0x64,0x18,0xf6,0xdb] + negb %bl, %bl +# CHECK: {nf} negb %bl, %bl +# CHECK: encoding: [0x62,0xf4,0x64,0x1c,0xf6,0xdb] + {nf} negb %bl, %bl +# CHECK: {evex} negw %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0xf7,0xda] + {evex} negw %dx +# CHECK: {nf} negw %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0xf7,0xda] + {nf} negw %dx +# CHECK: negw %dx, %dx +# CHECK: encoding: [0x62,0xf4,0x6d,0x18,0xf7,0xda] + negw %dx, %dx +# CHECK: {nf} negw %dx, %dx +# CHECK: encoding: [0x62,0xf4,0x6d,0x1c,0xf7,0xda] + {nf} negw %dx, %dx +# CHECK: {evex} negl %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf7,0xd9] + {evex} negl %ecx +# CHECK: {nf} negl %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0xf7,0xd9] + {nf} negl %ecx +# CHECK: negl %ecx, %ecx +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0xf7,0xd9] + negl %ecx, %ecx +# CHECK: {nf} negl %ecx, %ecx +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0xf7,0xd9] + {nf} negl %ecx, %ecx +# CHECK: {evex} negq %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0xf7,0xd9] + {evex} negq %r9 +# CHECK: {nf} negq %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0xf7,0xd9] + {nf} negq %r9 +# CHECK: negq %r9, %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0xf7,0xd9] + negq %r9, %r9 +# CHECK: {nf} negq %r9, %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0xf7,0xd9] + {nf} negq %r9, %r9 +# CHECK: {evex} negb 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} negb 291(%r8,%rax,4) +# CHECK: {nf} negb 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} negb 291(%r8,%rax,4) +# CHECK: negb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00] + negb 291(%r8,%rax,4), %bl +# CHECK: {nf} negb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} negb 291(%r8,%rax,4), %bl +# CHECK: {evex} negw 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} negw 291(%r8,%rax,4) +# CHECK: {nf} negw 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} negw 291(%r8,%rax,4) +# CHECK: negw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + negw 291(%r8,%rax,4), %dx +# CHECK: {nf} negw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} negw 291(%r8,%rax,4), %dx +# CHECK: {evex} negl 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} negl 291(%r8,%rax,4) +# CHECK: {nf} negl 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} negl 291(%r8,%rax,4) +# CHECK: negl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + negl 291(%r8,%rax,4), %ecx +# CHECK: {nf} negl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} negl 291(%r8,%rax,4), %ecx +# CHECK: {evex} negq 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} negq 291(%r8,%rax,4) +# CHECK: {nf} negq 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} negq 291(%r8,%rax,4) +# CHECK: negq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + negq 291(%r8,%rax,4), %r9 +# CHECK: {nf} negq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} negq 291(%r8,%rax,4), %r9 diff --git a/llvm/test/MC/X86/apx/neg-intel.s b/llvm/test/MC/X86/apx/neg-intel.s new file mode 100644 index 0000000000000..528c1ba74c155 --- /dev/null +++ b/llvm/test/MC/X86/apx/neg-intel.s @@ -0,0 +1,98 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} neg bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf6,0xdb] + {evex} neg bl +# CHECK: {nf} neg bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0xf6,0xdb] + {nf} neg bl +# CHECK: neg bl, bl +# CHECK: encoding: [0x62,0xf4,0x64,0x18,0xf6,0xdb] + neg bl, bl +# CHECK: {nf} neg bl, bl +# CHECK: encoding: [0x62,0xf4,0x64,0x1c,0xf6,0xdb] + {nf} neg bl, bl +# CHECK: {evex} neg dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0xf7,0xda] + {evex} neg dx +# CHECK: {nf} neg dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0xf7,0xda] + {nf} neg dx +# CHECK: neg dx, dx +# CHECK: encoding: [0x62,0xf4,0x6d,0x18,0xf7,0xda] + neg dx, dx +# CHECK: {nf} neg dx, dx +# CHECK: encoding: [0x62,0xf4,0x6d,0x1c,0xf7,0xda] + {nf} neg dx, dx +# CHECK: {evex} neg ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf7,0xd9] + {evex} neg ecx +# CHECK: {nf} neg ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0xf7,0xd9] + {nf} neg ecx +# CHECK: neg ecx, ecx +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0xf7,0xd9] + neg ecx, ecx +# CHECK: {nf} neg ecx, ecx +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0xf7,0xd9] + {nf} neg ecx, ecx +# CHECK: {evex} neg r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0xf7,0xd9] + {evex} neg r9 +# CHECK: {nf} neg r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0xf7,0xd9] + {nf} neg r9 +# CHECK: neg r9, r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0xf7,0xd9] + neg r9, r9 +# CHECK: {nf} neg r9, r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0xf7,0xd9] + {nf} neg r9, r9 +# CHECK: {evex} neg byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} neg byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} neg byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} neg byte ptr [r8 + 4*rax + 291] +# CHECK: neg bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00] + neg bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} neg bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0xf6,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} neg bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} neg word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} neg word ptr [r8 + 4*rax + 291] +# CHECK: {nf} neg word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} neg word ptr [r8 + 4*rax + 291] +# CHECK: neg dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + neg dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} neg dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} neg dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} neg dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} neg dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} neg dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} neg dword ptr [r8 + 4*rax + 291] +# CHECK: neg ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + neg ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} neg ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} neg ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} neg qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} neg qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} neg qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} neg qword ptr [r8 + 4*rax + 291] +# CHECK: neg r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + neg r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} neg r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0xf7,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} neg r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/MC/X86/apx/not-att.s b/llvm/test/MC/X86/apx/not-att.s new file mode 100644 index 0000000000000..d5b7a406544df --- /dev/null +++ b/llvm/test/MC/X86/apx/not-att.s @@ -0,0 +1,53 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-16: error: +# ERROR-NOT: error: +# CHECK: {evex} notb %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf6,0xd3] + {evex} notb %bl +# CHECK: notb %bl, %bl +# CHECK: encoding: [0x62,0xf4,0x64,0x18,0xf6,0xd3] + notb %bl, %bl +# CHECK: {evex} notw %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0xf7,0xd2] + {evex} notw %dx +# CHECK: notw %dx, %dx +# CHECK: encoding: [0x62,0xf4,0x6d,0x18,0xf7,0xd2] + notw %dx, %dx +# CHECK: {evex} notl %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf7,0xd1] + {evex} notl %ecx +# CHECK: notl %ecx, %ecx +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0xf7,0xd1] + notl %ecx, %ecx +# CHECK: {evex} notq %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0xf7,0xd1] + {evex} notq %r9 +# CHECK: notq %r9, %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0xf7,0xd1] + notq %r9, %r9 +# CHECK: {evex} notb 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf6,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} notb 291(%r8,%rax,4) +# CHECK: notb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0xf6,0x94,0x80,0x23,0x01,0x00,0x00] + notb 291(%r8,%rax,4), %bl +# CHECK: {evex} notw 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} notw 291(%r8,%rax,4) +# CHECK: notw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + notw 291(%r8,%rax,4), %dx +# CHECK: {evex} notl 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} notl 291(%r8,%rax,4) +# CHECK: notl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + notl 291(%r8,%rax,4), %ecx +# CHECK: {evex} notq 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} notq 291(%r8,%rax,4) +# CHECK: notq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + notq 291(%r8,%rax,4), %r9 diff --git a/llvm/test/MC/X86/apx/not-intel.s b/llvm/test/MC/X86/apx/not-intel.s new file mode 100644 index 0000000000000..5e106559a0cb8 --- /dev/null +++ b/llvm/test/MC/X86/apx/not-intel.s @@ -0,0 +1,50 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} not bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf6,0xd3] + {evex} not bl +# CHECK: not bl, bl +# CHECK: encoding: [0x62,0xf4,0x64,0x18,0xf6,0xd3] + not bl, bl +# CHECK: {evex} not dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0xf7,0xd2] + {evex} not dx +# CHECK: not dx, dx +# CHECK: encoding: [0x62,0xf4,0x6d,0x18,0xf7,0xd2] + not dx, dx +# CHECK: {evex} not ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0xf7,0xd1] + {evex} not ecx +# CHECK: not ecx, ecx +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0xf7,0xd1] + not ecx, ecx +# CHECK: {evex} not r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0xf7,0xd1] + {evex} not r9 +# CHECK: not r9, r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0xf7,0xd1] + not r9, r9 +# CHECK: {evex} not byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf6,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} not byte ptr [r8 + 4*rax + 291] +# CHECK: not bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0xf6,0x94,0x80,0x23,0x01,0x00,0x00] + not bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} not word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} not word ptr [r8 + 4*rax + 291] +# CHECK: not dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + not dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} not dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} not dword ptr [r8 + 4*rax + 291] +# CHECK: not ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + not ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} not qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} not qword ptr [r8 + 4*rax + 291] +# CHECK: not r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0xf7,0x94,0x80,0x23,0x01,0x00,0x00] + not r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/MC/X86/apx/or-att.s b/llvm/test/MC/X86/apx/or-att.s new file mode 100644 index 0000000000000..205d3c397c311 --- /dev/null +++ b/llvm/test/MC/X86/apx/or-att.s @@ -0,0 +1,317 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-104: error: +# ERROR-NOT: error: +# CHECK: {evex} orb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xcb,0x7b] + {evex} orb $123, %bl +# CHECK: {nf} orb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xcb,0x7b] + {nf} orb $123, %bl +# CHECK: orb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xcb,0x7b] + orb $123, %bl, %cl +# CHECK: {nf} orb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xcb,0x7b] + {nf} orb $123, %bl, %cl +# CHECK: {evex} orw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xca,0x7b] + {evex} orw $123, %dx +# CHECK: {nf} orw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xca,0x7b] + {nf} orw $123, %dx +# CHECK: orw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xca,0x7b] + orw $123, %dx, %ax +# CHECK: {nf} orw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xca,0x7b] + {nf} orw $123, %dx, %ax +# CHECK: {evex} orl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xc9,0x7b] + {evex} orl $123, %ecx +# CHECK: {nf} orl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xc9,0x7b] + {nf} orl $123, %ecx +# CHECK: orl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xc9,0x7b] + orl $123, %ecx, %edx +# CHECK: {nf} orl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xc9,0x7b] + {nf} orl $123, %ecx, %edx +# CHECK: {evex} orq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xc9,0x7b] + {evex} orq $123, %r9 +# CHECK: {nf} orq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xc9,0x7b] + {nf} orq $123, %r9 +# CHECK: orq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xc9,0x7b] + orq $123, %r9, %r15 +# CHECK: {nf} orq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xc9,0x7b] + {nf} orq $123, %r9, %r15 +# CHECK: {evex} orb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} orb $123, 291(%r8,%rax,4) +# CHECK: {nf} orb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} orb $123, 291(%r8,%rax,4) +# CHECK: orb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + orb $123, 291(%r8,%rax,4), %bl +# CHECK: {nf} orb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} orb $123, 291(%r8,%rax,4), %bl +# CHECK: {evex} orw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} orw $123, 291(%r8,%rax,4) +# CHECK: {nf} orw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} orw $123, 291(%r8,%rax,4) +# CHECK: orw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + orw $123, 291(%r8,%rax,4), %dx +# CHECK: {nf} orw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} orw $123, 291(%r8,%rax,4), %dx +# CHECK: {evex} orl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} orl $123, 291(%r8,%rax,4) +# CHECK: {nf} orl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} orl $123, 291(%r8,%rax,4) +# CHECK: orl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + orl $123, 291(%r8,%rax,4), %ecx +# CHECK: {nf} orl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} orl $123, 291(%r8,%rax,4), %ecx +# CHECK: {evex} orq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} orq $123, 291(%r8,%rax,4) +# CHECK: {nf} orq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} orq $123, 291(%r8,%rax,4) +# CHECK: orq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + orq $123, 291(%r8,%rax,4), %r9 +# CHECK: {nf} orq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} orq $123, 291(%r8,%rax,4), %r9 +# CHECK: {evex} orw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xca,0xd2,0x04] + {evex} orw $1234, %dx +# CHECK: {nf} orw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xca,0xd2,0x04] + {nf} orw $1234, %dx +# CHECK: orw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xca,0xd2,0x04] + orw $1234, %dx, %ax +# CHECK: {nf} orw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xca,0xd2,0x04] + {nf} orw $1234, %dx, %ax +# CHECK: {evex} orw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} orw $1234, 291(%r8,%rax,4) +# CHECK: {nf} orw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} orw $1234, 291(%r8,%rax,4) +# CHECK: orw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + orw $1234, 291(%r8,%rax,4), %dx +# CHECK: {nf} orw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} orw $1234, 291(%r8,%rax,4), %dx +# CHECK: {evex} orl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xc9,0x40,0xe2,0x01,0x00] + {evex} orl $123456, %ecx +# CHECK: {nf} orl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xc9,0x40,0xe2,0x01,0x00] + {nf} orl $123456, %ecx +# CHECK: orl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xc9,0x40,0xe2,0x01,0x00] + orl $123456, %ecx, %edx +# CHECK: {nf} orl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xc9,0x40,0xe2,0x01,0x00] + {nf} orl $123456, %ecx, %edx +# CHECK: {evex} orq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xc9,0x40,0xe2,0x01,0x00] + {evex} orq $123456, %r9 +# CHECK: {nf} orq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xc9,0x40,0xe2,0x01,0x00] + {nf} orq $123456, %r9 +# CHECK: orq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xc9,0x40,0xe2,0x01,0x00] + orq $123456, %r9, %r15 +# CHECK: {nf} orq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xc9,0x40,0xe2,0x01,0x00] + {nf} orq $123456, %r9, %r15 +# CHECK: {evex} orl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} orl $123456, 291(%r8,%rax,4) +# CHECK: {nf} orl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} orl $123456, 291(%r8,%rax,4) +# CHECK: orl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + orl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {nf} orl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} orl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {evex} orq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} orq $123456, 291(%r8,%rax,4) +# CHECK: {nf} orq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} orq $123456, 291(%r8,%rax,4) +# CHECK: orq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + orq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {nf} orq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} orq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {evex} orb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x08,0xd9] + {evex} orb %bl, %cl +# CHECK: {nf} orb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x08,0xd9] + {nf} orb %bl, %cl +# CHECK: orb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x08,0xd9] + orb %bl, %cl, %r8b +# CHECK: {nf} orb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x08,0xd9] + {nf} orb %bl, %cl, %r8b +# CHECK: {evex} orb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x08,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} orb %bl, 291(%r8,%rax,4) +# CHECK: {nf} orb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x08,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} orb %bl, 291(%r8,%rax,4) +# CHECK: orb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x08,0x9c,0x80,0x23,0x01,0x00,0x00] + orb %bl, 291(%r8,%rax,4), %cl +# CHECK: {nf} orb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x08,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} orb %bl, 291(%r8,%rax,4), %cl +# CHECK: {evex} orw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x09,0xd0] + {evex} orw %dx, %ax +# CHECK: {nf} orw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x09,0xd0] + {nf} orw %dx, %ax +# CHECK: orw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x09,0xd0] + orw %dx, %ax, %r9w +# CHECK: {nf} orw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x09,0xd0] + {nf} orw %dx, %ax, %r9w +# CHECK: {evex} orw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x09,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} orw %dx, 291(%r8,%rax,4) +# CHECK: {nf} orw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x09,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} orw %dx, 291(%r8,%rax,4) +# CHECK: orw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x09,0x94,0x80,0x23,0x01,0x00,0x00] + orw %dx, 291(%r8,%rax,4), %ax +# CHECK: {nf} orw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x09,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} orw %dx, 291(%r8,%rax,4), %ax +# CHECK: {evex} orl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x09,0xca] + {evex} orl %ecx, %edx +# CHECK: {nf} orl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x09,0xca] + {nf} orl %ecx, %edx +# CHECK: orl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x09,0xca] + orl %ecx, %edx, %r10d +# CHECK: {nf} orl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x09,0xca] + {nf} orl %ecx, %edx, %r10d +# CHECK: {evex} orl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} orl %ecx, 291(%r8,%rax,4) +# CHECK: {nf} orl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} orl %ecx, 291(%r8,%rax,4) +# CHECK: orl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + orl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {nf} orl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} orl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {evex} orq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x09,0xcf] + {evex} orq %r9, %r15 +# CHECK: {nf} orq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x09,0xcf] + {nf} orq %r9, %r15 +# CHECK: orq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x09,0xcf] + orq %r9, %r15, %r11 +# CHECK: {nf} orq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x09,0xcf] + {nf} orq %r9, %r15, %r11 +# CHECK: {evex} orq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} orq %r9, 291(%r8,%rax,4) +# CHECK: {nf} orq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} orq %r9, 291(%r8,%rax,4) +# CHECK: orq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + orq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {nf} orq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} orq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {evex} orb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} orb 291(%r8,%rax,4), %bl +# CHECK: {nf} orb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} orb 291(%r8,%rax,4), %bl +# CHECK: orb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00] + orb 291(%r8,%rax,4), %bl, %cl +# CHECK: {nf} orb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} orb 291(%r8,%rax,4), %bl, %cl +# CHECK: {evex} orw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x0b,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} orw 291(%r8,%rax,4), %dx +# CHECK: {nf} orw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x0b,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} orw 291(%r8,%rax,4), %dx +# CHECK: orw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x0b,0x94,0x80,0x23,0x01,0x00,0x00] + orw 291(%r8,%rax,4), %dx, %ax +# CHECK: {nf} orw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x0b,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} orw 291(%r8,%rax,4), %dx, %ax +# CHECK: {evex} orl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} orl 291(%r8,%rax,4), %ecx +# CHECK: {nf} orl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} orl 291(%r8,%rax,4), %ecx +# CHECK: orl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + orl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {nf} orl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} orl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {evex} orq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} orq 291(%r8,%rax,4), %r9 +# CHECK: {nf} orq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} orq 291(%r8,%rax,4), %r9 +# CHECK: orq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + orq 291(%r8,%rax,4), %r9, %r15 +# CHECK: {nf} orq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} orq 291(%r8,%rax,4), %r9, %r15 diff --git a/llvm/test/MC/X86/apx/or-intel.s b/llvm/test/MC/X86/apx/or-intel.s new file mode 100644 index 0000000000000..d631c732f1df1 --- /dev/null +++ b/llvm/test/MC/X86/apx/or-intel.s @@ -0,0 +1,314 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} or bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xcb,0x7b] + {evex} or bl, 123 +# CHECK: {nf} or bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xcb,0x7b] + {nf} or bl, 123 +# CHECK: or cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xcb,0x7b] + or cl, bl, 123 +# CHECK: {nf} or cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xcb,0x7b] + {nf} or cl, bl, 123 +# CHECK: {evex} or dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xca,0x7b] + {evex} or dx, 123 +# CHECK: {nf} or dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xca,0x7b] + {nf} or dx, 123 +# CHECK: or ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xca,0x7b] + or ax, dx, 123 +# CHECK: {nf} or ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xca,0x7b] + {nf} or ax, dx, 123 +# CHECK: {evex} or ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xc9,0x7b] + {evex} or ecx, 123 +# CHECK: {nf} or ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xc9,0x7b] + {nf} or ecx, 123 +# CHECK: or edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xc9,0x7b] + or edx, ecx, 123 +# CHECK: {nf} or edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xc9,0x7b] + {nf} or edx, ecx, 123 +# CHECK: {evex} or r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xc9,0x7b] + {evex} or r9, 123 +# CHECK: {nf} or r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xc9,0x7b] + {nf} or r9, 123 +# CHECK: or r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xc9,0x7b] + or r15, r9, 123 +# CHECK: {nf} or r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xc9,0x7b] + {nf} or r15, r9, 123 +# CHECK: {evex} or byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} or byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} or byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} or byte ptr [r8 + 4*rax + 291], 123 +# CHECK: or bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + or bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} or bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} or bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} or word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} or word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} or word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} or word ptr [r8 + 4*rax + 291], 123 +# CHECK: or dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + or dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} or dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} or dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} or dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} or dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} or dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} or dword ptr [r8 + 4*rax + 291], 123 +# CHECK: or ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + or ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} or ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} or ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} or qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} or qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} or qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} or qword ptr [r8 + 4*rax + 291], 123 +# CHECK: or r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + or r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} or r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0x8c,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} or r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} or dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xca,0xd2,0x04] + {evex} or dx, 1234 +# CHECK: {nf} or dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xca,0xd2,0x04] + {nf} or dx, 1234 +# CHECK: or ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xca,0xd2,0x04] + or ax, dx, 1234 +# CHECK: {nf} or ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xca,0xd2,0x04] + {nf} or ax, dx, 1234 +# CHECK: {evex} or word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} or word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} or word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} or word ptr [r8 + 4*rax + 291], 1234 +# CHECK: or dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + or dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} or dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} or dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {evex} or ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xc9,0x40,0xe2,0x01,0x00] + {evex} or ecx, 123456 +# CHECK: {nf} or ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xc9,0x40,0xe2,0x01,0x00] + {nf} or ecx, 123456 +# CHECK: or edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xc9,0x40,0xe2,0x01,0x00] + or edx, ecx, 123456 +# CHECK: {nf} or edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xc9,0x40,0xe2,0x01,0x00] + {nf} or edx, ecx, 123456 +# CHECK: {evex} or r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xc9,0x40,0xe2,0x01,0x00] + {evex} or r9, 123456 +# CHECK: {nf} or r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xc9,0x40,0xe2,0x01,0x00] + {nf} or r9, 123456 +# CHECK: or r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xc9,0x40,0xe2,0x01,0x00] + or r15, r9, 123456 +# CHECK: {nf} or r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xc9,0x40,0xe2,0x01,0x00] + {nf} or r15, r9, 123456 +# CHECK: {evex} or dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} or dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} or dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} or dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: or ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + or ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} or ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} or ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} or qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} or qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} or qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} or qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: or r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + or r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} or r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0x8c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} or r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} or cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x08,0xd9] + {evex} or cl, bl +# CHECK: {nf} or cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x08,0xd9] + {nf} or cl, bl +# CHECK: or r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x08,0xd9] + or r8b, cl, bl +# CHECK: {nf} or r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x08,0xd9] + {nf} or r8b, cl, bl +# CHECK: {evex} or byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x08,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} or byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} or byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x08,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} or byte ptr [r8 + 4*rax + 291], bl +# CHECK: or cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x08,0x9c,0x80,0x23,0x01,0x00,0x00] + or cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} or cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x08,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} or cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {evex} or ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x09,0xd0] + {evex} or ax, dx +# CHECK: {nf} or ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x09,0xd0] + {nf} or ax, dx +# CHECK: or r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x09,0xd0] + or r9w, ax, dx +# CHECK: {nf} or r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x09,0xd0] + {nf} or r9w, ax, dx +# CHECK: {evex} or word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x09,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} or word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} or word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x09,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} or word ptr [r8 + 4*rax + 291], dx +# CHECK: or ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x09,0x94,0x80,0x23,0x01,0x00,0x00] + or ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} or ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x09,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} or ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {evex} or edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x09,0xca] + {evex} or edx, ecx +# CHECK: {nf} or edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x09,0xca] + {nf} or edx, ecx +# CHECK: or r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x09,0xca] + or r10d, edx, ecx +# CHECK: {nf} or r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x09,0xca] + {nf} or r10d, edx, ecx +# CHECK: {evex} or dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} or dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} or dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} or dword ptr [r8 + 4*rax + 291], ecx +# CHECK: or edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + or edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} or edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} or edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {evex} or r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x09,0xcf] + {evex} or r15, r9 +# CHECK: {nf} or r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x09,0xcf] + {nf} or r15, r9 +# CHECK: or r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x09,0xcf] + or r11, r15, r9 +# CHECK: {nf} or r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x09,0xcf] + {nf} or r11, r15, r9 +# CHECK: {evex} or qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} or qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} or qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} or qword ptr [r8 + 4*rax + 291], r9 +# CHECK: or r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + or r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} or r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x09,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} or r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {evex} or bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} or bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} or bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} or bl, byte ptr [r8 + 4*rax + 291] +# CHECK: or cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00] + or cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} or cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x0a,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} or cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} or dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x0b,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} or dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} or dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x0b,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} or dx, word ptr [r8 + 4*rax + 291] +# CHECK: or ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x0b,0x94,0x80,0x23,0x01,0x00,0x00] + or ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} or ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x0b,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} or ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} or ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} or ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} or ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} or ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: or edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + or edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} or edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} or edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} or r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} or r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} or r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} or r9, qword ptr [r8 + 4*rax + 291] +# CHECK: or r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + or r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} or r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x0b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} or r15, r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/MC/X86/apx/sbb-att.s b/llvm/test/MC/X86/apx/sbb-att.s new file mode 100644 index 0000000000000..80b909edb4e9c --- /dev/null +++ b/llvm/test/MC/X86/apx/sbb-att.s @@ -0,0 +1,161 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-52: error: +# ERROR-NOT: error: +# CHECK: {evex} sbbb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xdb,0x7b] + {evex} sbbb $123, %bl +# CHECK: sbbb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xdb,0x7b] + sbbb $123, %bl, %cl +# CHECK: {evex} sbbw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xda,0x7b] + {evex} sbbw $123, %dx +# CHECK: sbbw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xda,0x7b] + sbbw $123, %dx, %ax +# CHECK: {evex} sbbl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xd9,0x7b] + {evex} sbbl $123, %ecx +# CHECK: sbbl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xd9,0x7b] + sbbl $123, %ecx, %edx +# CHECK: {evex} sbbq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xd9,0x7b] + {evex} sbbq $123, %r9 +# CHECK: sbbq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xd9,0x7b] + sbbq $123, %r9, %r15 +# CHECK: {evex} sbbb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sbbb $123, 291(%r8,%rax,4) +# CHECK: sbbb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + sbbb $123, 291(%r8,%rax,4), %bl +# CHECK: {evex} sbbw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sbbw $123, 291(%r8,%rax,4) +# CHECK: sbbw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + sbbw $123, 291(%r8,%rax,4), %dx +# CHECK: {evex} sbbl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sbbl $123, 291(%r8,%rax,4) +# CHECK: sbbl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + sbbl $123, 291(%r8,%rax,4), %ecx +# CHECK: {evex} sbbq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sbbq $123, 291(%r8,%rax,4) +# CHECK: sbbq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + sbbq $123, 291(%r8,%rax,4), %r9 +# CHECK: {evex} sbbw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xda,0xd2,0x04] + {evex} sbbw $1234, %dx +# CHECK: sbbw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xda,0xd2,0x04] + sbbw $1234, %dx, %ax +# CHECK: {evex} sbbw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} sbbw $1234, 291(%r8,%rax,4) +# CHECK: sbbw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + sbbw $1234, 291(%r8,%rax,4), %dx +# CHECK: {evex} sbbl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xd9,0x40,0xe2,0x01,0x00] + {evex} sbbl $123456, %ecx +# CHECK: sbbl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xd9,0x40,0xe2,0x01,0x00] + sbbl $123456, %ecx, %edx +# CHECK: {evex} sbbq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xd9,0x40,0xe2,0x01,0x00] + {evex} sbbq $123456, %r9 +# CHECK: sbbq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xd9,0x40,0xe2,0x01,0x00] + sbbq $123456, %r9, %r15 +# CHECK: {evex} sbbl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} sbbl $123456, 291(%r8,%rax,4) +# CHECK: sbbl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + sbbl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {evex} sbbq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} sbbq $123456, 291(%r8,%rax,4) +# CHECK: sbbq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + sbbq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {evex} sbbb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x18,0xd9] + {evex} sbbb %bl, %cl +# CHECK: sbbb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x18,0xd9] + sbbb %bl, %cl, %r8b +# CHECK: {evex} sbbb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x18,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} sbbb %bl, 291(%r8,%rax,4) +# CHECK: sbbb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x18,0x9c,0x80,0x23,0x01,0x00,0x00] + sbbb %bl, 291(%r8,%rax,4), %cl +# CHECK: {evex} sbbw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x19,0xd0] + {evex} sbbw %dx, %ax +# CHECK: sbbw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x19,0xd0] + sbbw %dx, %ax, %r9w +# CHECK: {evex} sbbw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x19,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} sbbw %dx, 291(%r8,%rax,4) +# CHECK: sbbw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x19,0x94,0x80,0x23,0x01,0x00,0x00] + sbbw %dx, 291(%r8,%rax,4), %ax +# CHECK: {evex} sbbl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x19,0xca] + {evex} sbbl %ecx, %edx +# CHECK: sbbl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x19,0xca] + sbbl %ecx, %edx, %r10d +# CHECK: {evex} sbbl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x19,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sbbl %ecx, 291(%r8,%rax,4) +# CHECK: sbbl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x19,0x8c,0x80,0x23,0x01,0x00,0x00] + sbbl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {evex} sbbq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x19,0xcf] + {evex} sbbq %r9, %r15 +# CHECK: sbbq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x19,0xcf] + sbbq %r9, %r15, %r11 +# CHECK: {evex} sbbq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x19,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sbbq %r9, 291(%r8,%rax,4) +# CHECK: sbbq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x19,0x8c,0x80,0x23,0x01,0x00,0x00] + sbbq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {evex} sbbb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x1a,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} sbbb 291(%r8,%rax,4), %bl +# CHECK: sbbb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x1a,0x9c,0x80,0x23,0x01,0x00,0x00] + sbbb 291(%r8,%rax,4), %bl, %cl +# CHECK: {evex} sbbw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x1b,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} sbbw 291(%r8,%rax,4), %dx +# CHECK: sbbw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x1b,0x94,0x80,0x23,0x01,0x00,0x00] + sbbw 291(%r8,%rax,4), %dx, %ax +# CHECK: {evex} sbbl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sbbl 291(%r8,%rax,4), %ecx +# CHECK: sbbl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00] + sbbl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {evex} sbbq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sbbq 291(%r8,%rax,4), %r9 +# CHECK: sbbq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00] + sbbq 291(%r8,%rax,4), %r9, %r15 diff --git a/llvm/test/MC/X86/apx/sbb-intel.s b/llvm/test/MC/X86/apx/sbb-intel.s new file mode 100644 index 0000000000000..57d9c8110368b --- /dev/null +++ b/llvm/test/MC/X86/apx/sbb-intel.s @@ -0,0 +1,158 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} sbb bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xdb,0x7b] + {evex} sbb bl, 123 +# CHECK: sbb cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xdb,0x7b] + sbb cl, bl, 123 +# CHECK: {evex} sbb dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xda,0x7b] + {evex} sbb dx, 123 +# CHECK: sbb ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xda,0x7b] + sbb ax, dx, 123 +# CHECK: {evex} sbb ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xd9,0x7b] + {evex} sbb ecx, 123 +# CHECK: sbb edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xd9,0x7b] + sbb edx, ecx, 123 +# CHECK: {evex} sbb r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xd9,0x7b] + {evex} sbb r9, 123 +# CHECK: sbb r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xd9,0x7b] + sbb r15, r9, 123 +# CHECK: {evex} sbb byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sbb byte ptr [r8 + 4*rax + 291], 123 +# CHECK: sbb bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + sbb bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} sbb word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sbb word ptr [r8 + 4*rax + 291], 123 +# CHECK: sbb dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + sbb dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} sbb dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sbb dword ptr [r8 + 4*rax + 291], 123 +# CHECK: sbb ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + sbb ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} sbb qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sbb qword ptr [r8 + 4*rax + 291], 123 +# CHECK: sbb r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0x9c,0x80,0x23,0x01,0x00,0x00,0x7b] + sbb r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} sbb dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xda,0xd2,0x04] + {evex} sbb dx, 1234 +# CHECK: sbb ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xda,0xd2,0x04] + sbb ax, dx, 1234 +# CHECK: {evex} sbb word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} sbb word ptr [r8 + 4*rax + 291], 1234 +# CHECK: sbb dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + sbb dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {evex} sbb ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xd9,0x40,0xe2,0x01,0x00] + {evex} sbb ecx, 123456 +# CHECK: sbb edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xd9,0x40,0xe2,0x01,0x00] + sbb edx, ecx, 123456 +# CHECK: {evex} sbb r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xd9,0x40,0xe2,0x01,0x00] + {evex} sbb r9, 123456 +# CHECK: sbb r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xd9,0x40,0xe2,0x01,0x00] + sbb r15, r9, 123456 +# CHECK: {evex} sbb dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} sbb dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: sbb ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + sbb ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} sbb qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} sbb qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: sbb r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0x9c,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + sbb r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} sbb cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x18,0xd9] + {evex} sbb cl, bl +# CHECK: sbb r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x18,0xd9] + sbb r8b, cl, bl +# CHECK: {evex} sbb byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x18,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} sbb byte ptr [r8 + 4*rax + 291], bl +# CHECK: sbb cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x18,0x9c,0x80,0x23,0x01,0x00,0x00] + sbb cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {evex} sbb ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x19,0xd0] + {evex} sbb ax, dx +# CHECK: sbb r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x19,0xd0] + sbb r9w, ax, dx +# CHECK: {evex} sbb word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x19,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} sbb word ptr [r8 + 4*rax + 291], dx +# CHECK: sbb ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x19,0x94,0x80,0x23,0x01,0x00,0x00] + sbb ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {evex} sbb edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x19,0xca] + {evex} sbb edx, ecx +# CHECK: sbb r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x19,0xca] + sbb r10d, edx, ecx +# CHECK: {evex} sbb dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x19,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sbb dword ptr [r8 + 4*rax + 291], ecx +# CHECK: sbb edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x19,0x8c,0x80,0x23,0x01,0x00,0x00] + sbb edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {evex} sbb r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x19,0xcf] + {evex} sbb r15, r9 +# CHECK: sbb r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x19,0xcf] + sbb r11, r15, r9 +# CHECK: {evex} sbb qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x19,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sbb qword ptr [r8 + 4*rax + 291], r9 +# CHECK: sbb r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x19,0x8c,0x80,0x23,0x01,0x00,0x00] + sbb r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {evex} sbb bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x1a,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} sbb bl, byte ptr [r8 + 4*rax + 291] +# CHECK: sbb cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x1a,0x9c,0x80,0x23,0x01,0x00,0x00] + sbb cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} sbb dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x1b,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} sbb dx, word ptr [r8 + 4*rax + 291] +# CHECK: sbb ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x1b,0x94,0x80,0x23,0x01,0x00,0x00] + sbb ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} sbb ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sbb ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: sbb edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00] + sbb edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} sbb r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sbb r9, qword ptr [r8 + 4*rax + 291] +# CHECK: sbb r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x1b,0x8c,0x80,0x23,0x01,0x00,0x00] + sbb r15, r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/MC/X86/apx/sub-att.s b/llvm/test/MC/X86/apx/sub-att.s new file mode 100644 index 0000000000000..4c12a35b0bc2a --- /dev/null +++ b/llvm/test/MC/X86/apx/sub-att.s @@ -0,0 +1,317 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-104: error: +# ERROR-NOT: error: +# CHECK: {evex} subb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xeb,0x7b] + {evex} subb $123, %bl +# CHECK: {nf} subb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xeb,0x7b] + {nf} subb $123, %bl +# CHECK: subb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xeb,0x7b] + subb $123, %bl, %cl +# CHECK: {nf} subb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xeb,0x7b] + {nf} subb $123, %bl, %cl +# CHECK: {evex} subw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xea,0x7b] + {evex} subw $123, %dx +# CHECK: {nf} subw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xea,0x7b] + {nf} subw $123, %dx +# CHECK: subw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xea,0x7b] + subw $123, %dx, %ax +# CHECK: {nf} subw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xea,0x7b] + {nf} subw $123, %dx, %ax +# CHECK: {evex} subl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xe9,0x7b] + {evex} subl $123, %ecx +# CHECK: {nf} subl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xe9,0x7b] + {nf} subl $123, %ecx +# CHECK: subl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xe9,0x7b] + subl $123, %ecx, %edx +# CHECK: {nf} subl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xe9,0x7b] + {nf} subl $123, %ecx, %edx +# CHECK: {evex} subq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xe9,0x7b] + {evex} subq $123, %r9 +# CHECK: {nf} subq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xe9,0x7b] + {nf} subq $123, %r9 +# CHECK: subq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xe9,0x7b] + subq $123, %r9, %r15 +# CHECK: {nf} subq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xe9,0x7b] + {nf} subq $123, %r9, %r15 +# CHECK: {evex} subb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} subb $123, 291(%r8,%rax,4) +# CHECK: {nf} subb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} subb $123, 291(%r8,%rax,4) +# CHECK: subb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + subb $123, 291(%r8,%rax,4), %bl +# CHECK: {nf} subb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} subb $123, 291(%r8,%rax,4), %bl +# CHECK: {evex} subw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} subw $123, 291(%r8,%rax,4) +# CHECK: {nf} subw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} subw $123, 291(%r8,%rax,4) +# CHECK: subw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + subw $123, 291(%r8,%rax,4), %dx +# CHECK: {nf} subw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} subw $123, 291(%r8,%rax,4), %dx +# CHECK: {evex} subl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} subl $123, 291(%r8,%rax,4) +# CHECK: {nf} subl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} subl $123, 291(%r8,%rax,4) +# CHECK: subl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + subl $123, 291(%r8,%rax,4), %ecx +# CHECK: {nf} subl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} subl $123, 291(%r8,%rax,4), %ecx +# CHECK: {evex} subq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} subq $123, 291(%r8,%rax,4) +# CHECK: {nf} subq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} subq $123, 291(%r8,%rax,4) +# CHECK: subq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + subq $123, 291(%r8,%rax,4), %r9 +# CHECK: {nf} subq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} subq $123, 291(%r8,%rax,4), %r9 +# CHECK: {evex} subw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xea,0xd2,0x04] + {evex} subw $1234, %dx +# CHECK: {nf} subw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xea,0xd2,0x04] + {nf} subw $1234, %dx +# CHECK: subw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xea,0xd2,0x04] + subw $1234, %dx, %ax +# CHECK: {nf} subw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xea,0xd2,0x04] + {nf} subw $1234, %dx, %ax +# CHECK: {evex} subw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} subw $1234, 291(%r8,%rax,4) +# CHECK: {nf} subw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} subw $1234, 291(%r8,%rax,4) +# CHECK: subw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + subw $1234, 291(%r8,%rax,4), %dx +# CHECK: {nf} subw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} subw $1234, 291(%r8,%rax,4), %dx +# CHECK: {evex} subl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xe9,0x40,0xe2,0x01,0x00] + {evex} subl $123456, %ecx +# CHECK: {nf} subl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xe9,0x40,0xe2,0x01,0x00] + {nf} subl $123456, %ecx +# CHECK: subl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xe9,0x40,0xe2,0x01,0x00] + subl $123456, %ecx, %edx +# CHECK: {nf} subl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xe9,0x40,0xe2,0x01,0x00] + {nf} subl $123456, %ecx, %edx +# CHECK: {evex} subq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xe9,0x40,0xe2,0x01,0x00] + {evex} subq $123456, %r9 +# CHECK: {nf} subq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xe9,0x40,0xe2,0x01,0x00] + {nf} subq $123456, %r9 +# CHECK: subq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xe9,0x40,0xe2,0x01,0x00] + subq $123456, %r9, %r15 +# CHECK: {nf} subq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xe9,0x40,0xe2,0x01,0x00] + {nf} subq $123456, %r9, %r15 +# CHECK: {evex} subl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} subl $123456, 291(%r8,%rax,4) +# CHECK: {nf} subl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} subl $123456, 291(%r8,%rax,4) +# CHECK: subl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + subl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {nf} subl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} subl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {evex} subq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} subq $123456, 291(%r8,%rax,4) +# CHECK: {nf} subq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} subq $123456, 291(%r8,%rax,4) +# CHECK: subq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + subq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {nf} subq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} subq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {evex} subb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x28,0xd9] + {evex} subb %bl, %cl +# CHECK: {nf} subb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x28,0xd9] + {nf} subb %bl, %cl +# CHECK: subb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x28,0xd9] + subb %bl, %cl, %r8b +# CHECK: {nf} subb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x28,0xd9] + {nf} subb %bl, %cl, %r8b +# CHECK: {evex} subb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x28,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} subb %bl, 291(%r8,%rax,4) +# CHECK: {nf} subb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x28,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} subb %bl, 291(%r8,%rax,4) +# CHECK: subb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x28,0x9c,0x80,0x23,0x01,0x00,0x00] + subb %bl, 291(%r8,%rax,4), %cl +# CHECK: {nf} subb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x28,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} subb %bl, 291(%r8,%rax,4), %cl +# CHECK: {evex} subw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x29,0xd0] + {evex} subw %dx, %ax +# CHECK: {nf} subw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x29,0xd0] + {nf} subw %dx, %ax +# CHECK: subw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x29,0xd0] + subw %dx, %ax, %r9w +# CHECK: {nf} subw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x29,0xd0] + {nf} subw %dx, %ax, %r9w +# CHECK: {evex} subw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x29,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} subw %dx, 291(%r8,%rax,4) +# CHECK: {nf} subw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x29,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} subw %dx, 291(%r8,%rax,4) +# CHECK: subw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x29,0x94,0x80,0x23,0x01,0x00,0x00] + subw %dx, 291(%r8,%rax,4), %ax +# CHECK: {nf} subw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x29,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} subw %dx, 291(%r8,%rax,4), %ax +# CHECK: {evex} subl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x29,0xca] + {evex} subl %ecx, %edx +# CHECK: {nf} subl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x29,0xca] + {nf} subl %ecx, %edx +# CHECK: subl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x29,0xca] + subl %ecx, %edx, %r10d +# CHECK: {nf} subl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x29,0xca] + {nf} subl %ecx, %edx, %r10d +# CHECK: {evex} subl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} subl %ecx, 291(%r8,%rax,4) +# CHECK: {nf} subl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} subl %ecx, 291(%r8,%rax,4) +# CHECK: subl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + subl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {nf} subl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} subl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {evex} subq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x29,0xcf] + {evex} subq %r9, %r15 +# CHECK: {nf} subq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x29,0xcf] + {nf} subq %r9, %r15 +# CHECK: subq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x29,0xcf] + subq %r9, %r15, %r11 +# CHECK: {nf} subq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x29,0xcf] + {nf} subq %r9, %r15, %r11 +# CHECK: {evex} subq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} subq %r9, 291(%r8,%rax,4) +# CHECK: {nf} subq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} subq %r9, 291(%r8,%rax,4) +# CHECK: subq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + subq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {nf} subq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} subq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {evex} subb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} subb 291(%r8,%rax,4), %bl +# CHECK: {nf} subb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} subb 291(%r8,%rax,4), %bl +# CHECK: subb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00] + subb 291(%r8,%rax,4), %bl, %cl +# CHECK: {nf} subb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} subb 291(%r8,%rax,4), %bl, %cl +# CHECK: {evex} subw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x2b,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} subw 291(%r8,%rax,4), %dx +# CHECK: {nf} subw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x2b,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} subw 291(%r8,%rax,4), %dx +# CHECK: subw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x2b,0x94,0x80,0x23,0x01,0x00,0x00] + subw 291(%r8,%rax,4), %dx, %ax +# CHECK: {nf} subw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x2b,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} subw 291(%r8,%rax,4), %dx, %ax +# CHECK: {evex} subl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} subl 291(%r8,%rax,4), %ecx +# CHECK: {nf} subl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} subl 291(%r8,%rax,4), %ecx +# CHECK: subl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + subl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {nf} subl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} subl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {evex} subq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} subq 291(%r8,%rax,4), %r9 +# CHECK: {nf} subq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} subq 291(%r8,%rax,4), %r9 +# CHECK: subq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + subq 291(%r8,%rax,4), %r9, %r15 +# CHECK: {nf} subq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} subq 291(%r8,%rax,4), %r9, %r15 diff --git a/llvm/test/MC/X86/apx/sub-intel.s b/llvm/test/MC/X86/apx/sub-intel.s new file mode 100644 index 0000000000000..b66fa613d1057 --- /dev/null +++ b/llvm/test/MC/X86/apx/sub-intel.s @@ -0,0 +1,314 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} sub bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xeb,0x7b] + {evex} sub bl, 123 +# CHECK: {nf} sub bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xeb,0x7b] + {nf} sub bl, 123 +# CHECK: sub cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xeb,0x7b] + sub cl, bl, 123 +# CHECK: {nf} sub cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xeb,0x7b] + {nf} sub cl, bl, 123 +# CHECK: {evex} sub dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xea,0x7b] + {evex} sub dx, 123 +# CHECK: {nf} sub dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xea,0x7b] + {nf} sub dx, 123 +# CHECK: sub ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xea,0x7b] + sub ax, dx, 123 +# CHECK: {nf} sub ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xea,0x7b] + {nf} sub ax, dx, 123 +# CHECK: {evex} sub ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xe9,0x7b] + {evex} sub ecx, 123 +# CHECK: {nf} sub ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xe9,0x7b] + {nf} sub ecx, 123 +# CHECK: sub edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xe9,0x7b] + sub edx, ecx, 123 +# CHECK: {nf} sub edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xe9,0x7b] + {nf} sub edx, ecx, 123 +# CHECK: {evex} sub r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xe9,0x7b] + {evex} sub r9, 123 +# CHECK: {nf} sub r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xe9,0x7b] + {nf} sub r9, 123 +# CHECK: sub r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xe9,0x7b] + sub r15, r9, 123 +# CHECK: {nf} sub r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xe9,0x7b] + {nf} sub r15, r9, 123 +# CHECK: {evex} sub byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sub byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} sub byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} sub byte ptr [r8 + 4*rax + 291], 123 +# CHECK: sub bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + sub bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} sub bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} sub bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} sub word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sub word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} sub word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} sub word ptr [r8 + 4*rax + 291], 123 +# CHECK: sub dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + sub dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} sub dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} sub dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} sub dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sub dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} sub dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} sub dword ptr [r8 + 4*rax + 291], 123 +# CHECK: sub ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + sub ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} sub ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} sub ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} sub qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} sub qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} sub qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} sub qword ptr [r8 + 4*rax + 291], 123 +# CHECK: sub r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + sub r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} sub r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0xac,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} sub r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} sub dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xea,0xd2,0x04] + {evex} sub dx, 1234 +# CHECK: {nf} sub dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xea,0xd2,0x04] + {nf} sub dx, 1234 +# CHECK: sub ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xea,0xd2,0x04] + sub ax, dx, 1234 +# CHECK: {nf} sub ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xea,0xd2,0x04] + {nf} sub ax, dx, 1234 +# CHECK: {evex} sub word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} sub word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} sub word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} sub word ptr [r8 + 4*rax + 291], 1234 +# CHECK: sub dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + sub dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} sub dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} sub dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {evex} sub ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xe9,0x40,0xe2,0x01,0x00] + {evex} sub ecx, 123456 +# CHECK: {nf} sub ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xe9,0x40,0xe2,0x01,0x00] + {nf} sub ecx, 123456 +# CHECK: sub edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xe9,0x40,0xe2,0x01,0x00] + sub edx, ecx, 123456 +# CHECK: {nf} sub edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xe9,0x40,0xe2,0x01,0x00] + {nf} sub edx, ecx, 123456 +# CHECK: {evex} sub r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xe9,0x40,0xe2,0x01,0x00] + {evex} sub r9, 123456 +# CHECK: {nf} sub r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xe9,0x40,0xe2,0x01,0x00] + {nf} sub r9, 123456 +# CHECK: sub r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xe9,0x40,0xe2,0x01,0x00] + sub r15, r9, 123456 +# CHECK: {nf} sub r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xe9,0x40,0xe2,0x01,0x00] + {nf} sub r15, r9, 123456 +# CHECK: {evex} sub dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} sub dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} sub dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} sub dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: sub ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + sub ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} sub ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} sub ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} sub qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} sub qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} sub qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} sub qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: sub r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + sub r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} sub r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0xac,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} sub r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} sub cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x28,0xd9] + {evex} sub cl, bl +# CHECK: {nf} sub cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x28,0xd9] + {nf} sub cl, bl +# CHECK: sub r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x28,0xd9] + sub r8b, cl, bl +# CHECK: {nf} sub r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x28,0xd9] + {nf} sub r8b, cl, bl +# CHECK: {evex} sub byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x28,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} sub byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} sub byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x28,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} sub byte ptr [r8 + 4*rax + 291], bl +# CHECK: sub cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x28,0x9c,0x80,0x23,0x01,0x00,0x00] + sub cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} sub cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x28,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} sub cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {evex} sub ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x29,0xd0] + {evex} sub ax, dx +# CHECK: {nf} sub ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x29,0xd0] + {nf} sub ax, dx +# CHECK: sub r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x29,0xd0] + sub r9w, ax, dx +# CHECK: {nf} sub r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x29,0xd0] + {nf} sub r9w, ax, dx +# CHECK: {evex} sub word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x29,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} sub word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} sub word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x29,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} sub word ptr [r8 + 4*rax + 291], dx +# CHECK: sub ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x29,0x94,0x80,0x23,0x01,0x00,0x00] + sub ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} sub ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x29,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} sub ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {evex} sub edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x29,0xca] + {evex} sub edx, ecx +# CHECK: {nf} sub edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x29,0xca] + {nf} sub edx, ecx +# CHECK: sub r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x29,0xca] + sub r10d, edx, ecx +# CHECK: {nf} sub r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x29,0xca] + {nf} sub r10d, edx, ecx +# CHECK: {evex} sub dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sub dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} sub dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} sub dword ptr [r8 + 4*rax + 291], ecx +# CHECK: sub edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + sub edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} sub edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} sub edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {evex} sub r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x29,0xcf] + {evex} sub r15, r9 +# CHECK: {nf} sub r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x29,0xcf] + {nf} sub r15, r9 +# CHECK: sub r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x29,0xcf] + sub r11, r15, r9 +# CHECK: {nf} sub r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x29,0xcf] + {nf} sub r11, r15, r9 +# CHECK: {evex} sub qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sub qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} sub qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} sub qword ptr [r8 + 4*rax + 291], r9 +# CHECK: sub r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + sub r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} sub r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x29,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} sub r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {evex} sub bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} sub bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} sub bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} sub bl, byte ptr [r8 + 4*rax + 291] +# CHECK: sub cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00] + sub cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} sub cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x2a,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} sub cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} sub dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x2b,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} sub dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} sub dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x2b,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} sub dx, word ptr [r8 + 4*rax + 291] +# CHECK: sub ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x2b,0x94,0x80,0x23,0x01,0x00,0x00] + sub ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} sub ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x2b,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} sub ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} sub ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sub ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} sub ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} sub ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: sub edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + sub edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} sub edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} sub edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} sub r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} sub r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} sub r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} sub r9, qword ptr [r8 + 4*rax + 291] +# CHECK: sub r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + sub r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} sub r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x2b,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} sub r15, r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/MC/X86/apx/xor-att.s b/llvm/test/MC/X86/apx/xor-att.s new file mode 100644 index 0000000000000..509cf5b86fe96 --- /dev/null +++ b/llvm/test/MC/X86/apx/xor-att.s @@ -0,0 +1,317 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding %s | FileCheck %s +# RUN: not llvm-mc -triple i386 -show-encoding %s 2>&1 | FileCheck %s --check-prefix=ERROR + +# ERROR-COUNT-104: error: +# ERROR-NOT: error: +# CHECK: {evex} xorb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xf3,0x7b] + {evex} xorb $123, %bl +# CHECK: {nf} xorb $123, %bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xf3,0x7b] + {nf} xorb $123, %bl +# CHECK: xorb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xf3,0x7b] + xorb $123, %bl, %cl +# CHECK: {nf} xorb $123, %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xf3,0x7b] + {nf} xorb $123, %bl, %cl +# CHECK: {evex} xorw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xf2,0x7b] + {evex} xorw $123, %dx +# CHECK: {nf} xorw $123, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xf2,0x7b] + {nf} xorw $123, %dx +# CHECK: xorw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xf2,0x7b] + xorw $123, %dx, %ax +# CHECK: {nf} xorw $123, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xf2,0x7b] + {nf} xorw $123, %dx, %ax +# CHECK: {evex} xorl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xf1,0x7b] + {evex} xorl $123, %ecx +# CHECK: {nf} xorl $123, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xf1,0x7b] + {nf} xorl $123, %ecx +# CHECK: xorl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xf1,0x7b] + xorl $123, %ecx, %edx +# CHECK: {nf} xorl $123, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xf1,0x7b] + {nf} xorl $123, %ecx, %edx +# CHECK: {evex} xorq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xf1,0x7b] + {evex} xorq $123, %r9 +# CHECK: {nf} xorq $123, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xf1,0x7b] + {nf} xorq $123, %r9 +# CHECK: xorq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xf1,0x7b] + xorq $123, %r9, %r15 +# CHECK: {nf} xorq $123, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xf1,0x7b] + {nf} xorq $123, %r9, %r15 +# CHECK: {evex} xorb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} xorb $123, 291(%r8,%rax,4) +# CHECK: {nf} xorb $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xorb $123, 291(%r8,%rax,4) +# CHECK: xorb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + xorb $123, 291(%r8,%rax,4), %bl +# CHECK: {nf} xorb $123, 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xorb $123, 291(%r8,%rax,4), %bl +# CHECK: {evex} xorw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} xorw $123, 291(%r8,%rax,4) +# CHECK: {nf} xorw $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xorw $123, 291(%r8,%rax,4) +# CHECK: xorw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + xorw $123, 291(%r8,%rax,4), %dx +# CHECK: {nf} xorw $123, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xorw $123, 291(%r8,%rax,4), %dx +# CHECK: {evex} xorl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} xorl $123, 291(%r8,%rax,4) +# CHECK: {nf} xorl $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xorl $123, 291(%r8,%rax,4) +# CHECK: xorl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + xorl $123, 291(%r8,%rax,4), %ecx +# CHECK: {nf} xorl $123, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xorl $123, 291(%r8,%rax,4), %ecx +# CHECK: {evex} xorq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} xorq $123, 291(%r8,%rax,4) +# CHECK: {nf} xorq $123, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xorq $123, 291(%r8,%rax,4) +# CHECK: xorq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + xorq $123, 291(%r8,%rax,4), %r9 +# CHECK: {nf} xorq $123, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xorq $123, 291(%r8,%rax,4), %r9 +# CHECK: {evex} xorw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xf2,0xd2,0x04] + {evex} xorw $1234, %dx +# CHECK: {nf} xorw $1234, %dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xf2,0xd2,0x04] + {nf} xorw $1234, %dx +# CHECK: xorw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xf2,0xd2,0x04] + xorw $1234, %dx, %ax +# CHECK: {nf} xorw $1234, %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xf2,0xd2,0x04] + {nf} xorw $1234, %dx, %ax +# CHECK: {evex} xorw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} xorw $1234, 291(%r8,%rax,4) +# CHECK: {nf} xorw $1234, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} xorw $1234, 291(%r8,%rax,4) +# CHECK: xorw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + xorw $1234, 291(%r8,%rax,4), %dx +# CHECK: {nf} xorw $1234, 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} xorw $1234, 291(%r8,%rax,4), %dx +# CHECK: {evex} xorl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xf1,0x40,0xe2,0x01,0x00] + {evex} xorl $123456, %ecx +# CHECK: {nf} xorl $123456, %ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xf1,0x40,0xe2,0x01,0x00] + {nf} xorl $123456, %ecx +# CHECK: xorl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xf1,0x40,0xe2,0x01,0x00] + xorl $123456, %ecx, %edx +# CHECK: {nf} xorl $123456, %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xf1,0x40,0xe2,0x01,0x00] + {nf} xorl $123456, %ecx, %edx +# CHECK: {evex} xorq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xf1,0x40,0xe2,0x01,0x00] + {evex} xorq $123456, %r9 +# CHECK: {nf} xorq $123456, %r9 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xf1,0x40,0xe2,0x01,0x00] + {nf} xorq $123456, %r9 +# CHECK: xorq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xf1,0x40,0xe2,0x01,0x00] + xorq $123456, %r9, %r15 +# CHECK: {nf} xorq $123456, %r9, %r15 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xf1,0x40,0xe2,0x01,0x00] + {nf} xorq $123456, %r9, %r15 +# CHECK: {evex} xorl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} xorl $123456, 291(%r8,%rax,4) +# CHECK: {nf} xorl $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} xorl $123456, 291(%r8,%rax,4) +# CHECK: xorl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + xorl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {nf} xorl $123456, 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} xorl $123456, 291(%r8,%rax,4), %ecx +# CHECK: {evex} xorq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} xorq $123456, 291(%r8,%rax,4) +# CHECK: {nf} xorq $123456, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} xorq $123456, 291(%r8,%rax,4) +# CHECK: xorq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + xorq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {nf} xorq $123456, 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} xorq $123456, 291(%r8,%rax,4), %r9 +# CHECK: {evex} xorb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x30,0xd9] + {evex} xorb %bl, %cl +# CHECK: {nf} xorb %bl, %cl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x30,0xd9] + {nf} xorb %bl, %cl +# CHECK: xorb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x30,0xd9] + xorb %bl, %cl, %r8b +# CHECK: {nf} xorb %bl, %cl, %r8b +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x30,0xd9] + {nf} xorb %bl, %cl, %r8b +# CHECK: {evex} xorb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x30,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} xorb %bl, 291(%r8,%rax,4) +# CHECK: {nf} xorb %bl, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x30,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} xorb %bl, 291(%r8,%rax,4) +# CHECK: xorb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x30,0x9c,0x80,0x23,0x01,0x00,0x00] + xorb %bl, 291(%r8,%rax,4), %cl +# CHECK: {nf} xorb %bl, 291(%r8,%rax,4), %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x30,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} xorb %bl, 291(%r8,%rax,4), %cl +# CHECK: {evex} xorw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x31,0xd0] + {evex} xorw %dx, %ax +# CHECK: {nf} xorw %dx, %ax +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x31,0xd0] + {nf} xorw %dx, %ax +# CHECK: xorw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x31,0xd0] + xorw %dx, %ax, %r9w +# CHECK: {nf} xorw %dx, %ax, %r9w +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x31,0xd0] + {nf} xorw %dx, %ax, %r9w +# CHECK: {evex} xorw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x31,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} xorw %dx, 291(%r8,%rax,4) +# CHECK: {nf} xorw %dx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x31,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} xorw %dx, 291(%r8,%rax,4) +# CHECK: xorw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x31,0x94,0x80,0x23,0x01,0x00,0x00] + xorw %dx, 291(%r8,%rax,4), %ax +# CHECK: {nf} xorw %dx, 291(%r8,%rax,4), %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x31,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} xorw %dx, 291(%r8,%rax,4), %ax +# CHECK: {evex} xorl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x31,0xca] + {evex} xorl %ecx, %edx +# CHECK: {nf} xorl %ecx, %edx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x31,0xca] + {nf} xorl %ecx, %edx +# CHECK: xorl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x31,0xca] + xorl %ecx, %edx, %r10d +# CHECK: {nf} xorl %ecx, %edx, %r10d +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x31,0xca] + {nf} xorl %ecx, %edx, %r10d +# CHECK: {evex} xorl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} xorl %ecx, 291(%r8,%rax,4) +# CHECK: {nf} xorl %ecx, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xorl %ecx, 291(%r8,%rax,4) +# CHECK: xorl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + xorl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {nf} xorl %ecx, 291(%r8,%rax,4), %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xorl %ecx, 291(%r8,%rax,4), %edx +# CHECK: {evex} xorq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x31,0xcf] + {evex} xorq %r9, %r15 +# CHECK: {nf} xorq %r9, %r15 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x31,0xcf] + {nf} xorq %r9, %r15 +# CHECK: xorq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x31,0xcf] + xorq %r9, %r15, %r11 +# CHECK: {nf} xorq %r9, %r15, %r11 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x31,0xcf] + {nf} xorq %r9, %r15, %r11 +# CHECK: {evex} xorq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} xorq %r9, 291(%r8,%rax,4) +# CHECK: {nf} xorq %r9, 291(%r8,%rax,4) +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xorq %r9, 291(%r8,%rax,4) +# CHECK: xorq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + xorq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {nf} xorq %r9, 291(%r8,%rax,4), %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xorq %r9, 291(%r8,%rax,4), %r15 +# CHECK: {evex} xorb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x32,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} xorb 291(%r8,%rax,4), %bl +# CHECK: {nf} xorb 291(%r8,%rax,4), %bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x32,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} xorb 291(%r8,%rax,4), %bl +# CHECK: xorb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x32,0x9c,0x80,0x23,0x01,0x00,0x00] + xorb 291(%r8,%rax,4), %bl, %cl +# CHECK: {nf} xorb 291(%r8,%rax,4), %bl, %cl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x32,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} xorb 291(%r8,%rax,4), %bl, %cl +# CHECK: {evex} xorw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x33,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} xorw 291(%r8,%rax,4), %dx +# CHECK: {nf} xorw 291(%r8,%rax,4), %dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x33,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} xorw 291(%r8,%rax,4), %dx +# CHECK: xorw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x33,0x94,0x80,0x23,0x01,0x00,0x00] + xorw 291(%r8,%rax,4), %dx, %ax +# CHECK: {nf} xorw 291(%r8,%rax,4), %dx, %ax +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x33,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} xorw 291(%r8,%rax,4), %dx, %ax +# CHECK: {evex} xorl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} xorl 291(%r8,%rax,4), %ecx +# CHECK: {nf} xorl 291(%r8,%rax,4), %ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xorl 291(%r8,%rax,4), %ecx +# CHECK: xorl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + xorl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {nf} xorl 291(%r8,%rax,4), %ecx, %edx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xorl 291(%r8,%rax,4), %ecx, %edx +# CHECK: {evex} xorq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} xorq 291(%r8,%rax,4), %r9 +# CHECK: {nf} xorq 291(%r8,%rax,4), %r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xorq 291(%r8,%rax,4), %r9 +# CHECK: xorq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + xorq 291(%r8,%rax,4), %r9, %r15 +# CHECK: {nf} xorq 291(%r8,%rax,4), %r9, %r15 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xorq 291(%r8,%rax,4), %r9, %r15 diff --git a/llvm/test/MC/X86/apx/xor-intel.s b/llvm/test/MC/X86/apx/xor-intel.s new file mode 100644 index 0000000000000..8b2e29a352392 --- /dev/null +++ b/llvm/test/MC/X86/apx/xor-intel.s @@ -0,0 +1,314 @@ +# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s + +# CHECK: {evex} xor bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x80,0xf3,0x7b] + {evex} xor bl, 123 +# CHECK: {nf} xor bl, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x80,0xf3,0x7b] + {nf} xor bl, 123 +# CHECK: xor cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x18,0x80,0xf3,0x7b] + xor cl, bl, 123 +# CHECK: {nf} xor cl, bl, 123 +# CHECK: encoding: [0x62,0xf4,0x74,0x1c,0x80,0xf3,0x7b] + {nf} xor cl, bl, 123 +# CHECK: {evex} xor dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x83,0xf2,0x7b] + {evex} xor dx, 123 +# CHECK: {nf} xor dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x83,0xf2,0x7b] + {nf} xor dx, 123 +# CHECK: xor ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x83,0xf2,0x7b] + xor ax, dx, 123 +# CHECK: {nf} xor ax, dx, 123 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x83,0xf2,0x7b] + {nf} xor ax, dx, 123 +# CHECK: {evex} xor ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x83,0xf1,0x7b] + {evex} xor ecx, 123 +# CHECK: {nf} xor ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x83,0xf1,0x7b] + {nf} xor ecx, 123 +# CHECK: xor edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x83,0xf1,0x7b] + xor edx, ecx, 123 +# CHECK: {nf} xor edx, ecx, 123 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x83,0xf1,0x7b] + {nf} xor edx, ecx, 123 +# CHECK: {evex} xor r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xf1,0x7b] + {evex} xor r9, 123 +# CHECK: {nf} xor r9, 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xf1,0x7b] + {nf} xor r9, 123 +# CHECK: xor r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x83,0xf1,0x7b] + xor r15, r9, 123 +# CHECK: {nf} xor r15, r9, 123 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x83,0xf1,0x7b] + {nf} xor r15, r9, 123 +# CHECK: {evex} xor byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} xor byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} xor byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xor byte ptr [r8 + 4*rax + 291], 123 +# CHECK: xor bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x18,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + xor bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} xor bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x64,0x1c,0x80,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xor bl, byte ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} xor word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} xor word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} xor word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xor word ptr [r8 + 4*rax + 291], 123 +# CHECK: xor dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + xor dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} xor dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xor dx, word ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} xor dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} xor dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} xor dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xor dword ptr [r8 + 4*rax + 291], 123 +# CHECK: xor ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + xor ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} xor ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xor ecx, dword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} xor qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {evex} xor qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} xor qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xor qword ptr [r8 + 4*rax + 291], 123 +# CHECK: xor r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + xor r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {nf} xor r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x83,0xb4,0x80,0x23,0x01,0x00,0x00,0x7b] + {nf} xor r9, qword ptr [r8 + 4*rax + 291], 123 +# CHECK: {evex} xor dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x81,0xf2,0xd2,0x04] + {evex} xor dx, 1234 +# CHECK: {nf} xor dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x81,0xf2,0xd2,0x04] + {nf} xor dx, 1234 +# CHECK: xor ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x18,0x81,0xf2,0xd2,0x04] + xor ax, dx, 1234 +# CHECK: {nf} xor ax, dx, 1234 +# CHECK: encoding: [0x62,0xf4,0x7d,0x1c,0x81,0xf2,0xd2,0x04] + {nf} xor ax, dx, 1234 +# CHECK: {evex} xor word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {evex} xor word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} xor word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} xor word ptr [r8 + 4*rax + 291], 1234 +# CHECK: xor dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + xor dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {nf} xor dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: encoding: [0x62,0xd4,0x6d,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0xd2,0x04] + {nf} xor dx, word ptr [r8 + 4*rax + 291], 1234 +# CHECK: {evex} xor ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x81,0xf1,0x40,0xe2,0x01,0x00] + {evex} xor ecx, 123456 +# CHECK: {nf} xor ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x81,0xf1,0x40,0xe2,0x01,0x00] + {nf} xor ecx, 123456 +# CHECK: xor edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x18,0x81,0xf1,0x40,0xe2,0x01,0x00] + xor edx, ecx, 123456 +# CHECK: {nf} xor edx, ecx, 123456 +# CHECK: encoding: [0x62,0xf4,0x6c,0x1c,0x81,0xf1,0x40,0xe2,0x01,0x00] + {nf} xor edx, ecx, 123456 +# CHECK: {evex} xor r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xf1,0x40,0xe2,0x01,0x00] + {evex} xor r9, 123456 +# CHECK: {nf} xor r9, 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xf1,0x40,0xe2,0x01,0x00] + {nf} xor r9, 123456 +# CHECK: xor r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x18,0x81,0xf1,0x40,0xe2,0x01,0x00] + xor r15, r9, 123456 +# CHECK: {nf} xor r15, r9, 123456 +# CHECK: encoding: [0x62,0xd4,0x84,0x1c,0x81,0xf1,0x40,0xe2,0x01,0x00] + {nf} xor r15, r9, 123456 +# CHECK: {evex} xor dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} xor dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} xor dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} xor dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: xor ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + xor ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} xor ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} xor ecx, dword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} xor qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x08,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {evex} xor qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} xor qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xfc,0x0c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} xor qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: xor r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x18,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + xor r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {nf} xor r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: encoding: [0x62,0xd4,0xb4,0x1c,0x81,0xb4,0x80,0x23,0x01,0x00,0x00,0x40,0xe2,0x01,0x00] + {nf} xor r9, qword ptr [r8 + 4*rax + 291], 123456 +# CHECK: {evex} xor cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x30,0xd9] + {evex} xor cl, bl +# CHECK: {nf} xor cl, bl +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x30,0xd9] + {nf} xor cl, bl +# CHECK: xor r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x18,0x30,0xd9] + xor r8b, cl, bl +# CHECK: {nf} xor r8b, cl, bl +# CHECK: encoding: [0x62,0xf4,0x3c,0x1c,0x30,0xd9] + {nf} xor r8b, cl, bl +# CHECK: {evex} xor byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x30,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} xor byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} xor byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x30,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} xor byte ptr [r8 + 4*rax + 291], bl +# CHECK: xor cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x30,0x9c,0x80,0x23,0x01,0x00,0x00] + xor cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {nf} xor cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x30,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} xor cl, byte ptr [r8 + 4*rax + 291], bl +# CHECK: {evex} xor ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x08,0x31,0xd0] + {evex} xor ax, dx +# CHECK: {nf} xor ax, dx +# CHECK: encoding: [0x62,0xf4,0x7d,0x0c,0x31,0xd0] + {nf} xor ax, dx +# CHECK: xor r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x18,0x31,0xd0] + xor r9w, ax, dx +# CHECK: {nf} xor r9w, ax, dx +# CHECK: encoding: [0x62,0xf4,0x35,0x1c,0x31,0xd0] + {nf} xor r9w, ax, dx +# CHECK: {evex} xor word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x31,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} xor word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} xor word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x31,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} xor word ptr [r8 + 4*rax + 291], dx +# CHECK: xor ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x31,0x94,0x80,0x23,0x01,0x00,0x00] + xor ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {nf} xor ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x31,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} xor ax, word ptr [r8 + 4*rax + 291], dx +# CHECK: {evex} xor edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x08,0x31,0xca] + {evex} xor edx, ecx +# CHECK: {nf} xor edx, ecx +# CHECK: encoding: [0x62,0xf4,0x7c,0x0c,0x31,0xca] + {nf} xor edx, ecx +# CHECK: xor r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x18,0x31,0xca] + xor r10d, edx, ecx +# CHECK: {nf} xor r10d, edx, ecx +# CHECK: encoding: [0x62,0xf4,0x2c,0x1c,0x31,0xca] + {nf} xor r10d, edx, ecx +# CHECK: {evex} xor dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} xor dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} xor dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xor dword ptr [r8 + 4*rax + 291], ecx +# CHECK: xor edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + xor edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {nf} xor edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xor edx, dword ptr [r8 + 4*rax + 291], ecx +# CHECK: {evex} xor r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x31,0xcf] + {evex} xor r15, r9 +# CHECK: {nf} xor r15, r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x31,0xcf] + {nf} xor r15, r9 +# CHECK: xor r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x18,0x31,0xcf] + xor r11, r15, r9 +# CHECK: {nf} xor r11, r15, r9 +# CHECK: encoding: [0x62,0x54,0xa4,0x1c,0x31,0xcf] + {nf} xor r11, r15, r9 +# CHECK: {evex} xor qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} xor qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} xor qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xor qword ptr [r8 + 4*rax + 291], r9 +# CHECK: xor r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + xor r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {nf} xor r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x31,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xor r15, qword ptr [r8 + 4*rax + 291], r9 +# CHECK: {evex} xor bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x32,0x9c,0x80,0x23,0x01,0x00,0x00] + {evex} xor bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} xor bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x32,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} xor bl, byte ptr [r8 + 4*rax + 291] +# CHECK: xor cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x18,0x32,0x9c,0x80,0x23,0x01,0x00,0x00] + xor cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {nf} xor cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x74,0x1c,0x32,0x9c,0x80,0x23,0x01,0x00,0x00] + {nf} xor cl, bl, byte ptr [r8 + 4*rax + 291] +# CHECK: {evex} xor dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x08,0x33,0x94,0x80,0x23,0x01,0x00,0x00] + {evex} xor dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} xor dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x0c,0x33,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} xor dx, word ptr [r8 + 4*rax + 291] +# CHECK: xor ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x18,0x33,0x94,0x80,0x23,0x01,0x00,0x00] + xor ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {nf} xor ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7d,0x1c,0x33,0x94,0x80,0x23,0x01,0x00,0x00] + {nf} xor ax, dx, word ptr [r8 + 4*rax + 291] +# CHECK: {evex} xor ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x08,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} xor ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} xor ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x7c,0x0c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xor ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: xor edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x18,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + xor edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {nf} xor edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0xd4,0x6c,0x1c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xor edx, ecx, dword ptr [r8 + 4*rax + 291] +# CHECK: {evex} xor r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x08,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {evex} xor r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} xor r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0xfc,0x0c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xor r9, qword ptr [r8 + 4*rax + 291] +# CHECK: xor r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x18,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + xor r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: {nf} xor r15, r9, qword ptr [r8 + 4*rax + 291] +# CHECK: encoding: [0x62,0x54,0x84,0x1c,0x33,0x8c,0x80,0x23,0x01,0x00,0x00] + {nf} xor r15, r9, qword ptr [r8 + 4*rax + 291] diff --git a/llvm/test/TableGen/x86-fold-tables.inc b/llvm/test/TableGen/x86-fold-tables.inc index 4f957d104d8dd..4e2ba21861d21 100644 --- a/llvm/test/TableGen/x86-fold-tables.inc +++ b/llvm/test/TableGen/x86-fold-tables.inc @@ -21,28 +21,50 @@ static const X86FoldTableEntry Table2Addr[] = { {X86::ADC8rr, X86::ADC8mr, TB_NO_REVERSE}, {X86::ADD16ri, X86::ADD16mi, TB_NO_REVERSE}, {X86::ADD16ri8, X86::ADD16mi8, TB_NO_REVERSE}, + {X86::ADD16ri8_NF, X86::ADD16mi8_NF, TB_NO_REVERSE}, + {X86::ADD16ri_NF, X86::ADD16mi_NF, TB_NO_REVERSE}, {X86::ADD16rr, X86::ADD16mr, TB_NO_REVERSE}, + {X86::ADD16rr_NF, X86::ADD16mr_NF, TB_NO_REVERSE}, {X86::ADD32ri, X86::ADD32mi, TB_NO_REVERSE}, {X86::ADD32ri8, X86::ADD32mi8, TB_NO_REVERSE}, + {X86::ADD32ri8_NF, X86::ADD32mi8_NF, TB_NO_REVERSE}, + {X86::ADD32ri_NF, X86::ADD32mi_NF, TB_NO_REVERSE}, {X86::ADD32rr, X86::ADD32mr, TB_NO_REVERSE}, + {X86::ADD32rr_NF, X86::ADD32mr_NF, TB_NO_REVERSE}, {X86::ADD64ri32, X86::ADD64mi32, TB_NO_REVERSE}, {X86::ADD64ri8, X86::ADD64mi8, TB_NO_REVERSE}, + {X86::ADD64ri8_NF, X86::ADD64mi8_NF, TB_NO_REVERSE}, + {X86::ADD64ri_NF, X86::ADD64mi32_NF, TB_NO_REVERSE}, {X86::ADD64rr, X86::ADD64mr, TB_NO_REVERSE}, + {X86::ADD64rr_NF, X86::ADD64mr_NF, TB_NO_REVERSE}, {X86::ADD8ri, X86::ADD8mi, TB_NO_REVERSE}, {X86::ADD8ri8, X86::ADD8mi8, TB_NO_REVERSE}, + {X86::ADD8ri_NF, X86::ADD8mi_NF, TB_NO_REVERSE}, {X86::ADD8rr, X86::ADD8mr, TB_NO_REVERSE}, + {X86::ADD8rr_NF, X86::ADD8mr_NF, TB_NO_REVERSE}, {X86::AND16ri, X86::AND16mi, TB_NO_REVERSE}, {X86::AND16ri8, X86::AND16mi8, TB_NO_REVERSE}, + {X86::AND16ri8_NF, X86::AND16mi8_NF, TB_NO_REVERSE}, + {X86::AND16ri_NF, X86::AND16mi_NF, TB_NO_REVERSE}, {X86::AND16rr, X86::AND16mr, TB_NO_REVERSE}, + {X86::AND16rr_NF, X86::AND16mr_NF, TB_NO_REVERSE}, {X86::AND32ri, X86::AND32mi, TB_NO_REVERSE}, {X86::AND32ri8, X86::AND32mi8, TB_NO_REVERSE}, + {X86::AND32ri8_NF, X86::AND32mi8_NF, TB_NO_REVERSE}, + {X86::AND32ri_NF, X86::AND32mi_NF, TB_NO_REVERSE}, {X86::AND32rr, X86::AND32mr, TB_NO_REVERSE}, + {X86::AND32rr_NF, X86::AND32mr_NF, TB_NO_REVERSE}, {X86::AND64ri32, X86::AND64mi32, TB_NO_REVERSE}, {X86::AND64ri8, X86::AND64mi8, TB_NO_REVERSE}, + {X86::AND64ri8_NF, X86::AND64mi8_NF, TB_NO_REVERSE}, + {X86::AND64ri_NF, X86::AND64mi32_NF, TB_NO_REVERSE}, {X86::AND64rr, X86::AND64mr, TB_NO_REVERSE}, + {X86::AND64rr_NF, X86::AND64mr_NF, TB_NO_REVERSE}, {X86::AND8ri, X86::AND8mi, TB_NO_REVERSE}, {X86::AND8ri8, X86::AND8mi8, TB_NO_REVERSE}, + {X86::AND8ri_NF, X86::AND8mi_NF, TB_NO_REVERSE}, {X86::AND8rr, X86::AND8mr, TB_NO_REVERSE}, + {X86::AND8rr_NF, X86::AND8mr_NF, TB_NO_REVERSE}, {X86::BTC16ri8, X86::BTC16mi8, TB_NO_REVERSE}, {X86::BTC32ri8, X86::BTC32mi8, TB_NO_REVERSE}, {X86::BTC64ri8, X86::BTC64mi8, TB_NO_REVERSE}, @@ -61,25 +83,40 @@ static const X86FoldTableEntry Table2Addr[] = { {X86::INC64r, X86::INC64m, TB_NO_REVERSE}, {X86::INC8r, X86::INC8m, TB_NO_REVERSE}, {X86::NEG16r, X86::NEG16m, TB_NO_REVERSE}, + {X86::NEG16r_NF, X86::NEG16m_NF, TB_NO_REVERSE}, {X86::NEG32r, X86::NEG32m, TB_NO_REVERSE}, + {X86::NEG32r_NF, X86::NEG32m_NF, TB_NO_REVERSE}, {X86::NEG64r, X86::NEG64m, TB_NO_REVERSE}, + {X86::NEG64r_NF, X86::NEG64m_NF, TB_NO_REVERSE}, {X86::NEG8r, X86::NEG8m, TB_NO_REVERSE}, + {X86::NEG8r_NF, X86::NEG8m_NF, TB_NO_REVERSE}, {X86::NOT16r, X86::NOT16m, TB_NO_REVERSE}, {X86::NOT32r, X86::NOT32m, TB_NO_REVERSE}, {X86::NOT64r, X86::NOT64m, TB_NO_REVERSE}, {X86::NOT8r, X86::NOT8m, TB_NO_REVERSE}, {X86::OR16ri, X86::OR16mi, TB_NO_REVERSE}, {X86::OR16ri8, X86::OR16mi8, TB_NO_REVERSE}, + {X86::OR16ri8_NF, X86::OR16mi8_NF, TB_NO_REVERSE}, + {X86::OR16ri_NF, X86::OR16mi_NF, TB_NO_REVERSE}, {X86::OR16rr, X86::OR16mr, TB_NO_REVERSE}, + {X86::OR16rr_NF, X86::OR16mr_NF, TB_NO_REVERSE}, {X86::OR32ri, X86::OR32mi, TB_NO_REVERSE}, {X86::OR32ri8, X86::OR32mi8, TB_NO_REVERSE}, + {X86::OR32ri8_NF, X86::OR32mi8_NF, TB_NO_REVERSE}, + {X86::OR32ri_NF, X86::OR32mi_NF, TB_NO_REVERSE}, {X86::OR32rr, X86::OR32mr, TB_NO_REVERSE}, + {X86::OR32rr_NF, X86::OR32mr_NF, TB_NO_REVERSE}, {X86::OR64ri32, X86::OR64mi32, TB_NO_REVERSE}, {X86::OR64ri8, X86::OR64mi8, TB_NO_REVERSE}, + {X86::OR64ri8_NF, X86::OR64mi8_NF, TB_NO_REVERSE}, + {X86::OR64ri_NF, X86::OR64mi32_NF, TB_NO_REVERSE}, {X86::OR64rr, X86::OR64mr, TB_NO_REVERSE}, + {X86::OR64rr_NF, X86::OR64mr_NF, TB_NO_REVERSE}, {X86::OR8ri, X86::OR8mi, TB_NO_REVERSE}, {X86::OR8ri8, X86::OR8mi8, TB_NO_REVERSE}, + {X86::OR8ri_NF, X86::OR8mi_NF, TB_NO_REVERSE}, {X86::OR8rr, X86::OR8mr, TB_NO_REVERSE}, + {X86::OR8rr_NF, X86::OR8mr_NF, TB_NO_REVERSE}, {X86::RCL16r1, X86::RCL16m1, TB_NO_REVERSE}, {X86::RCL16rCL, X86::RCL16mCL, TB_NO_REVERSE}, {X86::RCL16ri, X86::RCL16mi, TB_NO_REVERSE}, @@ -190,28 +227,50 @@ static const X86FoldTableEntry Table2Addr[] = { {X86::SHRD64rri8, X86::SHRD64mri8, TB_NO_REVERSE}, {X86::SUB16ri, X86::SUB16mi, TB_NO_REVERSE}, {X86::SUB16ri8, X86::SUB16mi8, TB_NO_REVERSE}, + {X86::SUB16ri8_NF, X86::SUB16mi8_NF, TB_NO_REVERSE}, + {X86::SUB16ri_NF, X86::SUB16mi_NF, TB_NO_REVERSE}, {X86::SUB16rr, X86::SUB16mr, TB_NO_REVERSE}, + {X86::SUB16rr_NF, X86::SUB16mr_NF, TB_NO_REVERSE}, {X86::SUB32ri, X86::SUB32mi, TB_NO_REVERSE}, {X86::SUB32ri8, X86::SUB32mi8, TB_NO_REVERSE}, + {X86::SUB32ri8_NF, X86::SUB32mi8_NF, TB_NO_REVERSE}, + {X86::SUB32ri_NF, X86::SUB32mi_NF, TB_NO_REVERSE}, {X86::SUB32rr, X86::SUB32mr, TB_NO_REVERSE}, + {X86::SUB32rr_NF, X86::SUB32mr_NF, TB_NO_REVERSE}, {X86::SUB64ri32, X86::SUB64mi32, TB_NO_REVERSE}, {X86::SUB64ri8, X86::SUB64mi8, TB_NO_REVERSE}, + {X86::SUB64ri8_NF, X86::SUB64mi8_NF, TB_NO_REVERSE}, + {X86::SUB64ri_NF, X86::SUB64mi32_NF, TB_NO_REVERSE}, {X86::SUB64rr, X86::SUB64mr, TB_NO_REVERSE}, + {X86::SUB64rr_NF, X86::SUB64mr_NF, TB_NO_REVERSE}, {X86::SUB8ri, X86::SUB8mi, TB_NO_REVERSE}, {X86::SUB8ri8, X86::SUB8mi8, TB_NO_REVERSE}, + {X86::SUB8ri_NF, X86::SUB8mi_NF, TB_NO_REVERSE}, {X86::SUB8rr, X86::SUB8mr, TB_NO_REVERSE}, + {X86::SUB8rr_NF, X86::SUB8mr_NF, TB_NO_REVERSE}, {X86::XOR16ri, X86::XOR16mi, TB_NO_REVERSE}, {X86::XOR16ri8, X86::XOR16mi8, TB_NO_REVERSE}, + {X86::XOR16ri8_NF, X86::XOR16mi8_NF, TB_NO_REVERSE}, + {X86::XOR16ri_NF, X86::XOR16mi_NF, TB_NO_REVERSE}, {X86::XOR16rr, X86::XOR16mr, TB_NO_REVERSE}, + {X86::XOR16rr_NF, X86::XOR16mr_NF, TB_NO_REVERSE}, {X86::XOR32ri, X86::XOR32mi, TB_NO_REVERSE}, {X86::XOR32ri8, X86::XOR32mi8, TB_NO_REVERSE}, + {X86::XOR32ri8_NF, X86::XOR32mi8_NF, TB_NO_REVERSE}, + {X86::XOR32ri_NF, X86::XOR32mi_NF, TB_NO_REVERSE}, {X86::XOR32rr, X86::XOR32mr, TB_NO_REVERSE}, + {X86::XOR32rr_NF, X86::XOR32mr_NF, TB_NO_REVERSE}, {X86::XOR64ri32, X86::XOR64mi32, TB_NO_REVERSE}, {X86::XOR64ri8, X86::XOR64mi8, TB_NO_REVERSE}, + {X86::XOR64ri8_NF, X86::XOR64mi8_NF, TB_NO_REVERSE}, + {X86::XOR64ri_NF, X86::XOR64mi32_NF, TB_NO_REVERSE}, {X86::XOR64rr, X86::XOR64mr, TB_NO_REVERSE}, + {X86::XOR64rr_NF, X86::XOR64mr_NF, TB_NO_REVERSE}, {X86::XOR8ri, X86::XOR8mi, TB_NO_REVERSE}, {X86::XOR8ri8, X86::XOR8mi8, TB_NO_REVERSE}, + {X86::XOR8ri_NF, X86::XOR8mi_NF, TB_NO_REVERSE}, {X86::XOR8rr, X86::XOR8mr, TB_NO_REVERSE}, + {X86::XOR8rr_NF, X86::XOR8mr_NF, TB_NO_REVERSE}, }; static const X86FoldTableEntry Table0[] = { @@ -408,8 +467,63 @@ static const X86FoldTableEntry Table0[] = { }; static const X86FoldTableEntry Table1[] = { + {X86::ADC16ri8_ND, X86::ADC16mi8_ND, 0}, + {X86::ADC16ri_ND, X86::ADC16mi_ND, 0}, + {X86::ADC16rr_ND, X86::ADC16mr_ND, 0}, + {X86::ADC32ri8_ND, X86::ADC32mi8_ND, 0}, + {X86::ADC32ri_ND, X86::ADC32mi_ND, 0}, + {X86::ADC32rr_ND, X86::ADC32mr_ND, 0}, + {X86::ADC64ri32_ND, X86::ADC64mi32_ND, 0}, + {X86::ADC64ri8_ND, X86::ADC64mi8_ND, 0}, + {X86::ADC64rr_ND, X86::ADC64mr_ND, 0}, + {X86::ADC8ri_ND, X86::ADC8mi_ND, 0}, + {X86::ADC8rr_ND, X86::ADC8mr_ND, 0}, + {X86::ADD16ri8_ND, X86::ADD16mi8_ND, 0}, + {X86::ADD16ri8_NF_ND, X86::ADD16mi8_NF_ND, 0}, + {X86::ADD16ri_ND, X86::ADD16mi_ND, 0}, + {X86::ADD16ri_NF_ND, X86::ADD16mi_NF_ND, 0}, + {X86::ADD16rr_ND, X86::ADD16mr_ND, 0}, + {X86::ADD16rr_NF_ND, X86::ADD16mr_NF_ND, 0}, + {X86::ADD32ri8_ND, X86::ADD32mi8_ND, 0}, + {X86::ADD32ri8_NF_ND, X86::ADD32mi8_NF_ND, 0}, + {X86::ADD32ri_ND, X86::ADD32mi_ND, 0}, + {X86::ADD32ri_NF_ND, X86::ADD32mi_NF_ND, 0}, + {X86::ADD32rr_ND, X86::ADD32mr_ND, 0}, + {X86::ADD32rr_NF_ND, X86::ADD32mr_NF_ND, 0}, + {X86::ADD64ri32_ND, X86::ADD64mi32_ND, 0}, + {X86::ADD64ri8_ND, X86::ADD64mi8_ND, 0}, + {X86::ADD64ri8_NF_ND, X86::ADD64mi8_NF_ND, 0}, + {X86::ADD64ri_NF_ND, X86::ADD64mi32_NF_ND, 0}, + {X86::ADD64rr_ND, X86::ADD64mr_ND, 0}, + {X86::ADD64rr_NF_ND, X86::ADD64mr_NF_ND, 0}, + {X86::ADD8ri_ND, X86::ADD8mi_ND, 0}, + {X86::ADD8ri_NF_ND, X86::ADD8mi_NF_ND, 0}, + {X86::ADD8rr_ND, X86::ADD8mr_ND, 0}, + {X86::ADD8rr_NF_ND, X86::ADD8mr_NF_ND, 0}, {X86::AESIMCrr, X86::AESIMCrm, TB_ALIGN_16}, {X86::AESKEYGENASSIST128rr, X86::AESKEYGENASSIST128rm, TB_ALIGN_16}, + {X86::AND16ri8_ND, X86::AND16mi8_ND, 0}, + {X86::AND16ri8_NF_ND, X86::AND16mi8_NF_ND, 0}, + {X86::AND16ri_ND, X86::AND16mi_ND, 0}, + {X86::AND16ri_NF_ND, X86::AND16mi_NF_ND, 0}, + {X86::AND16rr_ND, X86::AND16mr_ND, 0}, + {X86::AND16rr_NF_ND, X86::AND16mr_NF_ND, 0}, + {X86::AND32ri8_ND, X86::AND32mi8_ND, 0}, + {X86::AND32ri8_NF_ND, X86::AND32mi8_NF_ND, 0}, + {X86::AND32ri_ND, X86::AND32mi_ND, 0}, + {X86::AND32ri_NF_ND, X86::AND32mi_NF_ND, 0}, + {X86::AND32rr_ND, X86::AND32mr_ND, 0}, + {X86::AND32rr_NF_ND, X86::AND32mr_NF_ND, 0}, + {X86::AND64ri32_ND, X86::AND64mi32_ND, 0}, + {X86::AND64ri8_ND, X86::AND64mi8_ND, 0}, + {X86::AND64ri8_NF_ND, X86::AND64mi8_NF_ND, 0}, + {X86::AND64ri_NF_ND, X86::AND64mi32_NF_ND, 0}, + {X86::AND64rr_ND, X86::AND64mr_ND, 0}, + {X86::AND64rr_NF_ND, X86::AND64mr_NF_ND, 0}, + {X86::AND8ri_ND, X86::AND8mi_ND, 0}, + {X86::AND8ri_NF_ND, X86::AND8mi_NF_ND, 0}, + {X86::AND8rr_ND, X86::AND8mr_ND, 0}, + {X86::AND8rr_NF_ND, X86::AND8mr_NF_ND, 0}, {X86::BEXTR32rr, X86::BEXTR32rm, 0}, {X86::BEXTR32rr_EVEX, X86::BEXTR32rm_EVEX, 0}, {X86::BEXTR64rr, X86::BEXTR64rm, 0}, @@ -555,6 +669,40 @@ static const X86FoldTableEntry Table1[] = { {X86::MOVZX32rr8_NOREX, X86::MOVZX32rm8_NOREX, 0}, {X86::MOVZX64rr16, X86::MOVZX64rm16, 0}, {X86::MOVZX64rr8, X86::MOVZX64rm8, 0}, + {X86::NEG16r_ND, X86::NEG16m_ND, 0}, + {X86::NEG16r_NF_ND, X86::NEG16m_NF_ND, 0}, + {X86::NEG32r_ND, X86::NEG32m_ND, 0}, + {X86::NEG32r_NF_ND, X86::NEG32m_NF_ND, 0}, + {X86::NEG64r_ND, X86::NEG64m_ND, 0}, + {X86::NEG64r_NF_ND, X86::NEG64m_NF_ND, 0}, + {X86::NEG8r_ND, X86::NEG8m_ND, 0}, + {X86::NEG8r_NF_ND, X86::NEG8m_NF_ND, 0}, + {X86::NOT16r_ND, X86::NOT16m_ND, 0}, + {X86::NOT32r_ND, X86::NOT32m_ND, 0}, + {X86::NOT64r_ND, X86::NOT64m_ND, 0}, + {X86::NOT8r_ND, X86::NOT8m_ND, 0}, + {X86::OR16ri8_ND, X86::OR16mi8_ND, 0}, + {X86::OR16ri8_NF_ND, X86::OR16mi8_NF_ND, 0}, + {X86::OR16ri_ND, X86::OR16mi_ND, 0}, + {X86::OR16ri_NF_ND, X86::OR16mi_NF_ND, 0}, + {X86::OR16rr_ND, X86::OR16mr_ND, 0}, + {X86::OR16rr_NF_ND, X86::OR16mr_NF_ND, 0}, + {X86::OR32ri8_ND, X86::OR32mi8_ND, 0}, + {X86::OR32ri8_NF_ND, X86::OR32mi8_NF_ND, 0}, + {X86::OR32ri_ND, X86::OR32mi_ND, 0}, + {X86::OR32ri_NF_ND, X86::OR32mi_NF_ND, 0}, + {X86::OR32rr_ND, X86::OR32mr_ND, 0}, + {X86::OR32rr_NF_ND, X86::OR32mr_NF_ND, 0}, + {X86::OR64ri32_ND, X86::OR64mi32_ND, 0}, + {X86::OR64ri8_ND, X86::OR64mi8_ND, 0}, + {X86::OR64ri8_NF_ND, X86::OR64mi8_NF_ND, 0}, + {X86::OR64ri_NF_ND, X86::OR64mi32_NF_ND, 0}, + {X86::OR64rr_ND, X86::OR64mr_ND, 0}, + {X86::OR64rr_NF_ND, X86::OR64mr_NF_ND, 0}, + {X86::OR8ri_ND, X86::OR8mi_ND, 0}, + {X86::OR8ri_NF_ND, X86::OR8mi_NF_ND, 0}, + {X86::OR8rr_ND, X86::OR8mr_ND, 0}, + {X86::OR8rr_NF_ND, X86::OR8mr_NF_ND, 0}, {X86::PABSBrr, X86::PABSBrm, TB_ALIGN_16}, {X86::PABSDrr, X86::PABSDrm, TB_ALIGN_16}, {X86::PABSWrr, X86::PABSWrm, TB_ALIGN_16}, @@ -605,6 +753,17 @@ static const X86FoldTableEntry Table1[] = { {X86::SARX32rr_EVEX, X86::SARX32rm_EVEX, 0}, {X86::SARX64rr, X86::SARX64rm, 0}, {X86::SARX64rr_EVEX, X86::SARX64rm_EVEX, 0}, + {X86::SBB16ri8_ND, X86::SBB16mi8_ND, 0}, + {X86::SBB16ri_ND, X86::SBB16mi_ND, 0}, + {X86::SBB16rr_ND, X86::SBB16mr_ND, 0}, + {X86::SBB32ri8_ND, X86::SBB32mi8_ND, 0}, + {X86::SBB32ri_ND, X86::SBB32mi_ND, 0}, + {X86::SBB32rr_ND, X86::SBB32mr_ND, 0}, + {X86::SBB64ri32_ND, X86::SBB64mi32_ND, 0}, + {X86::SBB64ri8_ND, X86::SBB64mi8_ND, 0}, + {X86::SBB64rr_ND, X86::SBB64mr_ND, 0}, + {X86::SBB8ri_ND, X86::SBB8mi_ND, 0}, + {X86::SBB8rr_ND, X86::SBB8mr_ND, 0}, {X86::SHLX32rr, X86::SHLX32rm, 0}, {X86::SHLX32rr_EVEX, X86::SHLX32rm_EVEX, 0}, {X86::SHLX64rr, X86::SHLX64rm, 0}, @@ -617,6 +776,28 @@ static const X86FoldTableEntry Table1[] = { {X86::SQRTPSr, X86::SQRTPSm, TB_ALIGN_16}, {X86::SQRTSDr, X86::SQRTSDm, 0}, {X86::SQRTSSr, X86::SQRTSSm, 0}, + {X86::SUB16ri8_ND, X86::SUB16mi8_ND, 0}, + {X86::SUB16ri8_NF_ND, X86::SUB16mi8_NF_ND, 0}, + {X86::SUB16ri_ND, X86::SUB16mi_ND, 0}, + {X86::SUB16ri_NF_ND, X86::SUB16mi_NF_ND, 0}, + {X86::SUB16rr_ND, X86::SUB16mr_ND, 0}, + {X86::SUB16rr_NF_ND, X86::SUB16mr_NF_ND, 0}, + {X86::SUB32ri8_ND, X86::SUB32mi8_ND, 0}, + {X86::SUB32ri8_NF_ND, X86::SUB32mi8_NF_ND, 0}, + {X86::SUB32ri_ND, X86::SUB32mi_ND, 0}, + {X86::SUB32ri_NF_ND, X86::SUB32mi_NF_ND, 0}, + {X86::SUB32rr_ND, X86::SUB32mr_ND, 0}, + {X86::SUB32rr_NF_ND, X86::SUB32mr_NF_ND, 0}, + {X86::SUB64ri32_ND, X86::SUB64mi32_ND, 0}, + {X86::SUB64ri8_ND, X86::SUB64mi8_ND, 0}, + {X86::SUB64ri8_NF_ND, X86::SUB64mi8_NF_ND, 0}, + {X86::SUB64ri_NF_ND, X86::SUB64mi32_NF_ND, 0}, + {X86::SUB64rr_ND, X86::SUB64mr_ND, 0}, + {X86::SUB64rr_NF_ND, X86::SUB64mr_NF_ND, 0}, + {X86::SUB8ri_ND, X86::SUB8mi_ND, 0}, + {X86::SUB8ri_NF_ND, X86::SUB8mi_NF_ND, 0}, + {X86::SUB8rr_ND, X86::SUB8mr_ND, 0}, + {X86::SUB8rr_NF_ND, X86::SUB8mr_NF_ND, 0}, {X86::T1MSKC32rr, X86::T1MSKC32rm, 0}, {X86::T1MSKC64rr, X86::T1MSKC64rm, 0}, {X86::TZCNT16rr, X86::TZCNT16rm, 0}, @@ -1314,6 +1495,28 @@ static const X86FoldTableEntry Table1[] = { {X86::VUCOMISSZrr_Int, X86::VUCOMISSZrm_Int, TB_NO_REVERSE}, {X86::VUCOMISSrr, X86::VUCOMISSrm, 0}, {X86::VUCOMISSrr_Int, X86::VUCOMISSrm_Int, TB_NO_REVERSE}, + {X86::XOR16ri8_ND, X86::XOR16mi8_ND, 0}, + {X86::XOR16ri8_NF_ND, X86::XOR16mi8_NF_ND, 0}, + {X86::XOR16ri_ND, X86::XOR16mi_ND, 0}, + {X86::XOR16ri_NF_ND, X86::XOR16mi_NF_ND, 0}, + {X86::XOR16rr_ND, X86::XOR16mr_ND, 0}, + {X86::XOR16rr_NF_ND, X86::XOR16mr_NF_ND, 0}, + {X86::XOR32ri8_ND, X86::XOR32mi8_ND, 0}, + {X86::XOR32ri8_NF_ND, X86::XOR32mi8_NF_ND, 0}, + {X86::XOR32ri_ND, X86::XOR32mi_ND, 0}, + {X86::XOR32ri_NF_ND, X86::XOR32mi_NF_ND, 0}, + {X86::XOR32rr_ND, X86::XOR32mr_ND, 0}, + {X86::XOR32rr_NF_ND, X86::XOR32mr_NF_ND, 0}, + {X86::XOR64ri32_ND, X86::XOR64mi32_ND, 0}, + {X86::XOR64ri8_ND, X86::XOR64mi8_ND, 0}, + {X86::XOR64ri8_NF_ND, X86::XOR64mi8_NF_ND, 0}, + {X86::XOR64ri_NF_ND, X86::XOR64mi32_NF_ND, 0}, + {X86::XOR64rr_ND, X86::XOR64mr_ND, 0}, + {X86::XOR64rr_NF_ND, X86::XOR64mr_NF_ND, 0}, + {X86::XOR8ri_ND, X86::XOR8mi_ND, 0}, + {X86::XOR8ri_NF_ND, X86::XOR8mi_NF_ND, 0}, + {X86::XOR8rr_ND, X86::XOR8mr_ND, 0}, + {X86::XOR8rr_NF_ND, X86::XOR8mr_NF_ND, 0}, }; static const X86FoldTableEntry Table2[] = { @@ -1322,15 +1525,31 @@ static const X86FoldTableEntry Table2[] = { {X86::ADD64rr_DB, X86::ADD64rm, TB_NO_REVERSE}, {X86::ADD8rr_DB, X86::ADD8rm, TB_NO_REVERSE}, {X86::ADC16rr, X86::ADC16rm, 0}, + {X86::ADC16rr_ND, X86::ADC16rm_ND, 0}, {X86::ADC32rr, X86::ADC32rm, 0}, + {X86::ADC32rr_ND, X86::ADC32rm_ND, 0}, {X86::ADC64rr, X86::ADC64rm, 0}, + {X86::ADC64rr_ND, X86::ADC64rm_ND, 0}, {X86::ADC8rr, X86::ADC8rm, 0}, + {X86::ADC8rr_ND, X86::ADC8rm_ND, 0}, {X86::ADCX32rr, X86::ADCX32rm, 0}, {X86::ADCX64rr, X86::ADCX64rm, 0}, {X86::ADD16rr, X86::ADD16rm, 0}, + {X86::ADD16rr_ND, X86::ADD16rm_ND, 0}, + {X86::ADD16rr_NF, X86::ADD16rm_NF, 0}, + {X86::ADD16rr_NF_ND, X86::ADD16rm_NF_ND, 0}, {X86::ADD32rr, X86::ADD32rm, 0}, + {X86::ADD32rr_ND, X86::ADD32rm_ND, 0}, + {X86::ADD32rr_NF, X86::ADD32rm_NF, 0}, + {X86::ADD32rr_NF_ND, X86::ADD32rm_NF_ND, 0}, {X86::ADD64rr, X86::ADD64rm, 0}, + {X86::ADD64rr_ND, X86::ADD64rm_ND, 0}, + {X86::ADD64rr_NF, X86::ADD64rm_NF, 0}, + {X86::ADD64rr_NF_ND, X86::ADD64rm_NF_ND, 0}, {X86::ADD8rr, X86::ADD8rm, 0}, + {X86::ADD8rr_ND, X86::ADD8rm_ND, 0}, + {X86::ADD8rr_NF, X86::ADD8rm_NF, 0}, + {X86::ADD8rr_NF_ND, X86::ADD8rm_NF_ND, 0}, {X86::ADDPDrr, X86::ADDPDrm, TB_ALIGN_16}, {X86::ADDPSrr, X86::ADDPSrm, TB_ALIGN_16}, {X86::ADDSDrr, X86::ADDSDrm, 0}, @@ -1346,9 +1565,21 @@ static const X86FoldTableEntry Table2[] = { {X86::AESENCLASTrr, X86::AESENCLASTrm, TB_ALIGN_16}, {X86::AESENCrr, X86::AESENCrm, TB_ALIGN_16}, {X86::AND16rr, X86::AND16rm, 0}, + {X86::AND16rr_ND, X86::AND16rm_ND, 0}, + {X86::AND16rr_NF, X86::AND16rm_NF, 0}, + {X86::AND16rr_NF_ND, X86::AND16rm_NF_ND, 0}, {X86::AND32rr, X86::AND32rm, 0}, + {X86::AND32rr_ND, X86::AND32rm_ND, 0}, + {X86::AND32rr_NF, X86::AND32rm_NF, 0}, + {X86::AND32rr_NF_ND, X86::AND32rm_NF_ND, 0}, {X86::AND64rr, X86::AND64rm, 0}, + {X86::AND64rr_ND, X86::AND64rm_ND, 0}, + {X86::AND64rr_NF, X86::AND64rm_NF, 0}, + {X86::AND64rr_NF_ND, X86::AND64rm_NF_ND, 0}, {X86::AND8rr, X86::AND8rm, 0}, + {X86::AND8rr_ND, X86::AND8rm_ND, 0}, + {X86::AND8rr_NF, X86::AND8rm_NF, 0}, + {X86::AND8rr_NF_ND, X86::AND8rm_NF_ND, 0}, {X86::ANDN32rr, X86::ANDN32rm, 0}, {X86::ANDN32rr_EVEX, X86::ANDN32rm_EVEX, 0}, {X86::ANDN64rr, X86::ANDN64rm, 0}, @@ -1503,9 +1734,21 @@ static const X86FoldTableEntry Table2[] = { {X86::MULX64rr, X86::MULX64rm, 0}, {X86::MULX64rr_EVEX, X86::MULX64rm_EVEX, 0}, {X86::OR16rr, X86::OR16rm, 0}, + {X86::OR16rr_ND, X86::OR16rm_ND, 0}, + {X86::OR16rr_NF, X86::OR16rm_NF, 0}, + {X86::OR16rr_NF_ND, X86::OR16rm_NF_ND, 0}, {X86::OR32rr, X86::OR32rm, 0}, + {X86::OR32rr_ND, X86::OR32rm_ND, 0}, + {X86::OR32rr_NF, X86::OR32rm_NF, 0}, + {X86::OR32rr_NF_ND, X86::OR32rm_NF_ND, 0}, {X86::OR64rr, X86::OR64rm, 0}, + {X86::OR64rr_ND, X86::OR64rm_ND, 0}, + {X86::OR64rr_NF, X86::OR64rm_NF, 0}, + {X86::OR64rr_NF_ND, X86::OR64rm_NF_ND, 0}, {X86::OR8rr, X86::OR8rm, 0}, + {X86::OR8rr_ND, X86::OR8rm_ND, 0}, + {X86::OR8rr_NF, X86::OR8rm_NF, 0}, + {X86::OR8rr_NF_ND, X86::OR8rm_NF_ND, 0}, {X86::ORPDrr, X86::ORPDrm, TB_ALIGN_16}, {X86::ORPSrr, X86::ORPSrm, TB_ALIGN_16}, {X86::PACKSSDWrr, X86::PACKSSDWrm, TB_ALIGN_16}, @@ -1628,9 +1871,13 @@ static const X86FoldTableEntry Table2[] = { {X86::ROUNDSSr_Int, X86::ROUNDSSm_Int, TB_NO_REVERSE}, {X86::RSQRTSSr_Int, X86::RSQRTSSm_Int, TB_NO_REVERSE}, {X86::SBB16rr, X86::SBB16rm, 0}, + {X86::SBB16rr_ND, X86::SBB16rm_ND, 0}, {X86::SBB32rr, X86::SBB32rm, 0}, + {X86::SBB32rr_ND, X86::SBB32rm_ND, 0}, {X86::SBB64rr, X86::SBB64rm, 0}, + {X86::SBB64rr_ND, X86::SBB64rm_ND, 0}, {X86::SBB8rr, X86::SBB8rm, 0}, + {X86::SBB8rr_ND, X86::SBB8rm_ND, 0}, {X86::SHA1MSG1rr, X86::SHA1MSG1rm, TB_ALIGN_16}, {X86::SHA1MSG1rr_EVEX, X86::SHA1MSG1rm_EVEX, TB_ALIGN_16}, {X86::SHA1MSG2rr, X86::SHA1MSG2rm, TB_ALIGN_16}, @@ -1650,9 +1897,21 @@ static const X86FoldTableEntry Table2[] = { {X86::SQRTSDr_Int, X86::SQRTSDm_Int, TB_NO_REVERSE}, {X86::SQRTSSr_Int, X86::SQRTSSm_Int, TB_NO_REVERSE}, {X86::SUB16rr, X86::SUB16rm, 0}, + {X86::SUB16rr_ND, X86::SUB16rm_ND, 0}, + {X86::SUB16rr_NF, X86::SUB16rm_NF, 0}, + {X86::SUB16rr_NF_ND, X86::SUB16rm_NF_ND, 0}, {X86::SUB32rr, X86::SUB32rm, 0}, + {X86::SUB32rr_ND, X86::SUB32rm_ND, 0}, + {X86::SUB32rr_NF, X86::SUB32rm_NF, 0}, + {X86::SUB32rr_NF_ND, X86::SUB32rm_NF_ND, 0}, {X86::SUB64rr, X86::SUB64rm, 0}, + {X86::SUB64rr_ND, X86::SUB64rm_ND, 0}, + {X86::SUB64rr_NF, X86::SUB64rm_NF, 0}, + {X86::SUB64rr_NF_ND, X86::SUB64rm_NF_ND, 0}, {X86::SUB8rr, X86::SUB8rm, 0}, + {X86::SUB8rr_ND, X86::SUB8rm_ND, 0}, + {X86::SUB8rr_NF, X86::SUB8rm_NF, 0}, + {X86::SUB8rr_NF_ND, X86::SUB8rm_NF_ND, 0}, {X86::SUBPDrr, X86::SUBPDrm, TB_ALIGN_16}, {X86::SUBPSrr, X86::SUBPSrm, TB_ALIGN_16}, {X86::SUBSDrr, X86::SUBSDrm, 0}, @@ -3281,9 +3540,21 @@ static const X86FoldTableEntry Table2[] = { {X86::VXORPSZrr, X86::VXORPSZrm, 0}, {X86::VXORPSrr, X86::VXORPSrm, 0}, {X86::XOR16rr, X86::XOR16rm, 0}, + {X86::XOR16rr_ND, X86::XOR16rm_ND, 0}, + {X86::XOR16rr_NF, X86::XOR16rm_NF, 0}, + {X86::XOR16rr_NF_ND, X86::XOR16rm_NF_ND, 0}, {X86::XOR32rr, X86::XOR32rm, 0}, + {X86::XOR32rr_ND, X86::XOR32rm_ND, 0}, + {X86::XOR32rr_NF, X86::XOR32rm_NF, 0}, + {X86::XOR32rr_NF_ND, X86::XOR32rm_NF_ND, 0}, {X86::XOR64rr, X86::XOR64rm, 0}, + {X86::XOR64rr_ND, X86::XOR64rm_ND, 0}, + {X86::XOR64rr_NF, X86::XOR64rm_NF, 0}, + {X86::XOR64rr_NF_ND, X86::XOR64rm_NF_ND, 0}, {X86::XOR8rr, X86::XOR8rm, 0}, + {X86::XOR8rr_ND, X86::XOR8rm_ND, 0}, + {X86::XOR8rr_NF, X86::XOR8rm_NF, 0}, + {X86::XOR8rr_NF_ND, X86::XOR8rm_NF_ND, 0}, {X86::XORPDrr, X86::XORPDrm, TB_ALIGN_16}, {X86::XORPSrr, X86::XORPSrm, TB_ALIGN_16}, }; diff --git a/llvm/utils/TableGen/X86DisassemblerTables.cpp b/llvm/utils/TableGen/X86DisassemblerTables.cpp index 06e7ec3b92307..9ee1472bdf5cc 100644 --- a/llvm/utils/TableGen/X86DisassemblerTables.cpp +++ b/llvm/utils/TableGen/X86DisassemblerTables.cpp @@ -563,6 +563,13 @@ static inline bool inheritsFrom(InstructionContext child, case IC_EVEX_L2_W_XD_KZ_B: case IC_EVEX_L2_W_OPSIZE_KZ_B: return false; + case IC_EVEX_NF: + case IC_EVEX_B_NF: + case IC_EVEX_OPSIZE_NF: + case IC_EVEX_OPSIZE_B_NF: + case IC_EVEX_W_NF: + case IC_EVEX_W_B_NF: + return false; default: errs() << "Unknown instruction class: " << stringForContext((InstructionContext)parent) << "\n"; @@ -889,7 +896,19 @@ void DisassemblerTables::emitContextTable(raw_ostream &o, unsigned &i) const { if ((index & ATTR_EVEX) && (index & ATTR_OPSIZE) && (index & ATTR_ADSIZE)) o << "IC_EVEX_OPSIZE_ADSIZE"; - else if ((index & ATTR_EVEX) || (index & ATTR_VEX) || (index & ATTR_VEXL)) { + else if (index & ATTR_EVEXNF) { + o << "IC_EVEX"; + if (index & ATTR_REXW) + o << "_W"; + else if (index & ATTR_OPSIZE) + o << "_OPSIZE"; + + if (index & ATTR_EVEXB) + o << "_B"; + + o << "_NF"; + } else if ((index & ATTR_EVEX) || (index & ATTR_VEX) || + (index & ATTR_VEXL)) { if (index & ATTR_EVEX) o << "IC_EVEX"; else diff --git a/llvm/utils/TableGen/X86FoldTablesEmitter.cpp b/llvm/utils/TableGen/X86FoldTablesEmitter.cpp index d3299e2810316..101b75e2f087e 100644 --- a/llvm/utils/TableGen/X86FoldTablesEmitter.cpp +++ b/llvm/utils/TableGen/X86FoldTablesEmitter.cpp @@ -348,7 +348,9 @@ class IsMatch { // memory form: broadcast if (IsBroadcast && (RegRI.HasEVEX_B || !MemRI.HasEVEX_B)) return false; - if (!IsBroadcast && (RegRI.HasEVEX_B || MemRI.HasEVEX_B)) + // EVEX_B indicates NDD for MAP4 instructions + if (!IsBroadcast && (RegRI.HasEVEX_B || MemRI.HasEVEX_B) && + RegRI.OpMap != X86Local::T_MAP4) return false; if (!mayFoldFromLeftToRight(RegRI.Form, MemRI.Form)) @@ -369,7 +371,8 @@ class IsMatch { RegRI.OpMap, RegRI.OpSize, RegRI.AdSize, RegRI.HasREX_W, RegRI.HasVEX_4V, RegRI.HasVEX_L, RegRI.IgnoresVEX_L, RegRI.IgnoresW, RegRI.HasEVEX_K, RegRI.HasEVEX_KZ, - RegRI.HasEVEX_L2, RegRec->getValueAsBit("hasEVEX_RC"), + RegRI.HasEVEX_L2, RegRI.HasEVEX_NF, + RegRec->getValueAsBit("hasEVEX_RC"), RegRec->getValueAsBit("hasLockPrefix"), RegRec->getValueAsBit("hasNoTrackPrefix"), RegRec->getValueAsBit("EVEX_W1_VEX_W0")) != @@ -377,7 +380,8 @@ class IsMatch { MemRI.OpMap, MemRI.OpSize, MemRI.AdSize, MemRI.HasREX_W, MemRI.HasVEX_4V, MemRI.HasVEX_L, MemRI.IgnoresVEX_L, MemRI.IgnoresW, MemRI.HasEVEX_K, MemRI.HasEVEX_KZ, - MemRI.HasEVEX_L2, MemRec->getValueAsBit("hasEVEX_RC"), + MemRI.HasEVEX_L2, MemRI.HasEVEX_NF, + MemRec->getValueAsBit("hasEVEX_RC"), MemRec->getValueAsBit("hasLockPrefix"), MemRec->getValueAsBit("hasNoTrackPrefix"), MemRec->getValueAsBit("EVEX_W1_VEX_W0"))) @@ -668,6 +672,14 @@ void X86FoldTablesEmitter::run(raw_ostream &O) { if (NoFoldSet.find(Rec->getName()) != NoFoldSet.end()) continue; + // Promoted legacy instruction is in EVEX space, and has REX2-encoding + // alternative. It's added due to HW design and never emitted by compiler. + if (byteFromBitsInit(Rec->getValueAsBitsInit("OpMapBits")) == + X86Local::T_MAP4 && + byteFromBitsInit(Rec->getValueAsBitsInit("explicitOpPrefixBits")) == + X86Local::ExplicitEVEX) + continue; + // - Instructions including RST register class operands are not relevant // for memory folding (for further details check the explanation in // lib/Target/X86/X86InstrFPStack.td file). diff --git a/llvm/utils/TableGen/X86RecognizableInstr.cpp b/llvm/utils/TableGen/X86RecognizableInstr.cpp index 47ee9544f3233..fb430676c504b 100644 --- a/llvm/utils/TableGen/X86RecognizableInstr.cpp +++ b/llvm/utils/TableGen/X86RecognizableInstr.cpp @@ -125,6 +125,7 @@ RecognizableInstrBase::RecognizableInstrBase(const CodeGenInstruction &insn) { HasEVEX_K = Rec->getValueAsBit("hasEVEX_K"); HasEVEX_KZ = Rec->getValueAsBit("hasEVEX_Z"); HasEVEX_B = Rec->getValueAsBit("hasEVEX_B"); + HasEVEX_NF = Rec->getValueAsBit("hasEVEX_NF"); IsCodeGenOnly = Rec->getValueAsBit("isCodeGenOnly"); IsAsmParserOnly = Rec->getValueAsBit("isAsmParserOnly"); ForceDisassemble = Rec->getValueAsBit("ForceDisassemble"); @@ -185,6 +186,9 @@ void RecognizableInstr::processInstr(DisassemblerTables &tables, : (HasEVEX_KZ ? n##_KZ \ : (HasEVEX_K ? n##_K : (HasEVEX_B ? n##_B : n))))) +#define EVEX_NF(n) (HasEVEX_NF ? n##_NF : n) +#define EVEX_B_NF(n) (HasEVEX_B ? EVEX_NF(n##_B) : EVEX_NF(n)) + InstructionContext RecognizableInstr::insnContext() const { InstructionContext insnContext; @@ -193,8 +197,15 @@ InstructionContext RecognizableInstr::insnContext() const { errs() << "Don't support VEX.L if EVEX_L2 is enabled: " << Name << "\n"; llvm_unreachable("Don't support VEX.L if EVEX_L2 is enabled"); } - // VEX_L & VEX_W - if (!EncodeRC && HasVEX_L && HasREX_W) { + if (HasEVEX_NF) { + if (OpPrefix == X86Local::PD) + insnContext = EVEX_B_NF(IC_EVEX_OPSIZE); + else if (HasREX_W) + insnContext = EVEX_B_NF(IC_EVEX_W); + else + insnContext = EVEX_B_NF(IC_EVEX); + } else if (!EncodeRC && HasVEX_L && HasREX_W) { + // VEX_L & VEX_W if (OpPrefix == X86Local::PD) insnContext = EVEX_KB(IC_EVEX_L_W_OPSIZE); else if (OpPrefix == X86Local::XS) @@ -486,6 +497,7 @@ void RecognizableInstr::emitInstructionSpecifier() { ++additionalOperands; #endif + bool IsND = OpMap == X86Local::T_MAP4 && HasEVEX_B && HasVEX_4V; switch (Form) { default: llvm_unreachable("Unhandled form"); @@ -536,11 +548,14 @@ void RecognizableInstr::emitInstructionSpecifier() { numPhysicalOperands <= 3 + additionalOperands && "Unexpected number of operands for MRMDestReg"); + if (IsND) + HANDLE_OPERAND(vvvvRegister) + HANDLE_OPERAND(rmRegister) if (HasEVEX_K) HANDLE_OPERAND(writemaskRegister) - if (HasVEX_4V) + if (!IsND && HasVEX_4V) // FIXME: In AVX, the register below becomes the one encoded // in ModRMVEX and the one above the one in the VEX.VVVV field HANDLE_OPERAND(vvvvRegister) @@ -570,12 +585,15 @@ void RecognizableInstr::emitInstructionSpecifier() { numPhysicalOperands <= 3 + additionalOperands && "Unexpected number of operands for MRMDestMemFrm with VEX_4V"); + if (IsND) + HANDLE_OPERAND(vvvvRegister) + HANDLE_OPERAND(memory) if (HasEVEX_K) HANDLE_OPERAND(writemaskRegister) - if (HasVEX_4V) + if (!IsND && HasVEX_4V) // FIXME: In AVX, the register below becomes the one encoded // in ModRMVEX and the one above the one in the VEX.VVVV field HANDLE_OPERAND(vvvvRegister) @@ -594,12 +612,15 @@ void RecognizableInstr::emitInstructionSpecifier() { numPhysicalOperands <= 4 + additionalOperands && "Unexpected number of operands for MRMSrcRegFrm"); + if (IsND) + HANDLE_OPERAND(vvvvRegister) + HANDLE_OPERAND(roRegister) if (HasEVEX_K) HANDLE_OPERAND(writemaskRegister) - if (HasVEX_4V) + if (!IsND && HasVEX_4V) // FIXME: In AVX, the register below becomes the one encoded // in ModRMVEX and the one above the one in the VEX.VVVV field HANDLE_OPERAND(vvvvRegister) @@ -641,13 +662,15 @@ void RecognizableInstr::emitInstructionSpecifier() { assert(numPhysicalOperands >= 2 + additionalOperands && numPhysicalOperands <= 4 + additionalOperands && "Unexpected number of operands for MRMSrcMemFrm"); + if (IsND) + HANDLE_OPERAND(vvvvRegister) HANDLE_OPERAND(roRegister) if (HasEVEX_K) HANDLE_OPERAND(writemaskRegister) - if (HasVEX_4V) + if (!IsND && HasVEX_4V) // FIXME: In AVX, the register below becomes the one encoded // in ModRMVEX and the one above the one in the VEX.VVVV field HANDLE_OPERAND(vvvvRegister) @@ -1216,6 +1239,8 @@ RecognizableInstr::roRegisterEncodingFromString(const std::string &s, OperandEncoding RecognizableInstr::vvvvRegisterEncodingFromString(const std::string &s, uint8_t OpSize) { + ENCODING("GR8", ENCODING_VVVV) + ENCODING("GR16", ENCODING_VVVV) ENCODING("GR32", ENCODING_VVVV) ENCODING("GR64", ENCODING_VVVV) ENCODING("FR32", ENCODING_VVVV) diff --git a/llvm/utils/TableGen/X86RecognizableInstr.h b/llvm/utils/TableGen/X86RecognizableInstr.h index 61ad5e32b3fb0..007c700cdfaf7 100644 --- a/llvm/utils/TableGen/X86RecognizableInstr.h +++ b/llvm/utils/TableGen/X86RecognizableInstr.h @@ -172,7 +172,7 @@ enum { PD = 1, XS = 2, XD = 3, PS = 4 }; enum { VEX = 1, XOP = 2, EVEX = 3 }; enum { OpSize16 = 1, OpSize32 = 2 }; enum { AdSize16 = 1, AdSize32 = 2, AdSize64 = 3 }; -enum { ExplicitREX2 = 1 }; +enum { ExplicitREX2 = 1, ExplicitEVEX = 3 }; } // namespace X86Local namespace X86Disassembler { @@ -212,6 +212,8 @@ struct RecognizableInstrBase { bool HasEVEX_KZ; /// The hasEVEX_B field from the record bool HasEVEX_B; + /// The hasEVEX_NF field from the record + bool HasEVEX_NF; /// Indicates that the instruction uses the L and L' fields for RC. bool EncodeRC; /// The isCodeGenOnly field from the record