llvm.org GIT mirror llvm / e2cb0b7
[X86] Add ENQCMD instructions For more details about these instructions, please refer to the latest ISE document: https://software.intel.com/en-us/download/intel-architecture-instruction-set-extensions-programming-reference. Patch by Tianqing Wang (tianqing) Differential Revision: https://reviews.llvm.org/D62281 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@362053 91177308-0d34-0410-b5e6-96231b3b80d8 Pengfei Wang 4 months ago
15 changed file(s) with 450 addition(s) and 0 deletion(s). Raw diff Collapse all Expand all
48714871 Intrinsic<[llvm_v16f32_ty],
48724872 [llvm_v16f32_ty, llvm_v16i32_ty, llvm_v16i32_ty], [IntrNoMem]>;
48734873 }
4874
4875 //===----------------------------------------------------------------------===//
4876 // ENQCMD - Enqueue Stores Instructions
4877
4878 let TargetPrefix = "x86" in {
4879 def int_x86_enqcmd : GCCBuiltin<"__builtin_ia32_enqcmd">,
4880 Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_ptr_ty], []>;
4881 def int_x86_enqcmds : GCCBuiltin<"__builtin_ia32_enqcmds">,
4882 Intrinsic<[llvm_i8_ty], [llvm_ptr_ty, llvm_ptr_ty], []>;
4883 }
13791379 Features["cldemote"] = HasLeaf7 && ((ECX >> 25) & 1);
13801380 Features["movdiri"] = HasLeaf7 && ((ECX >> 27) & 1);
13811381 Features["movdir64b"] = HasLeaf7 && ((ECX >> 28) & 1);
1382 Features["enqcmd"] = HasLeaf7 && ((ECX >> 29) & 1);
13821383
13831384 // There are two CPUID leafs which information associated with the pconfig
13841385 // instruction:
262262 "Support RDPID instructions">;
263263 def FeatureWAITPKG : SubtargetFeature<"waitpkg", "HasWAITPKG", "true",
264264 "Wait and pause enhancements">;
265 def FeatureENQCMD : SubtargetFeature<"enqcmd", "HasENQCMD", "true",
266 "Has ENQCMD instructions">;
265267 // On some processors, instructions that implicitly take two memory operands are
266268 // slow. In practice, this means that CALL, PUSH, and POP with memory operands
267269 // should be avoided in favor of a MOV + register CALL/PUSH/POP.
20702070 Parent->getOpcode() != ISD::INTRINSIC_W_CHAIN && // unaligned loads, fixme
20712071 Parent->getOpcode() != ISD::INTRINSIC_VOID && // nontemporal stores
20722072 Parent->getOpcode() != X86ISD::TLSCALL && // Fixme
2073 Parent->getOpcode() != X86ISD::ENQCMD && // Fixme
2074 Parent->getOpcode() != X86ISD::ENQCMDS && // Fixme
20732075 Parent->getOpcode() != X86ISD::EH_SJLJ_SETJMP && // setjmp
20742076 Parent->getOpcode() != X86ISD::EH_SJLJ_LONGJMP) { // longjmp
20752077 unsigned AddrSpace =
2328623286 DAG.getNode(Opcode, dl, VTs, Chain, Op->getOperand(2),
2328723287 Op->getOperand(3), Op->getOperand(4));
2328823288 SDValue SetCC = getSETCC(X86::COND_B, Operation.getValue(0), dl, DAG);
23289 return DAG.getNode(ISD::MERGE_VALUES, dl, Op->getVTList(), SetCC,
23290 Operation.getValue(1));
23291 }
23292 case Intrinsic::x86_enqcmd:
23293 case Intrinsic::x86_enqcmds: {
23294 SDLoc dl(Op);
23295 SDValue Chain = Op.getOperand(0);
23296 SDVTList VTs = DAG.getVTList(MVT::i32, MVT::Other);
23297 unsigned Opcode;
23298 switch (IntNo) {
23299 default: llvm_unreachable("Impossible intrinsic!");
23300 case Intrinsic::x86_enqcmd:
23301 Opcode = X86ISD::ENQCMD;
23302 break;
23303 case Intrinsic::x86_enqcmds:
23304 Opcode = X86ISD::ENQCMDS;
23305 break;
23306 }
23307 SDValue Operation = DAG.getNode(Opcode, dl, VTs, Chain, Op.getOperand(2),
23308 Op.getOperand(3));
23309 SDValue SetCC = getSETCC(X86::COND_E, Operation.getValue(0), dl, DAG);
2328923310 return DAG.getNode(ISD::MERGE_VALUES, dl, Op->getVTList(), SetCC,
2329023311 Operation.getValue(1));
2329123312 }
2826928290 case X86ISD::NT_BRIND: return "X86ISD::NT_BRIND";
2827028291 case X86ISD::UMWAIT: return "X86ISD::UMWAIT";
2827128292 case X86ISD::TPAUSE: return "X86ISD::TPAUSE";
28293 case X86ISD::ENQCMD: return "X86ISD:ENQCMD";
28294 case X86ISD::ENQCMDS: return "X86ISD:ENQCMDS";
2827228295 }
2827328296 return nullptr;
2827428297 }
588588 // User level wait
589589 UMWAIT, TPAUSE,
590590
591 // Enqueue Stores Instructions
592 ENQCMD, ENQCMDS,
593
591594 // Compare and swap.
592595 LCMPXCHG_DAG = ISD::FIRST_TARGET_MEMORY_OPCODE,
593596 LCMPXCHG8_DAG,
125125 def SDT_X86TCRET : SDTypeProfile<0, 2, [SDTCisPtrTy<0>, SDTCisVT<1, i32>]>;
126126
127127 def SDT_X86MEMBARRIER : SDTypeProfile<0, 0, []>;
128
129 def SDT_X86ENQCMD : SDTypeProfile<1, 2, [SDTCisVT<0, i32>,
130 SDTCisPtrTy<1>, SDTCisSameAs<1, 2>]>;
128131
129132 def X86MemBarrier : SDNode<"X86ISD::MEMBARRIER", SDT_X86MEMBARRIER,
130133 [SDNPHasChain,SDNPSideEffect]>;
304307 def X86tpause : SDNode<"X86ISD::TPAUSE",
305308 SDTypeProfile<1, 3, [SDTCisVT<0, i32>, SDTCisInt<1>,
306309 SDTCisVT<2, i32>, SDTCisVT<3, i32>]>,
310 [SDNPHasChain, SDNPSideEffect]>;
311
312 def X86enqcmd : SDNode<"X86ISD::ENQCMD", SDT_X86ENQCMD,
313 [SDNPHasChain, SDNPSideEffect]>;
314 def X86enqcmds : SDNode<"X86ISD::ENQCMDS", SDT_X86ENQCMD,
307315 [SDNPHasChain, SDNPSideEffect]>;
308316
309317 //===----------------------------------------------------------------------===//
899907 def HasCmpxchg8b : Predicate<"Subtarget->hasCmpxchg8b()">;
900908 def HasCmpxchg16b: Predicate<"Subtarget->hasCmpxchg16b()">;
901909 def HasPCONFIG : Predicate<"Subtarget->hasPCONFIG()">;
910 def HasENQCMD : Predicate<"Subtarget->hasENQCMD()">;
902911 def Not64BitMode : Predicate<"!Subtarget->is64Bit()">,
903912 AssemblerPredicate<"!Mode64Bit", "Not 64-bit mode">;
904913 def In64BitMode : Predicate<"Subtarget->is64Bit()">,
27552764 } // SchedRW
27562765
27572766 //===----------------------------------------------------------------------===//
2767 // ENQCMD/S - Enqueue 64-byte command as user with 64-byte write atomicity
2768 //
2769 let SchedRW = [WriteStore], Defs = [EFLAGS] in {
2770 def ENQCMD16 : I<0xF8, MRMSrcMem, (outs), (ins GR16:$dst, i512mem:$src),
2771 "enqcmd\t{$src, $dst|$dst, $src}",
2772 [(set EFLAGS, (X86enqcmd GR16:$dst, addr:$src))]>,
2773 T8XD, AdSize16, Requires<[HasENQCMD, Not64BitMode]>;
2774 def ENQCMD32 : I<0xF8, MRMSrcMem, (outs), (ins GR32:$dst, i512mem:$src),
2775 "enqcmd\t{$src, $dst|$dst, $src}",
2776 [(set EFLAGS, (X86enqcmd GR32:$dst, addr:$src))]>,
2777 T8XD, AdSize32, Requires<[HasENQCMD]>;
2778 def ENQCMD64 : I<0xF8, MRMSrcMem, (outs), (ins GR64:$dst, i512mem:$src),
2779 "enqcmd\t{$src, $dst|$dst, $src}",
2780 [(set EFLAGS, (X86enqcmd GR64:$dst, addr:$src))]>,
2781 T8XD, AdSize64, Requires<[HasENQCMD, In64BitMode]>;
2782
2783 def ENQCMDS16 : I<0xF8, MRMSrcMem, (outs), (ins GR16:$dst, i512mem:$src),
2784 "enqcmds\t{$src, $dst|$dst, $src}",
2785 [(set EFLAGS, (X86enqcmds GR16:$dst, addr:$src))]>,
2786 T8XS, AdSize16, Requires<[HasENQCMD, Not64BitMode]>;
2787 def ENQCMDS32 : I<0xF8, MRMSrcMem, (outs), (ins GR32:$dst, i512mem:$src),
2788 "enqcmds\t{$src, $dst|$dst, $src}",
2789 [(set EFLAGS, (X86enqcmds GR32:$dst, addr:$src))]>,
2790 T8XS, AdSize32, Requires<[HasENQCMD]>;
2791 def ENQCMDS64 : I<0xF8, MRMSrcMem, (outs), (ins GR64:$dst, i512mem:$src),
2792 "enqcmds\t{$src, $dst|$dst, $src}",
2793 [(set EFLAGS, (X86enqcmds GR64:$dst, addr:$src))]>,
2794 T8XS, AdSize64, Requires<[HasENQCMD, In64BitMode]>;
2795 }
2796
2797 //===----------------------------------------------------------------------===//
27582798 // CLZERO Instruction
27592799 //
27602800 let SchedRW = [WriteSystem] in {
354354
355355 /// Processor has AVX-512 bfloat16 floating-point extensions
356356 bool HasBF16 = false;
357
358 /// Processor supports ENQCMD instructions
359 bool HasENQCMD = false;
357360
358361 /// Processor has AVX-512 Bit Algorithms instructions
359362 bool HasBITALG = false;
687690 bool hasSGX() const { return HasSGX; }
688691 bool threewayBranchProfitable() const { return ThreewayBranchProfitable; }
689692 bool hasINVPCID() const { return HasINVPCID; }
693 bool hasENQCMD() const { return HasENQCMD; }
690694 bool useRetpolineIndirectCalls() const { return UseRetpolineIndirectCalls; }
691695 bool useRetpolineIndirectBranches() const {
692696 return UseRetpolineIndirectBranches;
0 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
1 ; RUN: llc < %s -mtriple=x86_64-unknown-unknown -mattr=+enqcmd | FileCheck %s --check-prefix=X64
2 ; RUN: llc < %s -mtriple=i386-unknown-unknown -mattr=+enqcmd | FileCheck %s --check-prefix=X86
3 ; RUN: llc < %s -mtriple=x86_64-linux-gnux32 -mattr=+enqcmd | FileCheck %s --check-prefix=X32
4
5 define i8 @test_enqcmd(i8* %dst, i8* %src) {
6 entry:
7 ; X64-LABEL: test_enqcmd:
8 ; X64: # %bb.0: # %entry
9 ; X64-NEXT: enqcmd (%rsi), %rdi
10 ; X64-NEXT: sete %al
11 ; X64-NEXT: retq
12
13 ; X86-LABEL: test_enqcmd:
14 ; X86: # %bb.0: # %entry
15 ; X86-NEXT: movl {{[0-9+]}}(%esp), %eax
16 ; X86-NEXT: movl {{[0-9+]}}(%esp), %ecx
17 ; X86-NEXT: enqcmd (%eax), %ecx
18 ; X86-NEXT: sete %al
19 ; X86-NEXT: retl
20
21 ; X32-LABEL: test_enqcmd:
22 ; X32: # %bb.0: # %entry
23 ; X32: enqcmd (%esi), %edi
24 ; X32-NEXT: sete %al
25 ; X32-NEXT: retq
26 %0 = call i8 @llvm.x86.enqcmd(i8* %dst, i8* %src)
27 ret i8 %0
28 }
29
30 define i8 @test_enqcmds(i8* %dst, i8* %src) {
31 entry:
32 ; X64-LABEL: test_enqcmds:
33 ; X64: # %bb.0: # %entry
34 ; X64-NEXT: enqcmds (%rsi), %rdi
35 ; X64-NEXT: sete %al
36 ; X64-NEXT: retq
37
38 ; X86-LABEL: test_enqcmds:
39 ; X86: # %bb.0: # %entry
40 ; X86-NEXT: movl {{[0-9+]}}(%esp), %eax
41 ; X86-NEXT: movl {{[0-9+]}}(%esp), %ecx
42 ; X86-NEXT: enqcmds (%eax), %ecx
43 ; X86-NEXT: sete %al
44 ; X86-NEXT: retl
45
46 ; X32-LABEL: test_enqcmds:
47 ; X32: # %bb.0: # %entry
48 ; X32: enqcmds (%esi), %edi
49 ; X32-NEXT: sete %al
50 ; X32-NEXT: retq
51 %0 = call i8 @llvm.x86.enqcmds(i8* %dst, i8* %src)
52 ret i8 %0
53 }
54
55 declare i8 @llvm.x86.enqcmd(i8*, i8*)
56 declare i8 @llvm.x86.enqcmds(i8*, i8*)
805805
806806 #CHECK: movdir64b (%si), %ax
807807 0x66 0x0f 0x38 0xf8 0x04
808
809 # CHECK: enqcmd (%bx), %di
810 0xf2,0x0f,0x38,0xf8,0x3f
811
812 # CHECK: enqcmd 8128(%si), %ax
813 0xf2,0x0f,0x38,0xf8,0x84,0xc0,0x1f
814
815 # CHECK: enqcmd -8192(%di), %bx
816 0xf2,0x0f,0x38,0xf8,0x9d,0x00,0xe0
817
818 # CHECK: enqcmd 7408, %cx
819 0xf2,0x0f,0x38,0xf8,0x0e,0xf0,0x1c
820
821 # CHECK: enqcmds (%bx), %di
822 0xf3,0x0f,0x38,0xf8,0x3f
823
824 # CHECK: enqcmds 8128(%si), %ax
825 0xf3,0x0f,0x38,0xf8,0x84,0xc0,0x1f
826
827 # CHECK: enqcmds -8192(%di), %bx
828 0xf3,0x0f,0x38,0xf8,0x9d,0x00,0xe0
829
830 # CHECK: enqcmds 7408, %cx
831 0xf3,0x0f,0x38,0xf8,0x0e,0xf0,0x1c
832
833 # CHECK: enqcmd (%edi), %edi
834 0x67,0xf2,0x0f,0x38,0xf8,0x3f
835
836 # CHECK: enqcmds (%edi), %edi
837 0x67,0xf3,0x0f,0x38,0xf8,0x3f
900900
901901 # CHECK: addb $0, 305419896(,%eiz)
902902 0x80 0x04 0x25 0x78 0x56 0x34 0x12 0x00
903
904 # CHECK: enqcmd 268435456(%ebp,%eax,8), %esi
905 0xf2,0x0f,0x38,0xf8,0xb4,0xc5,0x00,0x00,0x00,0x10
906
907 # CHECK: enqcmd (%ecx), %edi
908 0xf2,0x0f,0x38,0xf8,0x39
909
910 # CHECK: enqcmd 8128(%ecx), %eax
911 0xf2,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00
912
913 # CHECK: enqcmd -8192(%edx), %ebx
914 0xf2,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff
915
916 # CHECK: enqcmd 485498096, %eax
917 0xf2,0x0f,0x38,0xf8,0x05,0xf0,0x1c,0xf0,0x1c
918
919 # CHECK: enqcmds 268435456(%ebp,%eax,8), %esi
920 0xf3,0x0f,0x38,0xf8,0xb4,0xc5,0x00,0x00,0x00,0x10
921
922 # CHECK: enqcmds (%ecx), %edi
923 0xf3,0x0f,0x38,0xf8,0x39
924
925 # CHECK: enqcmds 8128(%ecx), %eax
926 0xf3,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00
927
928 # CHECK: enqcmds -8192(%edx), %ebx
929 0xf3,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff
930
931 # CHECK: enqcmds 485498096, %eax
932 0xf3,0x0f,0x38,0xf8,0x05,0xf0,0x1c,0xf0,0x1c
933
934 # CHECK: enqcmd (%bx,%di), %di
935 0x67,0xf2,0x0f,0x38,0xf8,0x39
936
937 # CHECK: enqcmd 8128(%bx,%di), %ax
938 0x67,0xf2,0x0f,0x38,0xf8,0x81,0xc0,0x1f
939
940 # CHECK: enqcmds (%bx,%di), %di
941 0x67,0xf3,0x0f,0x38,0xf8,0x39
942
943 # CHECK: enqcmds 8128(%bx,%di), %ax
944 0x67,0xf3,0x0f,0x38,0xf8,0x81,0xc0,0x1f
630630 0x63 0x08
631631 # CHECK: movslq (%rax), %cx
632632 0x66 0x63 0x08
633
634 # CHECK: enqcmd 485498096, %eax
635 0x67,0xf2,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c
636
637 # CHECK: enqcmd 268435456(%ebp,%r14d,8), %esi
638 0x67,0xf2,0x42,0x0f,0x38,0xf8,0xb4,0xf5,0x00,0x00,0x00,0x10
639
640 # CHECK: enqcmd (%r9d), %edi
641 0x67,0xf2,0x41,0x0f,0x38,0xf8,0x39
642
643 # CHECK: enqcmd 8128(%ecx), %eax
644 0x67,0xf2,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00
645
646 # CHECK: enqcmd -8192(%edx), %ebx
647 0x67,0xf2,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff
648
649 # CHECK: enqcmds 268435456(%ebp,%r14d,8), %esi
650 0x67,0xf3,0x42,0x0f,0x38,0xf8,0xb4,0xf5,0x00,0x00,0x00,0x10
651
652 # CHECK: enqcmds (%r9d), %edi
653 0x67,0xf3,0x41,0x0f,0x38,0xf8,0x39
654
655 # CHECK: enqcmds 8128(%ecx), %eax
656 0x67,0xf3,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00
657
658 # CHECK: enqcmds -8192(%edx), %ebx
659 0x67,0xf3,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff
660
661 # CHECK: enqcmds 485498096, %eax
662 0x67,0xf3,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c
663
664 # CHECK: enqcmd 268435456(%rbp,%r14,8), %rsi
665 0xf2,0x42,0x0f,0x38,0xf8,0xb4,0xf5,0x00,0x00,0x00,0x10
666
667 # CHECK: enqcmd (%r9), %rdi
668 0xf2,0x41,0x0f,0x38,0xf8,0x39
669
670 # CHECK: enqcmd 8128(%rcx), %rax
671 0xf2,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00
672
673 # CHECK: enqcmd -8192(%rdx), %rbx
674 0xf2,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff
675
676 # CHECK: enqcmd 485498096, %rax
677 0xf2,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c
678
679 # CHECK: enqcmds 268435456(%rbp,%r14,8), %rsi
680 0xf3,0x42,0x0f,0x38,0xf8,0xb4,0xf5,0x00,0x00,0x00,0x10
681
682 # CHECK: enqcmds (%r9), %rdi
683 0xf3,0x41,0x0f,0x38,0xf8,0x39
684
685 # CHECK: enqcmds 8128(%rcx), %rax
686 0xf3,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00
687
688 # CHECK: enqcmds -8192(%rdx), %rbx
689 0xf3,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff
690
691 # CHECK: enqcmds 485498096, %rax
692 0xf3,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c
988988 // CHECK: movdir64b (%si), %ax
989989 // CHECK: encoding: [0x66,0x0f,0x38,0xf8,0x04]
990990 movdir64b (%si), %ax
991
992 // CHECK: enqcmd (%bx), %di
993 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x3f]
994 enqcmd (%bx), %di
995
996 // CHECK: enqcmd 8128(%si), %ax
997 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x84,0xc0,0x1f]
998 enqcmd 8128(%si), %ax
999
1000 // CHECK: enqcmd -8192(%di), %bx
1001 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x9d,0x00,0xe0]
1002 enqcmd -8192(%di), %bx
1003
1004 // CHECK: enqcmd 7408, %cx
1005 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x0e,0xf0,0x1c]
1006 enqcmd 7408, %cx
1007
1008 // CHECK: enqcmds (%bx), %di
1009 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x3f]
1010 enqcmds (%bx), %di
1011
1012 // CHECK: enqcmds 8128(%si), %ax
1013 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x84,0xc0,0x1f]
1014 enqcmds 8128(%si), %ax
1015
1016 // CHECK: enqcmds -8192(%di), %bx
1017 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x9d,0x00,0xe0]
1018 enqcmds -8192(%di), %bx
1019
1020 // CHECK: enqcmds 7408, %cx
1021 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x0e,0xf0,0x1c]
1022 enqcmds 7408, %cx
1023
1024 // CHECK: enqcmd (%edi), %edi
1025 // CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xf8,0x3f]
1026 enqcmd (%edi), %edi
1027
1028 // CHECK: enqcmds (%edi), %edi
1029 // CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xf8,0x3f]
1030 enqcmds (%edi), %edi
1081510815 // CHECK: aad # encoding: [0xd5,0x0a]
1081610816 // INTEL: aad{{$}}
1081710817 aad $10
10818
10819 // CHECK: enqcmd 268435456(%ebp,%eax,8), %esi
10820 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0xb4,0xc5,0x00,0x00,0x00,0x10]
10821 enqcmd 0x10000000(%ebp, %eax, 8), %esi
10822
10823 // CHECK: enqcmd (%ecx), %edi
10824 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x39]
10825 enqcmd (%ecx), %edi
10826
10827 // CHECK: enqcmd 8128(%ecx), %eax
10828 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00]
10829 enqcmd 8128(%ecx), %eax
10830
10831 // CHECK: enqcmd -8192(%edx), %ebx
10832 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff]
10833 enqcmd -8192(%edx), %ebx
10834
10835 // CHECK: enqcmd 485498096, %eax
10836 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x05,0xf0,0x1c,0xf0,0x1c]
10837 enqcmd 485498096, %eax
10838
10839 // CHECK: enqcmds 268435456(%ebp,%eax,8), %esi
10840 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0xb4,0xc5,0x00,0x00,0x00,0x10]
10841 enqcmds 0x10000000(%ebp, %eax, 8), %esi
10842
10843 // CHECK: enqcmds (%ecx), %edi
10844 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x39]
10845 enqcmds (%ecx), %edi
10846
10847 // CHECK: enqcmds 8128(%ecx), %eax
10848 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00]
10849 enqcmds 8128(%ecx), %eax
10850
10851 // CHECK: enqcmds -8192(%edx), %ebx
10852 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff]
10853 enqcmds -8192(%edx), %ebx
10854
10855 // CHECK: enqcmds 485498096, %eax
10856 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x05,0xf0,0x1c,0xf0,0x1c]
10857 enqcmds 485498096, %eax
10858
10859 // CHECK: enqcmd (%bx,%di), %di
10860 // CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xf8,0x39]
10861 enqcmd (%bx,%di), %di
10862
10863 // CHECK: enqcmd 8128(%bx,%di), %ax
10864 // CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xf8,0x81,0xc0,0x1f]
10865 enqcmd 8128(%bx,%di), %ax
10866
10867 // CHECK: enqcmds (%bx,%di), %di
10868 // CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xf8,0x39]
10869 enqcmds (%bx,%di), %di
10870
10871 // CHECK: enqcmds 8128(%bx,%di), %ax
10872 // CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xf8,0x81,0xc0,0x1f]
10873 enqcmds 8128(%bx,%di), %ax
17961796 // CHECK: lock
17971797 // This line has to be the last one in the file
17981798 lock
1799
1800 // CHECK: enqcmd 268435456(%ebp,%r14d,8), %esi
1801 // CHECK: encoding: [0x67,0xf2,0x42,0x0f,0x38,0xf8,0xb4,0xf5,0x00,0x00,0x00,0x10]
1802 enqcmd 0x10000000(%ebp, %r14d, 8), %esi
1803
1804 // CHECK: enqcmd (%r9d), %edi
1805 // CHECK: encoding: [0x67,0xf2,0x41,0x0f,0x38,0xf8,0x39]
1806 enqcmd (%r9d), %edi
1807
1808 // CHECK: enqcmd 8128(%ecx), %eax
1809 // CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00]
1810 enqcmd 8128(%ecx), %eax
1811
1812 // CHECK: enqcmd -8192(%edx), %ebx
1813 // CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff]
1814 enqcmd -8192(%edx), %ebx
1815
1816 // CHECK: enqcmd 485498096, %eax
1817 // CHECK: encoding: [0x67,0xf2,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c]
1818 enqcmd 485498096, %eax
1819
1820 // CHECK: enqcmds 268435456(%ebp,%r14d,8), %esi
1821 // CHECK: encoding: [0x67,0xf3,0x42,0x0f,0x38,0xf8,0xb4,0xf5,0x00,0x00,0x00,0x10]
1822 enqcmds 0x10000000(%ebp, %r14d, 8), %esi
1823
1824 // CHECK: enqcmds (%r9d), %edi
1825 // CHECK: encoding: [0x67,0xf3,0x41,0x0f,0x38,0xf8,0x39]
1826 enqcmds (%r9d), %edi
1827
1828 // CHECK: enqcmds 8128(%ecx), %eax
1829 // CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00]
1830 enqcmds 8128(%ecx), %eax
1831
1832 // CHECK: enqcmds -8192(%edx), %ebx
1833 // CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff]
1834 enqcmds -8192(%edx), %ebx
1835
1836 // CHECK: enqcmds 485498096, %eax
1837 // CHECK: encoding: [0x67,0xf3,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c]
1838 enqcmds 485498096, %eax
1839
1840 // CHECK: enqcmd 268435456(%rbp,%r14,8), %rsi
1841 // CHECK: encoding: [0xf2,0x42,0x0f,0x38,0xf8,0xb4,0xf5,0x00,0x00,0x00,0x10]
1842 enqcmd 0x10000000(%rbp, %r14, 8), %rsi
1843
1844 // CHECK: enqcmd (%r9), %rdi
1845 // CHECK: encoding: [0xf2,0x41,0x0f,0x38,0xf8,0x39]
1846 enqcmd (%r9), %rdi
1847
1848 // CHECK: enqcmd 8128(%rcx), %rax
1849 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00]
1850 enqcmd 8128(%rcx), %rax
1851
1852 // CHECK: enqcmd -8192(%rdx), %rbx
1853 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff]
1854 enqcmd -8192(%rdx), %rbx
1855
1856 // CHECK: enqcmd 485498096, %rax
1857 // CHECK: encoding: [0xf2,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c]
1858 enqcmd 485498096, %rax
1859
1860 // CHECK: enqcmds 268435456(%rbp,%r14,8), %rsi
1861 // CHECK: encoding: [0xf3,0x42,0x0f,0x38,0xf8,0xb4,0xf5,0x00,0x00,0x00,0x10]
1862 enqcmds 0x10000000(%rbp, %r14, 8), %rsi
1863
1864 // CHECK: enqcmds (%r9), %rdi
1865 // CHECK: encoding: [0xf3,0x41,0x0f,0x38,0xf8,0x39]
1866 enqcmds (%r9), %rdi
1867
1868 // CHECK: enqcmds 8128(%rcx), %rax
1869 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x81,0xc0,0x1f,0x00,0x00]
1870 enqcmds 8128(%rcx), %rax
1871
1872 // CHECK: enqcmds -8192(%rdx), %rbx
1873 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x9a,0x00,0xe0,0xff,0xff]
1874 enqcmds -8192(%rdx), %rbx
1875
1876 // CHECK: enqcmds 485498096, %rax
1877 // CHECK: encoding: [0xf3,0x0f,0x38,0xf8,0x04,0x25,0xf0,0x1c,0xf0,0x1c]
1878 enqcmds 485498096, %rax