This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
>>> On 24.02.17 at 17:15, <hjl.tools@gmail.com> wrote: > On Fri, Feb 24, 2017 at 12:32 AM, Jan Beulich <JBeulich@suse.com> wrote: >>>>> On 23.02.17 at 17:29, <hjl.tools@gmail.com> wrote: >>> On Thu, Feb 23, 2017 at 8:16 AM, Jan Beulich <JBeulich@suse.com> wrote: >>>>>>> On 23.02.17 at 16:54, <hjl.tools@gmail.com> wrote: >>>>> On Wed, Feb 22, 2017 at 11:38 PM, Jan Beulich <JBeulich@suse.com> wrote: >>>>>>>>> On 22.02.17 at 20:03, <hjl.tools@gmail.com> wrote: >>>>>>> On Tue, Feb 21, 2017 at 8:27 AM, Jan Beulich <JBeulich@suse.com> wrote: >>>>>>>> @@ -16937,7 +16928,7 @@ OP_VEX (int bytemode, int sizeflag ATTRI >>>>>>>> names = names_xmm; >>>>>>>> break; >>>>>>>> case dq_mode: >>>>>>>> - if (vex.w) >>>>>>>> + if (rex & REX_W) >>>>>>>> names = names64; >>>>>>>> else >>>>>>>> names = names32; >>>>>>> >>>>>>> Do you have a testcase where vex.w != rex & REX_W? >>>>>> >>>>>> I'm sorry, but I don't think I understand the question in the light >>>>>> of there being a testcase added covering all of the previous >>>>>> misbehaviors I'm aware of. >>>>> >>>>> My question is why vex.w and rex & REX_W are out of sync >>>>> at this point. >>>> >>>> That's because for 64-bit code REX_W gets ser from vex.w >>>> during VEX decoding. For 16- and 32-bit code this doesn't happen, >>>> and hence looking at vex.w (possibly set) is wrong here, while >>> >>> vex.w must be set correctly. Can you show me where it is set >>> incorrectly? >> >> I don't understand the request. vex.w is set correctly (reflecting >> what the instruction had), but it mustn't be used in certain cases. >> >>> For GPR instructions with VEX/EVEX encoding in 16/32 bit mode, >>> if vex.w is ignored, it shouldn't matter. If it isn't ignored, it should >>> UD. >> >> Correct. And the disassembler behavior should match that. Hence >> in 32-/16-bit code VEX-encoded GPR instructions should not >> disassemble with 64-bit register names, but with 32-bit ones. The >> main aspect here is that for such instructions VEX.W is not >> ignored in 64-bit mode, but is ignored in 32-/16-bit mode. >> However, for VEX-encoded SIMD instructions, VEX.W sensitivity >> is not bitness dependent. Hence we can't reasonably clear vex.w >> in the VEX decoding code, as at that point we don't know the >> main opcode byte yet. The code there, even before this patch, >> chooses to reflect certain VEX bits into rex, and the patch here >> simply fills some of the gaps left in that process. >> >> May I suggest that you simply look at the testcase included with >> the patch, and how each sub-block of it disassembles with a >> non-patches disassembler? > > Please send your patch as attachment since I can't apply it. Here you go. Jan
Attachment:
binutils-master-ix86-noextreg.patch
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |