[PATCH 4/4] x86: MONITOR/MWAIT are not SSE3 insns

H.J. Lu hjl.tools@gmail.com
Fri Feb 10 17:02:35 GMT 2023


On Fri, Feb 10, 2023 at 12:51 AM Jan Beulich <jbeulich@suse.com> wrote:
>
> These have their own CPUID bit and hence they should also have their own
> separate control.
>
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -1027,6 +1027,7 @@ static const arch_entry cpu_arch[] =
>    SUBARCH (avx512dq, AVX512DQ, ANY_AVX512DQ, false),
>    SUBARCH (avx512bw, AVX512BW, ANY_AVX512BW, false),
>    SUBARCH (avx512vl, AVX512VL, ANY_AVX512VL, false),
> +  SUBARCH (monitor, MONITOR, MONITOR, false),
>    SUBARCH (vmx, VMX, ANY_VMX, false),
>    SUBARCH (vmfunc, VMFUNC, ANY_VMFUNC, false),
>    SUBARCH (smx, SMX, SMX, false),
> --- a/gas/doc/c-i386.texi
> +++ b/gas/doc/c-i386.texi
> @@ -152,6 +152,7 @@ accept various extension mnemonics.  For
>  @code{avx},
>  @code{avx2},
>  @code{lahf_sahf},
> +@code{monitor},
>  @code{adx},
>  @code{rdseed},
>  @code{prfchw},
> @@ -1487,7 +1488,7 @@ supported on the CPU specified.  The cho
>  @item @samp{.aes} @tab @samp{.pclmul} @tab @samp{.fma} @tab @samp{.fsgsbase}
>  @item @samp{.rdrnd} @tab @samp{.f16c} @tab @samp{.avx2} @tab @samp{.bmi2}
>  @item @samp{.lzcnt} @tab @samp{.popcnt} @tab @samp{.invpcid} @tab @samp{.vmfunc}
> -@item @samp{.hle} @tab @samp{.rtm} @tab @samp{.tsx}
> +@item @samp{.monitor} @tab @samp{.hle} @tab @samp{.rtm} @tab @samp{.tsx}
>  @item @samp{.lahf_sahf} @tab @samp{.adx} @tab @samp{.rdseed} @tab @samp{.prfchw}
>  @item @samp{.smap} @tab @samp{.mpx} @tab @samp{.sha} @tab @samp{.prefetchwt1}
>  @item @samp{.clflushopt} @tab @samp{.xsavec} @tab @samp{.xsaves} @tab @samp{.se1}
> --- a/gas/testsuite/gas/i386/arch-10.d
> +++ b/gas/testsuite/gas/i386/arch-10.d
> @@ -1,4 +1,4 @@
> -#as: -march=i686+mmx+avx+vmx+smx+xsave+xsaveopt+aes+pclmul+fma+movbe+ept+clflush+nop+syscall+rdtscp+3dnowa+sse4a+svme+abm+padlock+bmi+tbm
> +#as: -march=i686+mmx+avx+vmx+smx+xsave+xsaveopt+aes+pclmul+fma+movbe+ept+clflush+nop+syscall+monitor+rdtscp+3dnowa+sse4a+svme+abm+padlock+bmi+tbm
>  #objdump: -dw
>  #name: i386 arch 10
>
> @@ -38,4 +38,5 @@ Disassembly of section .text:
>  [      ]*[a-f0-9]+:    0f 1f 00                nopl   \(%eax\)
>  [      ]*[a-f0-9]+:    c4 e2 60 f3 c9          blsr   %ecx,%ebx
>  [      ]*[a-f0-9]+:    8f e9 60 01 c9          blcfill %ecx,%ebx
> +[      ]*[a-f0-9]+:    0f 01 c8                monitor( .*)
>  #pass
> --- a/gas/testsuite/gas/i386/arch-10.s
> +++ b/gas/testsuite/gas/i386/arch-10.s
> @@ -62,3 +62,5 @@ nopl (%eax)
>  blsr %ecx,%ebx
>  # TBM
>  blcfill %ecx,%ebx
> +# MONITOR
> +monitor
> --- a/gas/testsuite/gas/i386/arch-10-1.l
> +++ b/gas/testsuite/gas/i386/arch-10-1.l
> @@ -30,6 +30,7 @@
>  .*:60: Error: .*
>  .*:62: Error: .*
>  .*:64: Error: .*
> +.*:66: Error: .*
>  GAS LISTING .*
>
>
> @@ -101,3 +102,5 @@ GAS LISTING .*
>  [      ]*62[   ]+blsr %ecx,%ebx
>  [      ]*63[   ]+\# TBM
>  [      ]*64[   ]+blcfill %ecx,%ebx
> +[      ]*65[   ]+\# MONITOR
> +[      ]*66[   ]+monitor
> --- a/gas/testsuite/gas/i386/arch-10-2.l
> +++ b/gas/testsuite/gas/i386/arch-10-2.l
> @@ -29,6 +29,7 @@
>  .*:60: Error: .*
>  .*:62: Error: .*
>  .*:64: Error: .*
> +.*:66: Error: .*
>  GAS LISTING .*
>
>
> @@ -100,3 +101,5 @@ GAS LISTING .*
>  [      ]*62[   ]+blsr %ecx,%ebx
>  [      ]*63[   ]+\# TBM
>  [      ]*64[   ]+blcfill %ecx,%ebx
> +[      ]*65[   ]+\# MONITOR
> +[      ]*66[   ]+monitor
> --- a/gas/testsuite/gas/i386/arch-10-3.l
> +++ b/gas/testsuite/gas/i386/arch-10-3.l
> @@ -22,6 +22,7 @@
>  .*:60: Error: .*
>  .*:62: Error: .*
>  .*:64: Error: .*
> +.*:66: Error: .*
>  GAS LISTING .*
>
>
> @@ -96,3 +97,5 @@ GAS LISTING .*
>  [      ]*62[   ]+blsr %ecx,%ebx
>  [      ]*63[   ]+\# TBM
>  [      ]*64[   ]+blcfill %ecx,%ebx
> +[      ]*65[   ]+\# MONITOR
> +[      ]*66[   ]+monitor
> --- a/gas/testsuite/gas/i386/arch-10-4.l
> +++ b/gas/testsuite/gas/i386/arch-10-4.l
> @@ -20,6 +20,7 @@
>  .*:60: Error: .*
>  .*:62: Error: .*
>  .*:64: Error: .*
> +.*:66: Error: .*
>  GAS LISTING .*
>
>
> @@ -94,3 +95,5 @@ GAS LISTING .*
>  [      ]*62[   ]+blsr %ecx,%ebx
>  [      ]*63[   ]+\# TBM
>  [      ]*64[   ]+blcfill %ecx,%ebx
> +[      ]*65[   ]+\# MONITOR
> +[      ]*66[   ]+monitor
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/arch-10-6.l
> @@ -0,0 +1,99 @@
> +.*: Assembler messages:
> +.*:4: Error: .*
> +.*:6: Error: .*
> +.*:8: Error: .*
> +.*:10: Error: .*
> +.*:12: Error: .*
> +.*:14: Error: .*
> +.*:16: Error: .*
> +.*:18: Error: .*
> +.*:20: Error: .*
> +.*:22: Error: .*
> +.*:24: Error: .*
> +.*:26: Error: .*
> +.*:28: Error: .*
> +.*:30: Error: .*
> +.*:32: Error: .*
> +.*:34: Error: .*
> +.*:36: Error: .*
> +.*:38: Error: .*
> +.*:40: Error: .*
> +.*:42: Error: .*
> +.*:44: Error: .*
> +.*:46: Error: .*
> +.*:48: Error: .*
> +.*:50: Error: .*
> +.*:52: Error: .*
> +.*:54: Error: .*
> +.*:56: Error: .*
> +.*:58: Error: .*
> +.*:60: Error: .*
> +.*:62: Error: .*
> +.*:64: Error: .*
> +[      ]*1[    ]+\.include "arch-10\.s"
> +[      ]*1[    ]+\# Test -march=
> +[      ]*2[    ]+\.text
> +[      ]*3[    ]+\# cmov feature *
> +[      ]*4[    ]+cmove %eax,%ebx
> +[      ]*5[    ]+\# clflush
> +[      ]*6[    ]+clflush \(%eax\)
> +[      ]*7[    ]+\# SYSCALL
> +[      ]*8[    ]+syscall
> +[      ]*9[    ]+\# MMX
> +[      ]*10[   ]+paddb %mm4,%mm3
> +[      ]*11[   ]+\# SSE
> +[      ]*12[   ]+addss %xmm4,%xmm3
> +[      ]*13[   ]+\# SSE2
> +[      ]*14[   ]+addsd %xmm4,%xmm3
> +[      ]*15[   ]+\# SSE3
> +[      ]*16[   ]+addsubpd %xmm4,%xmm3
> +[      ]*17[   ]+\# SSSE3
> +[      ]*18[   ]+phaddw %xmm4,%xmm3
> +[      ]*19[   ]+\# SSE4\.1
> +[      ]*20[   ]+phminposuw  %xmm1,%xmm3
> +[      ]*21[   ]+\# SSE4\.2
> +[      ]*22[   ]+crc32   %ecx,%ebx
> +[      ]*23[   ]+\# AVX
> +[      ]*24[   ]+vzeroall
> +[      ]*25[   ]+\# VMX
> +[      ]*26[   ]+vmxoff
> +[      ]*27[   ]+\# SMX
> +[      ]*28[   ]+getsec
> +[      ]*29[   ]+\# Xsave
> +[      ]*30[   ]+xgetbv
> +[      ]*31[   ]+\# Xsaveopt
> +[      ]*32[   ]+xsaveopt \(%ecx\)
> +[      ]*33[   ]+\# AES
> +[      ]*34[   ]+aesenc  \(%ecx\),%xmm0
> +[      ]*35[   ]+\# PCLMUL
> +[      ]*36[   ]+pclmulqdq \$8,%xmm1,%xmm0
> +[      ]*37[   ]+\# AES \+ AVX
> +[      ]*38[   ]+vaesenc  \(%ecx\),%xmm0,%xmm2
> +[      ]*39[   ]+\# PCLMUL \+ AVX
> +[      ]*40[   ]+vpclmulqdq \$8,%xmm4,%xmm6,%xmm2
> +[      ]*41[   ]+\# FMA
> +[      ]*42[   ]+vfmadd132pd %xmm4,%xmm6,%xmm2
> +[      ]*43[   ]+\# MOVBE
> +[      ]*44[   ]+movbe   \(%ecx\),%ebx
> +[      ]*45[   ]+\# EPT
> +[      ]*46[   ]+invept  \(%ecx\),%ebx
> +[      ]*47[   ]+\# RDTSCP
> +[      ]*48[   ]+rdtscp
> +[      ]*49[   ]+\# 3DNow or PRFCHW
> +[      ]*50[   ]+prefetchw 0x1000\(,%esi,2\)
> +[      ]*51[   ]+\# SSE4a
> +[      ]*52[   ]+insertq %xmm2,%xmm1
> +[      ]*53[   ]+\# SVME
> +[      ]*54[   ]+vmload
> +[      ]*55[   ]+\# ABM/LZCNT
> +[      ]*56[   ]+lzcnt %ecx,%ebx
> +[      ]*57[   ]+\# PadLock
> +[      ]*58[   ]+xstorerng
> +[      ]*59[   ]+\# nop
> +[      ]*60[   ]+nopl \(%eax\)
> +[      ]*61[   ]+\# BMI
> +[      ]*62[   ]+blsr %ecx,%ebx
> +[      ]*63[   ]+\# TBM
> +[      ]*64[   ]+blcfill %ecx,%ebx
> +[      ]*65[   ]+\# MONITOR
> +[      ]*66[   ]+\?\?\?\? 0F01C8       monitor
> --- /dev/null
> +++ b/gas/testsuite/gas/i386/arch-10-6.s
> @@ -0,0 +1 @@
> +.include "arch-10.s"
> --- a/gas/testsuite/gas/i386/arch-10-lzcnt.d
> +++ b/gas/testsuite/gas/i386/arch-10-lzcnt.d
> @@ -1,5 +1,5 @@
>  #source: arch-10.s
> -#as: -march=i686+nop+avx+vmx+smx+xsave+xsaveopt+aes+pclmul+fma+movbe+ept+clflush+syscall+rdtscp+3dnowa+sse4a+svme+lzcnt+padlock+bmi+tbm
> +#as: -march=i686+nop+avx+vmx+smx+xsave+xsaveopt+aes+pclmul+fma+movbe+ept+clflush+syscall+monitor+rdtscp+3dnowa+sse4a+svme+lzcnt+padlock+bmi+tbm
>  #objdump: -dw
>  #name: i386 arch 10 (lzcnt)
>  #dump: arch-10.d
> --- a/gas/testsuite/gas/i386/arch-10-prefetchw.d
> +++ b/gas/testsuite/gas/i386/arch-10-prefetchw.d
> @@ -1,5 +1,5 @@
>  #source: arch-10.s
> -#as: -march=i686+mmx+nop+avx+vmx+smx+xsave+xsaveopt+aes+pclmul+fma+movbe+ept+clflush+syscall+rdtscp+sse4a+svme+lzcnt+padlock+bmi+tbm+prfchw
> +#as: -march=i686+mmx+nop+avx+vmx+smx+xsave+xsaveopt+aes+pclmul+fma+movbe+ept+clflush+syscall+monitor+rdtscp+sse4a+svme+lzcnt+padlock+bmi+tbm+prfchw
>  #objdump: -dw
>  #name: i386 arch 10 (prefetchw)
>  #dump: arch-10.d
> --- a/gas/testsuite/gas/i386/i386.exp
> +++ b/gas/testsuite/gas/i386/i386.exp
> @@ -206,6 +206,7 @@ if [gas_32_check] then {
>      run_list_test "arch-10-3" "-march=i686+mmx+sse4.2 -I${srcdir}/$subdir -al"
>      run_list_test "arch-10-4" "-march=i686+mmx+sse4+vmx+smx -I${srcdir}/$subdir -al"
>      run_list_test "arch-10-5" "-march=generic32+i686 -al"
> +    run_list_test "arch-10-6" "-march=generic32+monitor -I${srcdir}/$subdir -aln"
>      run_dump_test "arch-11"
>      run_dump_test "arch-12"
>      run_dump_test "arch-13"
> --- a/gas/testsuite/gas/i386/nosse-3.l
> +++ b/gas/testsuite/gas/i386/nosse-3.l
> @@ -5,3 +5,4 @@ GAS LISTING .*
>  [      ]*1[    ]+\# Test -march=\+nosse
>  [      ]*2[    ]+\.text
>  [      ]*3[    ]+lfence
> +[      ]*4[    ]+\?\?\?\? 0F01C8               monitor
> --- a/gas/testsuite/gas/i386/nosse-3.s
> +++ b/gas/testsuite/gas/i386/nosse-3.s
> @@ -1,3 +1,4 @@
>  # Test -march=+nosse
>         .text
>         lfence
> +       monitor
> --- a/gas/testsuite/gas/i386/nosse-4.l
> +++ b/gas/testsuite/gas/i386/nosse-4.l
> @@ -2,6 +2,7 @@
>  .*:6: Error: .*generic.*
>  .*:9: Error: .*\.sse.*
>  .*:12: Error: .*\.sse2.*
> +.*:14: Error: .*\.sse3.*
>  .*:15: Error: .*\.sse3.*
>  .*:18: Error: .*\.ssse3.*
>  .*:21: Error: .*\.sse4\.1.*
> @@ -9,10 +10,9 @@
>  .*:32: Error: .*\.nosse4\.2.*
>  .*:35: Error: .*\.nosse4\.1.*
>  .*:38: Error: .*\.nossse3.*
> -.*:43: Error: .*\.nosse3.*
> -.*:45: Error: .*\.nommx.*
> -.*:47: Error: .*\.nosse2.*
> -.*:50: Error: .*\.nosse.*
> +.*:43: Error: .*\.nommx.*
> +.*:45: Error: .*\.nosse2.*
> +.*:48: Error: .*\.nosse.*
>  GAS LISTING .*
>  #...
>  [      ]*1[    ]+\# Test \.arch \[\.sseX|\.nosseX\]
> @@ -28,7 +28,7 @@ GAS LISTING .*
>  [      ]*11[   ]+\?\?\?\? 0FAEE8               lfence
>  [      ]*12[   ]+mwait
>  [      ]*13[   ]+\.arch \.sse3
> -[      ]*14[   ]+\?\?\?\? 0F01C9               mwait
> +[      ]*14[   ]+mwait
>  [      ]*15[   ]+pabsd %xmm0, %xmm0
>  [      ]*16[   ]+\.arch \.ssse3
>  [      ]*17[   ]+\?\?\?\? 660F381E             pabsd %xmm0, %xmm0
> @@ -60,21 +60,15 @@ GAS LISTING .*
>  [      ]*36[   ]+C0
>  [      ]*37[   ]+\.arch \.nossse3
>  [      ]*38[   ]+pabsd %xmm0, %xmm0
> -[      ]*39[   ]+\?\?\?\? 0F01C9               mwait
> -[      ]*40[   ]+\?\?\?\? 0F77                 emms
> -[      ]*41[   ]+\.arch \.nommx
> -[      ]*42[   ]+\.arch \.nosse3
> -[      ]*43[   ]+mwait
> -[      ]*44[   ]+\?\?\?\? 0FAEE8               lfence
> -[      ]*45[   ]+emms
> -[      ]*46[   ]+\.arch \.nosse2
> -[      ]*47[   ]+lfence
> -[      ]*48[   ]+\?\?\?\? 0F58C0               addps %xmm0, %xmm0
> -[      ]*49[   ]+\.arch \.nosse
> -[      ]*50[   ]+addps %xmm0, %xmm0
> - GAS LISTING .*
> -
> -
> -[      ]*51[   ]+\?\?\?\? 8DB42600             \.p2align 4
> -[      ]*51[   ]+000000
> +[      ]*39[   ]+\?\?\?\? 0F77                 emms
> +[      ]*40[   ]+\.arch \.nommx
> +[      ]*41[   ]+\.arch \.nosse3
> +[      ]*42[   ]+\?\?\?\? 0FAEE8               lfence
> +[      ]*43[   ]+emms
> +[      ]*44[   ]+\.arch \.nosse2
> +[      ]*45[   ]+lfence
> +[      ]*46[   ]+\?\?\?\? 0F58C0               addps %xmm0, %xmm0
> +[      ]*47[   ]+\.arch \.nosse
> +[      ]*48[   ]+addps %xmm0, %xmm0
> +[      ]*49[   ]+\?\?\?\? .*   \.p2align 4
>  #pass
> --- a/gas/testsuite/gas/i386/nosse-4.s
> +++ b/gas/testsuite/gas/i386/nosse-4.s
> @@ -36,11 +36,9 @@
>         pabsd %xmm0, %xmm0
>         .arch .nossse3
>         pabsd %xmm0, %xmm0
> -       mwait
>         emms
>         .arch .nommx
>         .arch .nosse3
> -       mwait
>         lfence
>         emms
>         .arch .nosse2
> --- a/opcodes/i386-gen.c
> +++ b/opcodes/i386-gen.c
> @@ -61,9 +61,9 @@ static const dependency isa_dependencies
>    { "P4",
>      "P3|Clflush|SSE2" },
>    { "NOCONA",
> -    "GENERIC64|FISTTP|SSE3|CX16" },
> +    "GENERIC64|FISTTP|SSE3|MONITOR|CX16" },
>    { "CORE",
> -    "P4|FISTTP|SSE3|CX16" },
> +    "P4|FISTTP|SSE3|MONITOR|CX16" },
>    { "CORE2",
>      "NOCONA|SSSE3" },
>    { "COREI7",
> @@ -77,9 +77,9 @@ static const dependency isa_dependencies
>    { "K8",
>      "ATHLON|Rdtscp|SSE2|LM" },
>    { "AMDFAM10",
> -    "K8|FISTTP|SSE4A|ABM" },
> +    "K8|FISTTP|SSE4A|ABM|MONITOR" },
>    { "BDVER1",
> -    "GENERIC64|FISTTP|Rdtscp|CX16|LAHF_SAHF|XOP|ABM|LWP|SVME|AES|PCLMUL|PRFCHW" },
> +    "GENERIC64|FISTTP|Rdtscp|MONITOR|CX16|LAHF_SAHF|XOP|ABM|LWP|SVME|AES|PCLMUL|PRFCHW" },
>    { "BDVER2",
>      "BDVER1|FMA|BMI|TBM|F16C" },
>    { "BDVER3",
> @@ -87,7 +87,7 @@ static const dependency isa_dependencies
>    { "BDVER4",
>      "BDVER3|AVX2|Movbe|BMI2|RdRnd|MWAITX" },
>    { "ZNVER1",
> -    "GENERIC64|FISTTP|Rdtscp|CX16|LAHF_SAHF|AVX2|SSE4A|ABM|SVME|AES|PCLMUL|PRFCHW|FMA|BMI|F16C|Xsaveopt|FSGSBase|Movbe|BMI2|RdRnd|ADX|RdSeed|SMAP|SHA|XSAVEC|XSAVES|ClflushOpt|CLZERO|MWAITX" },
> +    "GENERIC64|FISTTP|Rdtscp|MONITOR|CX16|LAHF_SAHF|AVX2|SSE4A|ABM|SVME|AES|PCLMUL|PRFCHW|FMA|BMI|F16C|Xsaveopt|FSGSBase|Movbe|BMI2|RdRnd|ADX|RdSeed|SMAP|SHA|XSAVEC|XSAVES|ClflushOpt|CLZERO|MWAITX" },
>    { "ZNVER2",
>      "ZNVER1|CLWB|RDPID|RDPRU|MCOMMIT|WBNOINVD" },
>    { "ZNVER3",
> @@ -95,7 +95,7 @@ static const dependency isa_dependencies
>    { "ZNVER4",
>      "ZNVER3|AVX512F|AVX512DQ|AVX512IFMA|AVX512CD|AVX512BW|AVX512VL|AVX512_BF16|AVX512VBMI|AVX512_VBMI2|AVX512_VNNI|AVX512_BITALG|AVX512_VPOPCNTDQ|GFNI|RMPQUERY" },
>    { "BTVER1",
> -    "GENERIC64|FISTTP|CX16|LAHF_SAHF|Rdtscp|SSSE3|SSE4A|ABM|PRFCHW|Clflush|FISTTP|SVME" },
> +    "GENERIC64|FISTTP|MONITOR|CX16|LAHF_SAHF|Rdtscp|SSSE3|SSE4A|ABM|PRFCHW|Clflush|FISTTP|SVME" },
>    { "BTVER2",
>      "BTVER1|AVX|BMI|F16C|AES|PCLMUL|Movbe|Xsaveopt|PRFCHW" },
>    { "286",
> @@ -322,6 +322,7 @@ static bitfield cpu_flags[] =
>    BITFIELD (BMI2),
>    BITFIELD (LZCNT),
>    BITFIELD (POPCNT),
> +  BITFIELD (MONITOR),
>    BITFIELD (HLE),
>    BITFIELD (RTM),
>    BITFIELD (INVPCID),
> --- a/opcodes/i386-opc.h
> +++ b/opcodes/i386-opc.h
> @@ -88,6 +88,8 @@ enum
>    CpuLZCNT,
>    /* POPCNT support required */
>    CpuPOPCNT,
> +  /* MONITOR support required */
> +  CpuMONITOR,
>    /* SSE4.1 support required */
>    CpuSSE4_1,
>    /* SSE4.2 support required */
> @@ -350,6 +352,7 @@ typedef union i386_cpu_flags
>        unsigned int cpusse4a:1;
>        unsigned int cpulzcnt:1;
>        unsigned int cpupopcnt:1;
> +      unsigned int cpumonitor:1;
>        unsigned int cpusse4_1:1;
>        unsigned int cpusse4_2:1;
>        unsigned int cpuavx:1;
> --- a/opcodes/i386-opc.tbl
> +++ b/opcodes/i386-opc.tbl
> @@ -1270,17 +1270,17 @@ cmpxchg16b, 0xfc7/1, CX16|x64, Modrm|NoS
>
>  // MONITOR instructions.
>
> -monitor, 0xf01c8, SSE3, NoSuf, {}
> +monitor, 0xf01c8, MONITOR, NoSuf, {}
>  // monitor is very special. CX and DX are always 32 bits. The
>  // address size override prefix can be used to overrride the AX size in
>  // all modes.
> -monitor, 0xf01c8, SSE3, AddrPrefixOpReg|NoSuf, { Acc|Word|Dword|Qword, RegC|Dword, RegD|Dword }
> +monitor, 0xf01c8, MONITOR, AddrPrefixOpReg|NoSuf, { Acc|Word|Dword|Qword, RegC|Dword, RegD|Dword }
>  // The 64-bit form exists only for compatibility with older gas.
> -monitor, 0xf01c8, SSE3|x64, AddrPrefixOpReg|NoSuf, { Acc|Dword|Qword, RegC|Qword, RegD|Qword }
> -mwait, 0xf01c9, SSE3, NoSuf, {}
> +monitor, 0xf01c8, MONITOR|x64, AddrPrefixOpReg|NoSuf, { Acc|Dword|Qword, RegC|Qword, RegD|Qword }
> +mwait, 0xf01c9, MONITOR, NoSuf, {}
>  // mwait is very special. AX and CX are always 32 bits.
>  // The 64-bit form exists only for compatibility with older gas.
> -mwait, 0xf01c9, SSE3, CheckOperandSize|IgnoreSize|NoSuf|NoRex64, { Acc|Dword|Qword, RegC|Dword|Qword }
> +mwait, 0xf01c9, MONITOR, CheckOperandSize|IgnoreSize|NoSuf|NoRex64, { Acc|Dword|Qword, RegC|Dword|Qword }
>
>  // VMX instructions.
>
>

Since they used to be in SSE3, should they be also allowed with SSE3?

-- 
H.J.


More information about the Binutils mailing list