This is the mail archive of the
binutils@sourceware.org
mailing list for the binutils project.
Re: [PATCH 4/6] x86/MPX: bndmk, bndldx, and bndstx only allow a memory operand
- From: "Jan Beulich" <JBeulich at suse dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: <kirill dot yukhin at intel dot com>,"Binutils" <binutils at sourceware dot org>
- Date: Wed, 09 Oct 2013 08:24:25 +0100
- Subject: Re: [PATCH 4/6] x86/MPX: bndmk, bndldx, and bndstx only allow a memory operand
- Authentication-results: sourceware.org; auth=none
- References: <5254349502000078000F9A3D at nat28 dot tlf dot novell dot com> <5254361802000078000F9A59 at nat28 dot tlf dot novell dot com> <CAMe9rOrBd=XHHyjTeCrS75bLC+wxrhprJu2tX8=x0t0_jPS8QA at mail dot gmail dot com>
>>> On 08.10.13 at 17:28, "H.J. Lu" <hjl.tools@gmail.com> wrote:
> On Tue, Oct 8, 2013 at 7:43 AM, Jan Beulich <JBeulich@suse.com> wrote:
>> bndmk, bndldx, and bndstx only allow memory operands, so decoding should
>> use OP_M() instead of OP_E().
>
> The change isn't wrong. But register operand will never be used since
> MOD != 3. Also, in this case, only register operand is possible for nop
> since MOD == 0x3. If we want to make the change, we should also
> replace Ev with Gv.
Looks like I didn't look at mod_table[]'s usage closely enough - I
guess for consistency reasons I'll withdraw the patch rather than
extending it (even though performance would perhaps be slightly
improved by using the more specific operand handling routines
here, but that would be the case for various other code paths /
table entries too I believe).
Jan
>> opcodes/
>> 2013-10-08 Jan Beulich <jbeulich@suse.com>
>>
>> * i386-dis.c (Mv_bnd): New.
>> (mod_table): Use it for bndmk, bndldx, and bndstx.
>>
>> --- 2013-10-07/opcodes/i386-dis.c
>> +++ 2013-10-07/opcodes/i386-dis.c
>> @@ -250,6 +250,7 @@ fetch_data (struct disassemble_info *inf
>> #define Mo { OP_M, o_mode }
>> #define Mp { OP_M, f_mode } /* 32 or 48 bit memory operand for
> LDS, LES etc */
>> #define Mq { OP_M, q_mode }
>> +#define Mv_bnd { OP_M, v_bnd_mode }
>> #define Mx { OP_M, x_mode }
>> #define Mxmm { OP_M, xmm_mode }
>> #define Gb { OP_G, b_mode }
>> @@ -11126,17 +11127,17 @@ static const struct dis386 mod_table[][2
>> },
>> {
>> /* MOD_0F1A_PREFIX_0 */
>> - { "bndldx", { Gbnd, Ev_bnd } },
>> + { "bndldx", { Gbnd, Mv_bnd } },
>> { "nopQ", { Ev } },
>> },
>> {
>> /* MOD_0F1B_PREFIX_0 */
>> - { "bndstx", { Ev_bnd, Gbnd } },
>> + { "bndstx", { Mv_bnd, Gbnd } },
>> { "nopQ", { Ev } },
>> },
>> {
>> /* MOD_0F1B_PREFIX_1 */
>> - { "bndmk", { Gbnd, Ev_bnd } },
>> + { "bndmk", { Gbnd, Mv_bnd } },
>> { "nopQ", { Ev } },
>> },
>> {
>>
>
>
>
> --
> H.J.