llvm.org GIT mirror llvm / 799ecd6
[X86] Remove the _alt forms of AVX512 VPCMP instructions. Use a combination of custom printing and custom parsing to achieve the same result and more Similar to the previous patch for VPCOM. Differential Revision: https://reviews.llvm.org/D59398 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@356344 91177308-0d34-0410-b5e6-96231b3b80d8 Craig Topper 1 year, 4 months ago
11 changed file(s) with 351 addition(s) and 229 deletion(s). Raw diff Collapse all Expand all
415415 ENUM_ENTRY(TYPE_IMM, "immediate operand") \
416416 ENUM_ENTRY(TYPE_IMM3, "1-byte immediate operand between 0 and 7") \
417417 ENUM_ENTRY(TYPE_IMM5, "1-byte immediate operand between 0 and 31") \
418 ENUM_ENTRY(TYPE_AVX512ICC, "1-byte immediate operand for AVX512 icmp") \
419418 ENUM_ENTRY(TYPE_UIMM8, "1-byte unsigned immediate operand") \
420419 ENUM_ENTRY(TYPE_M, "Memory operand") \
421420 ENUM_ENTRY(TYPE_MVSIBX, "Memory operand using XMM index") \
23862386 }
23872387 }
23882388
2389 unsigned ComparisonCode = ~0U;
2390
23892391 // FIXME: Hack to recognize vpcmp{ub,uw,ud,uq,b,w,d,q}.
23902392 if (PatchedName.startswith("vpcmp") &&
2391 (PatchedName.endswith("b") || PatchedName.endswith("w") ||
2392 PatchedName.endswith("d") || PatchedName.endswith("q"))) {
2393 unsigned CCIdx = PatchedName.drop_back().back() == 'u' ? 2 : 1;
2394 unsigned ComparisonCode = StringSwitch(
2395 PatchedName.slice(5, PatchedName.size() - CCIdx))
2393 (PatchedName.back() == 'b' || PatchedName.back() == 'w' ||
2394 PatchedName.back() == 'd' || PatchedName.back() == 'q')) {
2395 unsigned SuffixSize = PatchedName.drop_back().back() == 'u' ? 2 : 1;
2396 unsigned CC = StringSwitch(
2397 PatchedName.slice(5, PatchedName.size() - SuffixSize))
23962398 .Case("eq", 0x0) // Only allowed on unsigned. Checked below.
23972399 .Case("lt", 0x1)
23982400 .Case("le", 0x2)
24022404 .Case("nle", 0x6)
24032405 //.Case("true", 0x7) // Not a documented alias.
24042406 .Default(~0U);
2405 if (ComparisonCode != ~0U && (ComparisonCode != 0 || CCIdx == 2)) {
2406 Operands.push_back(X86Operand::CreateToken("vpcmp", NameLoc));
2407
2408 const MCExpr *ImmOp = MCConstantExpr::create(ComparisonCode,
2409 getParser().getContext());
2410 Operands.push_back(X86Operand::CreateImm(ImmOp, NameLoc, NameLoc));
2411
2412 PatchedName = PatchedName.substr(PatchedName.size() - CCIdx);
2413 }
2414 }
2415
2416 unsigned ComparisonCode = ~0U;
2407 if (CC != ~0U && (CC != 0 || SuffixSize == 2)) {
2408 switch (PatchedName.back()) {
2409 default: llvm_unreachable("Unexpected character!");
2410 case 'b': PatchedName = SuffixSize == 2 ? "vpcmpub" : "vpcmpb"; break;
2411 case 'w': PatchedName = SuffixSize == 2 ? "vpcmpuw" : "vpcmpw"; break;
2412 case 'd': PatchedName = SuffixSize == 2 ? "vpcmpud" : "vpcmpd"; break;
2413 case 'q': PatchedName = SuffixSize == 2 ? "vpcmpuq" : "vpcmpq"; break;
2414 }
2415 // Set up the immediate to push into the operands later.
2416 ComparisonCode = CC;
2417 }
2418 }
24172419
24182420 // FIXME: Hack to recognize vpcom{ub,uw,ud,uq,b,w,d,q}.
24192421 if (PatchedName.startswith("vpcom") &&
504504 // Switch opcode to the one that doesn't get special printing.
505505 mcInst.setOpcode(NewOpc);
506506 }
507 } else if (type == TYPE_AVX512ICC) {
508 if (immediate >= 8 || ((immediate & 0x3) == 3)) {
509 unsigned NewOpc;
510 switch (mcInst.getOpcode()) {
511 default: llvm_unreachable("unexpected opcode");
512 case X86::VPCMPBZ128rmi: NewOpc = X86::VPCMPBZ128rmi_alt; break;
513 case X86::VPCMPBZ128rmik: NewOpc = X86::VPCMPBZ128rmik_alt; break;
514 case X86::VPCMPBZ128rri: NewOpc = X86::VPCMPBZ128rri_alt; break;
515 case X86::VPCMPBZ128rrik: NewOpc = X86::VPCMPBZ128rrik_alt; break;
516 case X86::VPCMPBZ256rmi: NewOpc = X86::VPCMPBZ256rmi_alt; break;
517 case X86::VPCMPBZ256rmik: NewOpc = X86::VPCMPBZ256rmik_alt; break;
518 case X86::VPCMPBZ256rri: NewOpc = X86::VPCMPBZ256rri_alt; break;
519 case X86::VPCMPBZ256rrik: NewOpc = X86::VPCMPBZ256rrik_alt; break;
520 case X86::VPCMPBZrmi: NewOpc = X86::VPCMPBZrmi_alt; break;
521 case X86::VPCMPBZrmik: NewOpc = X86::VPCMPBZrmik_alt; break;
522 case X86::VPCMPBZrri: NewOpc = X86::VPCMPBZrri_alt; break;
523 case X86::VPCMPBZrrik: NewOpc = X86::VPCMPBZrrik_alt; break;
524 case X86::VPCMPDZ128rmi: NewOpc = X86::VPCMPDZ128rmi_alt; break;
525 case X86::VPCMPDZ128rmib: NewOpc = X86::VPCMPDZ128rmib_alt; break;
526 case X86::VPCMPDZ128rmibk: NewOpc = X86::VPCMPDZ128rmibk_alt; break;
527 case X86::VPCMPDZ128rmik: NewOpc = X86::VPCMPDZ128rmik_alt; break;
528 case X86::VPCMPDZ128rri: NewOpc = X86::VPCMPDZ128rri_alt; break;
529 case X86::VPCMPDZ128rrik: NewOpc = X86::VPCMPDZ128rrik_alt; break;
530 case X86::VPCMPDZ256rmi: NewOpc = X86::VPCMPDZ256rmi_alt; break;
531 case X86::VPCMPDZ256rmib: NewOpc = X86::VPCMPDZ256rmib_alt; break;
532 case X86::VPCMPDZ256rmibk: NewOpc = X86::VPCMPDZ256rmibk_alt; break;
533 case X86::VPCMPDZ256rmik: NewOpc = X86::VPCMPDZ256rmik_alt; break;
534 case X86::VPCMPDZ256rri: NewOpc = X86::VPCMPDZ256rri_alt; break;
535 case X86::VPCMPDZ256rrik: NewOpc = X86::VPCMPDZ256rrik_alt; break;
536 case X86::VPCMPDZrmi: NewOpc = X86::VPCMPDZrmi_alt; break;
537 case X86::VPCMPDZrmib: NewOpc = X86::VPCMPDZrmib_alt; break;
538 case X86::VPCMPDZrmibk: NewOpc = X86::VPCMPDZrmibk_alt; break;
539 case X86::VPCMPDZrmik: NewOpc = X86::VPCMPDZrmik_alt; break;
540 case X86::VPCMPDZrri: NewOpc = X86::VPCMPDZrri_alt; break;
541 case X86::VPCMPDZrrik: NewOpc = X86::VPCMPDZrrik_alt; break;
542 case X86::VPCMPQZ128rmi: NewOpc = X86::VPCMPQZ128rmi_alt; break;
543 case X86::VPCMPQZ128rmib: NewOpc = X86::VPCMPQZ128rmib_alt; break;
544 case X86::VPCMPQZ128rmibk: NewOpc = X86::VPCMPQZ128rmibk_alt; break;
545 case X86::VPCMPQZ128rmik: NewOpc = X86::VPCMPQZ128rmik_alt; break;
546 case X86::VPCMPQZ128rri: NewOpc = X86::VPCMPQZ128rri_alt; break;
547 case X86::VPCMPQZ128rrik: NewOpc = X86::VPCMPQZ128rrik_alt; break;
548 case X86::VPCMPQZ256rmi: NewOpc = X86::VPCMPQZ256rmi_alt; break;
549 case X86::VPCMPQZ256rmib: NewOpc = X86::VPCMPQZ256rmib_alt; break;
550 case X86::VPCMPQZ256rmibk: NewOpc = X86::VPCMPQZ256rmibk_alt; break;
551 case X86::VPCMPQZ256rmik: NewOpc = X86::VPCMPQZ256rmik_alt; break;
552 case X86::VPCMPQZ256rri: NewOpc = X86::VPCMPQZ256rri_alt; break;
553 case X86::VPCMPQZ256rrik: NewOpc = X86::VPCMPQZ256rrik_alt; break;
554 case X86::VPCMPQZrmi: NewOpc = X86::VPCMPQZrmi_alt; break;
555 case X86::VPCMPQZrmib: NewOpc = X86::VPCMPQZrmib_alt; break;
556 case X86::VPCMPQZrmibk: NewOpc = X86::VPCMPQZrmibk_alt; break;
557 case X86::VPCMPQZrmik: NewOpc = X86::VPCMPQZrmik_alt; break;
558 case X86::VPCMPQZrri: NewOpc = X86::VPCMPQZrri_alt; break;
559 case X86::VPCMPQZrrik: NewOpc = X86::VPCMPQZrrik_alt; break;
560 case X86::VPCMPUBZ128rmi: NewOpc = X86::VPCMPUBZ128rmi_alt; break;
561 case X86::VPCMPUBZ128rmik: NewOpc = X86::VPCMPUBZ128rmik_alt; break;
562 case X86::VPCMPUBZ128rri: NewOpc = X86::VPCMPUBZ128rri_alt; break;
563 case X86::VPCMPUBZ128rrik: NewOpc = X86::VPCMPUBZ128rrik_alt; break;
564 case X86::VPCMPUBZ256rmi: NewOpc = X86::VPCMPUBZ256rmi_alt; break;
565 case X86::VPCMPUBZ256rmik: NewOpc = X86::VPCMPUBZ256rmik_alt; break;
566 case X86::VPCMPUBZ256rri: NewOpc = X86::VPCMPUBZ256rri_alt; break;
567 case X86::VPCMPUBZ256rrik: NewOpc = X86::VPCMPUBZ256rrik_alt; break;
568 case X86::VPCMPUBZrmi: NewOpc = X86::VPCMPUBZrmi_alt; break;
569 case X86::VPCMPUBZrmik: NewOpc = X86::VPCMPUBZrmik_alt; break;
570 case X86::VPCMPUBZrri: NewOpc = X86::VPCMPUBZrri_alt; break;
571 case X86::VPCMPUBZrrik: NewOpc = X86::VPCMPUBZrrik_alt; break;
572 case X86::VPCMPUDZ128rmi: NewOpc = X86::VPCMPUDZ128rmi_alt; break;
573 case X86::VPCMPUDZ128rmib: NewOpc = X86::VPCMPUDZ128rmib_alt; break;
574 case X86::VPCMPUDZ128rmibk: NewOpc = X86::VPCMPUDZ128rmibk_alt; break;
575 case X86::VPCMPUDZ128rmik: NewOpc = X86::VPCMPUDZ128rmik_alt; break;
576 case X86::VPCMPUDZ128rri: NewOpc = X86::VPCMPUDZ128rri_alt; break;
577 case X86::VPCMPUDZ128rrik: NewOpc = X86::VPCMPUDZ128rrik_alt; break;
578 case X86::VPCMPUDZ256rmi: NewOpc = X86::VPCMPUDZ256rmi_alt; break;
579 case X86::VPCMPUDZ256rmib: NewOpc = X86::VPCMPUDZ256rmib_alt; break;
580 case X86::VPCMPUDZ256rmibk: NewOpc = X86::VPCMPUDZ256rmibk_alt; break;
581 case X86::VPCMPUDZ256rmik: NewOpc = X86::VPCMPUDZ256rmik_alt; break;
582 case X86::VPCMPUDZ256rri: NewOpc = X86::VPCMPUDZ256rri_alt; break;
583 case X86::VPCMPUDZ256rrik: NewOpc = X86::VPCMPUDZ256rrik_alt; break;
584 case X86::VPCMPUDZrmi: NewOpc = X86::VPCMPUDZrmi_alt; break;
585 case X86::VPCMPUDZrmib: NewOpc = X86::VPCMPUDZrmib_alt; break;
586 case X86::VPCMPUDZrmibk: NewOpc = X86::VPCMPUDZrmibk_alt; break;
587 case X86::VPCMPUDZrmik: NewOpc = X86::VPCMPUDZrmik_alt; break;
588 case X86::VPCMPUDZrri: NewOpc = X86::VPCMPUDZrri_alt; break;
589 case X86::VPCMPUDZrrik: NewOpc = X86::VPCMPUDZrrik_alt; break;
590 case X86::VPCMPUQZ128rmi: NewOpc = X86::VPCMPUQZ128rmi_alt; break;
591 case X86::VPCMPUQZ128rmib: NewOpc = X86::VPCMPUQZ128rmib_alt; break;
592 case X86::VPCMPUQZ128rmibk: NewOpc = X86::VPCMPUQZ128rmibk_alt; break;
593 case X86::VPCMPUQZ128rmik: NewOpc = X86::VPCMPUQZ128rmik_alt; break;
594 case X86::VPCMPUQZ128rri: NewOpc = X86::VPCMPUQZ128rri_alt; break;
595 case X86::VPCMPUQZ128rrik: NewOpc = X86::VPCMPUQZ128rrik_alt; break;
596 case X86::VPCMPUQZ256rmi: NewOpc = X86::VPCMPUQZ256rmi_alt; break;
597 case X86::VPCMPUQZ256rmib: NewOpc = X86::VPCMPUQZ256rmib_alt; break;
598 case X86::VPCMPUQZ256rmibk: NewOpc = X86::VPCMPUQZ256rmibk_alt; break;
599 case X86::VPCMPUQZ256rmik: NewOpc = X86::VPCMPUQZ256rmik_alt; break;
600 case X86::VPCMPUQZ256rri: NewOpc = X86::VPCMPUQZ256rri_alt; break;
601 case X86::VPCMPUQZ256rrik: NewOpc = X86::VPCMPUQZ256rrik_alt; break;
602 case X86::VPCMPUQZrmi: NewOpc = X86::VPCMPUQZrmi_alt; break;
603 case X86::VPCMPUQZrmib: NewOpc = X86::VPCMPUQZrmib_alt; break;
604 case X86::VPCMPUQZrmibk: NewOpc = X86::VPCMPUQZrmibk_alt; break;
605 case X86::VPCMPUQZrmik: NewOpc = X86::VPCMPUQZrmik_alt; break;
606 case X86::VPCMPUQZrri: NewOpc = X86::VPCMPUQZrri_alt; break;
607 case X86::VPCMPUQZrrik: NewOpc = X86::VPCMPUQZrrik_alt; break;
608 case X86::VPCMPUWZ128rmi: NewOpc = X86::VPCMPUWZ128rmi_alt; break;
609 case X86::VPCMPUWZ128rmik: NewOpc = X86::VPCMPUWZ128rmik_alt; break;
610 case X86::VPCMPUWZ128rri: NewOpc = X86::VPCMPUWZ128rri_alt; break;
611 case X86::VPCMPUWZ128rrik: NewOpc = X86::VPCMPUWZ128rrik_alt; break;
612 case X86::VPCMPUWZ256rmi: NewOpc = X86::VPCMPUWZ256rmi_alt; break;
613 case X86::VPCMPUWZ256rmik: NewOpc = X86::VPCMPUWZ256rmik_alt; break;
614 case X86::VPCMPUWZ256rri: NewOpc = X86::VPCMPUWZ256rri_alt; break;
615 case X86::VPCMPUWZ256rrik: NewOpc = X86::VPCMPUWZ256rrik_alt; break;
616 case X86::VPCMPUWZrmi: NewOpc = X86::VPCMPUWZrmi_alt; break;
617 case X86::VPCMPUWZrmik: NewOpc = X86::VPCMPUWZrmik_alt; break;
618 case X86::VPCMPUWZrri: NewOpc = X86::VPCMPUWZrri_alt; break;
619 case X86::VPCMPUWZrrik: NewOpc = X86::VPCMPUWZrrik_alt; break;
620 case X86::VPCMPWZ128rmi: NewOpc = X86::VPCMPWZ128rmi_alt; break;
621 case X86::VPCMPWZ128rmik: NewOpc = X86::VPCMPWZ128rmik_alt; break;
622 case X86::VPCMPWZ128rri: NewOpc = X86::VPCMPWZ128rri_alt; break;
623 case X86::VPCMPWZ128rrik: NewOpc = X86::VPCMPWZ128rrik_alt; break;
624 case X86::VPCMPWZ256rmi: NewOpc = X86::VPCMPWZ256rmi_alt; break;
625 case X86::VPCMPWZ256rmik: NewOpc = X86::VPCMPWZ256rmik_alt; break;
626 case X86::VPCMPWZ256rri: NewOpc = X86::VPCMPWZ256rri_alt; break;
627 case X86::VPCMPWZ256rrik: NewOpc = X86::VPCMPWZ256rrik_alt; break;
628 case X86::VPCMPWZrmi: NewOpc = X86::VPCMPWZrmi_alt; break;
629 case X86::VPCMPWZrmik: NewOpc = X86::VPCMPWZrmik_alt; break;
630 case X86::VPCMPWZrri: NewOpc = X86::VPCMPWZrri_alt; break;
631 case X86::VPCMPWZrrik: NewOpc = X86::VPCMPWZrrik_alt; break;
632 }
633 // Switch opcode to the one that doesn't get special printing.
634 mcInst.setOpcode(NewOpc);
635 }
636507 }
637508
638509 switch (type) {
107107 printOperand(MI, 1, OS);
108108 OS << ", ";
109109 printOperand(MI, 0, OS);
110 return true;
111 }
112 break;
113
114 case X86::VPCMPBZ128rmi: case X86::VPCMPBZ128rri:
115 case X86::VPCMPBZ256rmi: case X86::VPCMPBZ256rri:
116 case X86::VPCMPBZrmi: case X86::VPCMPBZrri:
117 case X86::VPCMPDZ128rmi: case X86::VPCMPDZ128rri:
118 case X86::VPCMPDZ256rmi: case X86::VPCMPDZ256rri:
119 case X86::VPCMPDZrmi: case X86::VPCMPDZrri:
120 case X86::VPCMPQZ128rmi: case X86::VPCMPQZ128rri:
121 case X86::VPCMPQZ256rmi: case X86::VPCMPQZ256rri:
122 case X86::VPCMPQZrmi: case X86::VPCMPQZrri:
123 case X86::VPCMPUBZ128rmi: case X86::VPCMPUBZ128rri:
124 case X86::VPCMPUBZ256rmi: case X86::VPCMPUBZ256rri:
125 case X86::VPCMPUBZrmi: case X86::VPCMPUBZrri:
126 case X86::VPCMPUDZ128rmi: case X86::VPCMPUDZ128rri:
127 case X86::VPCMPUDZ256rmi: case X86::VPCMPUDZ256rri:
128 case X86::VPCMPUDZrmi: case X86::VPCMPUDZrri:
129 case X86::VPCMPUQZ128rmi: case X86::VPCMPUQZ128rri:
130 case X86::VPCMPUQZ256rmi: case X86::VPCMPUQZ256rri:
131 case X86::VPCMPUQZrmi: case X86::VPCMPUQZrri:
132 case X86::VPCMPUWZ128rmi: case X86::VPCMPUWZ128rri:
133 case X86::VPCMPUWZ256rmi: case X86::VPCMPUWZ256rri:
134 case X86::VPCMPUWZrmi: case X86::VPCMPUWZrri:
135 case X86::VPCMPWZ128rmi: case X86::VPCMPWZ128rri:
136 case X86::VPCMPWZ256rmi: case X86::VPCMPWZ256rri:
137 case X86::VPCMPWZrmi: case X86::VPCMPWZrri:
138 case X86::VPCMPBZ128rmik: case X86::VPCMPBZ128rrik:
139 case X86::VPCMPBZ256rmik: case X86::VPCMPBZ256rrik:
140 case X86::VPCMPBZrmik: case X86::VPCMPBZrrik:
141 case X86::VPCMPDZ128rmik: case X86::VPCMPDZ128rrik:
142 case X86::VPCMPDZ256rmik: case X86::VPCMPDZ256rrik:
143 case X86::VPCMPDZrmik: case X86::VPCMPDZrrik:
144 case X86::VPCMPQZ128rmik: case X86::VPCMPQZ128rrik:
145 case X86::VPCMPQZ256rmik: case X86::VPCMPQZ256rrik:
146 case X86::VPCMPQZrmik: case X86::VPCMPQZrrik:
147 case X86::VPCMPUBZ128rmik: case X86::VPCMPUBZ128rrik:
148 case X86::VPCMPUBZ256rmik: case X86::VPCMPUBZ256rrik:
149 case X86::VPCMPUBZrmik: case X86::VPCMPUBZrrik:
150 case X86::VPCMPUDZ128rmik: case X86::VPCMPUDZ128rrik:
151 case X86::VPCMPUDZ256rmik: case X86::VPCMPUDZ256rrik:
152 case X86::VPCMPUDZrmik: case X86::VPCMPUDZrrik:
153 case X86::VPCMPUQZ128rmik: case X86::VPCMPUQZ128rrik:
154 case X86::VPCMPUQZ256rmik: case X86::VPCMPUQZ256rrik:
155 case X86::VPCMPUQZrmik: case X86::VPCMPUQZrrik:
156 case X86::VPCMPUWZ128rmik: case X86::VPCMPUWZ128rrik:
157 case X86::VPCMPUWZ256rmik: case X86::VPCMPUWZ256rrik:
158 case X86::VPCMPUWZrmik: case X86::VPCMPUWZrrik:
159 case X86::VPCMPWZ128rmik: case X86::VPCMPWZ128rrik:
160 case X86::VPCMPWZ256rmik: case X86::VPCMPWZ256rrik:
161 case X86::VPCMPWZrmik: case X86::VPCMPWZrrik:
162 case X86::VPCMPDZ128rmib: case X86::VPCMPDZ128rmibk:
163 case X86::VPCMPDZ256rmib: case X86::VPCMPDZ256rmibk:
164 case X86::VPCMPDZrmib: case X86::VPCMPDZrmibk:
165 case X86::VPCMPQZ128rmib: case X86::VPCMPQZ128rmibk:
166 case X86::VPCMPQZ256rmib: case X86::VPCMPQZ256rmibk:
167 case X86::VPCMPQZrmib: case X86::VPCMPQZrmibk:
168 case X86::VPCMPUDZ128rmib: case X86::VPCMPUDZ128rmibk:
169 case X86::VPCMPUDZ256rmib: case X86::VPCMPUDZ256rmibk:
170 case X86::VPCMPUDZrmib: case X86::VPCMPUDZrmibk:
171 case X86::VPCMPUQZ128rmib: case X86::VPCMPUQZ128rmibk:
172 case X86::VPCMPUQZ256rmib: case X86::VPCMPUQZ256rmibk:
173 case X86::VPCMPUQZrmib: case X86::VPCMPUQZrmibk:
174 if ((Imm >= 0 && Imm <= 2) || (Imm >= 4 && Imm <= 6)) {
175 printVPCMPMnemonic(MI, OS);
176
177 unsigned CurOp = (Desc.TSFlags & X86II::EVEX_K) ? 3 : 2;
178
179 if ((Desc.TSFlags & X86II::FormMask) == X86II::MRMSrcMem) {
180 if (Desc.TSFlags & X86II::EVEX_B) {
181 // Broadcast form.
182 // Load size is based on W-bit as only D and Q are supported.
183 if (Desc.TSFlags & X86II::VEX_W)
184 printi64mem(MI, CurOp--, OS);
185 else
186 printi32mem(MI, CurOp--, OS);
187
188 // Print the number of elements broadcasted.
189 unsigned NumElts;
190 if (Desc.TSFlags & X86II::EVEX_L2)
191 NumElts = (Desc.TSFlags & X86II::VEX_W) ? 8 : 16;
192 else if (Desc.TSFlags & X86II::VEX_L)
193 NumElts = (Desc.TSFlags & X86II::VEX_W) ? 4 : 8;
194 else
195 NumElts = (Desc.TSFlags & X86II::VEX_W) ? 2 : 4;
196 OS << "{1to" << NumElts << "}";
197 } else {
198 if (Desc.TSFlags & X86II::EVEX_L2)
199 printi512mem(MI, CurOp--, OS);
200 else if (Desc.TSFlags & X86II::VEX_L)
201 printi256mem(MI, CurOp--, OS);
202 else
203 printi128mem(MI, CurOp--, OS);
204 }
205 } else {
206 printOperand(MI, CurOp--, OS);
207 }
208
209 OS << ", ";
210 printOperand(MI, CurOp--, OS);
211 OS << ", ";
212 printOperand(MI, 0, OS);
213 if (CurOp > 0) {
214 // Print mask operand.
215 OS << " {";
216 printOperand(MI, CurOp--, OS);
217 OS << "}";
218 }
219
110220 return true;
111221 }
112222 break;
9393 }
9494 }
9595
96 void X86InstPrinterCommon::printVPCMPMnemonic(const MCInst *MI,
97 raw_ostream &OS) {
98 OS << "vpcmp";
99
100 printSSEAVXCC(MI, MI->getNumOperands() - 1, OS);
101
102 switch (MI->getOpcode()) {
103 default: llvm_unreachable("Unexpected opcode!");
104 case X86::VPCMPBZ128rmi: case X86::VPCMPBZ128rri:
105 case X86::VPCMPBZ256rmi: case X86::VPCMPBZ256rri:
106 case X86::VPCMPBZrmi: case X86::VPCMPBZrri:
107 case X86::VPCMPBZ128rmik: case X86::VPCMPBZ128rrik:
108 case X86::VPCMPBZ256rmik: case X86::VPCMPBZ256rrik:
109 case X86::VPCMPBZrmik: case X86::VPCMPBZrrik:
110 OS << "b\t";
111 break;
112 case X86::VPCMPDZ128rmi: case X86::VPCMPDZ128rri:
113 case X86::VPCMPDZ256rmi: case X86::VPCMPDZ256rri:
114 case X86::VPCMPDZrmi: case X86::VPCMPDZrri:
115 case X86::VPCMPDZ128rmik: case X86::VPCMPDZ128rrik:
116 case X86::VPCMPDZ256rmik: case X86::VPCMPDZ256rrik:
117 case X86::VPCMPDZrmik: case X86::VPCMPDZrrik:
118 case X86::VPCMPDZ128rmib: case X86::VPCMPDZ128rmibk:
119 case X86::VPCMPDZ256rmib: case X86::VPCMPDZ256rmibk:
120 case X86::VPCMPDZrmib: case X86::VPCMPDZrmibk:
121 OS << "d\t";
122 break;
123 case X86::VPCMPQZ128rmi: case X86::VPCMPQZ128rri:
124 case X86::VPCMPQZ256rmi: case X86::VPCMPQZ256rri:
125 case X86::VPCMPQZrmi: case X86::VPCMPQZrri:
126 case X86::VPCMPQZ128rmik: case X86::VPCMPQZ128rrik:
127 case X86::VPCMPQZ256rmik: case X86::VPCMPQZ256rrik:
128 case X86::VPCMPQZrmik: case X86::VPCMPQZrrik:
129 case X86::VPCMPQZ128rmib: case X86::VPCMPQZ128rmibk:
130 case X86::VPCMPQZ256rmib: case X86::VPCMPQZ256rmibk:
131 case X86::VPCMPQZrmib: case X86::VPCMPQZrmibk:
132 OS << "q\t";
133 break;
134 case X86::VPCMPUBZ128rmi: case X86::VPCMPUBZ128rri:
135 case X86::VPCMPUBZ256rmi: case X86::VPCMPUBZ256rri:
136 case X86::VPCMPUBZrmi: case X86::VPCMPUBZrri:
137 case X86::VPCMPUBZ128rmik: case X86::VPCMPUBZ128rrik:
138 case X86::VPCMPUBZ256rmik: case X86::VPCMPUBZ256rrik:
139 case X86::VPCMPUBZrmik: case X86::VPCMPUBZrrik:
140 OS << "ub\t";
141 break;
142 case X86::VPCMPUDZ128rmi: case X86::VPCMPUDZ128rri:
143 case X86::VPCMPUDZ256rmi: case X86::VPCMPUDZ256rri:
144 case X86::VPCMPUDZrmi: case X86::VPCMPUDZrri:
145 case X86::VPCMPUDZ128rmik: case X86::VPCMPUDZ128rrik:
146 case X86::VPCMPUDZ256rmik: case X86::VPCMPUDZ256rrik:
147 case X86::VPCMPUDZrmik: case X86::VPCMPUDZrrik:
148 case X86::VPCMPUDZ128rmib: case X86::VPCMPUDZ128rmibk:
149 case X86::VPCMPUDZ256rmib: case X86::VPCMPUDZ256rmibk:
150 case X86::VPCMPUDZrmib: case X86::VPCMPUDZrmibk:
151 OS << "ud\t";
152 break;
153 case X86::VPCMPUQZ128rmi: case X86::VPCMPUQZ128rri:
154 case X86::VPCMPUQZ256rmi: case X86::VPCMPUQZ256rri:
155 case X86::VPCMPUQZrmi: case X86::VPCMPUQZrri:
156 case X86::VPCMPUQZ128rmik: case X86::VPCMPUQZ128rrik:
157 case X86::VPCMPUQZ256rmik: case X86::VPCMPUQZ256rrik:
158 case X86::VPCMPUQZrmik: case X86::VPCMPUQZrrik:
159 case X86::VPCMPUQZ128rmib: case X86::VPCMPUQZ128rmibk:
160 case X86::VPCMPUQZ256rmib: case X86::VPCMPUQZ256rmibk:
161 case X86::VPCMPUQZrmib: case X86::VPCMPUQZrmibk:
162 OS << "uq\t";
163 break;
164 case X86::VPCMPUWZ128rmi: case X86::VPCMPUWZ128rri:
165 case X86::VPCMPUWZ256rri: case X86::VPCMPUWZ256rmi:
166 case X86::VPCMPUWZrmi: case X86::VPCMPUWZrri:
167 case X86::VPCMPUWZ128rmik: case X86::VPCMPUWZ128rrik:
168 case X86::VPCMPUWZ256rrik: case X86::VPCMPUWZ256rmik:
169 case X86::VPCMPUWZrmik: case X86::VPCMPUWZrrik:
170 OS << "uw\t";
171 break;
172 case X86::VPCMPWZ128rmi: case X86::VPCMPWZ128rri:
173 case X86::VPCMPWZ256rmi: case X86::VPCMPWZ256rri:
174 case X86::VPCMPWZrmi: case X86::VPCMPWZrri:
175 case X86::VPCMPWZ128rmik: case X86::VPCMPWZ128rrik:
176 case X86::VPCMPWZ256rmik: case X86::VPCMPWZ256rrik:
177 case X86::VPCMPWZrmik: case X86::VPCMPWZrrik:
178 OS << "w\t";
179 break;
180 }
181 }
182
96183 void X86InstPrinterCommon::printRoundingControl(const MCInst *MI, unsigned Op,
97184 raw_ostream &O) {
98185 int64_t Imm = MI->getOperand(Op).getImm();
2424 virtual void printOperand(const MCInst *MI, unsigned OpNo, raw_ostream &O) = 0;
2525 void printSSEAVXCC(const MCInst *MI, unsigned Op, raw_ostream &OS);
2626 void printVPCOMMnemonic(const MCInst *MI, raw_ostream &OS);
27 void printVPCMPMnemonic(const MCInst *MI, raw_ostream &OS);
2728 void printRoundingControl(const MCInst *MI, unsigned Op, raw_ostream &O);
2829 void printPCRelImm(const MCInst *MI, unsigned OpNo, raw_ostream &O);
2930 protected:
8989 return true;
9090 }
9191 break;
92
93 case X86::VPCMPBZ128rmi: case X86::VPCMPBZ128rri:
94 case X86::VPCMPBZ256rmi: case X86::VPCMPBZ256rri:
95 case X86::VPCMPBZrmi: case X86::VPCMPBZrri:
96 case X86::VPCMPDZ128rmi: case X86::VPCMPDZ128rri:
97 case X86::VPCMPDZ256rmi: case X86::VPCMPDZ256rri:
98 case X86::VPCMPDZrmi: case X86::VPCMPDZrri:
99 case X86::VPCMPQZ128rmi: case X86::VPCMPQZ128rri:
100 case X86::VPCMPQZ256rmi: case X86::VPCMPQZ256rri:
101 case X86::VPCMPQZrmi: case X86::VPCMPQZrri:
102 case X86::VPCMPUBZ128rmi: case X86::VPCMPUBZ128rri:
103 case X86::VPCMPUBZ256rmi: case X86::VPCMPUBZ256rri:
104 case X86::VPCMPUBZrmi: case X86::VPCMPUBZrri:
105 case X86::VPCMPUDZ128rmi: case X86::VPCMPUDZ128rri:
106 case X86::VPCMPUDZ256rmi: case X86::VPCMPUDZ256rri:
107 case X86::VPCMPUDZrmi: case X86::VPCMPUDZrri:
108 case X86::VPCMPUQZ128rmi: case X86::VPCMPUQZ128rri:
109 case X86::VPCMPUQZ256rmi: case X86::VPCMPUQZ256rri:
110 case X86::VPCMPUQZrmi: case X86::VPCMPUQZrri:
111 case X86::VPCMPUWZ128rmi: case X86::VPCMPUWZ128rri:
112 case X86::VPCMPUWZ256rmi: case X86::VPCMPUWZ256rri:
113 case X86::VPCMPUWZrmi: case X86::VPCMPUWZrri:
114 case X86::VPCMPWZ128rmi: case X86::VPCMPWZ128rri:
115 case X86::VPCMPWZ256rmi: case X86::VPCMPWZ256rri:
116 case X86::VPCMPWZrmi: case X86::VPCMPWZrri:
117 case X86::VPCMPBZ128rmik: case X86::VPCMPBZ128rrik:
118 case X86::VPCMPBZ256rmik: case X86::VPCMPBZ256rrik:
119 case X86::VPCMPBZrmik: case X86::VPCMPBZrrik:
120 case X86::VPCMPDZ128rmik: case X86::VPCMPDZ128rrik:
121 case X86::VPCMPDZ256rmik: case X86::VPCMPDZ256rrik:
122 case X86::VPCMPDZrmik: case X86::VPCMPDZrrik:
123 case X86::VPCMPQZ128rmik: case X86::VPCMPQZ128rrik:
124 case X86::VPCMPQZ256rmik: case X86::VPCMPQZ256rrik:
125 case X86::VPCMPQZrmik: case X86::VPCMPQZrrik:
126 case X86::VPCMPUBZ128rmik: case X86::VPCMPUBZ128rrik:
127 case X86::VPCMPUBZ256rmik: case X86::VPCMPUBZ256rrik:
128 case X86::VPCMPUBZrmik: case X86::VPCMPUBZrrik:
129 case X86::VPCMPUDZ128rmik: case X86::VPCMPUDZ128rrik:
130 case X86::VPCMPUDZ256rmik: case X86::VPCMPUDZ256rrik:
131 case X86::VPCMPUDZrmik: case X86::VPCMPUDZrrik:
132 case X86::VPCMPUQZ128rmik: case X86::VPCMPUQZ128rrik:
133 case X86::VPCMPUQZ256rmik: case X86::VPCMPUQZ256rrik:
134 case X86::VPCMPUQZrmik: case X86::VPCMPUQZrrik:
135 case X86::VPCMPUWZ128rmik: case X86::VPCMPUWZ128rrik:
136 case X86::VPCMPUWZ256rmik: case X86::VPCMPUWZ256rrik:
137 case X86::VPCMPUWZrmik: case X86::VPCMPUWZrrik:
138 case X86::VPCMPWZ128rmik: case X86::VPCMPWZ128rrik:
139 case X86::VPCMPWZ256rmik: case X86::VPCMPWZ256rrik:
140 case X86::VPCMPWZrmik: case X86::VPCMPWZrrik:
141 case X86::VPCMPDZ128rmib: case X86::VPCMPDZ128rmibk:
142 case X86::VPCMPDZ256rmib: case X86::VPCMPDZ256rmibk:
143 case X86::VPCMPDZrmib: case X86::VPCMPDZrmibk:
144 case X86::VPCMPQZ128rmib: case X86::VPCMPQZ128rmibk:
145 case X86::VPCMPQZ256rmib: case X86::VPCMPQZ256rmibk:
146 case X86::VPCMPQZrmib: case X86::VPCMPQZrmibk:
147 case X86::VPCMPUDZ128rmib: case X86::VPCMPUDZ128rmibk:
148 case X86::VPCMPUDZ256rmib: case X86::VPCMPUDZ256rmibk:
149 case X86::VPCMPUDZrmib: case X86::VPCMPUDZrmibk:
150 case X86::VPCMPUQZ128rmib: case X86::VPCMPUQZ128rmibk:
151 case X86::VPCMPUQZ256rmib: case X86::VPCMPUQZ256rmibk:
152 case X86::VPCMPUQZrmib: case X86::VPCMPUQZrmibk:
153 if ((Imm >= 0 && Imm <= 2) || (Imm >= 4 && Imm <= 6)) {
154 printVPCMPMnemonic(MI, OS);
155
156 unsigned CurOp = 0;
157 printOperand(MI, CurOp++, OS);
158
159 if (Desc.TSFlags & X86II::EVEX_K) {
160 // Print mask operand.
161 OS << " {";
162 printOperand(MI, CurOp++, OS);
163 OS << "}";
164 }
165 OS << ", ";
166 printOperand(MI, CurOp++, OS);
167 OS << ", ";
168
169 if ((Desc.TSFlags & X86II::FormMask) == X86II::MRMSrcMem) {
170 if (Desc.TSFlags & X86II::EVEX_B) {
171 // Broadcast form.
172 // Load size is based on W-bit as only D and Q are supported.
173 if (Desc.TSFlags & X86II::VEX_W)
174 printi64mem(MI, CurOp++, OS);
175 else
176 printi32mem(MI, CurOp++, OS);
177
178 // Print the number of elements broadcasted.
179 unsigned NumElts;
180 if (Desc.TSFlags & X86II::EVEX_L2)
181 NumElts = (Desc.TSFlags & X86II::VEX_W) ? 8 : 16;
182 else if (Desc.TSFlags & X86II::VEX_L)
183 NumElts = (Desc.TSFlags & X86II::VEX_W) ? 4 : 8;
184 else
185 NumElts = (Desc.TSFlags & X86II::VEX_W) ? 2 : 4;
186 OS << "{1to" << NumElts << "}";
187 } else {
188 if (Desc.TSFlags & X86II::EVEX_L2)
189 printi512mem(MI, CurOp++, OS);
190 else if (Desc.TSFlags & X86II::VEX_L)
191 printi256mem(MI, CurOp++, OS);
192 else
193 printi128mem(MI, CurOp++, OS);
194 }
195 } else {
196 printOperand(MI, CurOp++, OS);
197 }
198
199 return true;
200 }
201 break;
92202 }
93203
94204 return false;
22532253 X86VectorVTInfo _, string Name> {
22542254 let isCommutable = 1 in
22552255 def rri : AVX512AIi8
2256 (outs _.KRC:$dst), (ins _.RC:$src1, _.RC:$src2, AVX512ICC:$cc),
2257 !strconcat("vpcmp${cc}", Suffix,
2258 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
2256 (outs _.KRC:$dst), (ins _.RC:$src1, _.RC:$src2, u8imm:$cc),
2257 !strconcat("vpcmp", Suffix,
2258 "\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}"),
22592259 [(set _.KRC:$dst, (_.KVT (Frag:$cc (_.VT _.RC:$src1),
22602260 (_.VT _.RC:$src2),
22612261 cond)))]>,
22622262 EVEX_4V, Sched<[sched]>;
22632263 def rmi : AVX512AIi8
2264 (outs _.KRC:$dst), (ins _.RC:$src1, _.MemOp:$src2, AVX512ICC:$cc),
2265 !strconcat("vpcmp${cc}", Suffix,
2266 "\t{$src2, $src1, $dst|$dst, $src1, $src2}"),
2264 (outs _.KRC:$dst), (ins _.RC:$src1, _.MemOp:$src2, u8imm:$cc),
2265 !strconcat("vpcmp", Suffix,
2266 "\t{$cc, $src2, $src1, $dst|$dst, $src1, $src2, $cc}"),
22672267 [(set _.KRC:$dst, (_.KVT
22682268 (Frag:$cc
22692269 (_.VT _.RC:$src1),
22732273 let isCommutable = 1 in
22742274 def rrik : AVX512AIi8
22752275 (outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1, _.RC:$src2,
2276 AVX512ICC:$cc),
2277 !strconcat("vpcmp${cc}", Suffix,
2278 "\t{$src2, $src1, $dst {${mask}}|",
2279 "$dst {${mask}}, $src1, $src2}"),
2276 u8imm:$cc),
2277 !strconcat("vpcmp", Suffix,
2278 "\t{$cc, $src2, $src1, $dst {${mask}}|",
2279 "$dst {${mask}}, $src1, $src2, $cc}"),
22802280 [(set _.KRC:$dst, (and _.KRCWM:$mask,
22812281 (_.KVT (Frag:$cc (_.VT _.RC:$src1),
22822282 (_.VT _.RC:$src2),
22842284 EVEX_4V, EVEX_K, Sched<[sched]>;
22852285 def rmik : AVX512AIi8
22862286 (outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1, _.MemOp:$src2,
2287 AVX512ICC:$cc),
2288 !strconcat("vpcmp${cc}", Suffix,
2289 "\t{$src2, $src1, $dst {${mask}}|",
2290 "$dst {${mask}}, $src1, $src2}"),
2287 u8imm:$cc),
2288 !strconcat("vpcmp", Suffix,
2289 "\t{$cc, $src2, $src1, $dst {${mask}}|",
2290 "$dst {${mask}}, $src1, $src2, $cc}"),
22912291 [(set _.KRC:$dst, (and _.KRCWM:$mask,
22922292 (_.KVT
22932293 (Frag:$cc
22962296 cond))))]>,
22972297 EVEX_4V, EVEX_K, Sched<[sched.Folded, sched.ReadAfterFold]>;
22982298
2299 // Accept explicit immediate argument form instead of comparison code.
2300 let isAsmParserOnly = 1, hasSideEffects = 0 in {
2301 def rri_alt : AVX512AIi8
2302 (outs _.KRC:$dst), (ins _.RC:$src1, _.RC:$src2, u8imm:$cc),
2303 !strconcat("vpcmp", Suffix, "\t{$cc, $src2, $src1, $dst|",
2304 "$dst, $src1, $src2, $cc}"), []>,
2305 EVEX_4V, Sched<[sched]>, NotMemoryFoldable;
2306 let mayLoad = 1 in
2307 def rmi_alt : AVX512AIi8
2308 (outs _.KRC:$dst), (ins _.RC:$src1, _.MemOp:$src2, u8imm:$cc),
2309 !strconcat("vpcmp", Suffix, "\t{$cc, $src2, $src1, $dst|",
2310 "$dst, $src1, $src2, $cc}"), []>,
2311 EVEX_4V, Sched<[sched.Folded, sched.ReadAfterFold]>, NotMemoryFoldable;
2312 def rrik_alt : AVX512AIi8
2313 (outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1, _.RC:$src2,
2314 u8imm:$cc),
2315 !strconcat("vpcmp", Suffix,
2316 "\t{$cc, $src2, $src1, $dst {${mask}}|",
2317 "$dst {${mask}}, $src1, $src2, $cc}"), []>,
2318 EVEX_4V, EVEX_K, Sched<[sched]>, NotMemoryFoldable;
2319 let mayLoad = 1 in
2320 def rmik_alt : AVX512AIi8
2321 (outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1, _.MemOp:$src2,
2322 u8imm:$cc),
2323 !strconcat("vpcmp", Suffix,
2324 "\t{$cc, $src2, $src1, $dst {${mask}}|",
2325 "$dst {${mask}}, $src1, $src2, $cc}"), []>,
2326 EVEX_4V, EVEX_K, Sched<[sched.Folded, sched.ReadAfterFold]>,
2327 NotMemoryFoldable;
2328 }
2329
23302299 def : Pat<(_.KVT (CommFrag:$cc (_.LdFrag addr:$src2),
23312300 (_.VT _.RC:$src1), cond)),
23322301 (!cast(Name#_.ZSuffix#"rmi")
23462315 avx512_icmp_cc {
23472316 def rmib : AVX512AIi8
23482317 (outs _.KRC:$dst), (ins _.RC:$src1, _.ScalarMemOp:$src2,
2349 AVX512ICC:$cc),
2350 !strconcat("vpcmp${cc}", Suffix,
2351 "\t{${src2}", _.BroadcastStr, ", $src1, $dst|",
2352 "$dst, $src1, ${src2}", _.BroadcastStr, "}"),
2318 u8imm:$cc),
2319 !strconcat("vpcmp", Suffix,
2320 "\t{$cc, ${src2}", _.BroadcastStr, ", $src1, $dst|",
2321 "$dst, $src1, ${src2}", _.BroadcastStr, ", $cc}"),
23532322 [(set _.KRC:$dst, (_.KVT (Frag:$cc
23542323 (_.VT _.RC:$src1),
23552324 (X86VBroadcast
23582327 EVEX_4V, EVEX_B, Sched<[sched.Folded, sched.ReadAfterFold]>;
23592328 def rmibk : AVX512AIi8
23602329 (outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1,
2361 _.ScalarMemOp:$src2, AVX512ICC:$cc),
2362 !strconcat("vpcmp${cc}", Suffix,
2363 "\t{${src2}", _.BroadcastStr, ", $src1, $dst {${mask}}|",
2364 "$dst {${mask}}, $src1, ${src2}", _.BroadcastStr, "}"),
2330 _.ScalarMemOp:$src2, u8imm:$cc),
2331 !strconcat("vpcmp", Suffix,
2332 "\t{$cc, ${src2}", _.BroadcastStr, ", $src1, $dst {${mask}}|",
2333 "$dst {${mask}}, $src1, ${src2}", _.BroadcastStr, ", $cc}"),
23652334 [(set _.KRC:$dst, (and _.KRCWM:$mask,
23662335 (_.KVT (Frag:$cc
23672336 (_.VT _.RC:$src1),
23692338 (_.ScalarLdFrag addr:$src2)),
23702339 cond))))]>,
23712340 EVEX_4V, EVEX_K, EVEX_B, Sched<[sched.Folded, sched.ReadAfterFold]>;
2372
2373 // Accept explicit immediate argument form instead of comparison code.
2374 let isAsmParserOnly = 1, hasSideEffects = 0, mayLoad = 1 in {
2375 def rmib_alt : AVX512AIi8
2376 (outs _.KRC:$dst), (ins _.RC:$src1, _.ScalarMemOp:$src2,
2377 u8imm:$cc),
2378 !strconcat("vpcmp", Suffix,
2379 "\t{$cc, ${src2}", _.BroadcastStr, ", $src1, $dst|",
2380 "$dst, $src1, ${src2}", _.BroadcastStr, ", $cc}"), []>,
2381 EVEX_4V, EVEX_B, Sched<[sched.Folded, sched.ReadAfterFold]>,
2382 NotMemoryFoldable;
2383 def rmibk_alt : AVX512AIi8
2384 (outs _.KRC:$dst), (ins _.KRCWM:$mask, _.RC:$src1,
2385 _.ScalarMemOp:$src2, u8imm:$cc),
2386 !strconcat("vpcmp", Suffix,
2387 "\t{$cc, ${src2}", _.BroadcastStr, ", $src1, $dst {${mask}}|",
2388 "$dst {${mask}}, $src1, ${src2}", _.BroadcastStr, ", $cc}"), []>,
2389 EVEX_4V, EVEX_K, EVEX_B, Sched<[sched.Folded, sched.ReadAfterFold]>,
2390 NotMemoryFoldable;
2391 }
23922341
23932342 def : Pat<(_.KVT (CommFrag:$cc (X86VBroadcast (_.ScalarLdFrag addr:$src2)),
23942343 (_.VT _.RC:$src1), cond)),
607607 }
608608
609609 def AVXCC : Operand {
610 let PrintMethod = "printSSEAVXCC";
611 let OperandType = "OPERAND_IMMEDIATE";
612 }
613
614 def AVX512ICC : Operand {
615610 let PrintMethod = "printSSEAVXCC";
616611 let OperandType = "OPERAND_IMMEDIATE";
617612 }
60516051 // CHECK: encoding: [0x62,0xd1,0xf5,0x40,0xc2,0x76,0x02,0x0d]
60526052 vcmpgepd 0x80(%r14), %zmm17, %k6
60536053
6054 // CHECK: vpcmpd $1,
6054 // CHECK: vpcmpltd %zmm24, %zmm7, %k5 {%k4}
60556055 // CHECK: encoding: [0x62,0x93,0x45,0x4c,0x1f,0xe8,0x01]
60566056 vpcmpd $1, %zmm24, %zmm7, %k5{%k4}
60576057
6058 // CHECK: vpcmpuq $2,
6058 // CHECK: vpcmpleuq 64(%rdx), %zmm17, %k6 {%k7}
60596059 // CHECK: encoding: [0x62,0xf3,0xf5,0x47,0x1e,0x72,0x01,0x02]
60606060 vpcmpuq $2, 0x40(%rdx), %zmm17, %k6{%k7}
60616061
849849 TYPE("i32imm_pcrel", TYPE_REL)
850850 TYPE("SSECC", TYPE_IMM3)
851851 TYPE("AVXCC", TYPE_IMM5)
852 TYPE("AVX512ICC", TYPE_AVX512ICC)
853852 TYPE("AVX512RC", TYPE_IMM)
854853 TYPE("brtarget32", TYPE_REL)
855854 TYPE("brtarget16", TYPE_REL)
931930 ENCODING("i32i8imm", ENCODING_IB)
932931 ENCODING("SSECC", ENCODING_IB)
933932 ENCODING("AVXCC", ENCODING_IB)
934 ENCODING("AVX512ICC", ENCODING_IB)
935933 ENCODING("AVX512RC", ENCODING_IRC)
936934 ENCODING("i16imm", ENCODING_Iv)
937935 ENCODING("i16i8imm", ENCODING_IB)