[llvm] [X86][MC] Support encoding/decoding for APX CCMP/CTEST (PR #83863)

Shengchen Kan via llvm-commits llvm-commits at lists.llvm.org
Mon Mar 4 21:14:09 PST 2024


https://github.com/KanRobert updated https://github.com/llvm/llvm-project/pull/83863

>From 8fa96be4df3a53cdb4813573078604737da6b667 Mon Sep 17 00:00:00 2001
From: Shengchen Kan <shengchen.kan at intel.com>
Date: Mon, 4 Mar 2024 15:16:04 +0800
Subject: [PATCH 1/2] [X86][MC] Support encoding/decoding for APX CCMP/CTEST

APX assembly syntax recommendations:

https://cdrdv2.intel.com/v1/dl/getContent/817241
---
 .../Support/X86DisassemblerDecoderCommon.h    |    1 +
 .../lib/Target/X86/AsmParser/X86AsmParser.cpp |   58 +
 .../X86/Disassembler/X86Disassembler.cpp      |   33 +-
 .../X86/Disassembler/X86DisassemblerDecoder.h |    9 +-
 .../lib/Target/X86/MCTargetDesc/X86BaseInfo.h |    5 +-
 .../X86/MCTargetDesc/X86InstPrinterCommon.cpp |   29 +-
 .../X86/MCTargetDesc/X86InstPrinterCommon.h   |    1 +
 .../X86/MCTargetDesc/X86MCCodeEmitter.cpp     |   51 +-
 llvm/lib/Target/X86/X86InstrAsmAlias.td       |  128 ++
 .../Target/X86/X86InstrConditionalCompare.td  |  110 ++
 llvm/lib/Target/X86/X86InstrFormats.td        |    2 +
 llvm/lib/Target/X86/X86InstrInfo.td           |    1 +
 llvm/lib/Target/X86/X86InstrOperands.td       |    6 +
 llvm/test/MC/Disassembler/X86/apx/ccmp.txt    | 1598 +++++++++++++++++
 llvm/test/MC/X86/apx/ccmp-att-error.s         |   26 +
 llvm/test/MC/X86/apx/ccmp-att.s               | 1213 +++++++++++++
 llvm/test/MC/X86/apx/ccmp-intel-error.s       |   26 +
 llvm/test/MC/X86/apx/ccmp-intel.s             | 1210 +++++++++++++
 llvm/utils/TableGen/X86RecognizableInstr.cpp  |   11 +
 llvm/utils/TableGen/X86RecognizableInstr.h    |    2 +
 20 files changed, 4505 insertions(+), 15 deletions(-)
 create mode 100644 llvm/lib/Target/X86/X86InstrConditionalCompare.td
 create mode 100644 llvm/test/MC/Disassembler/X86/apx/ccmp.txt
 create mode 100644 llvm/test/MC/X86/apx/ccmp-att-error.s
 create mode 100644 llvm/test/MC/X86/apx/ccmp-att.s
 create mode 100644 llvm/test/MC/X86/apx/ccmp-intel-error.s
 create mode 100644 llvm/test/MC/X86/apx/ccmp-intel.s

diff --git a/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h b/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h
index 0dc974ea9efd8d..5daae45df2f830 100644
--- a/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h
+++ b/llvm/include/llvm/Support/X86DisassemblerDecoderCommon.h
@@ -434,6 +434,7 @@ enum ModRMDecisionType { MODRMTYPES MODRM_max };
   ENUM_ENTRY(ENCODING_Rv,                                                      \
              "Register code of operand size added to the opcode byte")         \
   ENUM_ENTRY(ENCODING_CC, "Condition code encoded in opcode")                  \
+  ENUM_ENTRY(ENCODING_CF, "Condition flags encoded in EVEX.VVVV")              \
   ENUM_ENTRY(ENCODING_DUP,                                                     \
              "Duplicate of another operand; ID is encoded in type")            \
   ENUM_ENTRY(ENCODING_SI, "Source index; encoded in OpSize/Adsize prefix")     \
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
index 051f6caa8c047f..5735ba8396b332 100644
--- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
+++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
@@ -1122,6 +1122,7 @@ class X86AsmParser : public MCTargetAsmParser {
   unsigned IdentifyMasmOperator(StringRef Name);
   bool ParseMasmOperator(unsigned OpKind, int64_t &Val);
   bool ParseRoundingModeOp(SMLoc Start, OperandVector &Operands);
+  bool parseCFlagsOp(OperandVector &Operands);
   bool ParseIntelNamedOperator(StringRef Name, IntelExprStateMachine &SM,
                                bool &ParseError, SMLoc &End);
   bool ParseMasmNamedOperator(StringRef Name, IntelExprStateMachine &SM,
@@ -2306,6 +2307,58 @@ bool X86AsmParser::ParseRoundingModeOp(SMLoc Start, OperandVector &Operands) {
   return Error(Tok.getLoc(), "unknown token in expression");
 }
 
+/// Parse condtional flags for CCMP/CTEST, e.g {of,sf,zf,cf} right after
+/// mnemonic.
+bool X86AsmParser::parseCFlagsOp(OperandVector &Operands) {
+  MCAsmParser &Parser = getParser();
+  const AsmToken StartTok = Parser.getTok();
+  const SMLoc Start = StartTok.getLoc();
+  if (!StartTok.is(AsmToken::LCurly))
+    return Error(StartTok.getLoc(), "Expected { at this point");
+  Parser.Lex(); // Eat "{"
+  AsmToken Tok = Parser.getTok();
+  SMLoc End;
+  if (Tok.is(AsmToken::RCurly)) {
+    End = Tok.getEndLoc();
+    Operands.push_back(X86Operand::CreateImm(
+        MCConstantExpr::create(0, Parser.getContext()), Start, End));
+    Parser.Lex(); // Eat "}"
+    return false;
+  }
+  unsigned CFlags = 0;
+  for (unsigned I = 0; I < 4; ++I) {
+    Tok = Parser.getTok();
+    unsigned CFlag = StringSwitch<unsigned>(Tok.getIdentifier())
+                         .Case("of", 0x8)
+                         .Case("sf", 0x4)
+                         .Case("zf", 0x2)
+                         .Case("cf", 0x1)
+                         .Default(~0U);
+    if (CFlag == ~0U)
+      return Error(Tok.getLoc(), "Invalid conditional flags");
+
+    if (CFlags & CFlag)
+      return Error(Tok.getLoc(), "Duplicated conditional flag");
+    CFlags |= CFlag;
+
+    Parser.Lex(); // Eat one conditional flag
+    Tok = Parser.getTok();
+    if (Tok.is(AsmToken::RCurly)) {
+      End = Tok.getEndLoc();
+      Operands.push_back(X86Operand::CreateImm(
+          MCConstantExpr::create(CFlags, Parser.getContext()), Start, End));
+      Parser.Lex(); // Eat "}"
+      return false;
+    } else if (I == 3) {
+      return Error(Tok.getLoc(), "Expected } at this point");
+    } else if (Tok.isNot(AsmToken::Comma)) {
+      return Error(Tok.getLoc(), "Expected } or , at this point");
+    }
+    Parser.Lex(); // Eat ","
+  }
+  llvm_unreachable("Unexpected control flow");
+}
+
 /// Parse the '.' operator.
 bool X86AsmParser::ParseIntelDotOperator(IntelExprStateMachine &SM,
                                          SMLoc &End) {
@@ -3461,6 +3514,11 @@ bool X86AsmParser::ParseInstruction(ParseInstructionInfo &Info, StringRef Name,
     Operands.push_back(X86Operand::CreateImm(ImmOp, NameLoc, NameLoc));
   }
 
+  // Parse condtional flags after mnemonic.
+  if ((Name.starts_with("ccmp") || Name.starts_with("ctest")) &&
+      parseCFlagsOp(Operands))
+    return true;
+
   // This does the actual operand parsing.  Don't parse any more if we have a
   // prefix juxtaposed with an operation like "lock incl 4(%rax)", because we
   // just want to parse the "lock" as the first instruction and the "incl" as
diff --git a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
index dbc2cef39d8682..f8546bfc4df4ad 100644
--- a/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
+++ b/llvm/lib/Target/X86/Disassembler/X86Disassembler.cpp
@@ -1141,6 +1141,15 @@ static int getInstructionIDWithAttrMask(uint16_t *instructionID,
   return 0;
 }
 
+static bool isCCMPOrCTEST(InternalInstruction *insn) {
+  return (insn->opcodeType == MAP4) &&
+         (((insn->opcode & 0xfe) == 0x38) || ((insn->opcode & 0xfe) == 0x3a) ||
+          (((insn->opcode & 0xfe) == 0x80 || insn->opcode == 0x83) &&
+           regFromModRM(insn->modRM) == 7) ||
+          (insn->opcode & 0xfe) == 0x84 ||
+          ((insn->opcode & 0xfe) == 0xf6 && regFromModRM(insn->modRM) == 0));
+}
+
 static bool isNF(InternalInstruction *insn) {
   if (!nfFromEVEX4of4(insn->vectorExtensionPrefix[3]))
     return false;
@@ -1197,9 +1206,12 @@ static int getInstructionID(struct InternalInstruction *insn,
         attrMask |= ATTR_EVEXKZ;
       if (bFromEVEX4of4(insn->vectorExtensionPrefix[3]))
         attrMask |= ATTR_EVEXB;
-      if (isNF(insn)) // NF bit is the MSB of aaa.
+      if (isNF(insn) && !readModRM(insn) &&
+          !isCCMPOrCTEST(insn)) // NF bit is the MSB of aaa.
         attrMask |= ATTR_EVEXNF;
-      else if (aaaFromEVEX4of4(insn->vectorExtensionPrefix[3]))
+      // aaa is not used a opmask in MAP4
+      else if (aaaFromEVEX4of4(insn->vectorExtensionPrefix[3]) &&
+               (insn->opcodeType != MAP4))
         attrMask |= ATTR_EVEXK;
       if (lFromEVEX4of4(insn->vectorExtensionPrefix[3]))
         attrMask |= ATTR_VEXL;
@@ -1732,8 +1744,15 @@ static int readOperands(struct InternalInstruction *insn) {
       if (readOpcodeRegister(insn, 0))
         return -1;
       break;
+    case ENCODING_CF:
+      insn->immediates[1] = oszcFromEVEX3of4(insn->vectorExtensionPrefix[2]);
+      needVVVV = false; // oszc shares the same bits with VVVV
+      break;
     case ENCODING_CC:
-      insn->immediates[1] = insn->opcode & 0xf;
+      if (isCCMPOrCTEST(insn))
+        insn->immediates[2] = scFromEVEX4of4(insn->vectorExtensionPrefix[3]);
+      else
+        insn->immediates[1] = insn->opcode & 0xf;
       break;
     case ENCODING_FP:
       break;
@@ -2371,9 +2390,15 @@ static bool translateOperand(MCInst &mcInst, const OperandSpecifier &operand,
   case ENCODING_Rv:
     translateRegister(mcInst, insn.opcodeRegister);
     return false;
-  case ENCODING_CC:
+  case ENCODING_CF:
     mcInst.addOperand(MCOperand::createImm(insn.immediates[1]));
     return false;
+  case ENCODING_CC:
+    if (isCCMPOrCTEST(&insn))
+      mcInst.addOperand(MCOperand::createImm(insn.immediates[2]));
+    else
+      mcInst.addOperand(MCOperand::createImm(insn.immediates[1]));
+    return false;
   case ENCODING_FP:
     translateFPRegister(mcInst, insn.modRM & 7);
     return false;
diff --git a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
index 9cae0f02926fce..42e4de4ee682a4 100644
--- a/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
+++ b/llvm/lib/Target/X86/Disassembler/X86DisassemblerDecoder.h
@@ -33,6 +33,8 @@ namespace X86Disassembler {
 #define twoBitsFromOffset6(val) (((val) >> 6) & 0x3)
 #define threeBitsFromOffset0(val) ((val) & 0x7)
 #define threeBitsFromOffset3(val) (((val) >> 3) & 0x7)
+#define fourBitsFromOffset0(val) ((val) & 0xf)
+#define fourBitsFromOffset3(val) (((val) >> 3) & 0xf)
 #define fiveBitsFromOffset0(val) ((val) & 0x1f)
 #define invertedBitFromOffset2(val) (((~(val)) >> 2) & 0x1)
 #define invertedBitFromOffset3(val) (((~(val)) >> 3) & 0x1)
@@ -97,6 +99,7 @@ namespace X86Disassembler {
 #define vvvvFromEVEX3of4(evex) invertedFourBitsFromOffset3(evex)
 #define x2FromEVEX3of4(evex) invertedBitFromOffset2(evex)
 #define ppFromEVEX3of4(evex) twoBitsFromOffset0(evex)
+#define oszcFromEVEX3of4(evex) fourBitsFromOffset3(evex)
 #define zFromEVEX4of4(evex) bitFromOffset7(evex)
 #define l2FromEVEX4of4(evex) bitFromOffset6(evex)
 #define lFromEVEX4of4(evex) bitFromOffset5(evex)
@@ -104,6 +107,8 @@ namespace X86Disassembler {
 #define v2FromEVEX4of4(evex) invertedBitFromOffset3(evex)
 #define aaaFromEVEX4of4(evex) threeBitsFromOffset0(evex)
 #define nfFromEVEX4of4(evex) bitFromOffset2(evex)
+#define oszcFromEVEX3of4(evex) fourBitsFromOffset3(evex)
+#define scFromEVEX4of4(evex) fourBitsFromOffset0(evex)
 
 // These enums represent Intel registers for use by the decoder.
 #define REGS_8BIT                                                              \
@@ -755,10 +760,10 @@ struct InternalInstruction {
   // The displacement, used for memory operands
   int32_t displacement;
 
-  // Immediates.  There can be two in some cases
+  // Immediates.  There can be three in some cases
   uint8_t numImmediatesConsumed;
   uint8_t numImmediatesTranslated;
-  uint64_t immediates[2];
+  uint64_t immediates[3];
 
   // A register or immediate operand encoded into the opcode
   Reg opcodeRegister;
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h b/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h
index 28a067d525e010..65b8ebc0b9b994 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86BaseInfo.h
@@ -875,7 +875,10 @@ enum : uint64_t {
   ExplicitOpPrefixMask = 3ULL << ExplicitOpPrefixShift,
   /// EVEX_NF - Set if this instruction has EVEX.NF field set.
   EVEX_NFShift = ExplicitOpPrefixShift + 2,
-  EVEX_NF = 1ULL << EVEX_NFShift
+  EVEX_NF = 1ULL << EVEX_NFShift,
+  // TwoConditionalOps - Set if this instruction has two conditional operands
+  TwoConditionalOps_Shift = EVEX_NFShift + 1,
+  TwoConditionalOps = 1ULL << TwoConditionalOps_Shift
 };
 
 /// \returns true if the instruction with given opcode is a prefix.
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp
index 7422a989734653..30ff6e5c6bbbbe 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.cpp
@@ -29,7 +29,9 @@ using namespace llvm;
 void X86InstPrinterCommon::printCondCode(const MCInst *MI, unsigned Op,
                                          raw_ostream &O) {
   int64_t Imm = MI->getOperand(Op).getImm();
-  bool IsCMPCCXADD = X86::isCMPCCXADD(MI->getOpcode());
+  unsigned Opc = MI->getOpcode();
+  bool IsCMPCCXADD = X86::isCMPCCXADD(Opc);
+  bool IsCCMPOrCTEST = X86::isCCMPCC(Opc) || X86::isCTESTCC(Opc);
 
   // clang-format off
   switch (Imm) {
@@ -44,8 +46,8 @@ void X86InstPrinterCommon::printCondCode(const MCInst *MI, unsigned Op,
   case    7: O << (IsCMPCCXADD ? "nbe" : "a"); break;
   case    8: O << "s";  break;
   case    9: O << "ns"; break;
-  case  0xa: O << "p";  break;
-  case  0xb: O << "np"; break;
+  case  0xa: O << (IsCCMPOrCTEST ? "t" : "p");  break;
+  case  0xb: O << (IsCCMPOrCTEST ? "f" : "np"); break;
   case  0xc: O << "l";  break;
   case  0xd: O << (IsCMPCCXADD ? "nl" : "ge"); break;
   case  0xe: O << "le"; break;
@@ -54,6 +56,27 @@ void X86InstPrinterCommon::printCondCode(const MCInst *MI, unsigned Op,
   // clang-format on
 }
 
+void X86InstPrinterCommon::printCondFlags(const MCInst *MI, unsigned Op,
+                                          raw_ostream &O) {
+  // +----+----+----+----+
+  // | OF | SF | ZF | CF |
+  // +----+----+----+----+
+  int64_t Imm = MI->getOperand(Op).getImm();
+  assert(Imm >= 0 && Imm < 16 && "Invalid condition flags");
+  O << "{";
+  std::string Flags;
+  if (Imm & 0x8)
+    Flags += "of,";
+  if (Imm & 0x4)
+    Flags += "sf,";
+  if (Imm & 0x2)
+    Flags += "zf,";
+  if (Imm & 0x1)
+    Flags += "cf,";
+  StringRef SimplifiedFlags = StringRef(Flags).rtrim(",");
+  O << SimplifiedFlags << "}";
+}
+
 void X86InstPrinterCommon::printSSEAVXCC(const MCInst *MI, unsigned Op,
                                          raw_ostream &O) {
   int64_t Imm = MI->getOperand(Op).getImm();
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.h b/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.h
index 0cb5bf014b209e..221102e17c6538 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.h
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86InstPrinterCommon.h
@@ -24,6 +24,7 @@ class X86InstPrinterCommon : public MCInstPrinter {
 
   virtual void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) = 0;
   void printCondCode(const MCInst *MI, unsigned Op, raw_ostream &OS);
+  void printCondFlags(const MCInst *MI, unsigned Op, raw_ostream &OS);
   void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream &OS);
   void printVPCOMMnemonic(const MCInst *MI, raw_ostream &OS);
   void printVPCMPMnemonic(const MCInst *MI, raw_ostream &OS);
diff --git a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
index 1fa676eeb79b0f..dcd0551b7b7653 100644
--- a/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
+++ b/llvm/lib/Target/X86/MCTargetDesc/X86MCCodeEmitter.cpp
@@ -200,8 +200,12 @@ class X86OpcodePrefixHelper {
   void setB(const MCInst &MI, unsigned OpNum) {
     B = getRegEncoding(MI, OpNum) >> 3 & 1;
   }
-  void set4V(const MCInst &MI, unsigned OpNum) {
-    set4V(getRegEncoding(MI, OpNum));
+  void set4V(const MCInst &MI, unsigned OpNum, bool IsImm = false) {
+    // OF, SF, ZF and CF reuse VEX_4V bits but are not reversed
+    if (IsImm)
+      set4V(~(MI.getOperand(OpNum).getImm()));
+    else
+      set4V(getRegEncoding(MI, OpNum));
   }
   void setL(bool V) { VEX_L = V; }
   void setPP(unsigned V) { VEX_PP = V; }
@@ -252,6 +256,11 @@ class X86OpcodePrefixHelper {
     EVEX_aaa = getRegEncoding(MI, OpNum);
   }
   void setNF(bool V) { EVEX_aaa |= V << 2; }
+  void setSC(const MCInst &MI, unsigned OpNum) {
+    unsigned Encoding = MI.getOperand(OpNum).getImm();
+    EVEX_V2 = ~(Encoding >> 3) & 0x1;
+    EVEX_aaa = Encoding & 0x7;
+  }
 
   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),
@@ -1045,6 +1054,7 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI,
   uint8_t EVEX_rc = 0;
 
   unsigned CurOp = X86II::getOperandBias(Desc);
+  bool HasTwoConditionalOps = TSFlags & X86II::TwoConditionalOps;
 
   switch (TSFlags & X86II::FormMask) {
   default:
@@ -1086,6 +1096,10 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI,
       Prefix.set4VV2(MI, CurOp++);
 
     Prefix.setRR2(MI, CurOp++);
+    if (HasTwoConditionalOps) {
+      Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
+      Prefix.setSC(MI, CurOp++);
+    }
     break;
   }
   case X86II::MRMSrcMemFSIB:
@@ -1115,7 +1129,11 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI,
     Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
     Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
     Prefix.setV2(MI, MemOperand + X86::AddrIndexReg, HasVEX_4V);
-
+    CurOp += X86::AddrNumOperands;
+    if (HasTwoConditionalOps) {
+      Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
+      Prefix.setSC(MI, CurOp++);
+    }
     break;
   }
   case X86II::MRMSrcMem4VOp3: {
@@ -1155,7 +1173,11 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI,
     Prefix.setBB2(MI, MemOperand + X86::AddrBaseReg);
     Prefix.setXX2(MI, MemOperand + X86::AddrIndexReg);
     Prefix.setV2(MI, MemOperand + X86::AddrIndexReg, HasVEX_4V);
-
+    CurOp += X86::AddrNumOperands + 1; // Skip first imm.
+    if (HasTwoConditionalOps) {
+      Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
+      Prefix.setSC(MI, CurOp++);
+    }
     break;
   }
   case X86II::MRMSrcReg: {
@@ -1183,6 +1205,11 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI,
     Prefix.setX(MI, CurOp, 4);
     ++CurOp;
 
+    if (HasTwoConditionalOps) {
+      Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
+      Prefix.setSC(MI, CurOp++);
+    }
+
     if (TSFlags & X86II::EVEX_B) {
       if (HasEVEX_RC) {
         unsigned NumOps = Desc.getNumOperands();
@@ -1236,6 +1263,10 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI,
       Prefix.set4VV2(MI, CurOp++);
 
     Prefix.setRR2(MI, CurOp++);
+    if (HasTwoConditionalOps) {
+      Prefix.set4V(MI, CurOp++, /*IsImm=*/true);
+      Prefix.setSC(MI, CurOp++);
+    }
     if (TSFlags & X86II::EVEX_B)
       EncodeRC = true;
     break;
@@ -1266,6 +1297,10 @@ X86MCCodeEmitter::emitVEXOpcodePrefix(int MemOperand, const MCInst &MI,
     Prefix.setBB2(MI, CurOp);
     Prefix.setX(MI, CurOp, 4);
     ++CurOp;
+    if (HasTwoConditionalOps) {
+      Prefix.set4V(MI, ++CurOp, /*IsImm=*/true);
+      Prefix.setSC(MI, ++CurOp);
+    }
     break;
   }
   }
@@ -1525,6 +1560,7 @@ void X86MCCodeEmitter::encodeInstruction(const MCInst &MI,
   unsigned OpcodeOffset = 0;
 
   bool IsND = X86II::hasNewDataDest(TSFlags);
+  bool HasTwoConditionalOps = TSFlags & X86II::TwoConditionalOps;
 
   uint64_t Form = TSFlags & X86II::FormMask;
   switch (Form) {
@@ -1914,11 +1950,16 @@ void X86MCCodeEmitter::encodeInstruction(const MCInst &MI,
     // If there is a remaining operand, it must be a trailing immediate. Emit it
     // according to the right size for the instruction. Some instructions
     // (SSE4a extrq and insertq) have two trailing immediates.
-    while (CurOp != NumOps && NumOps - CurOp <= 2) {
+
+    // Skip two trainling conditional operands encoded in EVEX prefix
+    unsigned RemaningOps = NumOps - CurOp - 2 * HasTwoConditionalOps;
+    while (RemaningOps) {
       emitImmediate(MI.getOperand(CurOp++), MI.getLoc(),
                     X86II::getSizeOfImm(TSFlags), getImmFixupKind(TSFlags),
                     StartByte, CB, Fixups);
+      --RemaningOps;
     }
+    CurOp += 2 * HasTwoConditionalOps;
   }
 
   if ((TSFlags & X86II::OpMapMask) == X86II::ThreeDNow)
diff --git a/llvm/lib/Target/X86/X86InstrAsmAlias.td b/llvm/lib/Target/X86/X86InstrAsmAlias.td
index 2590be8651d517..fab058dc390bb3 100644
--- a/llvm/lib/Target/X86/X86InstrAsmAlias.td
+++ b/llvm/lib/Target/X86/X86InstrAsmAlias.td
@@ -62,6 +62,134 @@ multiclass CMPCCXADD_Aliases<string Cond, int CC> {
                   (CMPCCXADDmr64_EVEX GR64:$dst, i64mem:$dstsrc2, GR64:$src3, CC), 0>;
 }
 
+// CCMP Instructions Alias
+multiclass CCMP_Aliases<string Cond, int CC> {
+let Predicates = [In64BitMode] in {
+def : InstAlias<"ccmp"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP8rr  GR8:$src1,  GR8:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP16rr GR16:$src1, GR16:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP32rr GR32:$src1, GR32:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP64rr GR64:$src1, GR64:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP8rm  GR8:$src1,  i8mem:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP16rm GR16:$src1, i16mem:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP32rm GR32:$src1, i32mem:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP64rm GR64:$src1, i64mem:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP8mr  i8mem:$src1,  GR8:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP16mr i16mem:$src1, GR16:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP32mr i32mem:$src1, GR32:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP64mr i64mem:$src1, GR64:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP8ri  GR8:$src1,  i8imm:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP16ri GR16:$src1, i16imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP32ri GR32:$src1, i32imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP64ri32 GR64:$src1, i64i32imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP16ri8 GR16:$src1, i16i8imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP32ri8 GR32:$src1, i32i8imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP64ri8 GR64:$src1, i64i8imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP8mi  i8mem:$src1,  i8imm:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP16mi i16mem:$src1, i16imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP32mi i32mem:$src1, i32imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP64mi32 i64mem:$src1, i64i32imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP16mi8 i16mem:$src1, i16i8imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP32mi8 i32mem:$src1, i32i8imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ccmp"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CCMP64mi8 i64mem:$src1, i64i8imm:$src2, cflags:$dcf, CC), 0>;
+}
+}
+defm : CCMP_Aliases<"o" ,  0>;
+defm : CCMP_Aliases<"no",  1>;
+defm : CCMP_Aliases<"b" ,  2>;
+defm : CCMP_Aliases<"ae",  3>;
+defm : CCMP_Aliases<"e" ,  4>;
+defm : CCMP_Aliases<"ne",  5>;
+defm : CCMP_Aliases<"be",  6>;
+defm : CCMP_Aliases<"a" ,  7>;
+defm : CCMP_Aliases<"s" ,  8>;
+defm : CCMP_Aliases<"ns",  9>;
+defm : CCMP_Aliases<"t" , 10>;
+defm : CCMP_Aliases<"f", 11>;
+defm : CCMP_Aliases<"l" , 12>;
+defm : CCMP_Aliases<"ge", 13>;
+defm : CCMP_Aliases<"le", 14>;
+defm : CCMP_Aliases<"g" , 15>;
+
+// CTEST Instructions Alias
+multiclass CTEST_Aliases<string Cond, int CC> {
+let Predicates = [In64BitMode] in {
+def : InstAlias<"ctest"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST8rr  GR8:$src1,  GR8:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST16rr GR16:$src1, GR16:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST32rr GR32:$src1, GR32:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST64rr GR64:$src1, GR64:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST8mr  i8mem:$src1,  GR8:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST16mr i16mem:$src1, GR16:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST32mr i32mem:$src1, GR32:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST64mr i64mem:$src1, GR64:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST8ri  GR8:$src1,  i8imm:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST16ri GR16:$src1, i16imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST32ri GR32:$src1, i32imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST64ri32 GR64:$src1, i64i32imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{b} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST8mi  i8mem:$src1,  i8imm:$src2,  cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{w} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST16mi i16mem:$src1, i16imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{l} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST32mi i32mem:$src1, i32imm:$src2, cflags:$dcf, CC), 0>;
+def : InstAlias<"ctest"#Cond#"{q} $dcf\t{$src2, $src1|$src1, $src2}",
+                (CTEST64mi32 i64mem:$src1, i64i32imm:$src2, cflags:$dcf, CC), 0>;
+}
+}
+defm : CTEST_Aliases<"o" ,  0>;
+defm : CTEST_Aliases<"no",  1>;
+defm : CTEST_Aliases<"b" ,  2>;
+defm : CTEST_Aliases<"ae",  3>;
+defm : CTEST_Aliases<"e" ,  4>;
+defm : CTEST_Aliases<"ne",  5>;
+defm : CTEST_Aliases<"be",  6>;
+defm : CTEST_Aliases<"a" ,  7>;
+defm : CTEST_Aliases<"s" ,  8>;
+defm : CTEST_Aliases<"ns",  9>;
+defm : CTEST_Aliases<"t" , 10>;
+defm : CTEST_Aliases<"f", 11>;
+defm : CTEST_Aliases<"l" , 12>;
+defm : CTEST_Aliases<"ge", 13>;
+defm : CTEST_Aliases<"le", 14>;
+defm : CTEST_Aliases<"g" , 15>;
+
 //===----------------------------------------------------------------------===//
 // Assembler Mnemonic Aliases
 //===----------------------------------------------------------------------===//
diff --git a/llvm/lib/Target/X86/X86InstrConditionalCompare.td b/llvm/lib/Target/X86/X86InstrConditionalCompare.td
new file mode 100644
index 00000000000000..e5c1143eba87f0
--- /dev/null
+++ b/llvm/lib/Target/X86/X86InstrConditionalCompare.td
@@ -0,0 +1,110 @@
+//===-- X86InstrConditionalCompare.td - Conditional Compare --*- tablegen -*-==//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===----------------------------------------------------------------------===//
+//
+// This file describes the X86 conditional compare instructions.
+//
+//===----------------------------------------------------------------------===//
+
+class BinCondOp<bits<8> o, Format f, X86TypeInfo t, DAGOperand op1, DAGOperand op2, string m>
+  : ITy<o, f, t, (outs), (ins op1:$src1, op2:$src2, cflags:$dcf, ccode:$cond),
+        m#"${cond}", "$dcf\t{$src2, $src1|$src1, $src2}" , []>, T_MAP4, EVEX, Requires<[In64BitMode]> {
+  let isCodeGenOnly = 1;
+  let ForceDisassemble = 1;
+  let Uses = [EFLAGS];
+  let Defs = [EFLAGS];
+  let hasTwoConditionalOps = 1;
+  let ImmT = !if(!eq(op2, i16i8imm), Imm8,
+             !if(!eq(op2, i32i8imm), Imm8,
+             !if(!eq(op2, i64i8imm), Imm8,
+             !if(!eq(op2, i8imm), Imm8,
+             !if(!eq(op2, i16imm), Imm16,
+             !if(!eq(op2, i32imm), Imm32,
+             !if(!eq(op2, i64i32imm), Imm32S, NoImm)))))));
+}
+
+class Ccmp<bits<8> o, Format f, X86TypeInfo t, DAGOperand op1, DAGOperand op2>:
+  BinCondOp<o, f, t, op1, op2, "ccmp">;
+
+class Ctest<bits<8> o, Format f, X86TypeInfo t, DAGOperand op1, DAGOperand op2>:
+  BinCondOp<o, f, t, op1, op2, "ctest">;
+
+//===----------------------------------------------------------------------===//
+// CCMP Instructions
+//
+let SchedRW = [WriteALU] in {
+  def CCMP8rr : Ccmp<0x38, MRMDestReg, Xi8,  GR8,  GR8>;
+  def CCMP16rr: Ccmp<0x39, MRMDestReg, Xi16, GR16, GR16>, PD;
+  def CCMP32rr: Ccmp<0x39, MRMDestReg, Xi32, GR32, GR32>;
+  def CCMP64rr: Ccmp<0x39, MRMDestReg, Xi64, GR64, GR64>;
+  def CCMP8rr_REV : Ccmp<0x3a, MRMSrcReg, Xi8,  GR8,  GR8>;
+  def CCMP16rr_REV: Ccmp<0x3b, MRMSrcReg, Xi16, GR16, GR16>, PD;
+  def CCMP32rr_REV: Ccmp<0x3b, MRMSrcReg, Xi32, GR32, GR32>;
+  def CCMP64rr_REV: Ccmp<0x3b, MRMSrcReg, Xi64, GR64, GR64>;
+  def CCMP16ri8: Ccmp<0x83, MRM7r, Xi16, GR16, i16i8imm>, PD;
+  def CCMP32ri8: Ccmp<0x83, MRM7r, Xi32, GR32, i32i8imm>;
+  def CCMP64ri8: Ccmp<0x83, MRM7r, Xi64, GR64, i64i8imm>;
+
+  def CCMP8ri : Ccmp<0x80, MRM7r, Xi8,   GR8, i8imm>;
+  def CCMP16ri: Ccmp<0x81, MRM7r, Xi16, GR16, i16imm>, PD;
+  def CCMP32ri: Ccmp<0x81, MRM7r, Xi32, GR32, i32imm>;
+  def CCMP64ri32: Ccmp<0x81, MRM7r, Xi64, GR64, i64i32imm>;
+}
+
+let mayLoad = 1 in {
+  let SchedRW = [WriteALU.Folded] in {
+    def CCMP16mi8: Ccmp<0x83, MRM7m, Xi16, i16mem, i16i8imm>, PD;
+    def CCMP32mi8: Ccmp<0x83, MRM7m, Xi32, i32mem, i32i8imm>;
+    def CCMP64mi8: Ccmp<0x83, MRM7m, Xi64, i64mem, i64i8imm>;
+    def CCMP8mi : Ccmp<0x80, MRM7m, Xi8,   i8mem, i8imm>;
+    def CCMP16mi: Ccmp<0x81, MRM7m, Xi16, i16mem, i16imm>, PD;
+    def CCMP32mi: Ccmp<0x81, MRM7m, Xi32, i32mem, i32imm>;
+    def CCMP64mi32: Ccmp<0x81, MRM7m, Xi64, i64mem, i64i32imm>;
+  }
+  let SchedRW = [WriteALU.Folded, WriteALU.ReadAfterFold] in {
+    def CCMP8rm : Ccmp<0x3a, MRMSrcMem, Xi8,  GR8,  i8mem>;
+    def CCMP16rm: Ccmp<0x3b, MRMSrcMem, Xi16, GR16, i16mem>, PD;
+    def CCMP32rm: Ccmp<0x3b, MRMSrcMem, Xi32, GR32, i32mem>;
+    def CCMP64rm: Ccmp<0x3b, MRMSrcMem, Xi64, GR64, i64mem>;
+
+    def CCMP8mr : Ccmp<0x38, MRMDestMem, Xi8,  i8mem,  GR8>;
+    def CCMP16mr: Ccmp<0x39, MRMDestMem, Xi16, i16mem, GR16>, PD;
+    def CCMP32mr: Ccmp<0x39, MRMDestMem, Xi32, i32mem, GR32>;
+    def CCMP64mr: Ccmp<0x39, MRMDestMem, Xi64, i64mem, GR64>;
+  }
+}
+
+//===----------------------------------------------------------------------===//
+// CTEST Instructions
+//
+let SchedRW = [WriteALU] in {
+  let isCommutable = 1 in {
+    def CTEST8rr : Ctest<0x84, MRMDestReg, Xi8,  GR8,  GR8>;
+    def CTEST16rr: Ctest<0x85, MRMDestReg, Xi16, GR16, GR16>, PD;
+    def CTEST32rr: Ctest<0x85, MRMDestReg, Xi32, GR32, GR32>;
+    def CTEST64rr: Ctest<0x85, MRMDestReg, Xi64, GR64, GR64>;
+  }
+  def CTEST8ri : Ctest<0xF6, MRM0r, Xi8,   GR8, i8imm>;
+  def CTEST16ri: Ctest<0xF7, MRM0r, Xi16, GR16, i16imm>, PD;
+  def CTEST32ri: Ctest<0xF7, MRM0r, Xi32, GR32, i32imm>;
+  def CTEST64ri32: Ctest<0xF7, MRM0r, Xi64, GR64, i64i32imm>;
+}
+
+let mayLoad = 1 in {
+  let SchedRW = [WriteALU.Folded] in {
+    def CTEST8mi : Ctest<0xF6, MRM0m, Xi8,   i8mem, i8imm>;
+    def CTEST16mi: Ctest<0xF7, MRM0m, Xi16, i16mem, i16imm>, PD;
+    def CTEST32mi: Ctest<0xF7, MRM0m, Xi32, i32mem, i32imm>;
+    def CTEST64mi32: Ctest<0xF7, MRM0m, Xi64, i64mem, i64i32imm>;
+  }
+  let SchedRW = [WriteALU.Folded, WriteALU.ReadAfterFold] in {
+    def CTEST8mr : Ctest<0x84, MRMDestMem, Xi8,  i8mem,  GR8>;
+    def CTEST16mr: Ctest<0x85, MRMDestMem, Xi16, i16mem, GR16>, PD;
+    def CTEST32mr: Ctest<0x85, MRMDestMem, Xi32, i32mem, GR32>;
+    def CTEST64mr: Ctest<0x85, MRMDestMem, Xi64, i64mem, GR64>;
+  }
+}
diff --git a/llvm/lib/Target/X86/X86InstrFormats.td b/llvm/lib/Target/X86/X86InstrFormats.td
index 8798b13a176126..13014293267b32 100644
--- a/llvm/lib/Target/X86/X86InstrFormats.td
+++ b/llvm/lib/Target/X86/X86InstrFormats.td
@@ -255,6 +255,7 @@ class X86Inst<bits<8> opcod, Format f, ImmType i, dag outs, dag ins,
   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?
+  bit hasTwoConditionalOps = 0;   // Does this inst have two conditional operands?
   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>.
@@ -305,4 +306,5 @@ class X86Inst<bits<8> opcod, Format f, ImmType i, dag outs, dag ins,
   let TSFlags{49}    = hasNoTrackPrefix;
   let TSFlags{51-50} = explicitOpPrefixBits;
   let TSFlags{52}    = hasEVEX_NF;
+  let TSFlags{53}    = hasTwoConditionalOps;
 }
diff --git a/llvm/lib/Target/X86/X86InstrInfo.td b/llvm/lib/Target/X86/X86InstrInfo.td
index ee54796323b82c..4792784336109d 100644
--- a/llvm/lib/Target/X86/X86InstrInfo.td
+++ b/llvm/lib/Target/X86/X86InstrInfo.td
@@ -45,6 +45,7 @@ include "X86InstrMisc.td"
 include "X86InstrTBM.td"
 include "X86InstrArithmetic.td"
 include "X86InstrCMovSetCC.td"
+include "X86InstrConditionalCompare.td"
 include "X86InstrExtension.td"
 include "X86InstrControl.td"
 include "X86InstrShiftRotate.td"
diff --git a/llvm/lib/Target/X86/X86InstrOperands.td b/llvm/lib/Target/X86/X86InstrOperands.td
index 761458f9cffc35..f8f5cd83166e33 100644
--- a/llvm/lib/Target/X86/X86InstrOperands.td
+++ b/llvm/lib/Target/X86/X86InstrOperands.td
@@ -424,6 +424,12 @@ def u4imm : Operand<i8> {
   let OperandType = "OPERAND_IMMEDIATE";
 }
 
+def cflags : Operand<i8> {
+  let PrintMethod = "printCondFlags";
+  let ParserMatchClass = ImmUnsignedi4AsmOperand;
+  let OperandType = "OPERAND_IMMEDIATE";
+}
+
 // Unsigned 8-bit immediate used by SSE/AVX instructions.
 def u8imm : Operand<i8> {
   let PrintMethod = "printU8Imm";
diff --git a/llvm/test/MC/Disassembler/X86/apx/ccmp.txt b/llvm/test/MC/Disassembler/X86/apx/ccmp.txt
new file mode 100644
index 00000000000000..93686a95798393
--- /dev/null
+++ b/llvm/test/MC/Disassembler/X86/apx/ccmp.txt
@@ -0,0 +1,1598 @@
+# 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
+
+## Condition flags
+
+# ATT:   ccmpoq {}	%rax, %rbx
+# INTEL: ccmpo {}	rbx, rax
+0x62,0xf4,0x84,0x00,0x39,0xc3
+
+# ATT:   ccmpoq {of}	%rax, %rbx
+# INTEL: ccmpo {of}	rbx, rax
+0x62,0xf4,0xc4,0x00,0x39,0xc3
+
+# ATT:   ccmpoq {sf}	%rax, %rbx
+# INTEL: ccmpo {sf}	rbx, rax
+0x62,0xf4,0xa4,0x00,0x39,0xc3
+
+# ATT:   ccmpoq {zf}	%rax, %rbx
+# INTEL: ccmpo {zf}	rbx, rax
+0x62,0xf4,0x94,0x00,0x39,0xc3
+
+# ATT:   ccmpoq {cf}	%rax, %rbx
+# INTEL: ccmpo {cf}	rbx, rax
+0x62,0xf4,0x8c,0x00,0x39,0xc3
+
+# ATT:   ccmpoq {of,sf}	%rax, %rbx
+# INTEL: ccmpo {of,sf}	rbx, rax
+0x62,0xf4,0xe4,0x00,0x39,0xc3
+
+# ATT:   ccmpoq {of,sf,zf}	%rax, %rbx
+# INTEL: ccmpo {of,sf,zf}	rbx, rax
+0x62,0xf4,0xf4,0x00,0x39,0xc3
+
+# ATT:   ccmpoq {of,sf,zf,cf}	%rax, %rbx
+# INTEL: ccmpo {of,sf,zf,cf}	rbx, rax
+0x62,0xf4,0xfc,0x00,0x39,0xc3
+
+## Condition code
+
+# ATT:   ccmpbb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x02,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpbw	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x02,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpbw	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x02,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpbl	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x02,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpbl	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x02,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpbq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x02,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpbq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x02,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpbb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x02,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpbw	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x02,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpbl	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x02,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpbq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpb	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x02,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpbb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpb	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x02,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpbw	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpb	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x02,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpbl	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpb	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x02,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpbq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpb	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x02,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpbb	{of}	$123, %bl
+# INTEL: ccmpb	{of}	bl, 123
+0x62,0xf4,0x44,0x02,0x80,0xfb,0x7b
+
+# ATT:   ccmpbw	{of}	$123, %dx
+# INTEL: ccmpb	{of}	dx, 123
+0x62,0xf4,0x45,0x02,0x83,0xfa,0x7b
+
+# ATT:   ccmpbl	{of}	$123, %ecx
+# INTEL: ccmpb	{of}	ecx, 123
+0x62,0xf4,0x44,0x02,0x83,0xf9,0x7b
+
+# ATT:   ccmpbq	{of}	$123, %r9
+# INTEL: ccmpb	{of}	r9, 123
+0x62,0xd4,0xc4,0x02,0x83,0xf9,0x7b
+
+# ATT:   ccmpbw	{of}	$1234, %dx
+# INTEL: ccmpb	{of}	dx, 1234
+0x62,0xf4,0x45,0x02,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpbl	{of}	$123456, %ecx
+# INTEL: ccmpb	{of}	ecx, 123456
+0x62,0xf4,0x44,0x02,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpbq	{of}	$123456, %r9
+# INTEL: ccmpb	{of}	r9, 123456
+0x62,0xd4,0xc4,0x02,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpbb	{of}	%bl, %dl
+# INTEL: ccmpb	{of}	dl, bl
+0x62,0xf4,0x44,0x02,0x3a,0xd3
+
+# ATT:   ccmpbw	{of}	%dx, %ax
+# INTEL: ccmpb	{of}	ax, dx
+0x62,0xf4,0x45,0x02,0x3b,0xc2
+
+# ATT:   ccmpbl	{of}	%ecx, %edx
+# INTEL: ccmpb	{of}	edx, ecx
+0x62,0xf4,0x44,0x02,0x3b,0xd1
+
+# ATT:   ccmpbq	{of}	%r9, %r15
+# INTEL: ccmpb	{of}	r15, r9
+0x62,0x54,0xc4,0x02,0x3b,0xf9
+
+# ATT:   ccmpfb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0b,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpfw	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x0b,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpfw	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x0b,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpfl	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0b,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpfl	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x0b,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpfq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x0b,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpfq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x0b,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpfb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x0b,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpfw	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x0b,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpfl	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x0b,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpfq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpf	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x0b,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpfb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpf	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0b,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpfw	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpf	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x0b,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpfl	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpf	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0b,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpfq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpf	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x0b,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpfb	{of}	$123, %bl
+# INTEL: ccmpf	{of}	bl, 123
+0x62,0xf4,0x44,0x0b,0x80,0xfb,0x7b
+
+# ATT:   ccmpfw	{of}	$123, %dx
+# INTEL: ccmpf	{of}	dx, 123
+0x62,0xf4,0x45,0x0b,0x83,0xfa,0x7b
+
+# ATT:   ccmpfl	{of}	$123, %ecx
+# INTEL: ccmpf	{of}	ecx, 123
+0x62,0xf4,0x44,0x0b,0x83,0xf9,0x7b
+
+# ATT:   ccmpfq	{of}	$123, %r9
+# INTEL: ccmpf	{of}	r9, 123
+0x62,0xd4,0xc4,0x0b,0x83,0xf9,0x7b
+
+# ATT:   ccmpfw	{of}	$1234, %dx
+# INTEL: ccmpf	{of}	dx, 1234
+0x62,0xf4,0x45,0x0b,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpfl	{of}	$123456, %ecx
+# INTEL: ccmpf	{of}	ecx, 123456
+0x62,0xf4,0x44,0x0b,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpfq	{of}	$123456, %r9
+# INTEL: ccmpf	{of}	r9, 123456
+0x62,0xd4,0xc4,0x0b,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpfb	{of}	%bl, %dl
+# INTEL: ccmpf	{of}	dl, bl
+0x62,0xf4,0x44,0x0b,0x3a,0xd3
+
+# ATT:   ccmpfw	{of}	%dx, %ax
+# INTEL: ccmpf	{of}	ax, dx
+0x62,0xf4,0x45,0x0b,0x3b,0xc2
+
+# ATT:   ccmpfl	{of}	%ecx, %edx
+# INTEL: ccmpf	{of}	edx, ecx
+0x62,0xf4,0x44,0x0b,0x3b,0xd1
+
+# ATT:   ccmpfq	{of}	%r9, %r15
+# INTEL: ccmpf	{of}	r15, r9
+0x62,0x54,0xc4,0x0b,0x3b,0xf9
+
+# ATT:   ccmplb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0c,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmplw	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x0c,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmplw	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x0c,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpll	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0c,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpll	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x0c,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmplq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x0c,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmplq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x0c,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmplb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x0c,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmplw	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x0c,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpll	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x0c,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmplq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpl	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x0c,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmplb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpl	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0c,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmplw	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpl	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x0c,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpll	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpl	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0c,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmplq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpl	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x0c,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmplb	{of}	$123, %bl
+# INTEL: ccmpl	{of}	bl, 123
+0x62,0xf4,0x44,0x0c,0x80,0xfb,0x7b
+
+# ATT:   ccmplw	{of}	$123, %dx
+# INTEL: ccmpl	{of}	dx, 123
+0x62,0xf4,0x45,0x0c,0x83,0xfa,0x7b
+
+# ATT:   ccmpll	{of}	$123, %ecx
+# INTEL: ccmpl	{of}	ecx, 123
+0x62,0xf4,0x44,0x0c,0x83,0xf9,0x7b
+
+# ATT:   ccmplq	{of}	$123, %r9
+# INTEL: ccmpl	{of}	r9, 123
+0x62,0xd4,0xc4,0x0c,0x83,0xf9,0x7b
+
+# ATT:   ccmplw	{of}	$1234, %dx
+# INTEL: ccmpl	{of}	dx, 1234
+0x62,0xf4,0x45,0x0c,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpll	{of}	$123456, %ecx
+# INTEL: ccmpl	{of}	ecx, 123456
+0x62,0xf4,0x44,0x0c,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmplq	{of}	$123456, %r9
+# INTEL: ccmpl	{of}	r9, 123456
+0x62,0xd4,0xc4,0x0c,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmplb	{of}	%bl, %dl
+# INTEL: ccmpl	{of}	dl, bl
+0x62,0xf4,0x44,0x0c,0x3a,0xd3
+
+# ATT:   ccmplw	{of}	%dx, %ax
+# INTEL: ccmpl	{of}	ax, dx
+0x62,0xf4,0x45,0x0c,0x3b,0xc2
+
+# ATT:   ccmpll	{of}	%ecx, %edx
+# INTEL: ccmpl	{of}	edx, ecx
+0x62,0xf4,0x44,0x0c,0x3b,0xd1
+
+# ATT:   ccmplq	{of}	%r9, %r15
+# INTEL: ccmpl	{of}	r15, r9
+0x62,0x54,0xc4,0x0c,0x3b,0xf9
+
+# ATT:   ccmpleb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0e,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmplew	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x0e,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmplew	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x0e,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmplel	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0e,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmplel	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x0e,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpleq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x0e,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpleq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x0e,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpleb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x0e,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmplew	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x0e,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmplel	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x0e,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpleq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmple	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x0e,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpleb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmple	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0e,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmplew	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmple	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x0e,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmplel	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmple	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0e,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpleq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmple	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x0e,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpleb	{of}	$123, %bl
+# INTEL: ccmple	{of}	bl, 123
+0x62,0xf4,0x44,0x0e,0x80,0xfb,0x7b
+
+# ATT:   ccmplew	{of}	$123, %dx
+# INTEL: ccmple	{of}	dx, 123
+0x62,0xf4,0x45,0x0e,0x83,0xfa,0x7b
+
+# ATT:   ccmplel	{of}	$123, %ecx
+# INTEL: ccmple	{of}	ecx, 123
+0x62,0xf4,0x44,0x0e,0x83,0xf9,0x7b
+
+# ATT:   ccmpleq	{of}	$123, %r9
+# INTEL: ccmple	{of}	r9, 123
+0x62,0xd4,0xc4,0x0e,0x83,0xf9,0x7b
+
+# ATT:   ccmplew	{of}	$1234, %dx
+# INTEL: ccmple	{of}	dx, 1234
+0x62,0xf4,0x45,0x0e,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmplel	{of}	$123456, %ecx
+# INTEL: ccmple	{of}	ecx, 123456
+0x62,0xf4,0x44,0x0e,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpleq	{of}	$123456, %r9
+# INTEL: ccmple	{of}	r9, 123456
+0x62,0xd4,0xc4,0x0e,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpleb	{of}	%bl, %dl
+# INTEL: ccmple	{of}	dl, bl
+0x62,0xf4,0x44,0x0e,0x3a,0xd3
+
+# ATT:   ccmplew	{of}	%dx, %ax
+# INTEL: ccmple	{of}	ax, dx
+0x62,0xf4,0x45,0x0e,0x3b,0xc2
+
+# ATT:   ccmplel	{of}	%ecx, %edx
+# INTEL: ccmple	{of}	edx, ecx
+0x62,0xf4,0x44,0x0e,0x3b,0xd1
+
+# ATT:   ccmpleq	{of}	%r9, %r15
+# INTEL: ccmple	{of}	r15, r9
+0x62,0x54,0xc4,0x0e,0x3b,0xf9
+
+# ATT:   ccmpaeb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x03,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpaew	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x03,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpaew	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x03,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpael	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x03,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpael	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x03,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpaeq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x03,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpaeq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x03,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpaeb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x03,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpaew	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x03,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpael	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x03,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpaeq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpae	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x03,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpaeb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpae	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x03,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpaew	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpae	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x03,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpael	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpae	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x03,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpaeq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpae	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x03,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpaeb	{of}	$123, %bl
+# INTEL: ccmpae	{of}	bl, 123
+0x62,0xf4,0x44,0x03,0x80,0xfb,0x7b
+
+# ATT:   ccmpaew	{of}	$123, %dx
+# INTEL: ccmpae	{of}	dx, 123
+0x62,0xf4,0x45,0x03,0x83,0xfa,0x7b
+
+# ATT:   ccmpael	{of}	$123, %ecx
+# INTEL: ccmpae	{of}	ecx, 123
+0x62,0xf4,0x44,0x03,0x83,0xf9,0x7b
+
+# ATT:   ccmpaeq	{of}	$123, %r9
+# INTEL: ccmpae	{of}	r9, 123
+0x62,0xd4,0xc4,0x03,0x83,0xf9,0x7b
+
+# ATT:   ccmpaew	{of}	$1234, %dx
+# INTEL: ccmpae	{of}	dx, 1234
+0x62,0xf4,0x45,0x03,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpael	{of}	$123456, %ecx
+# INTEL: ccmpae	{of}	ecx, 123456
+0x62,0xf4,0x44,0x03,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpaeq	{of}	$123456, %r9
+# INTEL: ccmpae	{of}	r9, 123456
+0x62,0xd4,0xc4,0x03,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpaeb	{of}	%bl, %dl
+# INTEL: ccmpae	{of}	dl, bl
+0x62,0xf4,0x44,0x03,0x3a,0xd3
+
+# ATT:   ccmpaew	{of}	%dx, %ax
+# INTEL: ccmpae	{of}	ax, dx
+0x62,0xf4,0x45,0x03,0x3b,0xc2
+
+# ATT:   ccmpael	{of}	%ecx, %edx
+# INTEL: ccmpae	{of}	edx, ecx
+0x62,0xf4,0x44,0x03,0x3b,0xd1
+
+# ATT:   ccmpaeq	{of}	%r9, %r15
+# INTEL: ccmpae	{of}	r15, r9
+0x62,0x54,0xc4,0x03,0x3b,0xf9
+
+# ATT:   ccmpab	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x07,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpaw	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x07,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpaw	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x07,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpal	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x07,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpal	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x07,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpaq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x07,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpaq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x07,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpab	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x07,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpaw	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x07,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpal	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x07,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpaq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpa	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x07,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpab	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpa	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x07,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpaw	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpa	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x07,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpal	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpa	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x07,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpaq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpa	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x07,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpab	{of}	$123, %bl
+# INTEL: ccmpa	{of}	bl, 123
+0x62,0xf4,0x44,0x07,0x80,0xfb,0x7b
+
+# ATT:   ccmpaw	{of}	$123, %dx
+# INTEL: ccmpa	{of}	dx, 123
+0x62,0xf4,0x45,0x07,0x83,0xfa,0x7b
+
+# ATT:   ccmpal	{of}	$123, %ecx
+# INTEL: ccmpa	{of}	ecx, 123
+0x62,0xf4,0x44,0x07,0x83,0xf9,0x7b
+
+# ATT:   ccmpaq	{of}	$123, %r9
+# INTEL: ccmpa	{of}	r9, 123
+0x62,0xd4,0xc4,0x07,0x83,0xf9,0x7b
+
+# ATT:   ccmpaw	{of}	$1234, %dx
+# INTEL: ccmpa	{of}	dx, 1234
+0x62,0xf4,0x45,0x07,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpal	{of}	$123456, %ecx
+# INTEL: ccmpa	{of}	ecx, 123456
+0x62,0xf4,0x44,0x07,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpaq	{of}	$123456, %r9
+# INTEL: ccmpa	{of}	r9, 123456
+0x62,0xd4,0xc4,0x07,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpab	{of}	%bl, %dl
+# INTEL: ccmpa	{of}	dl, bl
+0x62,0xf4,0x44,0x07,0x3a,0xd3
+
+# ATT:   ccmpaw	{of}	%dx, %ax
+# INTEL: ccmpa	{of}	ax, dx
+0x62,0xf4,0x45,0x07,0x3b,0xc2
+
+# ATT:   ccmpal	{of}	%ecx, %edx
+# INTEL: ccmpa	{of}	edx, ecx
+0x62,0xf4,0x44,0x07,0x3b,0xd1
+
+# ATT:   ccmpaq	{of}	%r9, %r15
+# INTEL: ccmpa	{of}	r15, r9
+0x62,0x54,0xc4,0x07,0x3b,0xf9
+
+# ATT:   ccmpgeb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0d,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpgew	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x0d,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpgew	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x0d,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpgel	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0d,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpgel	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x0d,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpgeq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x0d,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpgeq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x0d,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpgeb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x0d,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpgew	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x0d,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpgel	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x0d,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpgeq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpge	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x0d,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpgeb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpge	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0d,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpgew	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpge	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x0d,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpgel	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpge	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0d,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpgeq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpge	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x0d,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpgeb	{of}	$123, %bl
+# INTEL: ccmpge	{of}	bl, 123
+0x62,0xf4,0x44,0x0d,0x80,0xfb,0x7b
+
+# ATT:   ccmpgew	{of}	$123, %dx
+# INTEL: ccmpge	{of}	dx, 123
+0x62,0xf4,0x45,0x0d,0x83,0xfa,0x7b
+
+# ATT:   ccmpgel	{of}	$123, %ecx
+# INTEL: ccmpge	{of}	ecx, 123
+0x62,0xf4,0x44,0x0d,0x83,0xf9,0x7b
+
+# ATT:   ccmpgeq	{of}	$123, %r9
+# INTEL: ccmpge	{of}	r9, 123
+0x62,0xd4,0xc4,0x0d,0x83,0xf9,0x7b
+
+# ATT:   ccmpgew	{of}	$1234, %dx
+# INTEL: ccmpge	{of}	dx, 1234
+0x62,0xf4,0x45,0x0d,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpgel	{of}	$123456, %ecx
+# INTEL: ccmpge	{of}	ecx, 123456
+0x62,0xf4,0x44,0x0d,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpgeq	{of}	$123456, %r9
+# INTEL: ccmpge	{of}	r9, 123456
+0x62,0xd4,0xc4,0x0d,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpgeb	{of}	%bl, %dl
+# INTEL: ccmpge	{of}	dl, bl
+0x62,0xf4,0x44,0x0d,0x3a,0xd3
+
+# ATT:   ccmpgew	{of}	%dx, %ax
+# INTEL: ccmpge	{of}	ax, dx
+0x62,0xf4,0x45,0x0d,0x3b,0xc2
+
+# ATT:   ccmpgel	{of}	%ecx, %edx
+# INTEL: ccmpge	{of}	edx, ecx
+0x62,0xf4,0x44,0x0d,0x3b,0xd1
+
+# ATT:   ccmpgeq	{of}	%r9, %r15
+# INTEL: ccmpge	{of}	r15, r9
+0x62,0x54,0xc4,0x0d,0x3b,0xf9
+
+# ATT:   ccmpgb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0f,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpgw	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x0f,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpgw	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x0f,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpgl	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0f,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpgl	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x0f,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpgq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x0f,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpgq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x0f,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpgb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x0f,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpgw	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x0f,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpgl	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x0f,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpgq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpg	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x0f,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpgb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpg	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0f,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpgw	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpg	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x0f,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpgl	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpg	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0f,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpgq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpg	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x0f,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpgb	{of}	$123, %bl
+# INTEL: ccmpg	{of}	bl, 123
+0x62,0xf4,0x44,0x0f,0x80,0xfb,0x7b
+
+# ATT:   ccmpgw	{of}	$123, %dx
+# INTEL: ccmpg	{of}	dx, 123
+0x62,0xf4,0x45,0x0f,0x83,0xfa,0x7b
+
+# ATT:   ccmpgl	{of}	$123, %ecx
+# INTEL: ccmpg	{of}	ecx, 123
+0x62,0xf4,0x44,0x0f,0x83,0xf9,0x7b
+
+# ATT:   ccmpgq	{of}	$123, %r9
+# INTEL: ccmpg	{of}	r9, 123
+0x62,0xd4,0xc4,0x0f,0x83,0xf9,0x7b
+
+# ATT:   ccmpgw	{of}	$1234, %dx
+# INTEL: ccmpg	{of}	dx, 1234
+0x62,0xf4,0x45,0x0f,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpgl	{of}	$123456, %ecx
+# INTEL: ccmpg	{of}	ecx, 123456
+0x62,0xf4,0x44,0x0f,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpgq	{of}	$123456, %r9
+# INTEL: ccmpg	{of}	r9, 123456
+0x62,0xd4,0xc4,0x0f,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpgb	{of}	%bl, %dl
+# INTEL: ccmpg	{of}	dl, bl
+0x62,0xf4,0x44,0x0f,0x3a,0xd3
+
+# ATT:   ccmpgw	{of}	%dx, %ax
+# INTEL: ccmpg	{of}	ax, dx
+0x62,0xf4,0x45,0x0f,0x3b,0xc2
+
+# ATT:   ccmpgl	{of}	%ecx, %edx
+# INTEL: ccmpg	{of}	edx, ecx
+0x62,0xf4,0x44,0x0f,0x3b,0xd1
+
+# ATT:   ccmpgq	{of}	%r9, %r15
+# INTEL: ccmpg	{of}	r15, r9
+0x62,0x54,0xc4,0x0f,0x3b,0xf9
+
+# ATT:   ccmpnob	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x01,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnow	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x01,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnow	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x01,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpnol	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x01,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnol	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x01,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpnoq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x01,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnoq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x01,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpnob	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x01,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpnow	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x01,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpnol	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x01,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpnoq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpno	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x01,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpnob	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpno	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x01,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpnow	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpno	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x01,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpnol	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpno	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x01,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpnoq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpno	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x01,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpnob	{of}	$123, %bl
+# INTEL: ccmpno	{of}	bl, 123
+0x62,0xf4,0x44,0x01,0x80,0xfb,0x7b
+
+# ATT:   ccmpnow	{of}	$123, %dx
+# INTEL: ccmpno	{of}	dx, 123
+0x62,0xf4,0x45,0x01,0x83,0xfa,0x7b
+
+# ATT:   ccmpnol	{of}	$123, %ecx
+# INTEL: ccmpno	{of}	ecx, 123
+0x62,0xf4,0x44,0x01,0x83,0xf9,0x7b
+
+# ATT:   ccmpnoq	{of}	$123, %r9
+# INTEL: ccmpno	{of}	r9, 123
+0x62,0xd4,0xc4,0x01,0x83,0xf9,0x7b
+
+# ATT:   ccmpnow	{of}	$1234, %dx
+# INTEL: ccmpno	{of}	dx, 1234
+0x62,0xf4,0x45,0x01,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpnol	{of}	$123456, %ecx
+# INTEL: ccmpno	{of}	ecx, 123456
+0x62,0xf4,0x44,0x01,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpnoq	{of}	$123456, %r9
+# INTEL: ccmpno	{of}	r9, 123456
+0x62,0xd4,0xc4,0x01,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpnob	{of}	%bl, %dl
+# INTEL: ccmpno	{of}	dl, bl
+0x62,0xf4,0x44,0x01,0x3a,0xd3
+
+# ATT:   ccmpnow	{of}	%dx, %ax
+# INTEL: ccmpno	{of}	ax, dx
+0x62,0xf4,0x45,0x01,0x3b,0xc2
+
+# ATT:   ccmpnol	{of}	%ecx, %edx
+# INTEL: ccmpno	{of}	edx, ecx
+0x62,0xf4,0x44,0x01,0x3b,0xd1
+
+# ATT:   ccmpnoq	{of}	%r9, %r15
+# INTEL: ccmpno	{of}	r15, r9
+0x62,0x54,0xc4,0x01,0x3b,0xf9
+
+# ATT:   ccmpnsb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x09,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnsw	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x09,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnsw	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x09,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpnsl	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x09,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnsl	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x09,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpnsq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x09,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnsq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x09,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpnsb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x09,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpnsw	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x09,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpnsl	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x09,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpnsq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpns	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x09,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpnsb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpns	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x09,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpnsw	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpns	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x09,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpnsl	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpns	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x09,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpnsq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpns	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x09,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpnsb	{of}	$123, %bl
+# INTEL: ccmpns	{of}	bl, 123
+0x62,0xf4,0x44,0x09,0x80,0xfb,0x7b
+
+# ATT:   ccmpnsw	{of}	$123, %dx
+# INTEL: ccmpns	{of}	dx, 123
+0x62,0xf4,0x45,0x09,0x83,0xfa,0x7b
+
+# ATT:   ccmpnsl	{of}	$123, %ecx
+# INTEL: ccmpns	{of}	ecx, 123
+0x62,0xf4,0x44,0x09,0x83,0xf9,0x7b
+
+# ATT:   ccmpnsq	{of}	$123, %r9
+# INTEL: ccmpns	{of}	r9, 123
+0x62,0xd4,0xc4,0x09,0x83,0xf9,0x7b
+
+# ATT:   ccmpnsw	{of}	$1234, %dx
+# INTEL: ccmpns	{of}	dx, 1234
+0x62,0xf4,0x45,0x09,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpnsl	{of}	$123456, %ecx
+# INTEL: ccmpns	{of}	ecx, 123456
+0x62,0xf4,0x44,0x09,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpnsq	{of}	$123456, %r9
+# INTEL: ccmpns	{of}	r9, 123456
+0x62,0xd4,0xc4,0x09,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpnsb	{of}	%bl, %dl
+# INTEL: ccmpns	{of}	dl, bl
+0x62,0xf4,0x44,0x09,0x3a,0xd3
+
+# ATT:   ccmpnsw	{of}	%dx, %ax
+# INTEL: ccmpns	{of}	ax, dx
+0x62,0xf4,0x45,0x09,0x3b,0xc2
+
+# ATT:   ccmpnsl	{of}	%ecx, %edx
+# INTEL: ccmpns	{of}	edx, ecx
+0x62,0xf4,0x44,0x09,0x3b,0xd1
+
+# ATT:   ccmpnsq	{of}	%r9, %r15
+# INTEL: ccmpns	{of}	r15, r9
+0x62,0x54,0xc4,0x09,0x3b,0xf9
+
+# ATT:   ccmpneb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x05,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnew	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x05,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnew	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x05,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpnel	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x05,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpnel	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x05,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpneq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x05,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpneq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x05,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpneb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x05,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpnew	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x05,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpnel	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x05,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpneq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpne	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x05,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpneb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpne	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x05,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpnew	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpne	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x05,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpnel	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpne	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x05,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpneq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpne	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x05,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpneb	{of}	$123, %bl
+# INTEL: ccmpne	{of}	bl, 123
+0x62,0xf4,0x44,0x05,0x80,0xfb,0x7b
+
+# ATT:   ccmpnew	{of}	$123, %dx
+# INTEL: ccmpne	{of}	dx, 123
+0x62,0xf4,0x45,0x05,0x83,0xfa,0x7b
+
+# ATT:   ccmpnel	{of}	$123, %ecx
+# INTEL: ccmpne	{of}	ecx, 123
+0x62,0xf4,0x44,0x05,0x83,0xf9,0x7b
+
+# ATT:   ccmpneq	{of}	$123, %r9
+# INTEL: ccmpne	{of}	r9, 123
+0x62,0xd4,0xc4,0x05,0x83,0xf9,0x7b
+
+# ATT:   ccmpnew	{of}	$1234, %dx
+# INTEL: ccmpne	{of}	dx, 1234
+0x62,0xf4,0x45,0x05,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpnel	{of}	$123456, %ecx
+# INTEL: ccmpne	{of}	ecx, 123456
+0x62,0xf4,0x44,0x05,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpneq	{of}	$123456, %r9
+# INTEL: ccmpne	{of}	r9, 123456
+0x62,0xd4,0xc4,0x05,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpneb	{of}	%bl, %dl
+# INTEL: ccmpne	{of}	dl, bl
+0x62,0xf4,0x44,0x05,0x3a,0xd3
+
+# ATT:   ccmpnew	{of}	%dx, %ax
+# INTEL: ccmpne	{of}	ax, dx
+0x62,0xf4,0x45,0x05,0x3b,0xc2
+
+# ATT:   ccmpnel	{of}	%ecx, %edx
+# INTEL: ccmpne	{of}	edx, ecx
+0x62,0xf4,0x44,0x05,0x3b,0xd1
+
+# ATT:   ccmpneq	{of}	%r9, %r15
+# INTEL: ccmpne	{of}	r15, r9
+0x62,0x54,0xc4,0x05,0x3b,0xf9
+
+# ATT:   ccmpob	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x00,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpow	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x00,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpow	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x00,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpol	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x00,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpol	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x00,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpoq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x00,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpoq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x00,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpob	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x00,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpow	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x00,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpol	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x00,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpoq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpo	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x00,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpob	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpo	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x00,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpow	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpo	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x00,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpol	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpo	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x00,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpoq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpo	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x00,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpob	{of}	$123, %bl
+# INTEL: ccmpo	{of}	bl, 123
+0x62,0xf4,0x44,0x00,0x80,0xfb,0x7b
+
+# ATT:   ccmpow	{of}	$123, %dx
+# INTEL: ccmpo	{of}	dx, 123
+0x62,0xf4,0x45,0x00,0x83,0xfa,0x7b
+
+# ATT:   ccmpol	{of}	$123, %ecx
+# INTEL: ccmpo	{of}	ecx, 123
+0x62,0xf4,0x44,0x00,0x83,0xf9,0x7b
+
+# ATT:   ccmpoq	{of}	$123, %r9
+# INTEL: ccmpo	{of}	r9, 123
+0x62,0xd4,0xc4,0x00,0x83,0xf9,0x7b
+
+# ATT:   ccmpow	{of}	$1234, %dx
+# INTEL: ccmpo	{of}	dx, 1234
+0x62,0xf4,0x45,0x00,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpol	{of}	$123456, %ecx
+# INTEL: ccmpo	{of}	ecx, 123456
+0x62,0xf4,0x44,0x00,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpoq	{of}	$123456, %r9
+# INTEL: ccmpo	{of}	r9, 123456
+0x62,0xd4,0xc4,0x00,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpob	{of}	%bl, %dl
+# INTEL: ccmpo	{of}	dl, bl
+0x62,0xf4,0x44,0x00,0x3a,0xd3
+
+# ATT:   ccmpow	{of}	%dx, %ax
+# INTEL: ccmpo	{of}	ax, dx
+0x62,0xf4,0x45,0x00,0x3b,0xc2
+
+# ATT:   ccmpol	{of}	%ecx, %edx
+# INTEL: ccmpo	{of}	edx, ecx
+0x62,0xf4,0x44,0x00,0x3b,0xd1
+
+# ATT:   ccmpoq	{of}	%r9, %r15
+# INTEL: ccmpo	{of}	r15, r9
+0x62,0x54,0xc4,0x00,0x3b,0xf9
+
+# ATT:   ccmpsb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x08,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpsw	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x08,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpsw	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x08,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpsl	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x08,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpsl	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x08,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpsq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x08,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpsq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x08,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpsb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x08,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpsw	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x08,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpsl	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x08,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpsq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmps	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x08,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpsb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmps	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x08,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpsw	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmps	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x08,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpsl	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmps	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x08,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpsq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmps	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x08,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpsb	{of}	$123, %bl
+# INTEL: ccmps	{of}	bl, 123
+0x62,0xf4,0x44,0x08,0x80,0xfb,0x7b
+
+# ATT:   ccmpsw	{of}	$123, %dx
+# INTEL: ccmps	{of}	dx, 123
+0x62,0xf4,0x45,0x08,0x83,0xfa,0x7b
+
+# ATT:   ccmpsl	{of}	$123, %ecx
+# INTEL: ccmps	{of}	ecx, 123
+0x62,0xf4,0x44,0x08,0x83,0xf9,0x7b
+
+# ATT:   ccmpsq	{of}	$123, %r9
+# INTEL: ccmps	{of}	r9, 123
+0x62,0xd4,0xc4,0x08,0x83,0xf9,0x7b
+
+# ATT:   ccmpsw	{of}	$1234, %dx
+# INTEL: ccmps	{of}	dx, 1234
+0x62,0xf4,0x45,0x08,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpsl	{of}	$123456, %ecx
+# INTEL: ccmps	{of}	ecx, 123456
+0x62,0xf4,0x44,0x08,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpsq	{of}	$123456, %r9
+# INTEL: ccmps	{of}	r9, 123456
+0x62,0xd4,0xc4,0x08,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpsb	{of}	%bl, %dl
+# INTEL: ccmps	{of}	dl, bl
+0x62,0xf4,0x44,0x08,0x3a,0xd3
+
+# ATT:   ccmpsw	{of}	%dx, %ax
+# INTEL: ccmps	{of}	ax, dx
+0x62,0xf4,0x45,0x08,0x3b,0xc2
+
+# ATT:   ccmpsl	{of}	%ecx, %edx
+# INTEL: ccmps	{of}	edx, ecx
+0x62,0xf4,0x44,0x08,0x3b,0xd1
+
+# ATT:   ccmpsq	{of}	%r9, %r15
+# INTEL: ccmps	{of}	r15, r9
+0x62,0x54,0xc4,0x08,0x3b,0xf9
+
+# ATT:   ccmptb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0a,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmptw	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x0a,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmptw	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x0a,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmptl	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x0a,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmptl	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmptq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x0a,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmptq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmptb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x0a,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmptw	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x0a,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmptl	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x0a,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmptq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpt	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x0a,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmptb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpt	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0a,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmptw	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpt	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x0a,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmptl	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpt	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x0a,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmptq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpt	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x0a,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmptb	{of}	$123, %bl
+# INTEL: ccmpt	{of}	bl, 123
+0x62,0xf4,0x44,0x0a,0x80,0xfb,0x7b
+
+# ATT:   ccmptw	{of}	$123, %dx
+# INTEL: ccmpt	{of}	dx, 123
+0x62,0xf4,0x45,0x0a,0x83,0xfa,0x7b
+
+# ATT:   ccmptl	{of}	$123, %ecx
+# INTEL: ccmpt	{of}	ecx, 123
+0x62,0xf4,0x44,0x0a,0x83,0xf9,0x7b
+
+# ATT:   ccmptq	{of}	$123, %r9
+# INTEL: ccmpt	{of}	r9, 123
+0x62,0xd4,0xc4,0x0a,0x83,0xf9,0x7b
+
+# ATT:   ccmptw	{of}	$1234, %dx
+# INTEL: ccmpt	{of}	dx, 1234
+0x62,0xf4,0x45,0x0a,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmptl	{of}	$123456, %ecx
+# INTEL: ccmpt	{of}	ecx, 123456
+0x62,0xf4,0x44,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmptq	{of}	$123456, %r9
+# INTEL: ccmpt	{of}	r9, 123456
+0x62,0xd4,0xc4,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmptb	{of}	%bl, %dl
+# INTEL: ccmpt	{of}	dl, bl
+0x62,0xf4,0x44,0x0a,0x3a,0xd3
+
+# ATT:   ccmptw	{of}	%dx, %ax
+# INTEL: ccmpt	{of}	ax, dx
+0x62,0xf4,0x45,0x0a,0x3b,0xc2
+
+# ATT:   ccmptl	{of}	%ecx, %edx
+# INTEL: ccmpt	{of}	edx, ecx
+0x62,0xf4,0x44,0x0a,0x3b,0xd1
+
+# ATT:   ccmptq	{of}	%r9, %r15
+# INTEL: ccmpt	{of}	r15, r9
+0x62,0x54,0xc4,0x0a,0x3b,0xf9
+
+# ATT:   ccmpeb	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	byte ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x04,0x80,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpew	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	word ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x45,0x04,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpew	{of}	$1234, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	word ptr [r8 + 4*rax + 123], 1234
+0x62,0xd4,0x45,0x04,0x81,0x7c,0x80,0x7b,0xd2,0x04
+
+# ATT:   ccmpel	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	dword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0x44,0x04,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpel	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	dword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0x44,0x04,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpeq	{of}	$123, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	qword ptr [r8 + 4*rax + 123], 123
+0x62,0xd4,0xc4,0x04,0x83,0x7c,0x80,0x7b,0x7b
+
+# ATT:   ccmpeq	{of}	$123456, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	qword ptr [r8 + 4*rax + 123], 123456
+0x62,0xd4,0xc4,0x04,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpeb	{of}	%bl, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	byte ptr [r8 + 4*rax + 123], bl
+0x62,0xd4,0x44,0x04,0x38,0x5c,0x80,0x7b
+
+# ATT:   ccmpew	{of}	%dx, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	word ptr [r8 + 4*rax + 123], dx
+0x62,0xd4,0x45,0x04,0x39,0x54,0x80,0x7b
+
+# ATT:   ccmpel	{of}	%ecx, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	dword ptr [r8 + 4*rax + 123], ecx
+0x62,0xd4,0x44,0x04,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpeq	{of}	%r9, 123(%r8,%rax,4)
+# INTEL: ccmpe	{of}	qword ptr [r8 + 4*rax + 123], r9
+0x62,0x54,0xc4,0x04,0x39,0x4c,0x80,0x7b
+
+# ATT:   ccmpeb	{of}	123(%r8,%rax,4), %bl
+# INTEL: ccmpe	{of}	bl, byte ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x04,0x3a,0x5c,0x80,0x7b
+
+# ATT:   ccmpew	{of}	123(%r8,%rax,4), %dx
+# INTEL: ccmpe	{of}	dx, word ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x45,0x04,0x3b,0x54,0x80,0x7b
+
+# ATT:   ccmpel	{of}	123(%r8,%rax,4), %ecx
+# INTEL: ccmpe	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+0x62,0xd4,0x44,0x04,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpeq	{of}	123(%r8,%rax,4), %r9
+# INTEL: ccmpe	{of}	r9, qword ptr [r8 + 4*rax + 123]
+0x62,0x54,0xc4,0x04,0x3b,0x4c,0x80,0x7b
+
+# ATT:   ccmpeb	{of}	$123, %bl
+# INTEL: ccmpe	{of}	bl, 123
+0x62,0xf4,0x44,0x04,0x80,0xfb,0x7b
+
+# ATT:   ccmpew	{of}	$123, %dx
+# INTEL: ccmpe	{of}	dx, 123
+0x62,0xf4,0x45,0x04,0x83,0xfa,0x7b
+
+# ATT:   ccmpel	{of}	$123, %ecx
+# INTEL: ccmpe	{of}	ecx, 123
+0x62,0xf4,0x44,0x04,0x83,0xf9,0x7b
+
+# ATT:   ccmpeq	{of}	$123, %r9
+# INTEL: ccmpe	{of}	r9, 123
+0x62,0xd4,0xc4,0x04,0x83,0xf9,0x7b
+
+# ATT:   ccmpew	{of}	$1234, %dx
+# INTEL: ccmpe	{of}	dx, 1234
+0x62,0xf4,0x45,0x04,0x81,0xfa,0xd2,0x04
+
+# ATT:   ccmpel	{of}	$123456, %ecx
+# INTEL: ccmpe	{of}	ecx, 123456
+0x62,0xf4,0x44,0x04,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpeq	{of}	$123456, %r9
+# INTEL: ccmpe	{of}	r9, 123456
+0x62,0xd4,0xc4,0x04,0x81,0xf9,0x40,0xe2,0x01,0x00
+
+# ATT:   ccmpeb	{of}	%bl, %dl
+# INTEL: ccmpe	{of}	dl, bl
+0x62,0xf4,0x44,0x04,0x3a,0xd3
+
+# ATT:   ccmpew	{of}	%dx, %ax
+# INTEL: ccmpe	{of}	ax, dx
+0x62,0xf4,0x45,0x04,0x3b,0xc2
+
+# ATT:   ccmpel	{of}	%ecx, %edx
+# INTEL: ccmpe	{of}	edx, ecx
+0x62,0xf4,0x44,0x04,0x3b,0xd1
+
+# ATT:   ccmpeq	{of}	%r9, %r15
+# INTEL: ccmpe	{of}	r15, r9
+0x62,0x54,0xc4,0x04,0x3b,0xf9
diff --git a/llvm/test/MC/X86/apx/ccmp-att-error.s b/llvm/test/MC/X86/apx/ccmp-att-error.s
new file mode 100644
index 00000000000000..3321a2547a6b81
--- /dev/null
+++ b/llvm/test/MC/X86/apx/ccmp-att-error.s
@@ -0,0 +1,26 @@
+# RUN: not llvm-mc -triple x86_64 -show-encoding %s 2>&1 | FileCheck --strict-whitespace %s
+
+# CHECK: error: Expected { at this point
+# CHECK: ccmpeq $1 %rax, %rbx
+# CHECK:        ^
+ccmpeq $1 %rax, %rbx
+
+# CHECK: error: Expected } or , at this point
+# CHECK: ccmpeq {sf,cf%rax, %rbx
+# CHECK:              ^
+ccmpeq {sf,cf%rax, %rbx
+
+# CHECK: error: Invalid conditional flags
+# CHECK: ccmpeq {pf} %rax, %rbx
+# CHECK:         ^
+ccmpeq {pf} %rax, %rbx
+
+# CHECK: error: Duplicated conditional flag
+# CHECK: ccmpeq {of,zf,of} %rax, %rbx
+# CHECK:               ^
+ccmpeq {of,zf,of} %rax, %rbx
+
+# CHECK: error: Expected } at this point
+# CHECK: ccmpeq {of,sf,zf,cf,of} %rax, %rbx
+# CHECK:                    ^
+ccmpeq {of,sf,zf,cf,of} %rax, %rbx
diff --git a/llvm/test/MC/X86/apx/ccmp-att.s b/llvm/test/MC/X86/apx/ccmp-att.s
new file mode 100644
index 00000000000000..679ef93d7f6016
--- /dev/null
+++ b/llvm/test/MC/X86/apx/ccmp-att.s
@@ -0,0 +1,1213 @@
+# 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-401: error:
+# ERROR-NOT: error:
+## Condition flags
+
+# CHECK: ccmpoq {}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0x84,0x00,0x39,0xc3]
+         ccmpoq {}	%rax, %rbx
+# CHECK: ccmpoq {of}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0xc4,0x00,0x39,0xc3]
+         ccmpoq {of}	%rax, %rbx
+# CHECK: ccmpoq {sf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0xa4,0x00,0x39,0xc3]
+         ccmpoq {sf}	%rax, %rbx
+# CHECK: ccmpoq {zf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0x94,0x00,0x39,0xc3]
+         ccmpoq {zf}	%rax, %rbx
+# CHECK: ccmpoq {cf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0x8c,0x00,0x39,0xc3]
+         ccmpoq {cf}	%rax, %rbx
+# CHECK: ccmpoq {of,sf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0xe4,0x00,0x39,0xc3]
+         ccmpoq {of,sf}	%rax, %rbx
+# CHECK: ccmpoq {of,sf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0xe4,0x00,0x39,0xc3]
+         ccmpoq {sf,of}	%rax, %rbx
+# CHECK: ccmpoq {of,sf,zf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0xf4,0x00,0x39,0xc3]
+         ccmpoq {of,sf,zf}	%rax, %rbx
+# CHECK: ccmpoq {of,sf,zf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0xf4,0x00,0x39,0xc3]
+         ccmpoq {zf,of,sf}	%rax, %rbx
+# CHECK: ccmpoq {of,sf,zf,cf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0xfc,0x00,0x39,0xc3]
+         ccmpoq {of,sf,zf,cf}	%rax, %rbx
+# CHECK: ccmpoq {of,sf,zf,cf}	%rax, %rbx
+# CHECK: encoding: [0x62,0xf4,0xfc,0x00,0x39,0xc3]
+         ccmpoq {cf,zf,sf,of}	%rax, %rbx
+
+## Condition code
+
+# CHECK: ccmpbb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpbb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpbw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x02,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpbw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpbw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x02,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpbw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpbl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpbl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpbl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpbl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpbq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x02,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpbq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpbq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x02,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpbq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpbb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x38,0x5c,0x80,0x7b]
+         ccmpbb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpbw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x02,0x39,0x54,0x80,0x7b]
+         ccmpbw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpbl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x39,0x4c,0x80,0x7b]
+         ccmpbl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpbq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x02,0x39,0x4c,0x80,0x7b]
+         ccmpbq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpbb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x3a,0x5c,0x80,0x7b]
+         ccmpbb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpbw	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x02,0x3b,0x54,0x80,0x7b]
+         ccmpbw	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpbl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x3b,0x4c,0x80,0x7b]
+         ccmpbl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpbq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x02,0x3b,0x4c,0x80,0x7b]
+         ccmpbq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpbb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x80,0xfb,0x7b]
+         ccmpbb	{of}	$123, %bl
+# CHECK: ccmpbw	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x02,0x83,0xfa,0x7b]
+         ccmpbw	{of}	$123, %dx
+# CHECK: ccmpbl	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x83,0xf9,0x7b]
+         ccmpbl	{of}	$123, %ecx
+# CHECK: ccmpbq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x02,0x83,0xf9,0x7b]
+         ccmpbq	{of}	$123, %r9
+# CHECK: ccmpbw	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x02,0x81,0xfa,0xd2,0x04]
+         ccmpbw	{of}	$1234, %dx
+# CHECK: ccmpbl	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpbl	{of}	$123456, %ecx
+# CHECK: ccmpbq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x02,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpbq	{of}	$123456, %r9
+# CHECK: ccmpbb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x38,0xda]
+         ccmpbb	{of}	%bl, %dl
+# CHECK: ccmpbw	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x02,0x39,0xd0]
+         ccmpbw	{of}	%dx, %ax
+# CHECK: ccmpbl	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x39,0xca]
+         ccmpbl	{of}	%ecx, %edx
+# CHECK: ccmpbq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x02,0x39,0xcf]
+         ccmpbq	{of}	%r9, %r15
+# CHECK: ccmpfb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpfb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpfw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0b,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpfw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpfw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0b,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpfw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpfl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpfl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpfl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpfl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpfq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0b,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpfq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpfq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0b,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpfq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpfb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x38,0x5c,0x80,0x7b]
+         ccmpfb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpfw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0b,0x39,0x54,0x80,0x7b]
+         ccmpfw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpfl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x39,0x4c,0x80,0x7b]
+         ccmpfl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpfq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x0b,0x39,0x4c,0x80,0x7b]
+         ccmpfq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpfb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x3a,0x5c,0x80,0x7b]
+         ccmpfb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpfw	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0b,0x3b,0x54,0x80,0x7b]
+         ccmpfw	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpfl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x3b,0x4c,0x80,0x7b]
+         ccmpfl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpfq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0b,0x3b,0x4c,0x80,0x7b]
+         ccmpfq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpfb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x80,0xfb,0x7b]
+         ccmpfb	{of}	$123, %bl
+# CHECK: ccmpfw	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0b,0x83,0xfa,0x7b]
+         ccmpfw	{of}	$123, %dx
+# CHECK: ccmpfl	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x83,0xf9,0x7b]
+         ccmpfl	{of}	$123, %ecx
+# CHECK: ccmpfq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0b,0x83,0xf9,0x7b]
+         ccmpfq	{of}	$123, %r9
+# CHECK: ccmpfw	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0b,0x81,0xfa,0xd2,0x04]
+         ccmpfw	{of}	$1234, %dx
+# CHECK: ccmpfl	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpfl	{of}	$123456, %ecx
+# CHECK: ccmpfq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0b,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpfq	{of}	$123456, %r9
+# CHECK: ccmpfb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x38,0xda]
+         ccmpfb	{of}	%bl, %dl
+# CHECK: ccmpfw	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x0b,0x39,0xd0]
+         ccmpfw	{of}	%dx, %ax
+# CHECK: ccmpfl	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x39,0xca]
+         ccmpfl	{of}	%ecx, %edx
+# CHECK: ccmpfq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x0b,0x39,0xcf]
+         ccmpfq	{of}	%r9, %r15
+# CHECK: ccmplb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmplb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmplw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0c,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmplw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmplw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0c,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmplw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpll	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpll	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpll	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpll	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmplq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0c,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmplq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmplq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0c,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmplq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmplb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x38,0x5c,0x80,0x7b]
+         ccmplb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmplw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0c,0x39,0x54,0x80,0x7b]
+         ccmplw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpll	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x39,0x4c,0x80,0x7b]
+         ccmpll	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmplq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x0c,0x39,0x4c,0x80,0x7b]
+         ccmplq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmplb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x3a,0x5c,0x80,0x7b]
+         ccmplb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmplw	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0c,0x3b,0x54,0x80,0x7b]
+         ccmplw	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpll	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x3b,0x4c,0x80,0x7b]
+         ccmpll	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmplq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0c,0x3b,0x4c,0x80,0x7b]
+         ccmplq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmplb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x80,0xfb,0x7b]
+         ccmplb	{of}	$123, %bl
+# CHECK: ccmplw	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0c,0x83,0xfa,0x7b]
+         ccmplw	{of}	$123, %dx
+# CHECK: ccmpll	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x83,0xf9,0x7b]
+         ccmpll	{of}	$123, %ecx
+# CHECK: ccmplq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0c,0x83,0xf9,0x7b]
+         ccmplq	{of}	$123, %r9
+# CHECK: ccmplw	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0c,0x81,0xfa,0xd2,0x04]
+         ccmplw	{of}	$1234, %dx
+# CHECK: ccmpll	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpll	{of}	$123456, %ecx
+# CHECK: ccmplq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0c,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmplq	{of}	$123456, %r9
+# CHECK: ccmplb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x38,0xda]
+         ccmplb	{of}	%bl, %dl
+# CHECK: ccmplw	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x0c,0x39,0xd0]
+         ccmplw	{of}	%dx, %ax
+# CHECK: ccmpll	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x39,0xca]
+         ccmpll	{of}	%ecx, %edx
+# CHECK: ccmplq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x0c,0x39,0xcf]
+         ccmplq	{of}	%r9, %r15
+# CHECK: ccmpleb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpleb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmplew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0e,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmplew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmplew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0e,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmplew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmplel	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmplel	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmplel	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmplel	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpleq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0e,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpleq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpleq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0e,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpleq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpleb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x38,0x5c,0x80,0x7b]
+         ccmpleb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmplew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0e,0x39,0x54,0x80,0x7b]
+         ccmplew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmplel	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x39,0x4c,0x80,0x7b]
+         ccmplel	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpleq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x0e,0x39,0x4c,0x80,0x7b]
+         ccmpleq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpleb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x3a,0x5c,0x80,0x7b]
+         ccmpleb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmplew	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0e,0x3b,0x54,0x80,0x7b]
+         ccmplew	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmplel	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x3b,0x4c,0x80,0x7b]
+         ccmplel	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpleq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0e,0x3b,0x4c,0x80,0x7b]
+         ccmpleq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpleb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x80,0xfb,0x7b]
+         ccmpleb	{of}	$123, %bl
+# CHECK: ccmplew	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0e,0x83,0xfa,0x7b]
+         ccmplew	{of}	$123, %dx
+# CHECK: ccmplel	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x83,0xf9,0x7b]
+         ccmplel	{of}	$123, %ecx
+# CHECK: ccmpleq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0e,0x83,0xf9,0x7b]
+         ccmpleq	{of}	$123, %r9
+# CHECK: ccmplew	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0e,0x81,0xfa,0xd2,0x04]
+         ccmplew	{of}	$1234, %dx
+# CHECK: ccmplel	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmplel	{of}	$123456, %ecx
+# CHECK: ccmpleq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0e,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpleq	{of}	$123456, %r9
+# CHECK: ccmpleb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x38,0xda]
+         ccmpleb	{of}	%bl, %dl
+# CHECK: ccmplew	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x0e,0x39,0xd0]
+         ccmplew	{of}	%dx, %ax
+# CHECK: ccmplel	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x39,0xca]
+         ccmplel	{of}	%ecx, %edx
+# CHECK: ccmpleq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x0e,0x39,0xcf]
+         ccmpleq	{of}	%r9, %r15
+# CHECK: ccmpaeb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpaeb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpaew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x03,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpaew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpaew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x03,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpaew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpael	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpael	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpael	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpael	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpaeq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x03,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpaeq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpaeq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x03,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpaeq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpaeb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x38,0x5c,0x80,0x7b]
+         ccmpaeb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpaew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x03,0x39,0x54,0x80,0x7b]
+         ccmpaew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpael	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x39,0x4c,0x80,0x7b]
+         ccmpael	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpaeq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x03,0x39,0x4c,0x80,0x7b]
+         ccmpaeq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpaeb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x3a,0x5c,0x80,0x7b]
+         ccmpaeb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpaew	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x03,0x3b,0x54,0x80,0x7b]
+         ccmpaew	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpael	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x3b,0x4c,0x80,0x7b]
+         ccmpael	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpaeq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x03,0x3b,0x4c,0x80,0x7b]
+         ccmpaeq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpaeb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x80,0xfb,0x7b]
+         ccmpaeb	{of}	$123, %bl
+# CHECK: ccmpaew	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x03,0x83,0xfa,0x7b]
+         ccmpaew	{of}	$123, %dx
+# CHECK: ccmpael	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x83,0xf9,0x7b]
+         ccmpael	{of}	$123, %ecx
+# CHECK: ccmpaeq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x03,0x83,0xf9,0x7b]
+         ccmpaeq	{of}	$123, %r9
+# CHECK: ccmpaew	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x03,0x81,0xfa,0xd2,0x04]
+         ccmpaew	{of}	$1234, %dx
+# CHECK: ccmpael	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpael	{of}	$123456, %ecx
+# CHECK: ccmpaeq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x03,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpaeq	{of}	$123456, %r9
+# CHECK: ccmpaeb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x38,0xda]
+         ccmpaeb	{of}	%bl, %dl
+# CHECK: ccmpaew	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x03,0x39,0xd0]
+         ccmpaew	{of}	%dx, %ax
+# CHECK: ccmpael	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x39,0xca]
+         ccmpael	{of}	%ecx, %edx
+# CHECK: ccmpaeq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x03,0x39,0xcf]
+         ccmpaeq	{of}	%r9, %r15
+# CHECK: ccmpab	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpab	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpaw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x07,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpaw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpaw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x07,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpaw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpal	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpal	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpal	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpal	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpaq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x07,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpaq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpaq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x07,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpaq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpab	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x38,0x5c,0x80,0x7b]
+         ccmpab	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpaw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x07,0x39,0x54,0x80,0x7b]
+         ccmpaw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpal	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x39,0x4c,0x80,0x7b]
+         ccmpal	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpaq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x07,0x39,0x4c,0x80,0x7b]
+         ccmpaq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpab	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x3a,0x5c,0x80,0x7b]
+         ccmpab	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpaw	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x07,0x3b,0x54,0x80,0x7b]
+         ccmpaw	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpal	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x3b,0x4c,0x80,0x7b]
+         ccmpal	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpaq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x07,0x3b,0x4c,0x80,0x7b]
+         ccmpaq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpab	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x80,0xfb,0x7b]
+         ccmpab	{of}	$123, %bl
+# CHECK: ccmpaw	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x07,0x83,0xfa,0x7b]
+         ccmpaw	{of}	$123, %dx
+# CHECK: ccmpal	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x83,0xf9,0x7b]
+         ccmpal	{of}	$123, %ecx
+# CHECK: ccmpaq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x07,0x83,0xf9,0x7b]
+         ccmpaq	{of}	$123, %r9
+# CHECK: ccmpaw	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x07,0x81,0xfa,0xd2,0x04]
+         ccmpaw	{of}	$1234, %dx
+# CHECK: ccmpal	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpal	{of}	$123456, %ecx
+# CHECK: ccmpaq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x07,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpaq	{of}	$123456, %r9
+# CHECK: ccmpab	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x38,0xda]
+         ccmpab	{of}	%bl, %dl
+# CHECK: ccmpaw	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x07,0x39,0xd0]
+         ccmpaw	{of}	%dx, %ax
+# CHECK: ccmpal	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x39,0xca]
+         ccmpal	{of}	%ecx, %edx
+# CHECK: ccmpaq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x07,0x39,0xcf]
+         ccmpaq	{of}	%r9, %r15
+# CHECK: ccmpgeb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpgeb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpgew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0d,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpgew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpgew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0d,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpgew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpgel	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpgel	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpgel	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpgel	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpgeq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0d,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpgeq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpgeq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0d,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpgeq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpgeb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x38,0x5c,0x80,0x7b]
+         ccmpgeb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpgew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0d,0x39,0x54,0x80,0x7b]
+         ccmpgew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpgel	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x39,0x4c,0x80,0x7b]
+         ccmpgel	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpgeq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x0d,0x39,0x4c,0x80,0x7b]
+         ccmpgeq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpgeb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x3a,0x5c,0x80,0x7b]
+         ccmpgeb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpgew	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0d,0x3b,0x54,0x80,0x7b]
+         ccmpgew	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpgel	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x3b,0x4c,0x80,0x7b]
+         ccmpgel	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpgeq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0d,0x3b,0x4c,0x80,0x7b]
+         ccmpgeq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpgeb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x80,0xfb,0x7b]
+         ccmpgeb	{of}	$123, %bl
+# CHECK: ccmpgew	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0d,0x83,0xfa,0x7b]
+         ccmpgew	{of}	$123, %dx
+# CHECK: ccmpgel	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x83,0xf9,0x7b]
+         ccmpgel	{of}	$123, %ecx
+# CHECK: ccmpgeq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0d,0x83,0xf9,0x7b]
+         ccmpgeq	{of}	$123, %r9
+# CHECK: ccmpgew	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0d,0x81,0xfa,0xd2,0x04]
+         ccmpgew	{of}	$1234, %dx
+# CHECK: ccmpgel	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpgel	{of}	$123456, %ecx
+# CHECK: ccmpgeq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0d,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpgeq	{of}	$123456, %r9
+# CHECK: ccmpgeb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x38,0xda]
+         ccmpgeb	{of}	%bl, %dl
+# CHECK: ccmpgew	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x0d,0x39,0xd0]
+         ccmpgew	{of}	%dx, %ax
+# CHECK: ccmpgel	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x39,0xca]
+         ccmpgel	{of}	%ecx, %edx
+# CHECK: ccmpgeq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x0d,0x39,0xcf]
+         ccmpgeq	{of}	%r9, %r15
+# CHECK: ccmpgb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpgb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpgw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0f,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpgw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpgw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0f,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpgw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpgl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpgl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpgl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpgl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpgq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0f,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpgq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpgq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0f,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpgq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpgb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x38,0x5c,0x80,0x7b]
+         ccmpgb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpgw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0f,0x39,0x54,0x80,0x7b]
+         ccmpgw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpgl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x39,0x4c,0x80,0x7b]
+         ccmpgl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpgq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x0f,0x39,0x4c,0x80,0x7b]
+         ccmpgq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpgb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x3a,0x5c,0x80,0x7b]
+         ccmpgb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpgw	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0f,0x3b,0x54,0x80,0x7b]
+         ccmpgw	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpgl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x3b,0x4c,0x80,0x7b]
+         ccmpgl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpgq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0f,0x3b,0x4c,0x80,0x7b]
+         ccmpgq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpgb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x80,0xfb,0x7b]
+         ccmpgb	{of}	$123, %bl
+# CHECK: ccmpgw	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0f,0x83,0xfa,0x7b]
+         ccmpgw	{of}	$123, %dx
+# CHECK: ccmpgl	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x83,0xf9,0x7b]
+         ccmpgl	{of}	$123, %ecx
+# CHECK: ccmpgq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0f,0x83,0xf9,0x7b]
+         ccmpgq	{of}	$123, %r9
+# CHECK: ccmpgw	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0f,0x81,0xfa,0xd2,0x04]
+         ccmpgw	{of}	$1234, %dx
+# CHECK: ccmpgl	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpgl	{of}	$123456, %ecx
+# CHECK: ccmpgq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0f,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpgq	{of}	$123456, %r9
+# CHECK: ccmpgb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x38,0xda]
+         ccmpgb	{of}	%bl, %dl
+# CHECK: ccmpgw	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x0f,0x39,0xd0]
+         ccmpgw	{of}	%dx, %ax
+# CHECK: ccmpgl	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x39,0xca]
+         ccmpgl	{of}	%ecx, %edx
+# CHECK: ccmpgq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x0f,0x39,0xcf]
+         ccmpgq	{of}	%r9, %r15
+# CHECK: ccmpnob	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpnob	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnow	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x01,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpnow	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnow	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x01,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpnow	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpnol	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpnol	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnol	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpnol	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpnoq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x01,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpnoq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnoq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x01,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpnoq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpnob	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x38,0x5c,0x80,0x7b]
+         ccmpnob	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpnow	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x01,0x39,0x54,0x80,0x7b]
+         ccmpnow	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpnol	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x39,0x4c,0x80,0x7b]
+         ccmpnol	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpnoq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x01,0x39,0x4c,0x80,0x7b]
+         ccmpnoq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpnob	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x3a,0x5c,0x80,0x7b]
+         ccmpnob	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpnow	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x01,0x3b,0x54,0x80,0x7b]
+         ccmpnow	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpnol	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x3b,0x4c,0x80,0x7b]
+         ccmpnol	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpnoq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x01,0x3b,0x4c,0x80,0x7b]
+         ccmpnoq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpnob	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x80,0xfb,0x7b]
+         ccmpnob	{of}	$123, %bl
+# CHECK: ccmpnow	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x01,0x83,0xfa,0x7b]
+         ccmpnow	{of}	$123, %dx
+# CHECK: ccmpnol	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x83,0xf9,0x7b]
+         ccmpnol	{of}	$123, %ecx
+# CHECK: ccmpnoq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x01,0x83,0xf9,0x7b]
+         ccmpnoq	{of}	$123, %r9
+# CHECK: ccmpnow	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x01,0x81,0xfa,0xd2,0x04]
+         ccmpnow	{of}	$1234, %dx
+# CHECK: ccmpnol	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpnol	{of}	$123456, %ecx
+# CHECK: ccmpnoq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x01,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpnoq	{of}	$123456, %r9
+# CHECK: ccmpnob	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x38,0xda]
+         ccmpnob	{of}	%bl, %dl
+# CHECK: ccmpnow	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x01,0x39,0xd0]
+         ccmpnow	{of}	%dx, %ax
+# CHECK: ccmpnol	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x39,0xca]
+         ccmpnol	{of}	%ecx, %edx
+# CHECK: ccmpnoq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x01,0x39,0xcf]
+         ccmpnoq	{of}	%r9, %r15
+# CHECK: ccmpnsb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpnsb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnsw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x09,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpnsw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnsw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x09,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpnsw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpnsl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpnsl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnsl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpnsl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpnsq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x09,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpnsq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnsq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x09,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpnsq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpnsb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x38,0x5c,0x80,0x7b]
+         ccmpnsb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpnsw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x09,0x39,0x54,0x80,0x7b]
+         ccmpnsw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpnsl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x39,0x4c,0x80,0x7b]
+         ccmpnsl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpnsq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x09,0x39,0x4c,0x80,0x7b]
+         ccmpnsq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpnsb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x3a,0x5c,0x80,0x7b]
+         ccmpnsb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpnsw	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x09,0x3b,0x54,0x80,0x7b]
+         ccmpnsw	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpnsl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x3b,0x4c,0x80,0x7b]
+         ccmpnsl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpnsq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x09,0x3b,0x4c,0x80,0x7b]
+         ccmpnsq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpnsb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x80,0xfb,0x7b]
+         ccmpnsb	{of}	$123, %bl
+# CHECK: ccmpnsw	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x09,0x83,0xfa,0x7b]
+         ccmpnsw	{of}	$123, %dx
+# CHECK: ccmpnsl	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x83,0xf9,0x7b]
+         ccmpnsl	{of}	$123, %ecx
+# CHECK: ccmpnsq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x09,0x83,0xf9,0x7b]
+         ccmpnsq	{of}	$123, %r9
+# CHECK: ccmpnsw	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x09,0x81,0xfa,0xd2,0x04]
+         ccmpnsw	{of}	$1234, %dx
+# CHECK: ccmpnsl	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpnsl	{of}	$123456, %ecx
+# CHECK: ccmpnsq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x09,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpnsq	{of}	$123456, %r9
+# CHECK: ccmpnsb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x38,0xda]
+         ccmpnsb	{of}	%bl, %dl
+# CHECK: ccmpnsw	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x09,0x39,0xd0]
+         ccmpnsw	{of}	%dx, %ax
+# CHECK: ccmpnsl	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x39,0xca]
+         ccmpnsl	{of}	%ecx, %edx
+# CHECK: ccmpnsq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x09,0x39,0xcf]
+         ccmpnsq	{of}	%r9, %r15
+# CHECK: ccmpneb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpneb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x05,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpnew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x05,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpnew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpnel	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpnel	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpnel	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpnel	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpneq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x05,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpneq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpneq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x05,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpneq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpneb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x38,0x5c,0x80,0x7b]
+         ccmpneb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpnew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x05,0x39,0x54,0x80,0x7b]
+         ccmpnew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpnel	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x39,0x4c,0x80,0x7b]
+         ccmpnel	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpneq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x05,0x39,0x4c,0x80,0x7b]
+         ccmpneq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpneb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x3a,0x5c,0x80,0x7b]
+         ccmpneb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpnew	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x05,0x3b,0x54,0x80,0x7b]
+         ccmpnew	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpnel	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x3b,0x4c,0x80,0x7b]
+         ccmpnel	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpneq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x05,0x3b,0x4c,0x80,0x7b]
+         ccmpneq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpneb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x80,0xfb,0x7b]
+         ccmpneb	{of}	$123, %bl
+# CHECK: ccmpnew	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x05,0x83,0xfa,0x7b]
+         ccmpnew	{of}	$123, %dx
+# CHECK: ccmpnel	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x83,0xf9,0x7b]
+         ccmpnel	{of}	$123, %ecx
+# CHECK: ccmpneq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x05,0x83,0xf9,0x7b]
+         ccmpneq	{of}	$123, %r9
+# CHECK: ccmpnew	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x05,0x81,0xfa,0xd2,0x04]
+         ccmpnew	{of}	$1234, %dx
+# CHECK: ccmpnel	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpnel	{of}	$123456, %ecx
+# CHECK: ccmpneq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x05,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpneq	{of}	$123456, %r9
+# CHECK: ccmpneb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x38,0xda]
+         ccmpneb	{of}	%bl, %dl
+# CHECK: ccmpnew	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x05,0x39,0xd0]
+         ccmpnew	{of}	%dx, %ax
+# CHECK: ccmpnel	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x39,0xca]
+         ccmpnel	{of}	%ecx, %edx
+# CHECK: ccmpneq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x05,0x39,0xcf]
+         ccmpneq	{of}	%r9, %r15
+# CHECK: ccmpob	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpob	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpow	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x00,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpow	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpow	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x00,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpow	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpol	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpol	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpol	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpol	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpoq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x00,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpoq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpoq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x00,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpoq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpob	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x38,0x5c,0x80,0x7b]
+         ccmpob	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpow	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x00,0x39,0x54,0x80,0x7b]
+         ccmpow	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpol	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x39,0x4c,0x80,0x7b]
+         ccmpol	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpoq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x00,0x39,0x4c,0x80,0x7b]
+         ccmpoq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpob	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x3a,0x5c,0x80,0x7b]
+         ccmpob	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpow	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x00,0x3b,0x54,0x80,0x7b]
+         ccmpow	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpol	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x3b,0x4c,0x80,0x7b]
+         ccmpol	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpoq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x00,0x3b,0x4c,0x80,0x7b]
+         ccmpoq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpob	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x80,0xfb,0x7b]
+         ccmpob	{of}	$123, %bl
+# CHECK: ccmpow	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x00,0x83,0xfa,0x7b]
+         ccmpow	{of}	$123, %dx
+# CHECK: ccmpol	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x83,0xf9,0x7b]
+         ccmpol	{of}	$123, %ecx
+# CHECK: ccmpoq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x00,0x83,0xf9,0x7b]
+         ccmpoq	{of}	$123, %r9
+# CHECK: ccmpow	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x00,0x81,0xfa,0xd2,0x04]
+         ccmpow	{of}	$1234, %dx
+# CHECK: ccmpol	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpol	{of}	$123456, %ecx
+# CHECK: ccmpoq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x00,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpoq	{of}	$123456, %r9
+# CHECK: ccmpob	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x38,0xda]
+         ccmpob	{of}	%bl, %dl
+# CHECK: ccmpow	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x00,0x39,0xd0]
+         ccmpow	{of}	%dx, %ax
+# CHECK: ccmpol	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x39,0xca]
+         ccmpol	{of}	%ecx, %edx
+# CHECK: ccmpoq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x00,0x39,0xcf]
+         ccmpoq	{of}	%r9, %r15
+# CHECK: ccmpsb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpsb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpsw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x08,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpsw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpsw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x08,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpsw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpsl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpsl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpsl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpsl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpsq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x08,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpsq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpsq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x08,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpsq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpsb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x38,0x5c,0x80,0x7b]
+         ccmpsb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpsw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x08,0x39,0x54,0x80,0x7b]
+         ccmpsw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpsl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x39,0x4c,0x80,0x7b]
+         ccmpsl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpsq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x08,0x39,0x4c,0x80,0x7b]
+         ccmpsq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpsb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x3a,0x5c,0x80,0x7b]
+         ccmpsb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpsw	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x08,0x3b,0x54,0x80,0x7b]
+         ccmpsw	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpsl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x3b,0x4c,0x80,0x7b]
+         ccmpsl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpsq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x08,0x3b,0x4c,0x80,0x7b]
+         ccmpsq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpsb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x80,0xfb,0x7b]
+         ccmpsb	{of}	$123, %bl
+# CHECK: ccmpsw	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x08,0x83,0xfa,0x7b]
+         ccmpsw	{of}	$123, %dx
+# CHECK: ccmpsl	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x83,0xf9,0x7b]
+         ccmpsl	{of}	$123, %ecx
+# CHECK: ccmpsq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x08,0x83,0xf9,0x7b]
+         ccmpsq	{of}	$123, %r9
+# CHECK: ccmpsw	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x08,0x81,0xfa,0xd2,0x04]
+         ccmpsw	{of}	$1234, %dx
+# CHECK: ccmpsl	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpsl	{of}	$123456, %ecx
+# CHECK: ccmpsq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x08,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpsq	{of}	$123456, %r9
+# CHECK: ccmpsb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x38,0xda]
+         ccmpsb	{of}	%bl, %dl
+# CHECK: ccmpsw	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x08,0x39,0xd0]
+         ccmpsw	{of}	%dx, %ax
+# CHECK: ccmpsl	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x39,0xca]
+         ccmpsl	{of}	%ecx, %edx
+# CHECK: ccmpsq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x08,0x39,0xcf]
+         ccmpsq	{of}	%r9, %r15
+# CHECK: ccmptb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmptb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmptw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmptw	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmptw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0a,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmptw	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmptl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmptl	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmptl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmptl	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmptq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmptq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmptq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmptq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmptb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x38,0x5c,0x80,0x7b]
+         ccmptb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmptw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x0a,0x39,0x54,0x80,0x7b]
+         ccmptw	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmptl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x39,0x4c,0x80,0x7b]
+         ccmptl	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmptq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x0a,0x39,0x4c,0x80,0x7b]
+         ccmptq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmptb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x3a,0x5c,0x80,0x7b]
+         ccmptb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmptw	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0a,0x3b,0x54,0x80,0x7b]
+         ccmptw	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmptl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x3b,0x4c,0x80,0x7b]
+         ccmptl	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmptq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0a,0x3b,0x4c,0x80,0x7b]
+         ccmptq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmptb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x80,0xfb,0x7b]
+         ccmptb	{of}	$123, %bl
+# CHECK: ccmptw	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0a,0x83,0xfa,0x7b]
+         ccmptw	{of}	$123, %dx
+# CHECK: ccmptl	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x83,0xf9,0x7b]
+         ccmptl	{of}	$123, %ecx
+# CHECK: ccmptq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0a,0x83,0xf9,0x7b]
+         ccmptq	{of}	$123, %r9
+# CHECK: ccmptw	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0a,0x81,0xfa,0xd2,0x04]
+         ccmptw	{of}	$1234, %dx
+# CHECK: ccmptl	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmptl	{of}	$123456, %ecx
+# CHECK: ccmptq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmptq	{of}	$123456, %r9
+# CHECK: ccmptb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x38,0xda]
+         ccmptb	{of}	%bl, %dl
+# CHECK: ccmptw	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x0a,0x39,0xd0]
+         ccmptw	{of}	%dx, %ax
+# CHECK: ccmptl	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x39,0xca]
+         ccmptl	{of}	%ecx, %edx
+# CHECK: ccmptq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x0a,0x39,0xcf]
+         ccmptq	{of}	%r9, %r15
+# CHECK: ccmpeb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpeb	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x04,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpew	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x04,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpew	{of}	$1234, 123(%r8,%rax,4)
+# CHECK: ccmpel	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpel	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpel	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpel	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpeq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x04,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpeq	{of}	$123, 123(%r8,%rax,4)
+# CHECK: ccmpeq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0xc4,0x04,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpeq	{of}	$123456, 123(%r8,%rax,4)
+# CHECK: ccmpeb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x38,0x5c,0x80,0x7b]
+         ccmpeb	{of}	%bl, 123(%r8,%rax,4)
+# CHECK: ccmpew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x45,0x04,0x39,0x54,0x80,0x7b]
+         ccmpew	{of}	%dx, 123(%r8,%rax,4)
+# CHECK: ccmpel	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x39,0x4c,0x80,0x7b]
+         ccmpel	{of}	%ecx, 123(%r8,%rax,4)
+# CHECK: ccmpeq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: encoding: [0x62,0x54,0xc4,0x04,0x39,0x4c,0x80,0x7b]
+         ccmpeq	{of}	%r9, 123(%r8,%rax,4)
+# CHECK: ccmpeb	{of}	123(%r8,%rax,4), %bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x3a,0x5c,0x80,0x7b]
+         ccmpeb	{of}	123(%r8,%rax,4), %bl
+# CHECK: ccmpew	{of}	123(%r8,%rax,4), %dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x04,0x3b,0x54,0x80,0x7b]
+         ccmpew	{of}	123(%r8,%rax,4), %dx
+# CHECK: ccmpel	{of}	123(%r8,%rax,4), %ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x3b,0x4c,0x80,0x7b]
+         ccmpel	{of}	123(%r8,%rax,4), %ecx
+# CHECK: ccmpeq	{of}	123(%r8,%rax,4), %r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x04,0x3b,0x4c,0x80,0x7b]
+         ccmpeq	{of}	123(%r8,%rax,4), %r9
+# CHECK: ccmpeb	{of}	$123, %bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x80,0xfb,0x7b]
+         ccmpeb	{of}	$123, %bl
+# CHECK: ccmpew	{of}	$123, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x04,0x83,0xfa,0x7b]
+         ccmpew	{of}	$123, %dx
+# CHECK: ccmpel	{of}	$123, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x83,0xf9,0x7b]
+         ccmpel	{of}	$123, %ecx
+# CHECK: ccmpeq	{of}	$123, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x04,0x83,0xf9,0x7b]
+         ccmpeq	{of}	$123, %r9
+# CHECK: ccmpew	{of}	$1234, %dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x04,0x81,0xfa,0xd2,0x04]
+         ccmpew	{of}	$1234, %dx
+# CHECK: ccmpel	{of}	$123456, %ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpel	{of}	$123456, %ecx
+# CHECK: ccmpeq	{of}	$123456, %r9
+# CHECK: encoding: [0x62,0xd4,0xc4,0x04,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpeq	{of}	$123456, %r9
+# CHECK: ccmpeb	{of}	%bl, %dl
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x38,0xda]
+         ccmpeb	{of}	%bl, %dl
+# CHECK: ccmpew	{of}	%dx, %ax
+# CHECK: encoding: [0x62,0xf4,0x45,0x04,0x39,0xd0]
+         ccmpew	{of}	%dx, %ax
+# CHECK: ccmpel	{of}	%ecx, %edx
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x39,0xca]
+         ccmpel	{of}	%ecx, %edx
+# CHECK: ccmpeq	{of}	%r9, %r15
+# CHECK: encoding: [0x62,0x54,0xc4,0x04,0x39,0xcf]
+         ccmpeq	{of}	%r9, %r15
diff --git a/llvm/test/MC/X86/apx/ccmp-intel-error.s b/llvm/test/MC/X86/apx/ccmp-intel-error.s
new file mode 100644
index 00000000000000..8d46473f8350a6
--- /dev/null
+++ b/llvm/test/MC/X86/apx/ccmp-intel-error.s
@@ -0,0 +1,26 @@
+# RUN: not llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s 2>&1 | FileCheck --strict-whitespace %s
+
+# CHECK: error: Expected { at this point
+# CHECK: ccmpe 1 rbx, rax
+# CHECK:       ^
+ccmpe 1 rbx, rax
+
+# CHECK: error: Expected } or , at this point
+# CHECK: ccmpe {sf,cf rbx, rax
+# CHECK:              ^
+ccmpe {sf,cf rbx, rax
+
+# CHECK: error: Invalid conditional flags
+# CHECK: ccmpe {pf} rbx, rax
+# CHECK:        ^
+ccmpe {pf} rbx, rax
+
+# CHECK: error: Duplicated conditional flag
+# CHECK: ccmpeq {of,zf,of} rbx, rax
+# CHECK:               ^
+ccmpeq {of,zf,of} rbx, rax
+
+# CHECK: error: Expected } at this point
+# CHECK: ccmpeq {of,sf,zf,cf,of} rbx, rax
+# CHECK:                    ^
+ccmpeq {of,sf,zf,cf,of} rbx, rax
diff --git a/llvm/test/MC/X86/apx/ccmp-intel.s b/llvm/test/MC/X86/apx/ccmp-intel.s
new file mode 100644
index 00000000000000..323f3a92c5328e
--- /dev/null
+++ b/llvm/test/MC/X86/apx/ccmp-intel.s
@@ -0,0 +1,1210 @@
+# RUN: llvm-mc -triple x86_64 -show-encoding -x86-asm-syntax=intel -output-asm-variant=1 %s | FileCheck %s
+
+## Condition flags
+
+# CHECK: ccmpo {}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0x84,0x00,0x39,0xc3]
+         ccmpo {}	rbx, rax
+# CHECK: ccmpo {of}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0xc4,0x00,0x39,0xc3]
+         ccmpo {of}	rbx, rax
+# CHECK: ccmpo {sf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0xa4,0x00,0x39,0xc3]
+         ccmpo {sf}	rbx, rax
+# CHECK: ccmpo {zf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0x94,0x00,0x39,0xc3]
+         ccmpo {zf}	rbx, rax
+# CHECK: ccmpo {cf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0x8c,0x00,0x39,0xc3]
+         ccmpo {cf}	rbx, rax
+# CHECK: ccmpo {of,sf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0xe4,0x00,0x39,0xc3]
+         ccmpo {of,sf}	rbx, rax
+# CHECK: ccmpo {of,sf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0xe4,0x00,0x39,0xc3]
+         ccmpo {sf,of}	rbx, rax
+# CHECK: ccmpo {of,sf,zf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0xf4,0x00,0x39,0xc3]
+         ccmpo {of,sf,zf}	rbx, rax
+# CHECK: ccmpo {of,sf,zf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0xf4,0x00,0x39,0xc3]
+         ccmpo {zf,of,sf}	rbx, rax
+# CHECK: ccmpo {of,sf,zf,cf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0xfc,0x00,0x39,0xc3]
+         ccmpo {of,sf,zf,cf}	rbx, rax
+# CHECK: ccmpo {of,sf,zf,cf}	rbx, rax
+# CHECK: encoding: [0x62,0xf4,0xfc,0x00,0x39,0xc3]
+         ccmpo {cf,zf,sf,of}	rbx, rax
+
+## Condition code
+
+# CHECK: ccmpb	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpb	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpb	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x02,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpb	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpb	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x02,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpb	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpb	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpb	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpb	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpb	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpb	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x02,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpb	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpb	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x02,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpb	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpb	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x38,0x5c,0x80,0x7b]
+         ccmpb	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpb	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x02,0x39,0x54,0x80,0x7b]
+         ccmpb	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpb	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x39,0x4c,0x80,0x7b]
+         ccmpb	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpb	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x02,0x39,0x4c,0x80,0x7b]
+         ccmpb	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpb	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x3a,0x5c,0x80,0x7b]
+         ccmpb	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpb	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x02,0x3b,0x54,0x80,0x7b]
+         ccmpb	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpb	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x02,0x3b,0x4c,0x80,0x7b]
+         ccmpb	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpb	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x02,0x3b,0x4c,0x80,0x7b]
+         ccmpb	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpb	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x80,0xfb,0x7b]
+         ccmpb	{of}	bl, 123
+# CHECK: ccmpb	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x02,0x83,0xfa,0x7b]
+         ccmpb	{of}	dx, 123
+# CHECK: ccmpb	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x83,0xf9,0x7b]
+         ccmpb	{of}	ecx, 123
+# CHECK: ccmpb	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x02,0x83,0xf9,0x7b]
+         ccmpb	{of}	r9, 123
+# CHECK: ccmpb	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x02,0x81,0xfa,0xd2,0x04]
+         ccmpb	{of}	dx, 1234
+# CHECK: ccmpb	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpb	{of}	ecx, 123456
+# CHECK: ccmpb	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x02,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpb	{of}	r9, 123456
+# CHECK: ccmpb	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x38,0xda]
+         ccmpb	{of}	dl, bl
+# CHECK: ccmpb	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x02,0x39,0xd0]
+         ccmpb	{of}	ax, dx
+# CHECK: ccmpb	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x02,0x39,0xca]
+         ccmpb	{of}	edx, ecx
+# CHECK: ccmpb	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x02,0x39,0xcf]
+         ccmpb	{of}	r15, r9
+# CHECK: ccmpf	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpf	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpf	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x0b,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpf	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpf	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x0b,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpf	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpf	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpf	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpf	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpf	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpf	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0b,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpf	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpf	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0b,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpf	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpf	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x38,0x5c,0x80,0x7b]
+         ccmpf	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpf	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0b,0x39,0x54,0x80,0x7b]
+         ccmpf	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpf	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x39,0x4c,0x80,0x7b]
+         ccmpf	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpf	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0b,0x39,0x4c,0x80,0x7b]
+         ccmpf	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpf	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x3a,0x5c,0x80,0x7b]
+         ccmpf	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpf	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x0b,0x3b,0x54,0x80,0x7b]
+         ccmpf	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpf	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0b,0x3b,0x4c,0x80,0x7b]
+         ccmpf	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpf	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x0b,0x3b,0x4c,0x80,0x7b]
+         ccmpf	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpf	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x80,0xfb,0x7b]
+         ccmpf	{of}	bl, 123
+# CHECK: ccmpf	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x0b,0x83,0xfa,0x7b]
+         ccmpf	{of}	dx, 123
+# CHECK: ccmpf	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x83,0xf9,0x7b]
+         ccmpf	{of}	ecx, 123
+# CHECK: ccmpf	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0b,0x83,0xf9,0x7b]
+         ccmpf	{of}	r9, 123
+# CHECK: ccmpf	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x0b,0x81,0xfa,0xd2,0x04]
+         ccmpf	{of}	dx, 1234
+# CHECK: ccmpf	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpf	{of}	ecx, 123456
+# CHECK: ccmpf	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0b,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpf	{of}	r9, 123456
+# CHECK: ccmpf	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x38,0xda]
+         ccmpf	{of}	dl, bl
+# CHECK: ccmpf	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0b,0x39,0xd0]
+         ccmpf	{of}	ax, dx
+# CHECK: ccmpf	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0b,0x39,0xca]
+         ccmpf	{of}	edx, ecx
+# CHECK: ccmpf	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0b,0x39,0xcf]
+         ccmpf	{of}	r15, r9
+# CHECK: ccmpl	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpl	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpl	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x0c,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpl	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpl	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x0c,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpl	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpl	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpl	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpl	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpl	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpl	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0c,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpl	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpl	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0c,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpl	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpl	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x38,0x5c,0x80,0x7b]
+         ccmpl	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpl	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0c,0x39,0x54,0x80,0x7b]
+         ccmpl	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpl	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x39,0x4c,0x80,0x7b]
+         ccmpl	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpl	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0c,0x39,0x4c,0x80,0x7b]
+         ccmpl	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpl	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x3a,0x5c,0x80,0x7b]
+         ccmpl	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpl	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x0c,0x3b,0x54,0x80,0x7b]
+         ccmpl	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpl	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0c,0x3b,0x4c,0x80,0x7b]
+         ccmpl	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpl	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x0c,0x3b,0x4c,0x80,0x7b]
+         ccmpl	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpl	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x80,0xfb,0x7b]
+         ccmpl	{of}	bl, 123
+# CHECK: ccmpl	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x0c,0x83,0xfa,0x7b]
+         ccmpl	{of}	dx, 123
+# CHECK: ccmpl	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x83,0xf9,0x7b]
+         ccmpl	{of}	ecx, 123
+# CHECK: ccmpl	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0c,0x83,0xf9,0x7b]
+         ccmpl	{of}	r9, 123
+# CHECK: ccmpl	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x0c,0x81,0xfa,0xd2,0x04]
+         ccmpl	{of}	dx, 1234
+# CHECK: ccmpl	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpl	{of}	ecx, 123456
+# CHECK: ccmpl	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0c,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpl	{of}	r9, 123456
+# CHECK: ccmpl	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x38,0xda]
+         ccmpl	{of}	dl, bl
+# CHECK: ccmpl	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0c,0x39,0xd0]
+         ccmpl	{of}	ax, dx
+# CHECK: ccmpl	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0c,0x39,0xca]
+         ccmpl	{of}	edx, ecx
+# CHECK: ccmpl	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0c,0x39,0xcf]
+         ccmpl	{of}	r15, r9
+# CHECK: ccmple	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmple	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmple	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x0e,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmple	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmple	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x0e,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmple	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmple	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmple	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmple	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmple	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmple	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0e,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmple	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmple	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0e,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmple	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmple	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x38,0x5c,0x80,0x7b]
+         ccmple	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmple	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0e,0x39,0x54,0x80,0x7b]
+         ccmple	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmple	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x39,0x4c,0x80,0x7b]
+         ccmple	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmple	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0e,0x39,0x4c,0x80,0x7b]
+         ccmple	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmple	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x3a,0x5c,0x80,0x7b]
+         ccmple	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmple	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x0e,0x3b,0x54,0x80,0x7b]
+         ccmple	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmple	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0e,0x3b,0x4c,0x80,0x7b]
+         ccmple	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmple	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x0e,0x3b,0x4c,0x80,0x7b]
+         ccmple	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmple	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x80,0xfb,0x7b]
+         ccmple	{of}	bl, 123
+# CHECK: ccmple	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x0e,0x83,0xfa,0x7b]
+         ccmple	{of}	dx, 123
+# CHECK: ccmple	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x83,0xf9,0x7b]
+         ccmple	{of}	ecx, 123
+# CHECK: ccmple	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0e,0x83,0xf9,0x7b]
+         ccmple	{of}	r9, 123
+# CHECK: ccmple	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x0e,0x81,0xfa,0xd2,0x04]
+         ccmple	{of}	dx, 1234
+# CHECK: ccmple	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmple	{of}	ecx, 123456
+# CHECK: ccmple	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0e,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmple	{of}	r9, 123456
+# CHECK: ccmple	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x38,0xda]
+         ccmple	{of}	dl, bl
+# CHECK: ccmple	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0e,0x39,0xd0]
+         ccmple	{of}	ax, dx
+# CHECK: ccmple	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0e,0x39,0xca]
+         ccmple	{of}	edx, ecx
+# CHECK: ccmple	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0e,0x39,0xcf]
+         ccmple	{of}	r15, r9
+# CHECK: ccmpae	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpae	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpae	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x03,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpae	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpae	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x03,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpae	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpae	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpae	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpae	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpae	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpae	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x03,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpae	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpae	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x03,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpae	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpae	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x38,0x5c,0x80,0x7b]
+         ccmpae	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpae	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x03,0x39,0x54,0x80,0x7b]
+         ccmpae	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpae	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x39,0x4c,0x80,0x7b]
+         ccmpae	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpae	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x03,0x39,0x4c,0x80,0x7b]
+         ccmpae	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpae	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x3a,0x5c,0x80,0x7b]
+         ccmpae	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpae	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x03,0x3b,0x54,0x80,0x7b]
+         ccmpae	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpae	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x03,0x3b,0x4c,0x80,0x7b]
+         ccmpae	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpae	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x03,0x3b,0x4c,0x80,0x7b]
+         ccmpae	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpae	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x80,0xfb,0x7b]
+         ccmpae	{of}	bl, 123
+# CHECK: ccmpae	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x03,0x83,0xfa,0x7b]
+         ccmpae	{of}	dx, 123
+# CHECK: ccmpae	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x83,0xf9,0x7b]
+         ccmpae	{of}	ecx, 123
+# CHECK: ccmpae	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x03,0x83,0xf9,0x7b]
+         ccmpae	{of}	r9, 123
+# CHECK: ccmpae	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x03,0x81,0xfa,0xd2,0x04]
+         ccmpae	{of}	dx, 1234
+# CHECK: ccmpae	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpae	{of}	ecx, 123456
+# CHECK: ccmpae	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x03,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpae	{of}	r9, 123456
+# CHECK: ccmpae	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x38,0xda]
+         ccmpae	{of}	dl, bl
+# CHECK: ccmpae	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x03,0x39,0xd0]
+         ccmpae	{of}	ax, dx
+# CHECK: ccmpae	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x03,0x39,0xca]
+         ccmpae	{of}	edx, ecx
+# CHECK: ccmpae	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x03,0x39,0xcf]
+         ccmpae	{of}	r15, r9
+# CHECK: ccmpa	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpa	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpa	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x07,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpa	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpa	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x07,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpa	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpa	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpa	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpa	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpa	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpa	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x07,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpa	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpa	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x07,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpa	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpa	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x38,0x5c,0x80,0x7b]
+         ccmpa	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpa	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x07,0x39,0x54,0x80,0x7b]
+         ccmpa	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpa	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x39,0x4c,0x80,0x7b]
+         ccmpa	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpa	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x07,0x39,0x4c,0x80,0x7b]
+         ccmpa	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpa	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x3a,0x5c,0x80,0x7b]
+         ccmpa	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpa	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x07,0x3b,0x54,0x80,0x7b]
+         ccmpa	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpa	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x07,0x3b,0x4c,0x80,0x7b]
+         ccmpa	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpa	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x07,0x3b,0x4c,0x80,0x7b]
+         ccmpa	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpa	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x80,0xfb,0x7b]
+         ccmpa	{of}	bl, 123
+# CHECK: ccmpa	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x07,0x83,0xfa,0x7b]
+         ccmpa	{of}	dx, 123
+# CHECK: ccmpa	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x83,0xf9,0x7b]
+         ccmpa	{of}	ecx, 123
+# CHECK: ccmpa	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x07,0x83,0xf9,0x7b]
+         ccmpa	{of}	r9, 123
+# CHECK: ccmpa	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x07,0x81,0xfa,0xd2,0x04]
+         ccmpa	{of}	dx, 1234
+# CHECK: ccmpa	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpa	{of}	ecx, 123456
+# CHECK: ccmpa	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x07,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpa	{of}	r9, 123456
+# CHECK: ccmpa	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x38,0xda]
+         ccmpa	{of}	dl, bl
+# CHECK: ccmpa	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x07,0x39,0xd0]
+         ccmpa	{of}	ax, dx
+# CHECK: ccmpa	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x07,0x39,0xca]
+         ccmpa	{of}	edx, ecx
+# CHECK: ccmpa	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x07,0x39,0xcf]
+         ccmpa	{of}	r15, r9
+# CHECK: ccmpge	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpge	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpge	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x0d,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpge	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpge	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x0d,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpge	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpge	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpge	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpge	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpge	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpge	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0d,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpge	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpge	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0d,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpge	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpge	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x38,0x5c,0x80,0x7b]
+         ccmpge	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpge	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0d,0x39,0x54,0x80,0x7b]
+         ccmpge	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpge	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x39,0x4c,0x80,0x7b]
+         ccmpge	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpge	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0d,0x39,0x4c,0x80,0x7b]
+         ccmpge	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpge	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x3a,0x5c,0x80,0x7b]
+         ccmpge	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpge	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x0d,0x3b,0x54,0x80,0x7b]
+         ccmpge	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpge	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0d,0x3b,0x4c,0x80,0x7b]
+         ccmpge	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpge	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x0d,0x3b,0x4c,0x80,0x7b]
+         ccmpge	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpge	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x80,0xfb,0x7b]
+         ccmpge	{of}	bl, 123
+# CHECK: ccmpge	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x0d,0x83,0xfa,0x7b]
+         ccmpge	{of}	dx, 123
+# CHECK: ccmpge	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x83,0xf9,0x7b]
+         ccmpge	{of}	ecx, 123
+# CHECK: ccmpge	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0d,0x83,0xf9,0x7b]
+         ccmpge	{of}	r9, 123
+# CHECK: ccmpge	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x0d,0x81,0xfa,0xd2,0x04]
+         ccmpge	{of}	dx, 1234
+# CHECK: ccmpge	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpge	{of}	ecx, 123456
+# CHECK: ccmpge	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0d,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpge	{of}	r9, 123456
+# CHECK: ccmpge	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x38,0xda]
+         ccmpge	{of}	dl, bl
+# CHECK: ccmpge	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0d,0x39,0xd0]
+         ccmpge	{of}	ax, dx
+# CHECK: ccmpge	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0d,0x39,0xca]
+         ccmpge	{of}	edx, ecx
+# CHECK: ccmpge	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0d,0x39,0xcf]
+         ccmpge	{of}	r15, r9
+# CHECK: ccmpg	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpg	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpg	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x0f,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpg	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpg	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x0f,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpg	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpg	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpg	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpg	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpg	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpg	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0f,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpg	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpg	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0f,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpg	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpg	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x38,0x5c,0x80,0x7b]
+         ccmpg	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpg	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0f,0x39,0x54,0x80,0x7b]
+         ccmpg	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpg	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x39,0x4c,0x80,0x7b]
+         ccmpg	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpg	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0f,0x39,0x4c,0x80,0x7b]
+         ccmpg	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpg	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x3a,0x5c,0x80,0x7b]
+         ccmpg	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpg	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x0f,0x3b,0x54,0x80,0x7b]
+         ccmpg	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpg	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0f,0x3b,0x4c,0x80,0x7b]
+         ccmpg	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpg	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x0f,0x3b,0x4c,0x80,0x7b]
+         ccmpg	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpg	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x80,0xfb,0x7b]
+         ccmpg	{of}	bl, 123
+# CHECK: ccmpg	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x0f,0x83,0xfa,0x7b]
+         ccmpg	{of}	dx, 123
+# CHECK: ccmpg	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x83,0xf9,0x7b]
+         ccmpg	{of}	ecx, 123
+# CHECK: ccmpg	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0f,0x83,0xf9,0x7b]
+         ccmpg	{of}	r9, 123
+# CHECK: ccmpg	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x0f,0x81,0xfa,0xd2,0x04]
+         ccmpg	{of}	dx, 1234
+# CHECK: ccmpg	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpg	{of}	ecx, 123456
+# CHECK: ccmpg	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0f,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpg	{of}	r9, 123456
+# CHECK: ccmpg	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x38,0xda]
+         ccmpg	{of}	dl, bl
+# CHECK: ccmpg	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0f,0x39,0xd0]
+         ccmpg	{of}	ax, dx
+# CHECK: ccmpg	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0f,0x39,0xca]
+         ccmpg	{of}	edx, ecx
+# CHECK: ccmpg	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0f,0x39,0xcf]
+         ccmpg	{of}	r15, r9
+# CHECK: ccmpno	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpno	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpno	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x01,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpno	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpno	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x01,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpno	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpno	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpno	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpno	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpno	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpno	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x01,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpno	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpno	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x01,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpno	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpno	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x38,0x5c,0x80,0x7b]
+         ccmpno	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpno	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x01,0x39,0x54,0x80,0x7b]
+         ccmpno	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpno	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x39,0x4c,0x80,0x7b]
+         ccmpno	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpno	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x01,0x39,0x4c,0x80,0x7b]
+         ccmpno	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpno	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x3a,0x5c,0x80,0x7b]
+         ccmpno	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpno	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x01,0x3b,0x54,0x80,0x7b]
+         ccmpno	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpno	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x01,0x3b,0x4c,0x80,0x7b]
+         ccmpno	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpno	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x01,0x3b,0x4c,0x80,0x7b]
+         ccmpno	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpno	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x80,0xfb,0x7b]
+         ccmpno	{of}	bl, 123
+# CHECK: ccmpno	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x01,0x83,0xfa,0x7b]
+         ccmpno	{of}	dx, 123
+# CHECK: ccmpno	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x83,0xf9,0x7b]
+         ccmpno	{of}	ecx, 123
+# CHECK: ccmpno	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x01,0x83,0xf9,0x7b]
+         ccmpno	{of}	r9, 123
+# CHECK: ccmpno	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x01,0x81,0xfa,0xd2,0x04]
+         ccmpno	{of}	dx, 1234
+# CHECK: ccmpno	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpno	{of}	ecx, 123456
+# CHECK: ccmpno	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x01,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpno	{of}	r9, 123456
+# CHECK: ccmpno	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x38,0xda]
+         ccmpno	{of}	dl, bl
+# CHECK: ccmpno	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x01,0x39,0xd0]
+         ccmpno	{of}	ax, dx
+# CHECK: ccmpno	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x01,0x39,0xca]
+         ccmpno	{of}	edx, ecx
+# CHECK: ccmpno	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x01,0x39,0xcf]
+         ccmpno	{of}	r15, r9
+# CHECK: ccmpns	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpns	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpns	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x09,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpns	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpns	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x09,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpns	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpns	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpns	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpns	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpns	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpns	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x09,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpns	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpns	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x09,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpns	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpns	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x38,0x5c,0x80,0x7b]
+         ccmpns	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpns	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x09,0x39,0x54,0x80,0x7b]
+         ccmpns	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpns	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x39,0x4c,0x80,0x7b]
+         ccmpns	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpns	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x09,0x39,0x4c,0x80,0x7b]
+         ccmpns	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpns	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x3a,0x5c,0x80,0x7b]
+         ccmpns	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpns	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x09,0x3b,0x54,0x80,0x7b]
+         ccmpns	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpns	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x09,0x3b,0x4c,0x80,0x7b]
+         ccmpns	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpns	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x09,0x3b,0x4c,0x80,0x7b]
+         ccmpns	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpns	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x80,0xfb,0x7b]
+         ccmpns	{of}	bl, 123
+# CHECK: ccmpns	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x09,0x83,0xfa,0x7b]
+         ccmpns	{of}	dx, 123
+# CHECK: ccmpns	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x83,0xf9,0x7b]
+         ccmpns	{of}	ecx, 123
+# CHECK: ccmpns	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x09,0x83,0xf9,0x7b]
+         ccmpns	{of}	r9, 123
+# CHECK: ccmpns	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x09,0x81,0xfa,0xd2,0x04]
+         ccmpns	{of}	dx, 1234
+# CHECK: ccmpns	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpns	{of}	ecx, 123456
+# CHECK: ccmpns	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x09,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpns	{of}	r9, 123456
+# CHECK: ccmpns	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x38,0xda]
+         ccmpns	{of}	dl, bl
+# CHECK: ccmpns	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x09,0x39,0xd0]
+         ccmpns	{of}	ax, dx
+# CHECK: ccmpns	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x09,0x39,0xca]
+         ccmpns	{of}	edx, ecx
+# CHECK: ccmpns	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x09,0x39,0xcf]
+         ccmpns	{of}	r15, r9
+# CHECK: ccmpne	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpne	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpne	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x05,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpne	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpne	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x05,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpne	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpne	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpne	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpne	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpne	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpne	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x05,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpne	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpne	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x05,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpne	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpne	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x38,0x5c,0x80,0x7b]
+         ccmpne	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpne	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x05,0x39,0x54,0x80,0x7b]
+         ccmpne	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpne	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x39,0x4c,0x80,0x7b]
+         ccmpne	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpne	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x05,0x39,0x4c,0x80,0x7b]
+         ccmpne	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpne	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x3a,0x5c,0x80,0x7b]
+         ccmpne	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpne	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x05,0x3b,0x54,0x80,0x7b]
+         ccmpne	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpne	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x05,0x3b,0x4c,0x80,0x7b]
+         ccmpne	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpne	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x05,0x3b,0x4c,0x80,0x7b]
+         ccmpne	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpne	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x80,0xfb,0x7b]
+         ccmpne	{of}	bl, 123
+# CHECK: ccmpne	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x05,0x83,0xfa,0x7b]
+         ccmpne	{of}	dx, 123
+# CHECK: ccmpne	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x83,0xf9,0x7b]
+         ccmpne	{of}	ecx, 123
+# CHECK: ccmpne	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x05,0x83,0xf9,0x7b]
+         ccmpne	{of}	r9, 123
+# CHECK: ccmpne	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x05,0x81,0xfa,0xd2,0x04]
+         ccmpne	{of}	dx, 1234
+# CHECK: ccmpne	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpne	{of}	ecx, 123456
+# CHECK: ccmpne	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x05,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpne	{of}	r9, 123456
+# CHECK: ccmpne	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x38,0xda]
+         ccmpne	{of}	dl, bl
+# CHECK: ccmpne	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x05,0x39,0xd0]
+         ccmpne	{of}	ax, dx
+# CHECK: ccmpne	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x05,0x39,0xca]
+         ccmpne	{of}	edx, ecx
+# CHECK: ccmpne	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x05,0x39,0xcf]
+         ccmpne	{of}	r15, r9
+# CHECK: ccmpo	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpo	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpo	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x00,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpo	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpo	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x00,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpo	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpo	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpo	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpo	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpo	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpo	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x00,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpo	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpo	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x00,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpo	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpo	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x38,0x5c,0x80,0x7b]
+         ccmpo	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpo	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x00,0x39,0x54,0x80,0x7b]
+         ccmpo	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpo	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x39,0x4c,0x80,0x7b]
+         ccmpo	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpo	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x00,0x39,0x4c,0x80,0x7b]
+         ccmpo	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpo	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x3a,0x5c,0x80,0x7b]
+         ccmpo	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpo	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x00,0x3b,0x54,0x80,0x7b]
+         ccmpo	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpo	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x00,0x3b,0x4c,0x80,0x7b]
+         ccmpo	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpo	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x00,0x3b,0x4c,0x80,0x7b]
+         ccmpo	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpo	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x80,0xfb,0x7b]
+         ccmpo	{of}	bl, 123
+# CHECK: ccmpo	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x00,0x83,0xfa,0x7b]
+         ccmpo	{of}	dx, 123
+# CHECK: ccmpo	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x83,0xf9,0x7b]
+         ccmpo	{of}	ecx, 123
+# CHECK: ccmpo	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x00,0x83,0xf9,0x7b]
+         ccmpo	{of}	r9, 123
+# CHECK: ccmpo	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x00,0x81,0xfa,0xd2,0x04]
+         ccmpo	{of}	dx, 1234
+# CHECK: ccmpo	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpo	{of}	ecx, 123456
+# CHECK: ccmpo	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x00,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpo	{of}	r9, 123456
+# CHECK: ccmpo	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x38,0xda]
+         ccmpo	{of}	dl, bl
+# CHECK: ccmpo	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x00,0x39,0xd0]
+         ccmpo	{of}	ax, dx
+# CHECK: ccmpo	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x00,0x39,0xca]
+         ccmpo	{of}	edx, ecx
+# CHECK: ccmpo	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x00,0x39,0xcf]
+         ccmpo	{of}	r15, r9
+# CHECK: ccmps	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmps	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmps	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x08,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmps	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmps	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x08,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmps	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmps	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmps	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmps	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmps	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmps	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x08,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmps	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmps	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x08,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmps	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmps	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x38,0x5c,0x80,0x7b]
+         ccmps	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmps	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x08,0x39,0x54,0x80,0x7b]
+         ccmps	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmps	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x39,0x4c,0x80,0x7b]
+         ccmps	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmps	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x08,0x39,0x4c,0x80,0x7b]
+         ccmps	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmps	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x3a,0x5c,0x80,0x7b]
+         ccmps	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmps	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x08,0x3b,0x54,0x80,0x7b]
+         ccmps	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmps	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x08,0x3b,0x4c,0x80,0x7b]
+         ccmps	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmps	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x08,0x3b,0x4c,0x80,0x7b]
+         ccmps	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmps	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x80,0xfb,0x7b]
+         ccmps	{of}	bl, 123
+# CHECK: ccmps	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x08,0x83,0xfa,0x7b]
+         ccmps	{of}	dx, 123
+# CHECK: ccmps	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x83,0xf9,0x7b]
+         ccmps	{of}	ecx, 123
+# CHECK: ccmps	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x08,0x83,0xf9,0x7b]
+         ccmps	{of}	r9, 123
+# CHECK: ccmps	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x08,0x81,0xfa,0xd2,0x04]
+         ccmps	{of}	dx, 1234
+# CHECK: ccmps	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmps	{of}	ecx, 123456
+# CHECK: ccmps	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x08,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmps	{of}	r9, 123456
+# CHECK: ccmps	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x38,0xda]
+         ccmps	{of}	dl, bl
+# CHECK: ccmps	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x08,0x39,0xd0]
+         ccmps	{of}	ax, dx
+# CHECK: ccmps	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x08,0x39,0xca]
+         ccmps	{of}	edx, ecx
+# CHECK: ccmps	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x08,0x39,0xcf]
+         ccmps	{of}	r15, r9
+# CHECK: ccmpt	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpt	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpt	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpt	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpt	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x0a,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpt	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpt	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpt	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpt	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpt	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpt	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0a,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpt	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpt	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0a,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpt	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpt	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x38,0x5c,0x80,0x7b]
+         ccmpt	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpt	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x0a,0x39,0x54,0x80,0x7b]
+         ccmpt	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpt	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x39,0x4c,0x80,0x7b]
+         ccmpt	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpt	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0a,0x39,0x4c,0x80,0x7b]
+         ccmpt	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpt	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x3a,0x5c,0x80,0x7b]
+         ccmpt	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpt	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x0a,0x3b,0x54,0x80,0x7b]
+         ccmpt	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpt	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x0a,0x3b,0x4c,0x80,0x7b]
+         ccmpt	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpt	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x0a,0x3b,0x4c,0x80,0x7b]
+         ccmpt	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpt	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x80,0xfb,0x7b]
+         ccmpt	{of}	bl, 123
+# CHECK: ccmpt	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x0a,0x83,0xfa,0x7b]
+         ccmpt	{of}	dx, 123
+# CHECK: ccmpt	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x83,0xf9,0x7b]
+         ccmpt	{of}	ecx, 123
+# CHECK: ccmpt	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0a,0x83,0xf9,0x7b]
+         ccmpt	{of}	r9, 123
+# CHECK: ccmpt	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x0a,0x81,0xfa,0xd2,0x04]
+         ccmpt	{of}	dx, 1234
+# CHECK: ccmpt	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpt	{of}	ecx, 123456
+# CHECK: ccmpt	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x0a,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpt	{of}	r9, 123456
+# CHECK: ccmpt	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x38,0xda]
+         ccmpt	{of}	dl, bl
+# CHECK: ccmpt	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x0a,0x39,0xd0]
+         ccmpt	{of}	ax, dx
+# CHECK: ccmpt	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x0a,0x39,0xca]
+         ccmpt	{of}	edx, ecx
+# CHECK: ccmpt	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x0a,0x39,0xcf]
+         ccmpt	{of}	r15, r9
+# CHECK: ccmpe	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x80,0x7c,0x80,0x7b,0x7b]
+         ccmpe	{of}	byte ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpe	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x45,0x04,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpe	{of}	word ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpe	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: encoding: [0x62,0xd4,0x45,0x04,0x81,0x7c,0x80,0x7b,0xd2,0x04]
+         ccmpe	{of}	word ptr [r8 + 4*rax + 123], 1234
+# CHECK: ccmpe	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpe	{of}	dword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpe	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpe	{of}	dword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpe	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x04,0x83,0x7c,0x80,0x7b,0x7b]
+         ccmpe	{of}	qword ptr [r8 + 4*rax + 123], 123
+# CHECK: ccmpe	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x04,0x81,0x7c,0x80,0x7b,0x40,0xe2,0x01,0x00]
+         ccmpe	{of}	qword ptr [r8 + 4*rax + 123], 123456
+# CHECK: ccmpe	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x38,0x5c,0x80,0x7b]
+         ccmpe	{of}	byte ptr [r8 + 4*rax + 123], bl
+# CHECK: ccmpe	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: encoding: [0x62,0xd4,0x45,0x04,0x39,0x54,0x80,0x7b]
+         ccmpe	{of}	word ptr [r8 + 4*rax + 123], dx
+# CHECK: ccmpe	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x39,0x4c,0x80,0x7b]
+         ccmpe	{of}	dword ptr [r8 + 4*rax + 123], ecx
+# CHECK: ccmpe	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x04,0x39,0x4c,0x80,0x7b]
+         ccmpe	{of}	qword ptr [r8 + 4*rax + 123], r9
+# CHECK: ccmpe	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x3a,0x5c,0x80,0x7b]
+         ccmpe	{of}	bl, byte ptr [r8 + 4*rax + 123]
+# CHECK: ccmpe	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x45,0x04,0x3b,0x54,0x80,0x7b]
+         ccmpe	{of}	dx, word ptr [r8 + 4*rax + 123]
+# CHECK: ccmpe	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0xd4,0x44,0x04,0x3b,0x4c,0x80,0x7b]
+         ccmpe	{of}	ecx, dword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpe	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: encoding: [0x62,0x54,0xc4,0x04,0x3b,0x4c,0x80,0x7b]
+         ccmpe	{of}	r9, qword ptr [r8 + 4*rax + 123]
+# CHECK: ccmpe	{of}	bl, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x80,0xfb,0x7b]
+         ccmpe	{of}	bl, 123
+# CHECK: ccmpe	{of}	dx, 123
+# CHECK: encoding: [0x62,0xf4,0x45,0x04,0x83,0xfa,0x7b]
+         ccmpe	{of}	dx, 123
+# CHECK: ccmpe	{of}	ecx, 123
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x83,0xf9,0x7b]
+         ccmpe	{of}	ecx, 123
+# CHECK: ccmpe	{of}	r9, 123
+# CHECK: encoding: [0x62,0xd4,0xc4,0x04,0x83,0xf9,0x7b]
+         ccmpe	{of}	r9, 123
+# CHECK: ccmpe	{of}	dx, 1234
+# CHECK: encoding: [0x62,0xf4,0x45,0x04,0x81,0xfa,0xd2,0x04]
+         ccmpe	{of}	dx, 1234
+# CHECK: ccmpe	{of}	ecx, 123456
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpe	{of}	ecx, 123456
+# CHECK: ccmpe	{of}	r9, 123456
+# CHECK: encoding: [0x62,0xd4,0xc4,0x04,0x81,0xf9,0x40,0xe2,0x01,0x00]
+         ccmpe	{of}	r9, 123456
+# CHECK: ccmpe	{of}	dl, bl
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x38,0xda]
+         ccmpe	{of}	dl, bl
+# CHECK: ccmpe	{of}	ax, dx
+# CHECK: encoding: [0x62,0xf4,0x45,0x04,0x39,0xd0]
+         ccmpe	{of}	ax, dx
+# CHECK: ccmpe	{of}	edx, ecx
+# CHECK: encoding: [0x62,0xf4,0x44,0x04,0x39,0xca]
+         ccmpe	{of}	edx, ecx
+# CHECK: ccmpe	{of}	r15, r9
+# CHECK: encoding: [0x62,0x54,0xc4,0x04,0x39,0xcf]
+         ccmpe	{of}	r15, r9
diff --git a/llvm/utils/TableGen/X86RecognizableInstr.cpp b/llvm/utils/TableGen/X86RecognizableInstr.cpp
index 5aa2e51c78ba29..39006a40daeb6a 100644
--- a/llvm/utils/TableGen/X86RecognizableInstr.cpp
+++ b/llvm/utils/TableGen/X86RecognizableInstr.cpp
@@ -127,6 +127,7 @@ RecognizableInstrBase::RecognizableInstrBase(const CodeGenInstruction &insn) {
   HasEVEX_KZ = Rec->getValueAsBit("hasEVEX_Z");
   HasEVEX_B = Rec->getValueAsBit("hasEVEX_B");
   HasEVEX_NF = Rec->getValueAsBit("hasEVEX_NF");
+  HasTwoConditionalOps = Rec->getValueAsBit("hasTwoConditionalOps");
   IsCodeGenOnly = Rec->getValueAsBit("isCodeGenOnly");
   IsAsmParserOnly = Rec->getValueAsBit("isAsmParserOnly");
   ForceDisassemble = Rec->getValueAsBit("ForceDisassemble");
@@ -494,6 +495,8 @@ void RecognizableInstr::emitInstructionSpecifier() {
     ++additionalOperands;
   if (HasEVEX_K)
     ++additionalOperands;
+  if (HasTwoConditionalOps)
+    additionalOperands += 2;
 #endif
 
   bool IsND = OpMap == X86Local::T_MAP4 && HasEVEX_B && HasVEX_4V;
@@ -561,6 +564,7 @@ void RecognizableInstr::emitInstructionSpecifier() {
 
     HANDLE_OPERAND(roRegister)
     HANDLE_OPTIONAL(immediate)
+    HANDLE_OPTIONAL(immediate)
     break;
   case X86Local::MRMDestMem4VOp3CC:
     // Operand 1 is a register operand in the Reg/Opcode field.
@@ -599,6 +603,7 @@ void RecognizableInstr::emitInstructionSpecifier() {
 
     HANDLE_OPERAND(roRegister)
     HANDLE_OPTIONAL(immediate)
+    HANDLE_OPTIONAL(immediate)
     break;
   case X86Local::MRMSrcReg:
     // Operand 1 is a register operand in the Reg/Opcode field.
@@ -735,6 +740,7 @@ void RecognizableInstr::emitInstructionSpecifier() {
     HANDLE_OPTIONAL(rmRegister)
     HANDLE_OPTIONAL(relocation)
     HANDLE_OPTIONAL(immediate)
+    HANDLE_OPTIONAL(immediate)
     break;
   case X86Local::MRMXmCC:
     assert(numPhysicalOperands == 2 &&
@@ -763,6 +769,8 @@ void RecognizableInstr::emitInstructionSpecifier() {
       HANDLE_OPERAND(writemaskRegister)
     HANDLE_OPERAND(memory)
     HANDLE_OPTIONAL(relocation)
+    HANDLE_OPTIONAL(immediate)
+    HANDLE_OPTIONAL(immediate)
     break;
   case X86Local::RawFrmImm8:
     // operand 1 is a 16-bit immediate
@@ -1032,6 +1040,7 @@ OperandType RecognizableInstr::typeFromString(const std::string &s,
   TYPE("i16imm_brtarget", TYPE_REL)
   TYPE("i32imm_brtarget", TYPE_REL)
   TYPE("ccode", TYPE_IMM)
+  TYPE("cflags", TYPE_IMM)
   TYPE("AVX512RC", TYPE_IMM)
   TYPE("brtarget32", TYPE_REL)
   TYPE("brtarget16", TYPE_REL)
@@ -1127,6 +1136,8 @@ RecognizableInstr::immediateEncodingFromString(const std::string &s,
   ENCODING("i64i32imm", ENCODING_ID)
   ENCODING("i64i8imm", ENCODING_IB)
   ENCODING("i8imm", ENCODING_IB)
+  ENCODING("ccode", ENCODING_CC)
+  ENCODING("cflags", ENCODING_CF)
   ENCODING("u4imm", ENCODING_IB)
   ENCODING("u8imm", ENCODING_IB)
   ENCODING("i16u8imm", ENCODING_IB)
diff --git a/llvm/utils/TableGen/X86RecognizableInstr.h b/llvm/utils/TableGen/X86RecognizableInstr.h
index 549fc5b4d5438c..ad319b3f28b723 100644
--- a/llvm/utils/TableGen/X86RecognizableInstr.h
+++ b/llvm/utils/TableGen/X86RecognizableInstr.h
@@ -214,6 +214,8 @@ struct RecognizableInstrBase {
   bool HasEVEX_B;
   /// The hasEVEX_NF field from the record
   bool HasEVEX_NF;
+  /// The hasTwoConditionalOps field from the record
+  bool HasTwoConditionalOps;
   /// Indicates that the instruction uses the L and L' fields for RC.
   bool EncodeRC;
   /// The isCodeGenOnly field from the record

>From ffc92833f80b7c84d346b8c8f12fac2932d801fa Mon Sep 17 00:00:00 2001
From: Shengchen Kan <shengchen.kan at intel.com>
Date: Tue, 5 Mar 2024 13:12:05 +0800
Subject: [PATCH 2/2] add decoding test for reverse encoding

---
 .../Disassembler/X86/apx/reverse-encoding.txt  | 18 ++++++++++++++++++
 1 file changed, 18 insertions(+)

diff --git a/llvm/test/MC/Disassembler/X86/apx/reverse-encoding.txt b/llvm/test/MC/Disassembler/X86/apx/reverse-encoding.txt
index 94499299477de7..a148d2a3f3b648 100644
--- a/llvm/test/MC/Disassembler/X86/apx/reverse-encoding.txt
+++ b/llvm/test/MC/Disassembler/X86/apx/reverse-encoding.txt
@@ -412,3 +412,21 @@
 # ATT:   movbeq	 %r16, %r17
 # INTEL: movbe	r17, r16
 0x62,0xec,0xfc,0x08,0x60,0xc8
+
+## ccmp
+
+# ATT:   ccmpob {}	%r16b, %r17b
+# INTEL: ccmpo {}	r17b, r16b
+0x62,0xec,0x04,0x00,0x3a,0xc8
+
+# ATT:   ccmpow {}	%r16w, %r17w
+# INTEL: ccmpo {}	r17w, r16w
+0x62,0xec,0x05,0x00,0x3b,0xc8
+
+# ATT:   ccmpol {}	%r16d, %r17d
+# INTEL: ccmpo {}	r17d, r16d
+0x62,0xec,0x04,0x00,0x3b,0xc8
+
+# ATT:   ccmpoq {}	%r16, %r17
+# INTEL: ccmpo {}	r17, r16
+0x62,0xec,0x84,0x00,0x3b,0xc8



More information about the llvm-commits mailing list