[PATCH] x86: tighten condition for emitting LOCK on control register accesses
Jan Beulich
JBeulich@suse.com
Wed May 30 14:24:00 GMT 2018
>>> On 30.05.18 at 14:36, <hjl.tools@gmail.com> wrote:
> 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?
No - it was simply pointless from the beginning to use the more lax
checking.
Jan
More information about the Binutils
mailing list