This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] x86/Intel: don't swap operands of MONITOR and MWAIT
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Jan Beulich <JBeulich at suse dot com>
- Cc: binutils at sourceware dot org
- Date: Mon, 30 Jul 2012 09:20:28 -0700
- Subject: Re: [PATCH] x86/Intel: don't swap operands of MONITOR and MWAIT
- References: <500ED20C020000780009039B@nat28.tlf.novell.com>
On Tue, Jul 24, 2012 at 7:49 AM, Jan Beulich <JBeulich@suse.com> wrote:
> Generally, the documentation doesn't allow for any explicit operands
> to be specified with MONITOR/MWAIT. To permit the more legible
> overriding of the address size via specifying operands, the option is
> being retained even in Intel mode, but operand swapping is being
> suppressed by this patch. This is both because it makes no sense here
> (all of the operands are inputs) and since not doing so would require
> a more intrusive fix to process_immext() (as it currently mis-numbers
> the operands in the diagnostic when in Intel mode).
>
> 2012-07-24 Jan Beulich <jbeulich@suse.com>
>
> * config/tc-i386.c (md_assemble): Also suppress operand
> swapping for MONITOR and MWAIT.
>
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -3100,6 +3100,8 @@ md_assemble (char *line)
> && i.operands > 1
> && (strcmp (mnemonic, "bound") != 0)
> && (strcmp (mnemonic, "invlpga") != 0)
> + && (strcmp (mnemonic, "monitor") != 0)
> + && (strcmp (mnemonic, "mwait") != 0)
> && !(operand_type_check (i.types[0], imm)
> && operand_type_check (i.types[1], imm)))
> swap_operands ();
>
Will it break GCC:
(define_insn "sse3_monitor"
[(unspec_volatile [(match_operand:SI 0 "register_operand" "a")
(match_operand:SI 1 "register_operand" "c")
(match_operand:SI 2 "register_operand" "d")]
UNSPECV_MONITOR)]
"TARGET_SSE3 && !TARGET_64BIT"
"monitor\t%0, %1, %2"
[(set_attr "length" "3")])
--
H.J.