[llvm-mca][X86] Add MMX resource tests
authorSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 21 Apr 2018 11:28:59 +0000 (11:28 +0000)
committerSimon Pilgrim <llvm-dev@redking.me.uk>
Sat, 21 Apr 2018 11:28:59 +0000 (11:28 +0000)
llvm-svn: 330502

llvm/test/tools/llvm-mca/X86/Broadwell/resources-mmx.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Haswell/resources-mmx.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SLM/resources-mmx.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-mmx.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-mmx.s [new file with mode: 0644]
llvm/test/tools/llvm-mca/X86/Znver1/resources-mmx.s [new file with mode: 0644]

diff --git a/llvm/test/tools/llvm-mca/X86/Broadwell/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/Broadwell/resources-mmx.s
new file mode 100644 (file)
index 0000000..11fcc67
--- /dev/null
@@ -0,0 +1,396 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=broadwell -instruction-tables < %s | FileCheck %s
+
+emms
+
+movd        %eax, %mm2
+movd        (%rax), %mm2
+
+movd        %mm0, %ecx
+movd        %mm0, (%rax)
+
+movq        %rax, %mm2
+movq        (%rax), %mm2
+
+movq        %mm0, %rcx
+movq        %mm0, (%rax)
+
+packsswb    %mm0, %mm2
+packsswb    (%rax), %mm2
+
+packssdw    %mm0, %mm2
+packssdw    (%rax), %mm2
+
+packuswb    %mm0, %mm2
+packuswb    (%rax), %mm2
+
+paddb       %mm0, %mm2
+paddb       (%rax), %mm2
+
+paddd       %mm0, %mm2
+paddd       (%rax), %mm2
+
+paddsb      %mm0, %mm2
+paddsb      (%rax), %mm2
+
+paddsw      %mm0, %mm2
+paddsw      (%rax), %mm2
+
+paddusb     %mm0, %mm2
+paddusb     (%rax), %mm2
+
+paddusw     %mm0, %mm2
+paddusw     (%rax), %mm2
+
+paddw       %mm0, %mm2
+paddw       (%rax), %mm2
+
+pand        %mm0, %mm2
+pand        (%rax), %mm2
+
+pandn       %mm0, %mm2
+pandn       (%rax), %mm2
+
+pcmpeqb     %mm0, %mm2
+pcmpeqb     (%rax), %mm2
+
+pcmpeqd     %mm0, %mm2
+pcmpeqd     (%rax), %mm2
+
+pcmpeqw     %mm0, %mm2
+pcmpeqw     (%rax), %mm2
+
+pcmpgtb     %mm0, %mm2
+pcmpgtb     (%rax), %mm2
+
+pcmpgtd     %mm0, %mm2
+pcmpgtd     (%rax), %mm2
+
+pcmpgtw     %mm0, %mm2
+pcmpgtw     (%rax), %mm2
+
+pmaddwd     %mm0, %mm2
+pmaddwd     (%rax), %mm2
+
+pmulhw      %mm0, %mm2
+pmulhw      (%rax), %mm2
+
+pmullw      %mm0, %mm2
+pmullw      (%rax), %mm2
+
+por         %mm0, %mm2
+por         (%rax), %mm2
+
+pslld       $1, %mm2
+pslld       %mm0, %mm2
+pslld       (%rax), %mm2
+
+psllq       $1, %mm2
+psllq       %mm0, %mm2
+psllq       (%rax), %mm2
+
+psllw       $1, %mm2
+psllw       %mm0, %mm2
+psllw       (%rax), %mm2
+
+psrad       $1, %mm2
+psrad       %mm0, %mm2
+psrad       (%rax), %mm2
+
+psraw       $1, %mm2
+psraw       %mm0, %mm2
+psraw       (%rax), %mm2
+
+psrld       $1, %mm2
+psrld       %mm0, %mm2
+psrld       (%rax), %mm2
+
+psrlq       $1, %mm2
+psrlq       %mm0, %mm2
+psrlq       (%rax), %mm2
+
+psrlw       $1, %mm2
+psrlw       %mm0, %mm2
+psrlw       (%rax), %mm2
+
+psubb       %mm0, %mm2
+psubb       (%rax), %mm2
+
+psubd       %mm0, %mm2
+psubd       (%rax), %mm2
+
+psubsb      %mm0, %mm2
+psubsb      (%rax), %mm2
+
+psubsw      %mm0, %mm2
+psubsw      (%rax), %mm2
+
+psubusb     %mm0, %mm2
+psubusb     (%rax), %mm2
+
+psubusw     %mm0, %mm2
+psubusw     (%rax), %mm2
+
+psubw       %mm0, %mm2
+psubw       (%rax), %mm2
+
+punpckhbw   %mm0, %mm2
+punpckhbw   (%rax), %mm2
+
+punpckhdq   %mm0, %mm2
+punpckhdq   (%rax), %mm2
+
+punpckhwd   %mm0, %mm2
+punpckhwd   (%rax), %mm2
+
+punpcklbw   %mm0, %mm2
+punpcklbw   (%rax), %mm2
+
+punpckldq   %mm0, %mm2
+punpckldq   (%rax), %mm2
+
+punpcklwd   %mm0, %mm2
+punpcklwd   (%rax), %mm2
+
+pxor        %mm0, %mm2
+pxor        (%rax), %mm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  31     31    10.00   *      *      *    emms
+# CHECK-NEXT:  1      1     1.00                       movd    %eax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       movd    %mm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *      *    movd    %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       movq    %mm0, %rcx
+# CHECK-NEXT:  2      1     1.00           *           movq    %mm0, (%rax)
+# CHECK-NEXT:  3      3     2.00                       packsswb        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packsswb        (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       packssdw        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packssdw        (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       packuswb        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packuswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddsb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddusb %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddusb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddusw %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pand    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pand    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pandn   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pandn   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmaddwd %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmaddwd (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmulhw  %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhw  (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmullw  %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmullw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       por     %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  por     (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pslld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrad   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psraw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubsb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubusb %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubusb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubusw %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckldq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pxor    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pxor    (%rax), %mm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - BWDivider
+# CHECK-NEXT: [1] - BWFPDivider
+# CHECK-NEXT: [2] - BWPort0
+# CHECK-NEXT: [3] - BWPort1
+# CHECK-NEXT: [4] - BWPort2
+# CHECK-NEXT: [5] - BWPort3
+# CHECK-NEXT: [6] - BWPort4
+# CHECK-NEXT: [7] - BWPort5
+# CHECK-NEXT: [8] - BWPort6
+# CHECK-NEXT: [9] - BWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     46.67  35.17  23.67  23.67  2.00   57.17  1.00   0.67
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     11.25  11.75   -      -      -     7.75   0.25    -        emms
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movd    %eax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movd    (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movd    %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movd    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq    %rax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movq    (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movq    %mm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movq    %mm0, (%rax)
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packsswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packsswb        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packssdw        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packssdw        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packuswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packuswb        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddsb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddusb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddusw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pand    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pand    (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pandn   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pandn   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddwd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddwd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmullw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmullw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        por     %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        por     (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pslld   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pslld   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pslld   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psllq   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psllw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrad   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psraw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrld   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrlq   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrlw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubsb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubusb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubusw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckldq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckldq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pxor    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pxor    (%rax), %mm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Haswell/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/Haswell/resources-mmx.s
new file mode 100644 (file)
index 0000000..05f7c0a
--- /dev/null
@@ -0,0 +1,396 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=haswell -instruction-tables < %s | FileCheck %s
+
+emms
+
+movd        %eax, %mm2
+movd        (%rax), %mm2
+
+movd        %mm0, %ecx
+movd        %mm0, (%rax)
+
+movq        %rax, %mm2
+movq        (%rax), %mm2
+
+movq        %mm0, %rcx
+movq        %mm0, (%rax)
+
+packsswb    %mm0, %mm2
+packsswb    (%rax), %mm2
+
+packssdw    %mm0, %mm2
+packssdw    (%rax), %mm2
+
+packuswb    %mm0, %mm2
+packuswb    (%rax), %mm2
+
+paddb       %mm0, %mm2
+paddb       (%rax), %mm2
+
+paddd       %mm0, %mm2
+paddd       (%rax), %mm2
+
+paddsb      %mm0, %mm2
+paddsb      (%rax), %mm2
+
+paddsw      %mm0, %mm2
+paddsw      (%rax), %mm2
+
+paddusb     %mm0, %mm2
+paddusb     (%rax), %mm2
+
+paddusw     %mm0, %mm2
+paddusw     (%rax), %mm2
+
+paddw       %mm0, %mm2
+paddw       (%rax), %mm2
+
+pand        %mm0, %mm2
+pand        (%rax), %mm2
+
+pandn       %mm0, %mm2
+pandn       (%rax), %mm2
+
+pcmpeqb     %mm0, %mm2
+pcmpeqb     (%rax), %mm2
+
+pcmpeqd     %mm0, %mm2
+pcmpeqd     (%rax), %mm2
+
+pcmpeqw     %mm0, %mm2
+pcmpeqw     (%rax), %mm2
+
+pcmpgtb     %mm0, %mm2
+pcmpgtb     (%rax), %mm2
+
+pcmpgtd     %mm0, %mm2
+pcmpgtd     (%rax), %mm2
+
+pcmpgtw     %mm0, %mm2
+pcmpgtw     (%rax), %mm2
+
+pmaddwd     %mm0, %mm2
+pmaddwd     (%rax), %mm2
+
+pmulhw      %mm0, %mm2
+pmulhw      (%rax), %mm2
+
+pmullw      %mm0, %mm2
+pmullw      (%rax), %mm2
+
+por         %mm0, %mm2
+por         (%rax), %mm2
+
+pslld       $1, %mm2
+pslld       %mm0, %mm2
+pslld       (%rax), %mm2
+
+psllq       $1, %mm2
+psllq       %mm0, %mm2
+psllq       (%rax), %mm2
+
+psllw       $1, %mm2
+psllw       %mm0, %mm2
+psllw       (%rax), %mm2
+
+psrad       $1, %mm2
+psrad       %mm0, %mm2
+psrad       (%rax), %mm2
+
+psraw       $1, %mm2
+psraw       %mm0, %mm2
+psraw       (%rax), %mm2
+
+psrld       $1, %mm2
+psrld       %mm0, %mm2
+psrld       (%rax), %mm2
+
+psrlq       $1, %mm2
+psrlq       %mm0, %mm2
+psrlq       (%rax), %mm2
+
+psrlw       $1, %mm2
+psrlw       %mm0, %mm2
+psrlw       (%rax), %mm2
+
+psubb       %mm0, %mm2
+psubb       (%rax), %mm2
+
+psubd       %mm0, %mm2
+psubd       (%rax), %mm2
+
+psubsb      %mm0, %mm2
+psubsb      (%rax), %mm2
+
+psubsw      %mm0, %mm2
+psubsw      (%rax), %mm2
+
+psubusb     %mm0, %mm2
+psubusb     (%rax), %mm2
+
+psubusw     %mm0, %mm2
+psubusw     (%rax), %mm2
+
+psubw       %mm0, %mm2
+psubw       (%rax), %mm2
+
+punpckhbw   %mm0, %mm2
+punpckhbw   (%rax), %mm2
+
+punpckhdq   %mm0, %mm2
+punpckhdq   (%rax), %mm2
+
+punpckhwd   %mm0, %mm2
+punpckhwd   (%rax), %mm2
+
+punpcklbw   %mm0, %mm2
+punpcklbw   (%rax), %mm2
+
+punpckldq   %mm0, %mm2
+punpckldq   (%rax), %mm2
+
+punpcklwd   %mm0, %mm2
+punpcklwd   (%rax), %mm2
+
+pxor        %mm0, %mm2
+pxor        (%rax), %mm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  31     31    10.00   *      *      *    emms
+# CHECK-NEXT:  1      1     1.00                       movd    %eax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       movd    %mm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *      *    movd    %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       movq    %mm0, %rcx
+# CHECK-NEXT:  2      1     1.00           *           movq    %mm0, (%rax)
+# CHECK-NEXT:  3      3     2.00                       packsswb        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packsswb        (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       packssdw        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packssdw        (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       packuswb        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packuswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddsb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddusb %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddusb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddusw %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pand    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pand    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pandn   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pandn   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmaddwd %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmaddwd (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmulhw  %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmulhw  (%rax), %mm2
+# CHECK-NEXT:  1      5     1.00                       pmullw  %mm0, %mm2
+# CHECK-NEXT:  2      10    1.00    *                  pmullw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       por     %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  por     (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pslld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrad   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psraw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubsb  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubusb %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubusb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubusw %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckldq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.33                       pxor    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pxor    (%rax), %mm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - HWDivider
+# CHECK-NEXT: [1] - HWFPDivider
+# CHECK-NEXT: [2] - HWPort0
+# CHECK-NEXT: [3] - HWPort1
+# CHECK-NEXT: [4] - HWPort2
+# CHECK-NEXT: [5] - HWPort3
+# CHECK-NEXT: [6] - HWPort4
+# CHECK-NEXT: [7] - HWPort5
+# CHECK-NEXT: [8] - HWPort6
+# CHECK-NEXT: [9] - HWPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     46.67  35.17  23.67  23.67  2.00   57.17  1.00   0.67
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     11.25  11.75   -      -      -     7.75   0.25    -        emms
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movd    %eax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movd    (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movd    %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movd    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq    %rax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movq    (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movq    %mm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movq    %mm0, (%rax)
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packsswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packsswb        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packssdw        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packssdw        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packuswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packuswb        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddsb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddusb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddusw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        paddw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        paddw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pand    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pand    (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pandn   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pandn   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddwd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddwd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmullw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmullw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        por     %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        por     (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pslld   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pslld   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pslld   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psllq   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psllw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrad   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psraw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrld   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrlq   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrlw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubsb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubusb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubusw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50    -      -      -     0.50    -      -        psubw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50   0.50    -     0.50    -      -        psubw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckldq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckldq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.33   0.33    -      -      -     0.33    -      -        pxor    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.33   0.33   0.50   0.50    -     0.33    -      -        pxor    (%rax), %mm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SLM/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/SLM/resources-mmx.s
new file mode 100644 (file)
index 0000000..1f59d4e
--- /dev/null
@@ -0,0 +1,394 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=slm -instruction-tables < %s | FileCheck %s
+
+emms
+
+movd        %eax, %mm2
+movd        (%rax), %mm2
+
+movd        %mm0, %ecx
+movd        %mm0, (%rax)
+
+movq        %rax, %mm2
+movq        (%rax), %mm2
+
+movq        %mm0, %rcx
+movq        %mm0, (%rax)
+
+packsswb    %mm0, %mm2
+packsswb    (%rax), %mm2
+
+packssdw    %mm0, %mm2
+packssdw    (%rax), %mm2
+
+packuswb    %mm0, %mm2
+packuswb    (%rax), %mm2
+
+paddb       %mm0, %mm2
+paddb       (%rax), %mm2
+
+paddd       %mm0, %mm2
+paddd       (%rax), %mm2
+
+paddsb      %mm0, %mm2
+paddsb      (%rax), %mm2
+
+paddsw      %mm0, %mm2
+paddsw      (%rax), %mm2
+
+paddusb     %mm0, %mm2
+paddusb     (%rax), %mm2
+
+paddusw     %mm0, %mm2
+paddusw     (%rax), %mm2
+
+paddw       %mm0, %mm2
+paddw       (%rax), %mm2
+
+pand        %mm0, %mm2
+pand        (%rax), %mm2
+
+pandn       %mm0, %mm2
+pandn       (%rax), %mm2
+
+pcmpeqb     %mm0, %mm2
+pcmpeqb     (%rax), %mm2
+
+pcmpeqd     %mm0, %mm2
+pcmpeqd     (%rax), %mm2
+
+pcmpeqw     %mm0, %mm2
+pcmpeqw     (%rax), %mm2
+
+pcmpgtb     %mm0, %mm2
+pcmpgtb     (%rax), %mm2
+
+pcmpgtd     %mm0, %mm2
+pcmpgtd     (%rax), %mm2
+
+pcmpgtw     %mm0, %mm2
+pcmpgtw     (%rax), %mm2
+
+pmaddwd     %mm0, %mm2
+pmaddwd     (%rax), %mm2
+
+pmulhw      %mm0, %mm2
+pmulhw      (%rax), %mm2
+
+pmullw      %mm0, %mm2
+pmullw      (%rax), %mm2
+
+por         %mm0, %mm2
+por         (%rax), %mm2
+
+pslld       $1, %mm2
+pslld       %mm0, %mm2
+pslld       (%rax), %mm2
+
+psllq       $1, %mm2
+psllq       %mm0, %mm2
+psllq       (%rax), %mm2
+
+psllw       $1, %mm2
+psllw       %mm0, %mm2
+psllw       (%rax), %mm2
+
+psrad       $1, %mm2
+psrad       %mm0, %mm2
+psrad       (%rax), %mm2
+
+psraw       $1, %mm2
+psraw       %mm0, %mm2
+psraw       (%rax), %mm2
+
+psrld       $1, %mm2
+psrld       %mm0, %mm2
+psrld       (%rax), %mm2
+
+psrlq       $1, %mm2
+psrlq       %mm0, %mm2
+psrlq       (%rax), %mm2
+
+psrlw       $1, %mm2
+psrlw       %mm0, %mm2
+psrlw       (%rax), %mm2
+
+psubb       %mm0, %mm2
+psubb       (%rax), %mm2
+
+psubd       %mm0, %mm2
+psubd       (%rax), %mm2
+
+psubsb      %mm0, %mm2
+psubsb      (%rax), %mm2
+
+psubsw      %mm0, %mm2
+psubsw      (%rax), %mm2
+
+psubusb     %mm0, %mm2
+psubusb     (%rax), %mm2
+
+psubusw     %mm0, %mm2
+psubusw     (%rax), %mm2
+
+psubw       %mm0, %mm2
+psubw       (%rax), %mm2
+
+punpckhbw   %mm0, %mm2
+punpckhbw   (%rax), %mm2
+
+punpckhdq   %mm0, %mm2
+punpckhdq   (%rax), %mm2
+
+punpckhwd   %mm0, %mm2
+punpckhwd   (%rax), %mm2
+
+punpcklbw   %mm0, %mm2
+punpcklbw   (%rax), %mm2
+
+punpckldq   %mm0, %mm2
+punpckldq   (%rax), %mm2
+
+punpcklwd   %mm0, %mm2
+punpcklwd   (%rax), %mm2
+
+pxor        %mm0, %mm2
+pxor        (%rax), %mm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      100   1.00    *      *      *    emms
+# CHECK-NEXT:  1      1     0.50                       movd    %eax, %mm2
+# CHECK-NEXT:  1      3     1.00    *                  movd    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       movd    %mm0, %ecx
+# CHECK-NEXT:  1      1     1.00           *      *    movd    %mm0, (%rax)
+# CHECK-NEXT:  1      1     0.50                       movq    %rax, %mm2
+# CHECK-NEXT:  1      3     1.00    *                  movq    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       movq    %mm0, %rcx
+# CHECK-NEXT:  1      1     1.00           *           movq    %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       packsswb        %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  packsswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       packssdw        %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  packssdw        (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       packuswb        %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  packuswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddb   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  paddb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddd   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  paddd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddsb  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  paddsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddsw  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  paddsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddusb %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  paddusb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddusw %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  paddusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddw   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  paddw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pand    %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pand    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pandn   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pandn   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmaddwd %mm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  pmaddwd (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmulhw  %mm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  pmulhw  (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmullw  %mm0, %mm2
+# CHECK-NEXT:  1      7     1.00    *                  pmullw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       por     %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  por     (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pslld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psllq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psllw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psrad   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psraw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psrld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psrlq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psrlw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubb   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psubb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubd   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psubd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubsb  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psubsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubsw  %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psubsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubusb %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psubusb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubusw %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psubusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubw   %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  psubw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  punpckldq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pxor    %mm0, %mm2
+# CHECK-NEXT:  1      4     1.00    *                  pxor    (%rax), %mm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SLMDivider
+# CHECK-NEXT: [1] - SLMFPDivider
+# CHECK-NEXT: [2] - SLMFPMultiplier
+# CHECK-NEXT: [3] - SLM_FPC_RSV0
+# CHECK-NEXT: [4] - SLM_FPC_RSV1
+# CHECK-NEXT: [5] - SLM_IEC_RSV0
+# CHECK-NEXT: [6] - SLM_IEC_RSV1
+# CHECK-NEXT: [7] - SLM_MEC_RSV
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]
+# CHECK-NEXT:  -      -      -     73.00  24.00  3.00   3.00   48.00
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]     Instructions:
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      emms
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      movd    %eax, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movd    (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      movd    %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movd    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      movq    %rax, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    movq    (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50    -      movq    %mm0, %rcx
+# CHECK-NEXT:  -      -      -      -      -     0.50   0.50   1.00    movq    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      packsswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    packsswb        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      packssdw        %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    packssdw        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      packuswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    packuswb        (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddsb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddusb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddusw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      paddw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    paddw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pand    %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pand    (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pandn   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pandn   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmaddwd %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmaddwd (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmulhw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmulhw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pmullw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pmullw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      por     %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    por     (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pslld   $1, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      pslld   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    pslld   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psllq   $1, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psllq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psllq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psllw   $1, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psllw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psllw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrad   $1, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrad   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psrad   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psraw   $1, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psraw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psraw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrld   $1, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrld   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psrld   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrlq   $1, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrlq   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psrlq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrlw   $1, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      psrlw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    psrlw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubb   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubd   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubsb  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubsw  %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubusb %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubusw %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      psubw   %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    psubw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpckldq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpckldq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -      -      punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -     1.00    -      -      -     1.00    punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -      -      pxor    %mm0, %mm2
+# CHECK-NEXT:  -      -      -     0.50   0.50    -      -     1.00    pxor    (%rax), %mm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/SkylakeClient/resources-mmx.s
new file mode 100644 (file)
index 0000000..27e8c6e
--- /dev/null
@@ -0,0 +1,396 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake -instruction-tables < %s | FileCheck %s
+
+emms
+
+movd        %eax, %mm2
+movd        (%rax), %mm2
+
+movd        %mm0, %ecx
+movd        %mm0, (%rax)
+
+movq        %rax, %mm2
+movq        (%rax), %mm2
+
+movq        %mm0, %rcx
+movq        %mm0, (%rax)
+
+packsswb    %mm0, %mm2
+packsswb    (%rax), %mm2
+
+packssdw    %mm0, %mm2
+packssdw    (%rax), %mm2
+
+packuswb    %mm0, %mm2
+packuswb    (%rax), %mm2
+
+paddb       %mm0, %mm2
+paddb       (%rax), %mm2
+
+paddd       %mm0, %mm2
+paddd       (%rax), %mm2
+
+paddsb      %mm0, %mm2
+paddsb      (%rax), %mm2
+
+paddsw      %mm0, %mm2
+paddsw      (%rax), %mm2
+
+paddusb     %mm0, %mm2
+paddusb     (%rax), %mm2
+
+paddusw     %mm0, %mm2
+paddusw     (%rax), %mm2
+
+paddw       %mm0, %mm2
+paddw       (%rax), %mm2
+
+pand        %mm0, %mm2
+pand        (%rax), %mm2
+
+pandn       %mm0, %mm2
+pandn       (%rax), %mm2
+
+pcmpeqb     %mm0, %mm2
+pcmpeqb     (%rax), %mm2
+
+pcmpeqd     %mm0, %mm2
+pcmpeqd     (%rax), %mm2
+
+pcmpeqw     %mm0, %mm2
+pcmpeqw     (%rax), %mm2
+
+pcmpgtb     %mm0, %mm2
+pcmpgtb     (%rax), %mm2
+
+pcmpgtd     %mm0, %mm2
+pcmpgtd     (%rax), %mm2
+
+pcmpgtw     %mm0, %mm2
+pcmpgtw     (%rax), %mm2
+
+pmaddwd     %mm0, %mm2
+pmaddwd     (%rax), %mm2
+
+pmulhw      %mm0, %mm2
+pmulhw      (%rax), %mm2
+
+pmullw      %mm0, %mm2
+pmullw      (%rax), %mm2
+
+por         %mm0, %mm2
+por         (%rax), %mm2
+
+pslld       $1, %mm2
+pslld       %mm0, %mm2
+pslld       (%rax), %mm2
+
+psllq       $1, %mm2
+psllq       %mm0, %mm2
+psllq       (%rax), %mm2
+
+psllw       $1, %mm2
+psllw       %mm0, %mm2
+psllw       (%rax), %mm2
+
+psrad       $1, %mm2
+psrad       %mm0, %mm2
+psrad       (%rax), %mm2
+
+psraw       $1, %mm2
+psraw       %mm0, %mm2
+psraw       (%rax), %mm2
+
+psrld       $1, %mm2
+psrld       %mm0, %mm2
+psrld       (%rax), %mm2
+
+psrlq       $1, %mm2
+psrlq       %mm0, %mm2
+psrlq       (%rax), %mm2
+
+psrlw       $1, %mm2
+psrlw       %mm0, %mm2
+psrlw       (%rax), %mm2
+
+psubb       %mm0, %mm2
+psubb       (%rax), %mm2
+
+psubd       %mm0, %mm2
+psubd       (%rax), %mm2
+
+psubsb      %mm0, %mm2
+psubsb      (%rax), %mm2
+
+psubsw      %mm0, %mm2
+psubsw      (%rax), %mm2
+
+psubusb     %mm0, %mm2
+psubusb     (%rax), %mm2
+
+psubusw     %mm0, %mm2
+psubusw     (%rax), %mm2
+
+psubw       %mm0, %mm2
+psubw       (%rax), %mm2
+
+punpckhbw   %mm0, %mm2
+punpckhbw   (%rax), %mm2
+
+punpckhdq   %mm0, %mm2
+punpckhdq   (%rax), %mm2
+
+punpckhwd   %mm0, %mm2
+punpckhwd   (%rax), %mm2
+
+punpcklbw   %mm0, %mm2
+punpcklbw   (%rax), %mm2
+
+punpckldq   %mm0, %mm2
+punpckldq   (%rax), %mm2
+
+punpcklwd   %mm0, %mm2
+punpcklwd   (%rax), %mm2
+
+pxor        %mm0, %mm2
+pxor        (%rax), %mm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  10     10    4.50    *      *      *    emms
+# CHECK-NEXT:  1      1     1.00                       movd    %eax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       movd    %mm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *      *    movd    %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       movq    %mm0, %rcx
+# CHECK-NEXT:  2      1     1.00           *           movq    %mm0, (%rax)
+# CHECK-NEXT:  3      3     2.00                       packsswb        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packsswb        (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       packssdw        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packssdw        (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       packuswb        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packuswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddd   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       paddsb  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  paddsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       paddsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  paddsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       paddusb %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  paddusb (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       paddusw %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  paddusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pand    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pand    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pandn   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pandn   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmaddwd %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmaddwd (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmulhw  %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmulhw  (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmullw  %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmullw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       por     %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  por     (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pslld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrad   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psraw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubd   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psubsb  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psubsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psubsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psubsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psubusb %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psubusb (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psubusw %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psubusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckldq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pxor    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pxor    (%rax), %mm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKLDivider
+# CHECK-NEXT: [1] - SKLFPDivider
+# CHECK-NEXT: [2] - SKLPort0
+# CHECK-NEXT: [3] - SKLPort1
+# CHECK-NEXT: [4] - SKLPort2
+# CHECK-NEXT: [5] - SKLPort3
+# CHECK-NEXT: [6] - SKLPort4
+# CHECK-NEXT: [7] - SKLPort5
+# CHECK-NEXT: [8] - SKLPort6
+# CHECK-NEXT: [9] - SKLPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     75.50  1.00   23.67  23.67  2.00   41.50  1.00   0.67
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     4.75   0.25    -      -      -     4.75   0.25    -        emms
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movd    %eax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movd    (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movd    %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movd    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq    %rax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movq    (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movq    %mm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movq    %mm0, (%rax)
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packsswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packsswb        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packssdw        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packssdw        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packuswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packuswb        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        paddb   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        paddb   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        paddd   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        paddd   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        paddsb  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        paddsb  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        paddsw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        paddsw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        paddusb %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        paddusb (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        paddusw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        paddusw (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        paddw   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        paddw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pand    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pand    (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pandn   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pandn   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddwd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddwd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmullw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmullw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        por     %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        por     (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pslld   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pslld   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pslld   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psllq   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psllw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrad   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psraw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrld   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrlq   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrlw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psubb   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psubb   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psubd   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psubd   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psubsb  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psubsb  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psubsw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psubsw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psubusb %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psubusb (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psubusw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psubusw (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psubw   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psubw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckldq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckldq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pxor    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pxor    (%rax), %mm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/SkylakeServer/resources-mmx.s
new file mode 100644 (file)
index 0000000..c08b289
--- /dev/null
@@ -0,0 +1,396 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=skylake-avx512 -instruction-tables < %s | FileCheck %s
+
+emms
+
+movd        %eax, %mm2
+movd        (%rax), %mm2
+
+movd        %mm0, %ecx
+movd        %mm0, (%rax)
+
+movq        %rax, %mm2
+movq        (%rax), %mm2
+
+movq        %mm0, %rcx
+movq        %mm0, (%rax)
+
+packsswb    %mm0, %mm2
+packsswb    (%rax), %mm2
+
+packssdw    %mm0, %mm2
+packssdw    (%rax), %mm2
+
+packuswb    %mm0, %mm2
+packuswb    (%rax), %mm2
+
+paddb       %mm0, %mm2
+paddb       (%rax), %mm2
+
+paddd       %mm0, %mm2
+paddd       (%rax), %mm2
+
+paddsb      %mm0, %mm2
+paddsb      (%rax), %mm2
+
+paddsw      %mm0, %mm2
+paddsw      (%rax), %mm2
+
+paddusb     %mm0, %mm2
+paddusb     (%rax), %mm2
+
+paddusw     %mm0, %mm2
+paddusw     (%rax), %mm2
+
+paddw       %mm0, %mm2
+paddw       (%rax), %mm2
+
+pand        %mm0, %mm2
+pand        (%rax), %mm2
+
+pandn       %mm0, %mm2
+pandn       (%rax), %mm2
+
+pcmpeqb     %mm0, %mm2
+pcmpeqb     (%rax), %mm2
+
+pcmpeqd     %mm0, %mm2
+pcmpeqd     (%rax), %mm2
+
+pcmpeqw     %mm0, %mm2
+pcmpeqw     (%rax), %mm2
+
+pcmpgtb     %mm0, %mm2
+pcmpgtb     (%rax), %mm2
+
+pcmpgtd     %mm0, %mm2
+pcmpgtd     (%rax), %mm2
+
+pcmpgtw     %mm0, %mm2
+pcmpgtw     (%rax), %mm2
+
+pmaddwd     %mm0, %mm2
+pmaddwd     (%rax), %mm2
+
+pmulhw      %mm0, %mm2
+pmulhw      (%rax), %mm2
+
+pmullw      %mm0, %mm2
+pmullw      (%rax), %mm2
+
+por         %mm0, %mm2
+por         (%rax), %mm2
+
+pslld       $1, %mm2
+pslld       %mm0, %mm2
+pslld       (%rax), %mm2
+
+psllq       $1, %mm2
+psllq       %mm0, %mm2
+psllq       (%rax), %mm2
+
+psllw       $1, %mm2
+psllw       %mm0, %mm2
+psllw       (%rax), %mm2
+
+psrad       $1, %mm2
+psrad       %mm0, %mm2
+psrad       (%rax), %mm2
+
+psraw       $1, %mm2
+psraw       %mm0, %mm2
+psraw       (%rax), %mm2
+
+psrld       $1, %mm2
+psrld       %mm0, %mm2
+psrld       (%rax), %mm2
+
+psrlq       $1, %mm2
+psrlq       %mm0, %mm2
+psrlq       (%rax), %mm2
+
+psrlw       $1, %mm2
+psrlw       %mm0, %mm2
+psrlw       (%rax), %mm2
+
+psubb       %mm0, %mm2
+psubb       (%rax), %mm2
+
+psubd       %mm0, %mm2
+psubd       (%rax), %mm2
+
+psubsb      %mm0, %mm2
+psubsb      (%rax), %mm2
+
+psubsw      %mm0, %mm2
+psubsw      (%rax), %mm2
+
+psubusb     %mm0, %mm2
+psubusb     (%rax), %mm2
+
+psubusw     %mm0, %mm2
+psubusw     (%rax), %mm2
+
+psubw       %mm0, %mm2
+psubw       (%rax), %mm2
+
+punpckhbw   %mm0, %mm2
+punpckhbw   (%rax), %mm2
+
+punpckhdq   %mm0, %mm2
+punpckhdq   (%rax), %mm2
+
+punpckhwd   %mm0, %mm2
+punpckhwd   (%rax), %mm2
+
+punpcklbw   %mm0, %mm2
+punpcklbw   (%rax), %mm2
+
+punpckldq   %mm0, %mm2
+punpckldq   (%rax), %mm2
+
+punpcklwd   %mm0, %mm2
+punpcklwd   (%rax), %mm2
+
+pxor        %mm0, %mm2
+pxor        (%rax), %mm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  10     10    4.50    *      *      *    emms
+# CHECK-NEXT:  1      1     1.00                       movd    %eax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movd    (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       movd    %mm0, %ecx
+# CHECK-NEXT:  2      1     1.00           *      *    movd    %mm0, (%rax)
+# CHECK-NEXT:  1      1     1.00                       movq    %rax, %mm2
+# CHECK-NEXT:  1      5     0.50    *                  movq    (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       movq    %mm0, %rcx
+# CHECK-NEXT:  2      1     1.00           *           movq    %mm0, (%rax)
+# CHECK-NEXT:  3      3     2.00                       packsswb        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packsswb        (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       packssdw        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packssdw        (%rax), %mm2
+# CHECK-NEXT:  3      3     2.00                       packuswb        %mm0, %mm2
+# CHECK-NEXT:  3      7     2.00    *                  packuswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddd   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       paddsb  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  paddsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       paddsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  paddsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       paddusb %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  paddusb (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       paddusw %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  paddusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       paddw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  paddw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pand    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pand    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pandn   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pandn   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmaddwd %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmaddwd (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmulhw  %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmulhw  (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmullw  %mm0, %mm2
+# CHECK-NEXT:  2      9     1.00    *                  pmullw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       por     %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  por     (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       pslld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  pslld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psllw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psllw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrad   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrad   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psraw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psraw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrld   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrld   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlq   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlq   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   $1, %mm2
+# CHECK-NEXT:  1      1     1.00                       psrlw   %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psrlw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubb   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubd   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubd   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psubsb  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psubsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psubsw  %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psubsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psubusb %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psubusb (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       psubusw %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  psubusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       psubw   %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  psubw   (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpckldq       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpckldq       (%rax), %mm2
+# CHECK-NEXT:  1      1     1.00                       punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  2      6     1.00    *                  punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       pxor    %mm0, %mm2
+# CHECK-NEXT:  2      6     0.50    *                  pxor    (%rax), %mm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - SKXDivider
+# CHECK-NEXT: [1] - SKXFPDivider
+# CHECK-NEXT: [2] - SKXPort0
+# CHECK-NEXT: [3] - SKXPort1
+# CHECK-NEXT: [4] - SKXPort2
+# CHECK-NEXT: [5] - SKXPort3
+# CHECK-NEXT: [6] - SKXPort4
+# CHECK-NEXT: [7] - SKXPort5
+# CHECK-NEXT: [8] - SKXPort6
+# CHECK-NEXT: [9] - SKXPort7
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]
+# CHECK-NEXT:  -      -     75.50  1.00   23.67  23.67  2.00   41.50  1.00   0.67
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]       Instructions:
+# CHECK-NEXT:  -      -     4.75   0.25    -      -      -     4.75   0.25    -        emms
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movd    %eax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movd    (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movd    %mm0, %ecx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movd    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        movq    %rax, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -      -      -      -        movq    (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        movq    %mm0, %rcx
+# CHECK-NEXT:  -      -      -      -     0.33   0.33   1.00    -      -     0.33      movq    %mm0, (%rax)
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packsswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packsswb        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packssdw        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packssdw        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.25   0.25    -      -      -     2.25   0.25    -        packuswb        %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     2.00    -      -        packuswb        (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        paddb   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        paddb   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        paddd   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        paddd   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        paddsb  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        paddsb  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        paddsw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        paddsw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        paddusb %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        paddusb (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        paddusw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        paddusw (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        paddw   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        paddw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pand    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pand    (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pandn   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pandn   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmaddwd %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmaddwd (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmulhw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmulhw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pmullw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pmullw  (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        por     %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        por     (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pslld   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        pslld   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        pslld   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllq   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psllq   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psllw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psllw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrad   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrad   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psraw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psraw   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrld   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrld   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlq   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrlq   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   $1, %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psrlw   %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psrlw   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psubb   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psubb   (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psubd   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psubd   (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psubsb  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psubsb  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psubsw  %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psubsw  (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psubusb %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psubusb (%rax), %mm2
+# CHECK-NEXT:  -      -     1.00    -      -      -      -      -      -      -        psubusw %mm0, %mm2
+# CHECK-NEXT:  -      -     1.00    -     0.50   0.50    -      -      -      -        psubusw (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        psubw   %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        psubw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpckldq       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpckldq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -        punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  -      -      -      -     0.50   0.50    -     1.00    -      -        punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  -      -     0.50    -      -      -      -     0.50    -      -        pxor    %mm0, %mm2
+# CHECK-NEXT:  -      -     0.50    -     0.50   0.50    -     0.50    -      -        pxor    (%rax), %mm2
+
diff --git a/llvm/test/tools/llvm-mca/X86/Znver1/resources-mmx.s b/llvm/test/tools/llvm-mca/X86/Znver1/resources-mmx.s
new file mode 100644 (file)
index 0000000..cb68527
--- /dev/null
@@ -0,0 +1,398 @@
+# NOTE: Assertions have been autogenerated by utils/update_mca_test_checks.py
+# RUN: llvm-mca -mtriple=x86_64-unknown-unknown -mcpu=znver1 -instruction-tables < %s | FileCheck %s
+
+emms
+
+movd        %eax, %mm2
+movd        (%rax), %mm2
+
+movd        %mm0, %ecx
+movd        %mm0, (%rax)
+
+movq        %rax, %mm2
+movq        (%rax), %mm2
+
+movq        %mm0, %rcx
+movq        %mm0, (%rax)
+
+packsswb    %mm0, %mm2
+packsswb    (%rax), %mm2
+
+packssdw    %mm0, %mm2
+packssdw    (%rax), %mm2
+
+packuswb    %mm0, %mm2
+packuswb    (%rax), %mm2
+
+paddb       %mm0, %mm2
+paddb       (%rax), %mm2
+
+paddd       %mm0, %mm2
+paddd       (%rax), %mm2
+
+paddsb      %mm0, %mm2
+paddsb      (%rax), %mm2
+
+paddsw      %mm0, %mm2
+paddsw      (%rax), %mm2
+
+paddusb     %mm0, %mm2
+paddusb     (%rax), %mm2
+
+paddusw     %mm0, %mm2
+paddusw     (%rax), %mm2
+
+paddw       %mm0, %mm2
+paddw       (%rax), %mm2
+
+pand        %mm0, %mm2
+pand        (%rax), %mm2
+
+pandn       %mm0, %mm2
+pandn       (%rax), %mm2
+
+pcmpeqb     %mm0, %mm2
+pcmpeqb     (%rax), %mm2
+
+pcmpeqd     %mm0, %mm2
+pcmpeqd     (%rax), %mm2
+
+pcmpeqw     %mm0, %mm2
+pcmpeqw     (%rax), %mm2
+
+pcmpgtb     %mm0, %mm2
+pcmpgtb     (%rax), %mm2
+
+pcmpgtd     %mm0, %mm2
+pcmpgtd     (%rax), %mm2
+
+pcmpgtw     %mm0, %mm2
+pcmpgtw     (%rax), %mm2
+
+pmaddwd     %mm0, %mm2
+pmaddwd     (%rax), %mm2
+
+pmulhw      %mm0, %mm2
+pmulhw      (%rax), %mm2
+
+pmullw      %mm0, %mm2
+pmullw      (%rax), %mm2
+
+por         %mm0, %mm2
+por         (%rax), %mm2
+
+pslld       $1, %mm2
+pslld       %mm0, %mm2
+pslld       (%rax), %mm2
+
+psllq       $1, %mm2
+psllq       %mm0, %mm2
+psllq       (%rax), %mm2
+
+psllw       $1, %mm2
+psllw       %mm0, %mm2
+psllw       (%rax), %mm2
+
+psrad       $1, %mm2
+psrad       %mm0, %mm2
+psrad       (%rax), %mm2
+
+psraw       $1, %mm2
+psraw       %mm0, %mm2
+psraw       (%rax), %mm2
+
+psrld       $1, %mm2
+psrld       %mm0, %mm2
+psrld       (%rax), %mm2
+
+psrlq       $1, %mm2
+psrlq       %mm0, %mm2
+psrlq       (%rax), %mm2
+
+psrlw       $1, %mm2
+psrlw       %mm0, %mm2
+psrlw       (%rax), %mm2
+
+psubb       %mm0, %mm2
+psubb       (%rax), %mm2
+
+psubd       %mm0, %mm2
+psubd       (%rax), %mm2
+
+psubsb      %mm0, %mm2
+psubsb      (%rax), %mm2
+
+psubsw      %mm0, %mm2
+psubsw      (%rax), %mm2
+
+psubusb     %mm0, %mm2
+psubusb     (%rax), %mm2
+
+psubusw     %mm0, %mm2
+psubusw     (%rax), %mm2
+
+psubw       %mm0, %mm2
+psubw       (%rax), %mm2
+
+punpckhbw   %mm0, %mm2
+punpckhbw   (%rax), %mm2
+
+punpckhdq   %mm0, %mm2
+punpckhdq   (%rax), %mm2
+
+punpckhwd   %mm0, %mm2
+punpckhwd   (%rax), %mm2
+
+punpcklbw   %mm0, %mm2
+punpcklbw   (%rax), %mm2
+
+punpckldq   %mm0, %mm2
+punpckldq   (%rax), %mm2
+
+punpcklwd   %mm0, %mm2
+punpcklwd   (%rax), %mm2
+
+pxor        %mm0, %mm2
+pxor        (%rax), %mm2
+
+# CHECK:      Instruction Info:
+# CHECK-NEXT: [1]: #uOps
+# CHECK-NEXT: [2]: Latency
+# CHECK-NEXT: [3]: RThroughput
+# CHECK-NEXT: [4]: MayLoad
+# CHECK-NEXT: [5]: MayStore
+# CHECK-NEXT: [6]: HasSideEffects
+
+# CHECK:      [1]    [2]    [3]    [4]    [5]    [6]   Instructions:
+# CHECK-NEXT:  1      100    -      *      *      *    emms
+# CHECK-NEXT:  1      3     1.00                       movd    %eax, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  movd    (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       movd    %mm0, %ecx
+# CHECK-NEXT:  1      1     0.50           *      *    movd    %mm0, (%rax)
+# CHECK-NEXT:  1      3     1.00                       movq    %rax, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  movq    (%rax), %mm2
+# CHECK-NEXT:  1      2     1.00                       movq    %mm0, %rcx
+# CHECK-NEXT:  1      1     0.50           *           movq    %mm0, (%rax)
+# CHECK-NEXT:  1      1     0.50                       packsswb        %mm0, %mm2
+# CHECK-NEXT:  1      1     0.50    *                  packsswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       packssdw        %mm0, %mm2
+# CHECK-NEXT:  1      1     0.50    *                  packssdw        (%rax), %mm2
+# CHECK-NEXT:  1      1     0.50                       packuswb        %mm0, %mm2
+# CHECK-NEXT:  1      1     0.50    *                  packuswb        (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       paddb   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  paddb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       paddd   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  paddd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       paddsb  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  paddsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       paddsw  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  paddsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       paddusb %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  paddusb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       paddusw %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  paddusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       paddw   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  paddw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pand    %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pand    (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pandn   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pandn   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pcmpeqb %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pcmpeqd %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pcmpeqw %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pcmpgtb %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pcmpgtd %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pcmpgtw %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmaddwd %mm0, %mm2
+# CHECK-NEXT:  1      11    1.00    *                  pmaddwd (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmulhw  %mm0, %mm2
+# CHECK-NEXT:  1      11    1.00    *                  pmulhw  (%rax), %mm2
+# CHECK-NEXT:  1      4     1.00                       pmullw  %mm0, %mm2
+# CHECK-NEXT:  1      11    1.00    *                  pmullw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       por     %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  por     (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pslld   $1, %mm2
+# CHECK-NEXT:  1      1     0.25                       pslld   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pslld   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psllq   $1, %mm2
+# CHECK-NEXT:  1      1     0.25                       psllq   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psllq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psllw   $1, %mm2
+# CHECK-NEXT:  1      1     0.25                       psllw   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psllw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psrad   $1, %mm2
+# CHECK-NEXT:  1      1     0.25                       psrad   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psrad   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psraw   $1, %mm2
+# CHECK-NEXT:  1      1     0.25                       psraw   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psraw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psrld   $1, %mm2
+# CHECK-NEXT:  1      1     0.25                       psrld   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psrld   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psrlq   $1, %mm2
+# CHECK-NEXT:  1      1     0.25                       psrlq   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psrlq   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psrlw   $1, %mm2
+# CHECK-NEXT:  1      1     0.25                       psrlw   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psrlw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psubb   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psubb   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psubd   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psubd   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psubsb  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psubsb  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psubsw  %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psubsw  (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psubusb %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psubusb (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psubusw %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psubusw (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       psubw   %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  psubw   (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       punpckhbw       %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       punpckhdq       %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       punpckhwd       %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       punpcklbw       %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       punpckldq       %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  punpckldq       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       punpcklwd       %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  1      1     0.25                       pxor    %mm0, %mm2
+# CHECK-NEXT:  1      8     0.50    *                  pxor    (%rax), %mm2
+
+# CHECK:      Resources:
+# CHECK-NEXT: [0] - ZnAGU0
+# CHECK-NEXT: [1] - ZnAGU1
+# CHECK-NEXT: [2] - ZnALU0
+# CHECK-NEXT: [3] - ZnALU1
+# CHECK-NEXT: [4] - ZnALU2
+# CHECK-NEXT: [5] - ZnALU3
+# CHECK-NEXT: [6] - ZnDivider
+# CHECK-NEXT: [7] - ZnFPU0
+# CHECK-NEXT: [8] - ZnFPU1
+# CHECK-NEXT: [9] - ZnFPU2
+# CHECK-NEXT: [10] - ZnFPU3
+# CHECK-NEXT: [11] - ZnMultiplier
+
+# CHECK:      Resource pressure per iteration:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]
+# CHECK-NEXT: 24.00  24.00   -      -      -      -      -     27.00  24.00  28.00  21.00   -
+
+# CHECK:      Resource pressure by instruction:
+# CHECK-NEXT: [0]    [1]    [2]    [3]    [4]    [5]    [6]    [7]    [8]    [9]    [10]   [11]        Instructions:
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -      -      -      -          emms
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          movd    %eax, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movd    (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          movd    %mm0, %ecx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movd    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          movq    %rax, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movq    (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -      -     1.00    -      -          movq    %mm0, %rcx
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -      -      -      -      -          movq    %mm0, (%rax)
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          packsswb        %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          packsswb        (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          packssdw        %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          packssdw        (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -      -     0.50   0.50    -      -          packuswb        %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -      -     0.50   0.50    -      -          packuswb        (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddb   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddd   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddsb  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddsw  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddusb %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddusw %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddw   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          paddw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pand    %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pand    (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pandn   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pandn   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqb %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqb (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqd %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqd (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqw %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpeqw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtb %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtb (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtd %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtd (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtw %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pcmpgtw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmaddwd %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmaddwd (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmulhw  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmulhw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     1.00    -      -      -      -          pmullw  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     1.00    -      -      -      -          pmullw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          por     %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          por     (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pslld   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pslld   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pslld   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psllq   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psllq   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psllq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psllw   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psllw   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psllw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrad   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrad   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrad   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psraw   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psraw   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psraw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrld   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrld   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrld   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrlq   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrlq   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrlq   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrlw   $1, %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrlw   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psrlw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubb   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubb   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubd   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubd   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubsb  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubsb  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubsw  %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubsw  (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubusb %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubusb (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubusw %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubusw (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubw   %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          psubw   (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhbw       %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhdq       %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhdq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhwd       %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckhwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklbw       %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklbw       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckldq       %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpckldq       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklwd       %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          punpcklwd       (%rax), %mm2
+# CHECK-NEXT:  -      -      -      -      -      -      -     0.25   0.25   0.25   0.25    -          pxor    %mm0, %mm2
+# CHECK-NEXT: 0.50   0.50    -      -      -      -      -     0.25   0.25   0.25   0.25    -          pxor    (%rax), %mm2
+