This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH] x86: tighten condition for emitting LOCK on control register accesses
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Jan Beulich <JBeulich at suse dot com>
- Cc: Binutils <binutils at sourceware dot org>
- Date: Wed, 30 May 2018 05:36:08 -0700
- Subject: Re: [PATCH] x86: tighten condition for emitting LOCK on control register accesses
- References: <5B0E55CC02000078001C6D8C@prv1-mh.provo.novell.com>
On Wed, May 30, 2018 at 12:42 AM, Jan Beulich <JBeulich@suse.com> wrote:
> The control register is never expressed by REX.B; this bit only affects
> the involved GPR. Also only one of the operands can have its "control"
> flag set, so only check the correct operand.
>
> gas/
> 2018-05-30 Jan Beulich <jbeulich@suse.com>
>
> * config/tc-i386.c (build_modrm_byte): Drop REX_B from condition
> checking for the need of emitting LOCK. Check "control" bit just
> once.
>
> --- a/gas/config/tc-i386.c
> +++ b/gas/config/tc-i386.c
> @@ -6894,12 +6894,11 @@ build_modrm_byte (void)
> if ((i.op[source].regs->reg_flags & RegVRex) != 0)
> i.vrex |= REX_R;
> }
> - if (flag_code != CODE_64BIT && (i.rex & (REX_R | REX_B)))
> + if (flag_code != CODE_64BIT && (i.rex & REX_R))
> {
> - if (!i.types[0].bitfield.control
> - && !i.types[1].bitfield.control)
> + if (!i.types[i.tm.operand_types[0].bitfield.regmem].bitfield.control)
> abort ();
> - i.rex &= ~(REX_R | REX_B);
> + i.rex &= ~REX_R;
> add_prefix (LOCK_PREFIX_OPCODE);
> }
> }
>
Does it have any impact on assembly code?
--
H.J.